Phase 0.3-0.5: SVG export + YAML sidecars + asset catalog

- Add hair class KeyMap entries (基髪→BaseHair, 前髪→FrontHair, 胸毛→ChestHair)
- Implement cardinal spline → cubic Bezier SVG export for all 175 body parts
- Generate YAML sidecar files (part.yaml) per part with metadata
- Write Catalog.yaml index for runtime asset loading
- Output to SlaveMatrix/Assets/Parts/{EnglishName}/ structure
- Each part directory contains part.yaml + x{x}y{y}.svg morph variants
- 838 SVGs across 324 morph variants, 175 sidecars, 1 catalog
- Extraction tool now serves as the asset build pipeline step
This commit is contained in:
2026-06-13 17:56:01 +02:00
parent fb0ff502f0
commit 58f3bf6884
1070 changed files with 83799 additions and 32 deletions

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1">
<g transform="translate(0.42839445348243893,0.21033698446300406) rotate(0) scale(1,1) translate(-0.04070481695325185,-0.04070481695325185)"><path d="M 0.04829589814179846 0.038238325159389956 C 0.04868686032395527 0.03944158303107209 0.04437281085793124 0.0479058305644854 0.0453963631391336 0.04716217630255498 C 0.04437281085793124 0.0479058305644854 0.034989718486167734 0.04641852204062456 0.0360132707673701 0.04716217630255498 C 0.034989718486167734 0.04641852204062456 0.03350469794686205 0.03703506728770782 0.033113735764705235 0.038238325159389956 C 0.03350469794686205 0.03703506728770782 0.041969997151342954 0.032723081842369356 0.04070481695325185 0.032723081842369356 C 0.041969997151342954 0.032723081842369356 0.04868686032395527 0.03944158303107209 0.04829589814179846 0.038238325159389956 Z" fill="#cccccc" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.428394453482439,0.20576278249752025) rotate(0) scale(1,1) translate(-0.08102318639656232,-0.09448405401382116)"><path d="M 0.07765848675302389 0.09642548114062188 C 0.07756070016963355 0.09543279030761832 0.07651235088798895 0.08249058357233446 0.07648504775233983 0.08451319114457921 C 0.07651235088798895 0.08249058357233446 0.07861739110247772 0.07112427353444375 0.07798612438081343 0.07215419027368494 C 0.07861739110247772 0.07112427353444375 0.08469151513397553 0.07318410701292613 0.08406024841231124 0.07215419027368494 C 0.08469151513397553 0.07318410701292613 0.08558862817643396 0.08653579871682396 0.08556132504078484 0.08451319114457921 C 0.08558862817643396 0.08653579871682396 0.08429009945671045 0.09741817197362544 0.08438788604010079 0.09642548114062188" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.4288069258388913,0.20624712713225646) rotate(0) scale(1,1) translate(-0.09196405892265934,-0.09196405892265941)"><path d="M 0.08685374275528038 0.08835558897594731 C 0.08688752446794232 0.08826564049141002 0.08736531997753195 0.08720761318594214 0.08725912330722368 0.08727620716149985 C 0.08736531997753195 0.08720761318594214 0.08820051775662592 0.08755381577823446 0.08812810279897959 0.08753246126925487" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.08812810279897959 0.08753246126925487 C 0.08829931529369768 0.08770978550797864 0.09049206249553111 0.08995330111883737 0.0901826527355967 0.0896603521339401 C 0.09049206249553111 0.08995330111883737 0.09197921718340897 0.09116347383419562 0.09184101991819264 0.09104784908802212" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.09184101991819264 0.09104784908802212 C 0.09199472018417688 0.09089634527853395 0.09394588504959794 0.08888980343311492 0.09368542311000347 0.0892298033741641 C 0.09394588504959794 0.08888980343311492 0.09507332486693659 0.086779353663871 0.09496656319332636 0.08696784979543201" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.09496656319332636 0.08696784979543201 C 0.09506251078610298 0.08695270614384203 0.09624772936300582 0.08686196207885541 0.0961179343066457 0.08678612597635224 C 0.09624772936300582 0.08686196207885541 0.09655795133323147 0.08796886277956309 0.09652410386964795 0.08787788302546995" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.09652410386964795 0.08787788302546995 C 0.09630641646583649 0.08814886792097837 0.0936305077396711 0.09148086642066655 0.09391185502391042 0.09112970177157097 C 0.0936305077396711 0.09148086642066655 0.09308427657834827 0.09217203856820406 0.09314793645877613 0.0920918588146169" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.09314793645877613 0.0920918588146169 C 0.0931261886222644 0.0921563366514841 0.09278073298258434 0.09322590457304426 0.09288696242063546 0.09286559285702317 C 0.09278073298258434 0.09322590457304426 0.09178870160062333 0.09671143328602384 0.09187318320216273 0.09641559940686995" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.09187318320216273 0.09641559940686995 C 0.0917984389873905 0.09649964189175507 0.09082674699150832 0.09744634735435101 0.09097625262489599 0.09742410922549148 C 0.09082674699150832 0.09744634735435101 0.0900043541828953 0.09662065259715868 0.09007911560151075 0.09668245695318428" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.09007911560151075 0.09668245695318428 C 0.09018116080854077 0.09648679642401824 0.09142435058167438 0.09398857378255791 0.09130365808587106 0.09433453060319176 C 0.09142435058167438 0.09398857378255791 0.09154607283992387 0.09238067881411025 0.09152742555115058 0.09253097510557805" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.09152742555115058 0.09253097510557805 C 0.09137758450934197 0.09241560108358426 0.08933985948312478 0.0907985379975168 0.0897293330494473 0.0911464868416527 C 0.08933985948312478 0.0907985379975168 0.08661411023076647 0.08812301415380519 0.08685374275528038 0.08835558897594731" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.428532005647738,0.194490246294033) rotate(0) scale(1,1) translate(-0.0919348593266284,-0.09197513938142436)"><path d="M 0.0956881439861486 0.08542325421399796 C 0.09576474363230697 0.08545919728355195 0.09666109478700079 0.08599666610545854 0.09660733974004915 0.08585457104864586 C 0.09666109478700079 0.08599666610545854 0.09631035995036148 0.08723454688300888 0.09633320454956823 0.0871283948957502" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.09633320454956823 0.0871283948957502 C 0.09616144013614998 0.08733961013715463 0.09397862468074536 0.09005813111344384 0.09427203158854924 0.08966297779260343 C 0.09397862468074536 0.09005813111344384 0.09269067916153592 0.09205417282527102 0.09281232165592156 0.09187023474583506" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.09281232165592156 0.09187023474583506 C 0.0929419422713873 0.09209507848800175 0.09465522610863314 0.0949408214661035 0.09436776904151051 0.09456835965183533 C 0.09465522610863314 0.0949408214661035 0.09641964291304997 0.09648739458915453 0.09626180646139308 0.09633977651705306" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.09626180646139308 0.09633977651705306 C 0.09627054359413553 0.09647491260513719 0.09626930920904828 0.09812374806689278 0.09636665205430256 0.09796140957406263 C 0.09626930920904828 0.09812374806689278 0.09498761234034486 0.0983150408357609 0.09509369231834161 0.09828783843101488" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.09509369231834161 0.09828783843101488 C 0.09488178229782279 0.09799268082273548 0.0922686911665465 0.09435640187576742 0.0925507720721157 0.09474594713166198 C 0.0922686911665465 0.09435640187576742 0.09163855056646068 0.093518907712665 0.09170872145151107 0.09361329536028015" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.09170872145151107 0.09361329536028015 C 0.09164967417146573 0.09357836610693943 0.09066882861393616 0.09302024590443067 0.09100015409096701 0.09319414432019138 C 0.09066882861393616 0.09302024590443067 0.08746053753015533 0.09138754520873162 0.08773281572714084 0.0915265143711516" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.08773281572714084 0.0915265143711516 C 0.08765997719925116 0.091416422946953 0.08685101512864336 0.08999576577002696 0.08685875339246465 0.09020541728076845 C 0.08685101512864336 0.08999576577002696 0.08770505682535379 0.08891113615571092 0.0876399565612854 0.0890106962422538" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.0876399565612854 0.0890106962422538 C 0.0878159322854349 0.0891668559687881 0.09006812829254104 0.09107759830724733 0.08975166525107944 0.09088461296066538 C 0.09006812829254104 0.09107759830724733 0.09157800037613664 0.09136334602128492 0.09143751305882455 0.09132652040123726" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.09143751305882455 0.09132652040123726 C 0.09155620457748616 0.09112607457475559 0.0932160305267075 0.08842923163452063 0.09286181128276383 0.08892117048345724 C 0.0932160305267075 0.08842923163452063 0.09592367171143067 0.08513176119154302 0.0956881439861486 0.08542325421399796" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.42839445348243904,0.18228349984329084) rotate(0) scale(1,1) translate(-0.02653058716578413,-0.02650879367762702)"><path d="M 0.030199208855444578 0.025285284455876418 C 0.030477068278983208 0.026007778678513227 0.0292813223505707 0.031713872076645014 0.0298649002482477 0.03121936533658589 C 0.0292813223505707 0.031713872076645014 0.02261269618564356 0.030724858596526766 0.02319627408332056 0.03121936533658589 C 0.02261269618564356 0.030724858596526766 0.023139824899662313 0.02456279023323961 0.022861965476123684 0.025285284455876418 C 0.023139824899662313 0.02456279023323961 0.027142024114060873 0.022549434664944197 0.02653058716578413 0.022549434664944197 C 0.027142024114060873 0.022549434664944197 0.030477068278983208 0.026007778678513227 0.030199208855444578 0.025285284455876418 Z" fill="#cccccc" stroke="#000000" stroke-width="0.001"/>
</g></svg>

After

Width:  |  Height:  |  Size: 9.0 KiB