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,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1">
<g transform="translate(0.46604640557488936,0.3410084170920351) rotate(0) scale(1,1) translate(-0.06972157252014745,-0.09772443191311658)"><path d="M 0.0667876351488483 0.05545244705692178 C 0.06651103106650905 0.05364635071794723 0.06280848248114816 0.030500010695508388 0.06346838616077712 0.033779290989227204 C 0.06280848248114816 0.030500010695508388 0.058069074139964566 0.013732144979642792 0.05886879099330086 0.01610108353229598 C 0.058069074139964566 0.013732144979642792 0.05340838275109485 0.0040938044886923855 0.053871783920741566 0.005352028357388943 C 0.05340838275109485 0.0040938044886923855 0.05352407286403194 0.0009344883433345295 0.0533079769575403 0.0010023971079372905 C 0.05352407286403194 0.0009344883433345295 0.05704266895066597 0.005765104596074916 0.05646493479864134 0.00453712318215581 C 0.05704266895066597 0.005765104596074916 0.06099469560599052 0.01813826602349346 0.06024078678183584 0.015738174074966565 C 0.06099469560599052 0.01813826602349346 0.06626338686019723 0.03661313924314002 0.06551184068849758 0.03333822656447856 C 0.06626338686019723 0.03661313924314002 0.06957163252170946 0.056845367856772876 0.06925934084223162 0.05503712621890408" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.06925934084223162 0.05503712621890408 C 0.0693936893957057 0.05672927794036839 0.0710267268031197 0.0789002223509935 0.07087152348392049 0.0753429468764758 C 0.0710267268031197 0.0789002223509935 0.07114263543834723 0.09958955566616998 0.07112178067262209 0.09772443191311658" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.06832136436767282 0.09772443191311662 C 0.0683009536198439 0.09587009717547867 0.06794862462549042 0.07194974965677835 0.06807643539372579 0.07547241506146125 C 0.06794862462549042 0.07194974965677835 0.06668023512844184 0.05378411638987684 0.0667876351488483 0.055452447056921796" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.46604640557488936,0.35137691027386897) rotate(0) scale(1,1) translate(-0.13549999999999998,-0.1348636140786165)"><path d="M 0.13253727385206995 0.12449512089678265 C 0.1326095873852308 0.12432054058428264 0.13365193009566081 0.1221532633011218 0.13340503624999997 0.12240015714678264 C 0.13365193009566081 0.1221532633011218 0.135849160625 0.12153239474885266 0.13549999999999998 0.12153239474885266 C 0.135849160625 0.12153239474885266 0.13784185759566084 0.12264705099244347 0.13759496375 0.12240015714678264 C 0.13784185759566084 0.12264705099244347 0.13853503968109082 0.12466970120928265 0.13846272614792998 0.12449512089678265" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.13846272614792998 0.12449512089678265 C 0.13846272614792998 0.12540954254737832 0.13846272614792998 0.13729702400512214 0.13846272614792998 0.1354681807039308 C 0.13846272614792998 0.13729702400512214 0.13846272614792998 0.1473556621616746 0.13846272614792998 0.1464412405110789" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.13846272614792998 0.1464412405110789 C 0.13842964864464946 0.14656468743390932 0.13794234918573337 0.14813641992742427 0.1380657961085638 0.14792260358504394 C 0.13794234918573337 0.14813641992742427 0.13676754673158467 0.14913048354247316 0.136981363073965 0.14900703661964274 C 0.13676754673158467 0.14913048354247316 0.13525310615433914 0.14940396665900893 0.13549999999999998 0.14940396665900893 C 0.13525310615433914 0.14940396665900893 0.13380482058365464 0.1488835896968123 0.13401863692603497 0.14900703661964274 C 0.13380482058365464 0.1488835896968123 0.13281075696860575 0.14770878724266362 0.13293420389143618 0.14792260358504394 C 0.13281075696860575 0.14770878724266362 0.13250419634878943 0.14631779358824848 0.13253727385206995 0.1464412405110789" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.13253727385206995 0.1464412405110789 C 0.13253727385206995 0.14552681886048321 0.13253727385206995 0.13363933740273945 0.13253727385206995 0.1354681807039308 C 0.13253727385206995 0.13363933740273945 0.13253727385206995 0.12358069924618698 0.13253727385206995 0.12449512089678265" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.4660464055748894,0.34375168204382217) rotate(0) scale(1,1) translate(-0.021863400912033353,-0.02186340091203335)"><path d="M 0.018923909040423726 0.021874426716460307 C 0.01895672714347188 0.021751947888476574 0.019440205104985286 0.02019254122773619 0.019317726277001554 0.020404680780655507 C 0.019440205104985286 0.02019254122773619 0.02060579452914785 0.019206273253444775 0.020393654976228536 0.019328752081428507 C 0.02060579452914785 0.019206273253444775 0.02210835856800081 0.01893493484485071 0.021863400912033343 0.018934934844850707 C 0.02210835856800081 0.01893493484485071 0.023545286400757474 0.019451230909412275 0.023333146847838156 0.019328752081428542 C 0.023545286400757474 0.019451230909412275 0.024531554375048874 0.02061682033357482 0.024409075547065142 0.020404680780655507 C 0.024531554375048874 0.02061682033357482 0.024835710886691113 0.02199690554444404 0.024802892783642963 0.021874426716460307" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.4660464055748894,0.34649494699560923) rotate(0) scale(1,1) translate(-0.021863400912033353,-0.02186340091203335)"><path d="M 0.018923909040423726 0.021874426716460307 C 0.01895672714347188 0.021751947888476574 0.019440205104985286 0.02019254122773619 0.019317726277001554 0.020404680780655507 C 0.019440205104985286 0.02019254122773619 0.02060579452914785 0.019206273253444775 0.020393654976228536 0.019328752081428507 C 0.02060579452914785 0.019206273253444775 0.02210835856800081 0.01893493484485071 0.021863400912033343 0.018934934844850707 C 0.02210835856800081 0.01893493484485071 0.023545286400757474 0.019451230909412275 0.023333146847838156 0.019328752081428542 C 0.023545286400757474 0.019451230909412275 0.024531554375048874 0.02061682033357482 0.024409075547065142 0.020404680780655507 C 0.024531554375048874 0.02061682033357482 0.024835710886691113 0.02199690554444404 0.024802892783642963 0.021874426716460307" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.46604640557488936,0.34923821194739624) rotate(0) scale(1,1) translate(-0.021863400912033353,-0.02186340091203335)"><path d="M 0.018923909040423726 0.021874426716460307 C 0.01895672714347188 0.021751947888476574 0.019440205104985286 0.02019254122773619 0.019317726277001554 0.020404680780655507 C 0.019440205104985286 0.02019254122773619 0.02060579452914785 0.019206273253444775 0.020393654976228536 0.019328752081428507 C 0.02060579452914785 0.019206273253444775 0.02210835856800081 0.01893493484485071 0.021863400912033343 0.018934934844850707 C 0.02210835856800081 0.01893493484485071 0.023545286400757474 0.019451230909412275 0.023333146847838156 0.019328752081428542 C 0.023545286400757474 0.019451230909412275 0.024531554375048874 0.02061682033357482 0.024409075547065142 0.020404680780655507 C 0.024531554375048874 0.02061682033357482 0.024835710886691113 0.02199690554444404 0.024802892783642963 0.021874426716460307" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.46604640557488936,0.35198147689918324) rotate(0) scale(1,1) translate(-0.021863400912033353,-0.02186340091203335)"><path d="M 0.018923909040423726 0.021874426716460307 C 0.01895672714347188 0.021751947888476574 0.019440205104985286 0.02019254122773619 0.019317726277001554 0.020404680780655507 C 0.019440205104985286 0.02019254122773619 0.02060579452914785 0.019206273253444775 0.020393654976228536 0.019328752081428507 C 0.02060579452914785 0.019206273253444775 0.02210835856800081 0.01893493484485071 0.021863400912033343 0.018934934844850707 C 0.02210835856800081 0.01893493484485071 0.023545286400757474 0.019451230909412275 0.023333146847838156 0.019328752081428542 C 0.023545286400757474 0.019451230909412275 0.024531554375048874 0.02061682033357482 0.024409075547065142 0.020404680780655507 C 0.024531554375048874 0.02061682033357482 0.024835710886691113 0.02199690554444404 0.024802892783642963 0.021874426716460307" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.46604640557488936,0.3547247418509703) rotate(0) scale(1,1) translate(-0.021863400912033353,-0.02186340091203335)"><path d="M 0.018923909040423726 0.021874426716460307 C 0.01895672714347188 0.021751947888476574 0.019440205104985286 0.02019254122773619 0.019317726277001554 0.020404680780655507 C 0.019440205104985286 0.02019254122773619 0.02060579452914785 0.019206273253444775 0.020393654976228536 0.019328752081428507 C 0.02060579452914785 0.019206273253444775 0.02210835856800081 0.01893493484485071 0.021863400912033343 0.018934934844850707 C 0.02210835856800081 0.01893493484485071 0.023545286400757474 0.019451230909412275 0.023333146847838156 0.019328752081428542 C 0.023545286400757474 0.019451230909412275 0.024531554375048874 0.02061682033357482 0.024409075547065142 0.020404680780655507 C 0.024531554375048874 0.02061682033357482 0.024835710886691113 0.02199690554444404 0.024802892783642963 0.021874426716460307" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.4660464055748894,0.35746800680275737) rotate(0) scale(1,1) translate(-0.021863400912033353,-0.02186340091203335)"><path d="M 0.018923909040423726 0.021874426716460307 C 0.01895672714347188 0.021751947888476574 0.019440205104985286 0.02019254122773619 0.019317726277001554 0.020404680780655507 C 0.019440205104985286 0.02019254122773619 0.02060579452914785 0.019206273253444775 0.020393654976228536 0.019328752081428507 C 0.02060579452914785 0.019206273253444775 0.02210835856800081 0.01893493484485071 0.021863400912033343 0.018934934844850707 C 0.02210835856800081 0.01893493484485071 0.023545286400757474 0.019451230909412275 0.023333146847838156 0.019328752081428542 C 0.023545286400757474 0.019451230909412275 0.024531554375048874 0.02061682033357482 0.024409075547065142 0.020404680780655507 C 0.024531554375048874 0.02061682033357482 0.024835710886691113 0.02199690554444404 0.024802892783642963 0.021874426716460307" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.4660464055748894,0.36021127175454437) rotate(0) scale(1,1) translate(-0.021863400912033353,-0.02186340091203335)"><path d="M 0.018923909040423726 0.021874426716460307 C 0.01895672714347188 0.021751947888476574 0.019440205104985286 0.02019254122773619 0.019317726277001554 0.020404680780655507 C 0.019440205104985286 0.02019254122773619 0.02060579452914785 0.019206273253444775 0.020393654976228536 0.019328752081428507 C 0.02060579452914785 0.019206273253444775 0.02210835856800081 0.01893493484485071 0.021863400912033343 0.018934934844850707 C 0.02210835856800081 0.01893493484485071 0.023545286400757474 0.019451230909412275 0.023333146847838156 0.019328752081428542 C 0.023545286400757474 0.019451230909412275 0.024531554375048874 0.02061682033357482 0.024409075547065142 0.020404680780655507 C 0.024531554375048874 0.02061682033357482 0.024835710886691113 0.02199690554444404 0.024802892783642963 0.021874426716460307" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.4660464055748894,0.3629545367063314) rotate(0) scale(1,1) translate(-0.021863400912033353,-0.02186340091203335)"><path d="M 0.018923909040423726 0.021874426716460307 C 0.01895672714347188 0.021751947888476574 0.019440205104985286 0.02019254122773619 0.019317726277001554 0.020404680780655507 C 0.019440205104985286 0.02019254122773619 0.02060579452914785 0.019206273253444775 0.020393654976228536 0.019328752081428507 C 0.02060579452914785 0.019206273253444775 0.02210835856800081 0.01893493484485071 0.021863400912033343 0.018934934844850707 C 0.02210835856800081 0.01893493484485071 0.023545286400757474 0.019451230909412275 0.023333146847838156 0.019328752081428542 C 0.023545286400757474 0.019451230909412275 0.024531554375048874 0.02061682033357482 0.024409075547065142 0.020404680780655507 C 0.024531554375048874 0.02061682033357482 0.024835710886691113 0.02199690554444404 0.024802892783642963 0.021874426716460307" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.4660464055748894,0.3629545367063314) rotate(0) scale(1,1) translate(-0.0275187318942521,-0.03738575815743351)"><path d="M 0.037275458024130834 0.040771336788614 C 0.037300899131473594 0.040693211567556495 0.03760027921271423 0.039658904527893515 0.03758075131224392 0.039833834135923965 C 0.03760027921271423 0.039658904527893515 0.0374672792148828 0.03849591765808137 0.0375097928297745 0.03867218149224864 C 0.0374672792148828 0.03849591765808137 0.03703398752552425 0.03763920867872247 0.0370705879335435 0.03771866812591679" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.0370705879335435 0.03771866812591679 C 0.03715300873469866 0.0378921715075786 0.03810238575566836 0.04037281555064452 0.03805963754740534 0.03980070870585852 C 0.03810238575566836 0.04037281555064452 0.037304953438764145 0.045548792887240716 0.03758356643269976 0.0445839502633488 C 0.037304953438764145 0.045548792887240716 0.034009699774773694 0.05243614615784964 0.03471628162017798 0.051378820192561556 C 0.034009699774773694 0.05243614615784964 0.027958474470729487 0.05795330172124969 0.029104584287848297 0.057271861846805765 C 0.027958474470729487 0.05795330172124969 0.019774166160631785 0.05944508442259111 0.020962963814752253 0.05955609868588866 C 0.019774166160631785 0.05944508442259111 0.014331998309511651 0.05504474945029646 0.014839012438402688 0.0559396906872352 C 0.014331998309511651 0.05504474945029646 0.015445000098117877 0.047851586157594043 0.014878794268059804 0.048816803842623754 C 0.015445000098117877 0.047851586157594043 0.023129998194884507 0.0438060422217766 0.02163348239909957 0.04435707846687864 C 0.023129998194884507 0.0438060422217766 0.034061586045058635 0.04183051255440969 0.03283698381747908 0.042204368901399295 C 0.034061586045058635 0.04183051255440969 0.036550564556219155 0.03950717763115052 0.03632870913005426 0.03987080230300342 C 0.036550564556219155 0.03950717763115052 0.034926199703534014 0.037698814554049644 0.03549924893145783 0.03784087283916449 C 0.034926199703534014 0.037698814554049644 0.028948190850260985 0.03819320538516361 0.029452118394968436 0.03816610288162522" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.029452118394968436 0.03816610288162522 C 0.029452118394968436 0.038099245948941644 0.029452118394968436 0.037236364977116986 0.029452118394968436 0.037363819689422345 C 0.029452118394968436 0.037236364977116986 0.029452118394968436 0.036576048554339095 0.029452118394968436 0.03663664633396088" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.029452118394968436 0.03663664633396088 C 0.029989533433151777 0.03666010461254766 0.036580213624954325 0.037165090218124475 0.03590109885316854 0.03691814567700222 C 0.036580213624954325 0.037165090218124475 0.037576525811591516 0.0400768039510772 0.037601495656397796 0.03959998082742799 C 0.037576525811591516 0.0400768039510772 0.03502801338249655 0.043012080455454633 0.035601460715493166 0.04264002316079274 C 0.03502801338249655 0.043012080455454633 0.02961119075356408 0.044320040043549586 0.030720127660438405 0.0440646683633707 C 0.02961119075356408 0.044320040043549586 0.02110267909142792 0.04615059828640988 0.022294217833001298 0.045704483322939325 C 0.02110267909142792 0.04615059828640988 0.015927263398372683 0.050184895714775274 0.016421662761557876 0.049418047925017416 C 0.015927263398372683 0.050184895714775274 0.016763644634974158 0.055611330003879446 0.016361425474778986 0.05490665680003357 C 0.016763644634974158 0.055611330003879446 0.02224290986428801 0.057955138290690884 0.02124829268389995 0.0578741263711679 C 0.02224290986428801 0.057955138290690884 0.029323531330114457 0.05525535850753888 0.028296831639435728 0.055878799834309364 C 0.029323531330114457 0.05525535850753888 0.03424380905701628 0.049434407351553876 0.03356868897204469 0.050392830449922106 C 0.03424380905701628 0.049434407351553876 0.03670717008010207 0.04357593151544823 0.03639827265909489 0.044377722653890575 C 0.03670717008010207 0.04357593151544823 0.037348556804550494 0.04047080463317428 0.037275458024130834 0.040771336788614" fill="none" stroke="#000000" stroke-width="0.001"/>
</g></svg>

After

Width:  |  Height:  |  Size: 16 KiB