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.3257456317518053,0.1130072566562324) rotate(0) scale(1,1) translate(-0.14152185117886698,-0.14116273906070584)"><path d="M 0.1317967290307309 0.14152128608500533 C 0.13196830228129378 0.1409422222775161 0.13460562065393777 0.1336900036301274 0.13385560803748547 0.13457252039513456 C 0.13460562065393777 0.1336900036301274 0.14198036291130173 0.13082619305892967 0.14079688042815833 0.13093108490491925 C 0.14198036291130173 0.13082619305892967 0.1489283753604131 0.13394357602344725 0.14805739783520633 0.13331381824325977 C 0.1489283753604131 0.13394357602344725 0.15151454513859225 0.13891937493582826 0.1512486107306395 0.13848817826716914" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.1512486107306395 0.13848817826716914 C 0.15133270124434645 0.1392156041124309 0.15107752259787707 0.14388382770654112 0.15175315381288118 0.14285273333873974 C 0.15107752259787707 0.14388382770654112 0.14643510171190374 0.14497841299651695 0.1471948234406148 0.14467474447397735" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.1471948234406148 0.14467474447397735 C 0.14705326931361878 0.14453120239560185 0.14504761499438273 0.14270895914009898 0.14549617391666272 0.14295223953347122 C 0.14504761499438273 0.14270895914009898 0.14113226153448769 0.14166415750760042 0.1418121163732548 0.14175537975351038 C 0.14113226153448769 0.14166415750760042 0.13671554218017495 0.14199083319859157 0.13733791585145738 0.14185757258255186 C 0.13671554218017495 0.14199083319859157 0.13409410869006655 0.14347925169294 0.13434363231786584 0.14335450714598708" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.13434363231786584 0.14335450714598708 C 0.13447781952606175 0.14335675604508136 0.13621395429266225 0.14337866269219546 0.13595387881621696 0.14338149393511843 C 0.13621395429266225 0.14337866269219546 0.13759042630345886 0.14331545208889412 0.13746453803520947 0.14332053223091137" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.13746453803520947 0.14332053223091137 C 0.13771220680072332 0.1433661824717991 0.14103003630781355 0.1439412266249645 0.14043656322137565 0.14386833512156405 C 0.14103003630781355 0.1439412266249645 0.14508620917445392 0.1442237847389363 0.14458621507246436 0.14419523027171677 C 0.14508620917445392 0.1442237847389363 0.1466538764759294 0.14425094824505327 0.1464364924452502 0.14421098872819824 C 0.1466538764759294 0.14425094824505327 0.1472580176902285 0.1447133907861256 0.1471948234406148 0.14467474447397735" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.1471948234406148 0.14467474447397735 C 0.14795451119910402 0.14437115256039276 0.1521626226419328 0.14315380702032302 0.1517529499915501 0.14285319299246987 C 0.1521626226419328 0.14315380702032302 0.14930284423480472 0.14708263458253393 0.1496528593429112 0.1464784286410962" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.1496528593429112 0.1464784286410962 C 0.14939918984363398 0.14681606825337767 0.14579911671264256 0.15095336070947737 0.14660882535158462 0.15053010398847386 C 0.14579911671264256 0.15095336070947737 0.1389062862568372 0.15139561909381702 0.13993635567560644 0.15155750929313846 C 0.1389062862568372 0.15139561909381702 0.13356969010594757 0.1477510696626053 0.13424799232635387 0.1485874215966164 C 0.13356969010594757 0.1477510696626053 0.131592457089429 0.14093244145903774 0.1317967290307309 0.14152128608500533" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.1317967290307309 0.14152128608500533 C 0.1317967290307309 0.14152128608500533 0.1317967290307309 0.14152128608500533 0.1317967290307309 0.14152128608500533 C 0.1317967290307309 0.14152128608500533 0.1317967290307309 0.14152128608500533 0.1317967290307309 0.14152128608500533 C 0.1317967290307309 0.14152128608500533 0.1317967290307309 0.14152128608500533 0.1317967290307309 0.14152128608500533 C 0.1317967290307309 0.14152128608500533 0.1317967290307309 0.14152128608500533 0.1317967290307309 0.14152128608500533" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3263507536782752,0.10903148832768692) rotate(0) scale(1,1) translate(-0.014991016181195468,-0.014142268789137224)"><path d="M 0.02078524622149229 0.01806673936081992 C 0.02061457057783967 0.017898921412471906 0.01824733162484706 0.0157703732356926 0.01873713849766085 0.016052923980643723 C 0.01824733162484706 0.0157703732356926 0.014272637306790495 0.014568128076951212 0.01490756374772682 0.014676130421406459 C 0.014272637306790495 0.014568128076951212 0.010510881075478182 0.014881842509027923 0.011118021206424947 0.014756895847180772 C 0.010510881075478182 0.014881842509027923 0.007330537257194044 0.016293706573271553 0.007621882176365651 0.016175490363572263" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.007621882176365651 0.016175490363572263 C 0.007879957205561072 0.015990271501478654 0.011322826244566405 0.01373276434907562 0.010718782526710694 0.013952864018448953 C 0.011322826244566405 0.01373276434907562 0.01553445224310824 0.01362550322851607 0.014870406790634188 0.013534294331092276 C 0.01553445224310824 0.01362550322851607 0.01918023124230418 0.015425074540011782 0.01868732795639934 0.015047370787534478 C 0.01918023124230418 0.015425074540011782 0.020960072743583368 0.018318353408593707 0.02078524622149229 0.01806673936081992" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g id="睫毛">
<g transform="translate(0.3193571814125442,0.11553708001366683) rotate(0) scale(1,1) translate(-0.008427473265632673,-0.005823594274085249)"><path d="M 0.006852589815546782 0.006546622041801449 C 0.006916160756154042 0.006494397035073764 0.00773190530687272 0.005833611535324688 0.007615441102833904 0.00591992196106923 C 0.00773190530687272 0.005833611535324688 0.00830305352744412 0.0054768115138500864 0.008250160264012566 0.005510896932866944" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.008250160264012566 0.005510896932866944 C 0.008281330049717128 0.005517444636288944 0.008664263744709333 0.005627548252651112 0.008624197692467313 0.005589469373930948 C 0.008664263744709333 0.005627548252651112 0.008719561879803026 0.006021420809688871 0.008730952890916807 0.005967843477508912 C 0.008719561879803026 0.006021420809688871 0.008467218281450688 0.0062544435169722525 0.008487505559101927 0.006232397360090457" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.008487505559101927 0.006232397360090457 C 0.00842752738443541 0.006246370033721204 0.007631524484474118 0.006426254833802001 0.0077677674631037134 0.006400069443659418 C 0.007631524484474118 0.006426254833802001 0.006776325011583704 0.006558834758313285 0.006852589815546782 0.006546622041801449" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.32077032574282993,0.11388302039340156) rotate(0) scale(1,1) translate(-0.008404016723507487,-0.0057194461597123315)"><path d="M 0.0059742608266516286 0.004506981866912215 C 0.006115216814778204 0.004557064982125934 0.007864220642862525 0.00517491563194595 0.007665732684170533 0.005107979249476844 C 0.007864220642862525 0.00517491563194595 0.008413648301520957 0.005327071723796872 0.00835611633095554 0.005310218456541485" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.00835611633095554 0.005310218456541485 C 0.008380676561774675 0.005332017593749483 0.008665499620885815 0.00562719413068918 0.008650839100785183 0.005571808103037459 C 0.008665499620885815 0.00562719413068918 0.008488726726945398 0.006016262128177665 0.008532042572163133 0.005974850788362143 C 0.008488726726945398 0.006016262128177665 0.008097632823673125 0.006076568630195522 0.008131048958172356 0.006068744180823723" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.008131048958172356 0.006068744180823723 C 0.008069721116623024 0.006038358021340942 0.007215382515286971 0.005573963407537718 0.007395114859580366 0.005704110267030344 C 0.007215382515286971 0.005573963407537718 0.005855856323907567 0.004407221166902371 0.0059742608266516286 0.004506981866912215" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.31861286456264226,0.11487975480930909) rotate(0) scale(1,1) translate(-0.008372865020150121,-0.005692203715112835)"><path d="M 0.005662948365963485 0.005521654811612857 C 0.00581348275506103 0.005511122657600814 0.007685491144279282 0.0053781830978622035 0.007469361035134028 0.005395268963468344 C 0.007685491144279282 0.0053781830978622035 0.008322105395754238 0.005310070712745075 0.00825650967570653 0.005316624424339172" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.00825650967570653 0.005316624424339172 C 0.00828472199890046 0.005331422090494656 0.008627427838117811 0.00554064537365532 0.008595057554033707 0.005494196418204977 C 0.008627427838117811 0.00554064537365532 0.008618215662397663 0.005927388295401345 0.008644953084715785 0.005874011889743282 C 0.008618215662397663 0.005927388295401345 0.008243313103007957 0.006156438402464942 0.008274208486216251 0.006134713286101737" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.008274208486216251 0.006134713286101737 C 0.008202887077829076 0.006127804583571843 0.007200746575549076 0.006000720649535608 0.00741835158557014 0.006051808855743014 C 0.007200746575549076 0.006000720649535608 0.005516664764329597 0.005477475307935344 0.005662948365963485 0.005521654811612857" fill="none" stroke="#000000" stroke-width="0.001"/>
</g></g>
</svg>

After

Width:  |  Height:  |  Size: 9.4 KiB