Kako je Kimi K3 samostojno izdelal digitalno potezo nalivnega peresa
V Lulucat Notes smo želeli usmerjeno nalivno pero iz Freeforma. Specifikacija je bila posnetek zaslona rokopisa. Za dvema modeloma, enim razločevalnim vprašanjem in eliptično konico pozneje vodno pero piše tako, kot mora. Raziskavo, kodo in validacijo je opravil Kimi K3 na Fireworks.

Izrisano s cevovodom Metal Lulucat Notes, o katerem govori ta objava.
Lulucat Notes ima navadno pero in označevalnik. Naslednje orodje na načrtu je bilo vodno pero — usmerjeno nalivno pero, ki ga poznaš iz Apple Notes in Freeforma, kjer so navpične poteze debele, vodoravne pa tanke. Specifikacija za to orodje ni bila dokument. Bil je posnetek zaslona: tri vrstice rokopisa, besede “pencilkit”, “无边记” in “这种有方向的水笔能力” — ta usmerjena zmožnost vodnega peresa.
Tako kot pri prejšnjem cevovodu Metal je delo opravil Kimi K3, odprti model podjetja Moonshot, ki teče na Fireworks: merjenje, modeliranje, kodo in validacijo. Človek je priskrbel posnetek zaslona, odgovoril na eno vprašanje in ocenil občutek na pravem iPadu.
Specifikacija je posnetek zaslona
Statična slika ne more povedati, zakaj je poteza tanka. Pove lahko le, kako tanka je in kje. Zato je bil prvi korak merjenje. Posnetek zaslona smo skenirali vrstico za vrstico in stolpec za stolpcem, sledili odmiku sredinske črte vsake poteze, da smo dobili njeno smer, nato pa širino skena pretvorili v dejansko širino s sinusom tega kota:
| Poteza | Smer | Dejanska širina |
|---|---|---|
| Vzpenjajoča se poteza črke “l”, “pencilkit” | ≈ 78° | 27.3 px |
| Steblo črke “k”, “pencilkit” | ≈ 90° | 28 px |
| Levi padajoči zamah v 力 | ≈ 66° | 25.7 px |
| Povezave kurzive | ≈ 8° | 11 px |
| Kitajske vodoravne poteze (横) | ≈ 0° | 6–11 px |
Razmerje med debelo in tanko je ≈ 2.5. Prilagajanje
Različica ena: širina iz smeri
Prvi model je bil očiten. Za vsako vhodno točko izračunaj smer, jo skozi prilagojeno krivuljo preslikaj v širino in rezultat ob zajemu vgradi v polmer točke. Smer je bila ocenjena vzročno — kot eksponentno pojemajoče uteženo povprečje zadnjih nekaj točk loka, izračunano v prostoru podvojenega kota, da obrat gibanja ne bi izničil ocene. Uporabljene so samo pretekle točke, zato se poteza v živo in potrjena poteza ujemata bajt za bajtom.
Builder je prestal enotsko preverjanje: sintetične vodoravne, navpične, 45° in vzvratne poti so vse vgradile teoretične širine — 0.99, 2.52, 2.00 in 0.99 točke. Izrisovanje ni potrebovalo nobene nove kode: poteza z vgrajenim polmerom je le veriga okroglih žigov, naš cevovod točkastih spriteov pa jih je že risal.
Na iPadu jo je človek zavrnil v približno desetih sekundah: »to je umetniško pero, ne vodno pero«.
Dve zgodbi ustrezata eni sliki
Zakaj se je zdela napačna? Obstajali sta dve možni razlagi, posnetek zaslona pa ju ni mogel ločiti:
- Zaklep smeri. Geometrija konice prisili vodoravne poteze v tankost in navpične v debelost, ne glede na to, kaj počne roka. To je izvedla različica ena.
- Pritisk in hitrost. Pero je vodeno s pritiskom, vzorec na posnetku pa je le dinamika rokopisa: pri potezah navzdol je pritisk naravno večji, povezave pa so naravno hitre in lahke.
Obe razlagi ustvarita posnetek s tankimi vodoravnimi in debelimi navpičnimi potezami. Razlika je v tem, kaj se zgodi, ko močno pritisneš na vodoravno potezo. Različica ena jo ohrani tanko. Pero, občutljivo na pritisk, jo odebeli. Zato smo človeka vprašali: ali naj močno pritisnjena vodoravna poteza postane debelejša?
»Ne. Vodoravne poteze ostanejo tanke.«
Zaklep smeri je bil potrjen. Toda nekaj drugega je bilo še vedno narobe, saj je bila tudi različica ena zaklenjena na smer.
Odgovor je bil v koncih potez
Naslednji namig je bil na vrhovih vzpenjajočih se potez. Povečava stebel črk »l« in »k« na vzorcu je pokazala dve stvari: ravna poteza ohrani eno širino od začetka do konca, konci potez pa so ravni diagonalni rezi — oblika dletaste konice, ki se dvigne s papirja. Ne okrogle pike. Ne zožitve zaradi pritiska.

