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,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1">
<g transform="translate(0.31997774878543517,0.11889496338429961) rotate(0) scale(1,1) translate(-0.06166164922295251,-0.05845565031430834)"><path d="M 0.060795285700235666 0.0618262934997033 C 0.06006342798560055 0.06178039642206048 0.05069919686731873 0.06110551762077433 0.052012993124614215 0.061275528567989436 C 0.05069919686731873 0.06110551762077433 0.04444779207002951 0.059662048263549795 0.045029730612689875 0.05978616213312207" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.045029730612689875 0.05978616213312207 C 0.044792836328636884 0.05962772414982253 0.042208126390357606 0.05761436001354006 0.04218699920405396 0.05788490633352754 C 0.042208126390357606 0.05761436001354006 0.04554127831869034 0.05642749795658442 0.045283256848333696 0.05653960629327236" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.045283256848333696 0.05653960629327236 C 0.04621573108065597 0.05646194614608314 0.057910010627645656 0.05548646792997185 0.05647294763620102 0.05560768452700176 C 0.057910010627645656 0.05548646792997185 0.06303260150479169 0.05504145067907269 0.06252801274566933 0.05508500712891339" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.31997774878543517,0.11889496338429961) rotate(0) scale(1,1) translate(-0.06166164922295251,-0.05845565031430834)"><path d="M 0.06177121225832373 0.06259445612345323 C 0.060879336119562866 0.06250992778602092 0.0493699407339915 0.06134528967106712 0.05106869859319334 0.061580116074265515 C 0.0493699407339915 0.06134528967106712 0.04057923622746074 0.05962624121930643 0.04138611794790171 0.05977653928507251" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.04138611794790171 0.05977653928507251 C 0.041067389340975126 0.05960346862916635 0.037508167442409056 0.05741274269808058 0.03756137466478275 0.057699691414198624 C 0.037508167442409056 0.05741274269808058 0.04101315266397022 0.05621927663144408 0.04074763127941734 0.05633315469165597" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.04074763127941734 0.05633315469165597 C 0.0419028276273513 0.0562123557429628 0.056343692030305134 0.05471554145846354 0.05460998745462481 0.05488356730733791 C 0.056343692030305134 0.05471554145846354 0.062130594415327665 0.05426961760498228 0.06155208618758129 0.054316844505163484" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.317739745606258,0.11889466917980429) rotate(0) scale(1,1) translate(-0.061780495912221296,-0.0594468243068542)"><path d="M 0.06858997650249564 0.06410607721934015 C 0.06840003990594506 0.06419473294907214 0.06543653515152166 0.06497454197043945 0.06631073734388868 0.06516994597612405 C 0.06543653515152166 0.06497454197043945 0.057415284598275 0.06147716941570825 0.05809955019409144 0.06176122915112485" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.05809955019409144 0.06176122915112485 C 0.05713491329923312 0.06175693301069563 0.04437880706303696 0.061600876394253844 0.046523907455791665 0.06170967546597427 C 0.04437880706303696 0.061600876394253844 0.03117788198313855 0.06035113735918847 0.032358345481034945 0.06045564029047969" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.032358345481034945 0.06045564029047969 C 0.03196461283422075 0.06028411236574073 0.02750317387289214 0.05807744940972061 0.02763355371926461 0.05839730519361221 C 0.02750317387289214 0.05807744940972061 0.031057140125007 0.0564690430246278 0.03079378732456528 0.05661737088378045" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.03079378732456528 0.05661737088378045 C 0.032506208861838894 0.05641425588864949 0.05359866431938857 0.05389357590446417 0.05134284577184864 0.05417999094220889 C 0.05359866431938857 0.05389357590446417 0.05840700690531076 0.05309709038823007 0.057863609895044445 0.05318039043084383" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.057863609895044445 0.05318039043084383 C 0.05814238048855301 0.05319901573773536 0.06171826847410438 0.05358405372006109 0.061208857017147206 0.05340389411354226 C 0.06171826847410438 0.05358405372006109 0.06420718824197919 0.05550384000869704 0.06397654737853058 0.05534230570906975" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.06397654737853058 0.05534230570906975 C 0.06410521002642337 0.05548912162399946 0.06577240563723528 0.05743135162804749 0.06552049915324407 0.057104096688226295 C 0.06577240563723528 0.05743135162804749 0.06712266902252358 0.059449804011815495 0.06699942518642515 0.05926936498692402" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.06699942518642515 0.05926936498692402 C 0.06708893441657524 0.05952101053070909 0.06820608189123196 0.06269217086504622 0.06807353594822609 0.06228911151234487 C 0.06820608189123196 0.06269217086504622 0.06863301321535144 0.06425749102825642 0.06858997650249564 0.06410607721934015" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3147050268482494,0.11631086908077594) rotate(0) scale(1,1) translate(-0.00820718783944048,-0.005607832739230756)"><path d="M 0.0050753959752029044 0.004294860134437539 C 0.005386603070805605 0.004317775116960971 0.009307602210974528 0.004693555975832605 0.008809881122435307 0.004569839924718714 C 0.009307602210974528 0.004693555975832605 0.011234563030610071 0.0058802538163946925 0.01104804903767355 0.005779452747804233" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.0030138805517342052 0.005055653391774008 C -0.002652586342397227 0.005018695472776215 0.0019957563375542936 0.00454875892568911 0.0013216499603095344 0.004612158363800483 C 0.0019957563375542936 0.00454875892568911 0.005388208143110683 0.004268418615323962 0.005075395975202903 0.004294860134437541" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3147050268482494,0.11631086908077594) rotate(0) scale(1,1) translate(-0.00820718783944048,-0.005607832739230756)"><path d="M 0.008754918840519025 0.008701219685478812 C 0.008953161306985952 0.008710991600181335 0.01149781006887242 0.008966535294126936 0.011133828438122145 0.008818482661909082 C 0.01149781006887242 0.008966535294126936 0.013288437573805684 0.010616131989608382 0.013122698409522335 0.010477851272093051" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.0005843684765347995 0.004987121399127807 C -0.00019718558459255238 0.0052053230355214395 0.0048401001698599845 0.007915049226380646 0.004061826226772166 0.007605541035851395 C 0.0048401001698599845 0.007915049226380646 0.009146009891664593 0.008792526239614431 0.008754918840519021 0.008701219685478812" fill="none" stroke="#000000" stroke-width="0.001"/>
</g></svg>

After

Width:  |  Height:  |  Size: 6.7 KiB