Lulucat

Kako je Kimi K3 samostojno izdelal digitalno potezo nalivnega peresa

Gaoge ZhangGaoge Zhang

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.

Posodobljeno

Ročno pisana angleška kurziva z besedama "fountain pen" nad vrstico kitajske kaligrafije, narisana z nalivnim peresom z eliptično konico na kremastem papirju: debela na navpičnih, tanka na vodoravnih potezah.

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:

PotezaSmerDejanska š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 točki 66° da — odvisnost od je skoraj linearna, vrh pa je na navpični osi. V bistvu gre za kurzivno konico: vodoravna reža, ki je vodoravno pisanje nikoli ne odpre.

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.

Povečan izrez dveh rokopisnih vzpenjajočih se stebel iz vzorca, od katerih se vsako na vrhu konča z ravnim diagonalnim rezom, z enakomerno debelino vzdolž stebla.

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 pt in pt, isto razmerje 2.5. Žigi so vzdolž loka razmaknjeni za 0.5 točke; pri kratkem polmeru 0.55 točke je najslabše valovanje roba približno desetina piksla.

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.

Dva izrisa iste ročno napisane besede »fountain« drug ob drugem: levi je narisan z okroglimi žigi s premerom, skaliranim po smeri, in kaže zaobljene konce; desni je narisan z eliptičnimi žigi in kaže ravne konce, odrezane s konico, ter stabilnejšo širino.

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.