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,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1">
<g transform="translate(0.3373434528286707,0.23816207078525886) rotate(0) scale(1,1) translate(-0.5000000000000002,-0.49261972333743)"><path d="M 0.4794178018873641 0.47233384179720206 C 0.48011934579119914 0.4722303006843092 0.4895515119094375 0.4709438070627663 0.4878363287333845 0.4710913484424878 C 0.4895515119094375 0.4709438070627663 0.502027278544436 0.4705633452405438 0.5000000000000001 0.4705633452405438 C 0.502027278544436 0.4705633452405438 0.5138788544426683 0.4712388898222093 0.5121636712666153 0.4710913484424878 C 0.5138788544426683 0.4712388898222093 0.5212837420164712 0.4724373829100949 0.5205821981126362 0.47233384179720206" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.5205821981126362 0.47233384179720206 C 0.5209080829160863 0.4729125107657062 0.5252225627992486 0.4803826040020821 0.5244928157540371 0.4792778694192512 C 0.5252225627992486 0.4803826040020821 0.5297430248969368 0.4861167224054994 0.5293391626551753 0.48559065679117264" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.5293391626551753 0.48559065679117264 C 0.5295184626932719 0.48617641233669406 0.5320452463432147 0.49394393856417285 0.5314907631123333 0.49261972333743 C 0.5320452463432147 0.49394393856417285 0.5363681446185363 0.5022196991933088 0.5359929614257515 0.5014812395120873" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.5359929614257515 0.5014812395120873 C 0.5361450934299837 0.5020613893607242 0.5380848743696337 0.509842198095591 0.5378185454765388 0.5084430376957301 C 0.5380848743696337 0.509842198095591 0.5391097952932898 0.5198169908944258 0.5391889081428903 0.5182711643104183 C 0.5391097952932898 0.5198169908944258 0.5360930227451778 0.5283685358245341 0.5368691912813326 0.5269929567038195 C 0.5360930227451778 0.5283685358245341 0.5283917745377427 0.5356932653253139 0.5298748857090332 0.5347781137589941 C 0.5283917745377427 0.5356932653253139 0.517251136996127 0.5380043624526448 0.5190718572258466 0.5379747754996576 C 0.517251136996127 0.5380043624526448 0.5064369215169108 0.5346632420163999 0.508026242952398 0.5351331571948412 C 0.5064369215169108 0.5346632420163999 0.49933114642063375 0.5321026797053214 0.5000000000000002 0.5323357933583615" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.5000000000000002 0.5323357933583615 C 0.4993311464206338 0.5325689070114015 0.49038443561211637 0.5356030723732825 0.49197375704760354 0.5351331571948412 C 0.49038443561211637 0.5356030723732825 0.47910742254443456 0.5379451885466703 0.48092814277415435 0.5379747754996576 C 0.47910742254443456 0.5379451885466703 0.46864200311967524 0.5338629621926743 0.47012511429096576 0.5347781137589941 C 0.46864200311967524 0.5338629621926743 0.4623546401825133 0.5256173775831049 0.46313080871866785 0.5269929567038195 C 0.4623546401825133 0.5256173775831049 0.4607319790075107 0.5167253377264108 0.46081109185711133 0.5182711643104183 C 0.4607319790075107 0.5167253377264108 0.4624477834165547 0.5070438772958692 0.4621814545234599 0.5084430376957301 C 0.4624477834165547 0.5070438772958692 0.4641591705784811 0.5009010896634505 0.4640070385742487 0.5014812395120873" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.4640070385742487 0.5014812395120873 C 0.46438222176703353 0.5007427798308659 0.46906372011854836 0.4912955081106871 0.468509236887667 0.49261972333743 C 0.46906372011854836 0.4912955081106871 0.4708401373829215 0.4850049012456512 0.470660837344825 0.48559065679117264" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.470660837344825 0.48559065679117264 C 0.47106469958658653 0.48506459117684586 0.47623693129117484 0.4781731348364203 0.4755071842459632 0.4792778694192512 C 0.47623693129117484 0.4781731348364203 0.47974368669081413 0.47175517282869794 0.47941780188736405 0.47233384179720206" fill="none" stroke="none" stroke-width="0"/>
</g><g transform="translate(0.33734345282867056,0.2248202168670801) rotate(0) scale(1,1) translate(-0.01602013802246163,-0.01602013802246163)"><path d="M -0.004562063158700449 0.009076109681719487 C -0.003860518995574802 0.008972568632045977 0.005571650230570826 0.007686075765193101 0.0038564667988073157 0.007833617085637368 C 0.005571650230570826 0.007686075765193101 0.018047416568114247 0.007305613836388289 0.016020138022461675 0.007305613836388289 C 0.018047416568114247 0.007305613836388289 0.029898992778401676 0.007981158406081634 0.028183809346638174 0.007833617085637368 C 0.029898992778401676 0.007981158406081634 0.037303883358372494 0.009179650731392998 0.0366023392036237 0.009076109681719487" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.0366023392036237 0.009076109681719487 C 0.03671415766430003 0.009281536766660438 0.038157115006128936 0.011933403363663404 0.03794416073173967 0.01154123470101091 C 0.038157115006128936 0.011933403363663404 0.03925892631000781 0.013968875211260941 0.03915779049629488 0.0137821336335494" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.03915779049629488 0.0137821336335494 C 0.03829427863134561 0.013640985942144858 0.026867510410750903 0.011899949623160913 0.02879564811690367 0.012088361336694895 C 0.026867510410750903 0.011899949623160913 0.013890886348431521 0.011521193071141625 0.016020138022461675 0.011521193071141625 C 0.013890886348431521 0.011521193071141625 0.0013164902359183645 0.012276773050228876 0.0032446280285418324 0.012088361336694895 C 0.0013164902359183645 0.012276773050228876 -0.007981027448816755 0.013923281324953943 -0.0071175154890199405 0.0137821336335494" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.0071175154890199405 0.0137821336335494 C -0.007016379632071666 0.01359539205583786 -0.005690930844780699 0.011149066038358416 -0.005903885205640655 0.01154123470101091 C -0.005690930844780699 0.011149066038358416 -0.004450244654788788 0.008870682596778536 -0.00456206315870047 0.009076109681719487" fill="none" stroke="none" stroke-width="0"/>
</g><g transform="translate(0.3373434528286706,0.2248202168670801) rotate(0) scale(1,1) translate(-0.027518731894252097,-0.027518731894252097)"><path d="M 0.026926710318461215 0.023021006578227393 C 0.026976045449777122 0.023020904638786276 0.02761740215688391 0.023019783304933997 0.027518731894252097 0.023019783304933997 C 0.02761740215688391 0.023019783304933997 0.02816008860135889 0.02302110851766851 0.028110753470042982 0.023021006578227393" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.028110753470042982 0.023021006578227393 C 0.028110753470042982 0.025452353926722033 0.028110753470042982 0.057033538113454636 0.028110753470042982 0.05219717476016307 C 0.028110753470042982 0.057033538113454636 0.028110753470042982 0.08346238282252312 0.028110753470042982 0.0810573668177262" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.028110753470042982 0.0810573668177262 C 0.028012083207411168 0.08097724832313191 0.02732139136898847 0.0805766558501605 0.027518731894252097 0.0805766558501605 C 0.02732139136898847 0.0805766558501605 0.0268280400558294 0.08113748531232048 0.026926710318461215 0.0810573668177262" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.026926710318461215 0.0810573668177262 C 0.026926710318461215 0.07865235081292928 0.026926710318461215 0.04736081140687152 0.026926710318461215 0.052197174760163084 C 0.026926710318461215 0.04736081140687152 0.026926710318461215 0.020589659229732767 0.026926710318461215 0.023021006578227407" fill="none" stroke="#000000" stroke-width="0.001"/>
</g></svg>

After

Width:  |  Height:  |  Size: 7.4 KiB