To je v resnici pomenilo »občutek umetniškega peresa«. Različica ena je modelirala videz vzorca — širino kot funkcijo ocenjene smeri — ne pa peresa. Ocenjevalnik smeri je senzor: pri šumnem vhodu trepeta, v ovinkih zaostaja in vsak konec poteze zaokroži v krog. Prava konica nima nobene od teh težav, ker ničesar ne računa. Širina je geometrija.
Različica dva: eliptična konica
Končni model sploh nima ocenjevalnika smeri. Konica je usmerjena elipsa: dolga os je vodoravna, kratka os je fiksna. Žigi te elipse so gosto postavljeni vzdolž poti poteze, vse drugo pa izhaja iz geometrije:
-
Vodoravna poteza potuje vzdolž odprtega roba, zato je vedno široka
— stalna tanka črta pri kateremkoli pritisku. Natanko potrjena specifikacija. -
Navpična poteza prečka celotno dolgo os:
, debeli konec. -
Diagonalna poteza prevzame širino tetive elipse pravokotno na smer gibanja,
-
Konci potez so eliptični rezi — ravni konci v obliki konice iz vzorca, brez dodatnega dela.
-
Pritisk spreminja le dolgo os,
, zato pri potezah navzdol doda količino črnila in nikoli ne more odebeliti vodoravne poteze.
Iz meritev vzorca smo obdržali
Izrisovanje je zahtevalo nov fragmentni senčilnik in nič drugega. Oblika oglišč — položaj, premer, barva — je že vsebovala vse: premer je dolga os, kratka os pa je uniform na prehod. Senčilnik ovrednoti SDF elipse z isto rampo pokritosti polovice piksla kot naši okrogli žigi, zato je primerljiv piksel za pikslom z referenčno implementacijo Core Graphics (fillEllipse per stamp). Validacija je šla skozi običajna vrata: sintetični korpus z dvema potezama nalivnega peresa, izrisanima na oba načina in primerjanima piksel za pikslom — nič strukturnih razlik, točkovno preverjena vodoravna poteza pa je v obeh izrisovalnikih merila 12 px.

Različica ena je levo, različica dva desno. Isti ročni vhod, isti cevovod. Konci povedo zgodbo.
Na iPadu je novo pero takoj prestalo preizkus: »好,很好« — dobro. Zelo dobro.
Ohraniti zgrešeni model
Različica ena ni šla v koš. Je legitimno zanimiv čopič — le nalivno pero ni. Zato je bila izdana kot prvi vnos v novem meniju poskusnih čopičev, pod imenom, ki mu ga je dal človek: 漏水的圆珠笔, puščajoči kemični svinčnik. Orodna vrstica je dobila gumb z bučko, ki odpre besedilni seznam poskusov; dodajanje naslednjega stane eno vrstico v registru. Zavrnjen model ni zapravljeno delo, če ga je mogoče izdati kot jasno označen poskus.
En večer zank
Celoten lok — izmeri, modeliraj, zgradi, preizkusi na napravi, vprašaj, premodeliraj, ponovno zgradi, validiraj — je trajal en večer. Kimi K3 na Fireworks je vodil vso tehnično stran zanke: zasnoval je merilne skene, predlagal razločevalno vprašanje namesto drugega ugibanja, izbrisal svoj ocenjevalnik smeri, ko so se dokazi obrnili, in razširil pixel-diff harness, preden se je dotaknil aplikacije. Hitrost sklepanja Fireworks je zanko ohranila interaktivno — dolgi diffi za Metal in Swift, skripte za analizo pikslov in orodja korpusa so prihajali dovolj hitro, da je ozko grlo ostalo tam, kjer mora biti: človeška presoja.
Vzorec sodelovanja je bil enak tistemu iz objave o cevovodu Metal in se je znova izkazal: model je hiter in natančen; človek je odgovoren za okus in preverjanje od začetka do konca. En stavek povratne informacije, ki temelji na občutku — »umetniško pero, ne vodno pero« — je zadostoval, da je model našel natančno napako v modeliranju in jo nadomestil s preprostejšim načrtom.
Pravi model se je izkazal za manjšega od napačnega. Različica dva je imela manj gibljivih delov kot različica ena — brez ocenjevalnika, brez okna glajenja in brez prilagojenega eksponenta. Konica ne izračuna širine. Konica je širina.