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,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1">
<g transform="translate(0.317739745606258,0.11889466917980429) rotate(0) scale(1,1) translate(-0.061780495912221296,-0.0594468243068542)"><path d="M 0.06535528656796352 0.0662781142807832 C 0.06517974034925994 0.06627543197168095 0.06280083455491808 0.06600069973220712 0.06324873194352047 0.06624592657155617 C 0.06280083455491808 0.06600069973220712 0.05970816673483613 0.06309284767834775 0.05998051790473492 0.06333539220859455" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.05998051790473492 0.06333539220859455 C 0.0594630127611761 0.06319935866641263 0.052712371830654664 0.06137220886791335 0.053770456182029 0.06170298970241157 C 0.052712371830654664 0.06137220886791335 0.04674292648042746 0.05917127490229953 0.04728350568824296 0.05936602219461584" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.04728350568824296 0.05936602219461584 C 0.04721188253619749 0.059176425600587265 0.04623721628053435 0.05702108581296522 0.04642402786369733 0.0570908630662729 C 0.04623721628053435 0.05702108581296522 0.044926578259169694 0.05864851449564456 0.045041766690287206 0.05852869515492366" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.045041766690287206 0.05852869515492366 C 0.044962458534418194 0.058508366014556626 0.04381436503914289 0.05822094274606079 0.04409006881985908 0.05828474547051918 C 0.04381436503914289 0.05822094274606079 0.04153692569684572 0.057719588877331605 0.041733321321692905 0.05776306246142296" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.041733321321692905 0.05776306246142296 C 0.04176656070789485 0.057585297421430565 0.04219132552605514 0.05529916340984988 0.04213219395611623 0.05562988198151418 C 0.04219132552605514 0.05529916340984988 0.042468792344696714 0.0536414860697795 0.04244290016095975 0.053794439601451395" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.04244290016095975 0.053794439601451395 C 0.0427308589871049 0.053754038621272905 0.04655745806639224 0.053225647868508585 0.04589840607470156 0.05330962783930949 C 0.04655745806639224 0.053225647868508585 0.05072261722679349 0.05274310096121816 0.05035152406124796 0.052786679951840575" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.05035152406124796 0.052786679951840575 C 0.05105647931065645 0.05280541929160583 0.05993823359567067 0.05307732106803872 0.05881098705414976 0.053011552029023586 C 0.05993823359567067 0.05307732106803872 0.06430077385161134 0.053622938119272004 0.06387848255949892 0.05357590842002213" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.06387848255949892 0.05357590842002213 C 0.06401704484281892 0.05366559990529967 0.06577091457423127 0.05491668053730573 0.06554122995933888 0.05465220624335265 C 0.06577091457423127 0.05491668053730573 0.06672582026977998 0.0569243827561346 0.06663469793820759 0.05674959994745907" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.06663469793820759 0.05674959994745907 C 0.06670001819941623 0.05694344513573412 0.06751644458466803 0.059482728934645436 0.06741854107271139 0.059075742206759686 C 0.06751644458466803 0.059482728934645436 0.06784212333243529 0.06184658222169874 0.0678095400816873 0.06163344068208804" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.0678095400816873 0.06163344068208804 C 0.06776945383118363 0.06189203752802836 0.06712398394949966 0.06512365896659644 0.06732850507564331 0.06473660283337185 C 0.06712398394949966 0.06512365896659644 0.06519085169232354 0.06640657356806748 0.06535528656796352 0.0662781142807832" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3177197117318525,0.1170306422486797) rotate(0) scale(1,1) translate(-0.008858564515669447,-0.005607832739230756)"><path d="M 0.005450358397187303 0.002916575663432118 C 0.005834552895919556 0.003034623669704421 0.010551831955291021 0.004709330030032405 0.010060692381974348 0.004333151738699751 C 0.010551831955291021 0.004709330030032405 0.011450978351571797 0.007688845444484311 0.011344033276987377 0.00743071515942396" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.010797635430377922 0.0038098592082039303 C -0.010099213977815909 0.003726865492501659 -0.0010625785140033202 0.0027394943243790257 -0.002416577999633755 0.0028139346197766767 C -0.0010625785140033202 0.0027394943243790257 0.006105936430255718 0.0029251290837367405 0.005450358397187298 0.0029165756634321202" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3177197117318525,0.1170306422486797) rotate(0) scale(1,1) translate(-0.008858564515669447,-0.005607832739230756)"><path d="M 0.006344394079344087 0.008643341949339925 C 0.0065973619176342155 0.008613865862061733 0.009771828125597782 0.00849701171718539 0.009380008138825637 0.008289628902001628 C 0.009771828125597782 0.00849701171718539 0.01118508606909183 0.011368794634007027 0.011046233920609815 0.011131935731545074" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.006576749622698702 0.003256405118443189 C -0.006055453017937081 0.0035761721315703708 0.0007555716096109871 0.007542520678544101 -0.00032119036555924483 0.007093609275969373 C 0.0007555716096109871 0.007542520678544101 0.006899859449752692 0.008772486338787472 0.006344394079344081 0.008643341949339925" fill="none" stroke="#000000" stroke-width="0.001"/>
</g></svg>

After

Width:  |  Height:  |  Size: 5.4 KiB