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.13179672903073086 0.14152128608500533 C 0.13196830228129375 0.1409422222775161 0.13460562065393777 0.1336900036301274 0.13385560803748547 0.13457252039513456 C 0.13460562065393777 0.1336900036301274 0.1419803629113017 0.13082619305892967 0.1407968804281583 0.13093108490491925 C 0.1419803629113017 0.13082619305892967 0.14892837536041312 0.13394357602344725 0.14805739783520636 0.13331381824325977 C 0.14892837536041312 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.15112215758966802 0.14379062540330637 0.1517531538128812 0.14285273333873974 C 0.15112215758966802 0.14379062540330637 0.1467475466544402 0.14432599687387382 0.14746263339136034 0.14411553065456895" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.14746263339136034 0.14411553065456895 C 0.1473125738730005 0.14395660608399952 0.14518671542603245 0.1420246884333566 0.1456619191710424 0.14220843580773584 C 0.14518671542603245 0.1420246884333566 0.14104609399450674 0.1418961587811809 0.1417601884512411 0.14191056216201828 C 0.14104609399450674 0.1418961587811809 0.1364616006037283 0.14210313695537335 0.13709278569023 0.14203559523768716 C 0.1364616006037283 0.14210313695537335 0.13394373255680328 0.14277818506896656 0.13418596741322072 0.14272106277425275" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.13418596741322072 0.14272106277425275 C 0.13424077904209894 0.14279185649095233 0.13499715982327162 0.14374678573321348 0.1348437069597594 0.14357058737464778 C 0.13499715982327162 0.14374678573321348 0.13612604301000153 0.14494084771890728 0.1360274017753675 0.14483544307704116" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.1360274017753675 0.14483544307704116 C 0.13633348027555875 0.14494314200480682 0.14042143202386417 0.14619822697496057 0.13970034377766222 0.1461278302102292 C 0.14042143202386417 0.14619822697496057 0.14529150664686824 0.1455207957134033 0.14468046072979104 0.14568020425381759 C 0.14529150664686824 0.1455207957134033 0.14726474250438584 0.14408453825865372 0.1470328947825884 0.14421492772525776 C 0.14726474250438584 0.14408453825865372 0.14749844494209133 0.14410724756534488 0.14746263339136034 0.14411553065456895" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.14746263339136034 0.14411553065456895 C 0.14817768615805862 0.1439051410442191 0.1521179876501419 0.14324700932355774 0.1517529499915501 0.14285319299246987 C 0.1521179876501419 0.14324700932355774 0.1493028442348047 0.14708263458253393 0.14965285934291117 0.1464784286410962" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.14965285934291117 0.1464784286410962 C 0.14939918984363396 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.13159245708942896 0.14093244145903774 0.13179672903073086 0.14152128608500533" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.13179672903073086 0.14152128608500533 C 0.13179672903073086 0.14152128608500533 0.13179672903073086 0.14152128608500533 0.13179672903073086 0.14152128608500533 C 0.13179672903073086 0.14152128608500533 0.13179672903073086 0.14152128608500533 0.13179672903073086 0.14152128608500533 C 0.13179672903073086 0.14152128608500533 0.13179672903073086 0.14152128608500533 0.13179672903073086 0.14152128608500533 C 0.13179672903073086 0.14152128608500533 0.13179672903073086 0.14152128608500533 0.13179672903073086 0.14152128608500533" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.32588449103078504,0.10825672161350267) rotate(0) scale(1,1) translate(-0.014991016181195468,-0.014142268789137224)"><path d="M 0.021044888996724305 0.017652994492077113 C 0.02086292272205376 0.017497491070871986 0.01835297022916698 0.015539258172341358 0.018861293700677767 0.015786953437615603 C 0.01835297022916698 0.015539258172341358 0.014304093683852059 0.014617202282220475 0.014945007338594848 0.014680651308786182 C 0.014304093683852059 0.014617202282220475 0.010573384514198323 0.015192559371489216 0.011170329843764305 0.015025565118827135 C 0.010573384514198323 0.015192559371489216 0.0074992745121396295 0.016822833775889817 0.007781663383803066 0.016684582340731148" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.007781663383803066 0.016684582340731148 C 0.008026189540507624 0.016481812258478445 0.011324166603032102 0.013993353205950153 0.010715977264257761 0.014251341353698736 C 0.011324166603032102 0.013993353205950153 0.015748725731280153 0.013633389815711558 0.015079935449095142 0.013588724567748157 C 0.015748725731280153 0.013633389815711558 0.019238540112780297 0.015126013489620286 0.018741460650477867 0.014787324329259539 C 0.019238540112780297 0.015126013489620286 0.021236841358911508 0.017891800338978577 0.021044888996724305 0.017652994492077113" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g id="睫毛">
<g transform="translate(0.31945384259438164,0.11624836350749815) rotate(0) scale(1,1) translate(-0.008417252494995203,-0.005828091228850773)"><path d="M 0.006225485389469788 0.007008872415227488 C 0.006341857553542658 0.006921899518286153 0.007789204563136573 0.005841191498261108 0.007621951358344226 0.005965197651931474 C 0.007789204563136573 0.005841191498261108 0.00828340488769743 0.00548376531445406 0.008232523846977953 0.005520798571183092" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.008232523846977953 0.005520798571183092 C 0.008264018017298227 0.005525569070559236 0.008652618796557387 0.005613794391502114 0.008610453890821242 0.0055780445636968235 C 0.008652618796557387 0.005613794391502114 0.00873016672212266 0.006003939142975957 0.00873850271581169 0.005949796504846571 C 0.00873016672212266 0.006003939142975957 0.008491415237447982 0.006250919530949698 0.008510421966552882 0.006227756221249457" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.008510421966552882 0.006227756221249457 C 0.008451326257594689 0.006245108701604151 0.007610862077630978 0.006501079001670617 0.00780127345905457 0.006435985985505781 C 0.007610862077630978 0.006501079001670617 0.00609416971700439 0.00705661295103763 0.006225485389469788 0.007008872415227488" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.32132196030752785,0.11384040024249778) rotate(0) scale(1,1) translate(-0.008380251738491874,-0.0057170889593407765)"><path d="M 0.0051543006157265935 0.006345954950733041 C 0.005348939430648217 0.006285860960099681 0.007738903180837422 0.005546869165344089 0.0074899663947860795 0.005624827063132718 C 0.007738903180837422 0.005546869165344089 0.008195840019472432 0.005392596270114238 0.008141542048342712 0.005410460177269505" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.008141542048342712 0.005410460177269505 C 0.008172616694321623 0.005414304959987437 0.008555585943498437 0.005492385836749118 0.008514437800089657 0.005456597569884684 C 0.008555585943498437 0.005492385836749118 0.008623684590121574 0.00589586101909674 0.008635319769248072 0.005839919379642705 C 0.008623684590121574 0.00589586101909674 0.008353106974015319 0.006151895398640641 0.008374815650571684 0.006127897243333107" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.008374815650571684 0.006127897243333107 C 0.00831022059880558 0.006137184005504992 0.007331298776474686 0.006257509865012382 0.0075996750293784434 0.00623933838939572 C 0.007331298776474686 0.006257509865012382 0.004950519414588939 0.006354839664177818 0.0051543006157265935 0.006345954950733041" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.31901690617084344,0.114017208322467) rotate(0) scale(1,1) translate(-0.008355584567489648,-0.005692421788338555)"><path d="M 0.004906140271725214 0.005996811954774507 C 0.0051174238503225635 0.005956930045613619 0.007716660789618887 0.005463074194239919 0.007441543214893405 0.005518229044843843 C 0.007716660789618887 0.005463074194239919 0.008271385164559122 0.005319680806084386 0.00820755116843099 0.005334953747527421" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.00820755116843099 0.005334953747527421 C 0.008237371079882413 0.005345764515407705 0.008603561802351344 0.005506161267032411 0.008565390105848066 0.005464682962090822 C 0.008603561802351344 0.005506161267032411 0.008646400205328924 0.005888942242828695 0.008665611526470328 0.005832693406826485 C 0.008646400205328924 0.005888942242828695 0.00830729114595796 0.00616525029305825 0.00833485425215122 0.006139668994117345" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.00833485425215122 0.006139668994117345 C 0.008263563980338194 0.006142429261438587 0.0071936448253594135 0.006160887448693689 0.007479370990394914 0.006172792201972259 C 0.0071936448253594135 0.006160887448693689 0.004691704378502739 0.005982146934174695 0.004906140271725214 0.005996811954774507" fill="none" stroke="#000000" stroke-width="0.001"/>
</g></g>
</svg>

After

Width:  |  Height:  |  Size: 9.4 KiB