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,38 @@
<?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.07847599559563229) rotate(0) scale(1,1) translate(-0.027518731894252097,-0.027518731894252104)"><path d="M 0.027518731894252094 0.03351898730977576 C 0.026652669624412335 0.03351898730977576 0.022755389410133435 0.02376857225954999 0.022322358275213554 0.024518604186490434 C 0.022755389410133435 0.02376857225954999 0.03314813664821053 0.025268636113430876 0.03271510551329065 0.024518604186490434 C 0.03314813664821053 0.025268636113430876 0.026652669624412335 0.03351898730977576 0.027518731894252094 0.03351898730977576 Z" fill="#cccccc" stroke="none" stroke-width="0"/>
</g><g id="お下げ左">
<g transform="translate(0.3173264160442866,0.08092617853905136) rotate(0) scale(1,1) translate(-0.1719217342075472,-0.16462012712208823)"><path d="M 0.1692163386769496 0.15840774135332153 C 0.16939693128080052 0.1584107940883093 0.17180126771614468 0.15868497530378461 0.17138344992316065 0.15844437417317467 C 0.17180126771614468 0.15868497530378461 0.17446737738189091 0.1615325033162632 0.1742301521927578 0.161294954920641" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.1742301521927578 0.161294954920641 C 0.1742974346804549 0.16285627114328607 0.17477876692533523 0.18334227378994525 0.1750375420451226 0.18003074959238183 C 0.17477876692533523 0.18334227378994525 0.17079879314782515 0.20278345326632033 0.17112485075530956 0.20103324529140199" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17112485075530956 0.20103324529140199 C 0.1709112305394669 0.20177372261549115 0.16778879278440612 0.21212010042179688 0.16856140816519766 0.20991897318047184 C 0.16778879278440612 0.21212010042179688 0.1612944710208622 0.2289074221045385 0.1618534661858111 0.22744677218730258" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.1618534661858111 0.22744677218730258 C 0.16209435869194583 0.22608870837592607 0.16495777927529853 0.20851652565897172 0.16474417625942778 0.21115000645078447 C 0.16495777927529853 0.20851652565897172 0.1643894128859963 0.1945695857051135 0.16441670237626024 0.19584500268554975" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.16441670237626024 0.19584500268554975 C 0.16446956060434245 0.19453763850204206 0.16545097080497073 0.17703686070577188 0.1650510011132466 0.18015663248345756 C 0.16545097080497073 0.17703686070577188 0.16956345014059152 0.15659533375914353 0.1692163386769496 0.15840774135332153" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3122864348406378,0.07640813410956958) rotate(0) scale(1,1) translate(-0.17652113247044526,-0.16988053717297155)"><path d="M 0.17333534186404284 0.17238095539742485 C 0.17368116947526002 0.17206401347862485 0.17768607228602867 0.1688447499900288 0.17748527319864907 0.168577652371825 C 0.17768607228602867 0.1688447499900288 0.17559990238876064 0.17617016635287405 0.1757449309125982 0.17558612681587027" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.1757449309125982 0.17558612681587027 C 0.17564516549258413 0.17620378499362102 0.174294804269068 0.18454619337182154 0.17454774587242916 0.18299802494887932 C 0.174294804269068 0.18454619337182154 0.17255645548891696 0.1950946581363686 0.17270963167226405 0.1941641478911771" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17270963167226405 0.1941641478911771 C 0.17227237543973026 0.19589607323606859 0.1662310776011839 0.21775300836474096 0.16746255688185863 0.21494725202987475 C 0.1662310776011839 0.21775300836474096 0.15713765725602655 0.22890705489954646 0.15793188030416747 0.22783322390957172" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.15793188030416747 0.22783322390957172 C 0.15842523526947386 0.22662639745346602 0.1645757535376201 0.21069421281710454 0.1638521398878443 0.21335130643630346 C 0.1645757535376201 0.21069421281710454 0.16684550278594634 0.19449783331609163 0.16661524410147696 0.19594810047918484" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.16661524410147696 0.19594810047918484 C 0.16688997110089437 0.19470966123880307 0.17047197624136645 0.17912290083779026 0.16991196809448597 0.1810868295946036 C 0.17047197624136645 0.17912290083779026 0.1736206230115059 0.17165546588099329 0.17333534186404284 0.17238095539742485" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.31395621984782957,0.07684244167054492) rotate(0) scale(1,1) translate(-0.17302197079216816,-0.17193698964626375)"><path d="M 0.17045591409834876 0.17313870717623872 C 0.1706892211470146 0.1728462667508778 0.17363032662753664 0.16956446022491076 0.17325559868233875 0.16962942207190762 C 0.17363032662753664 0.16956446022491076 0.17509407033725544 0.17258664359064035 0.1749526494407234 0.1723591650122763" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.1749526494407234 0.1723591650122763 C 0.17491307979129478 0.1735255815777098 0.17418935338554514 0.18906649988977317 0.17447781364758005 0.1863561637974784 C 0.17418935338554514 0.18906649988977317 0.17124223568369823 0.20642711764667465 0.17149112629630453 0.2048831981198134" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17149112629630453 0.2048831981198134 C 0.1711804251006619 0.20621255103793162 0.16646397942245836 0.22401710330166144 0.16776271194859285 0.22083543313723225 C 0.16646397942245836 0.22401710330166144 0.1549183046521988 0.24491555733927478 0.15590633598269066 0.24306324009296382" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.15590633598269066 0.24306324009296382 C 0.15647655333623398 0.24129742222078887 0.1635497237467159 0.2185348661916193 0.16274894422521036 0.22187342562686455 C 0.1635497237467159 0.2185348661916193 0.1657462524087192 0.2014277853069506 0.165515690240757 0.2030005268700209" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.165515690240757 0.2030005268700209 C 0.1656520307280764 0.20156177143633533 0.16756346141005599 0.18324697669131232 0.16715177608859 0.18573546166579416 C 0.16756346141005599 0.18324697669131232 0.17073125893249533 0.17208897763544242 0.17045591409834876 0.17313870717623872" fill="none" stroke="#000000" stroke-width="0.001"/>
</g></g>
<g id="お下げ右">
<g transform="translate(0.35736048961305483,0.08092617853905136) rotate(0) scale(1,1) translate(-0.1719217342075472,-0.16462012712208823)"><path d="M 0.17462712973814482 0.15840774135332153 C 0.17497424120178673 0.16022014894749953 0.17919243699357187 0.18327640426114325 0.17879246730184775 0.18015663248345756 C 0.17919243699357187 0.18327640426114325 0.17947962426691635 0.19715236686905743 0.17942676603883415 0.19584500268554975" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17942676603883415 0.19584500268554975 C 0.1793994765485702 0.19712041966598598 0.17931289517153742 0.21378348724259721 0.17909929215566667 0.21115000645078447 C 0.17931289517153742 0.21378348724259721 0.1822308947354181 0.2288048359986791 0.18199000222928335 0.22744677218730258" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.18199000222928335 0.22744677218730258 C 0.18143100706433446 0.22598612227006667 0.17450944486910522 0.2077178459391468 0.17528206024989676 0.20991897318047184 C 0.17450944486910522 0.2077178459391468 0.17250499744394215 0.20029276796731282 0.17271861765978483 0.20103324529140199" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17271861765978483 0.20103324529140199 C 0.17239256005230041 0.19928303731648364 0.16854715125018443 0.1767192253948184 0.1688059263699718 0.18003074959238183 C 0.16854715125018443 0.1767192253948184 0.1696805987100337 0.15973363869799592 0.1696133162223366 0.161294954920641" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.1696133162223366 0.161294954920641 C 0.16985054141146969 0.1610574065250188 0.1728778362849177 0.15820377304256472 0.17246001849193368 0.15844437417317467 C 0.1728778362849177 0.15820377304256472 0.17480772234199574 0.15840468861833376 0.17462712973814482 0.15840774135332153" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3624004708167038,0.07640813410956958) rotate(0) scale(1,1) translate(-0.17065161948019514,-0.16988053717297155)"><path d="M 0.1738374100865976 0.17238095539742485 C 0.17412269123406066 0.1731064449138564 0.17782079200303497 0.1830507583514169 0.17726078385615449 0.18108682959460357 C 0.17782079200303497 0.1830507583514169 0.1808322348485809 0.19718653971956662 0.1805575078491635 0.19594810047918484" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.1805575078491635 0.19594810047918484 C 0.18078776653363288 0.19739836764227806 0.18404422571257195 0.21600840005550237 0.18332061206279615 0.21335130643630346 C 0.18404422571257195 0.21600840005550237 0.18973422661177938 0.22904005036567743 0.189240871646473 0.22783322390957172" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.189240871646473 0.22783322390957172 C 0.18844664859833207 0.22675939291959699 0.17847871578810717 0.21214149569500854 0.17971019506878189 0.21494725202987475 C 0.17847871578810717 0.21214149569500854 0.17402586404584255 0.19243222254628564 0.17446312027837635 0.1941641478911771" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17446312027837635 0.1941641478911771 C 0.17430994409502926 0.19323363764598564 0.17237206447485018 0.1814498565259371 0.17262500607821135 0.18299802494887932 C 0.17237206447485018 0.1814498565259371 0.1713280556180282 0.17496846863811952 0.17142782103804227 0.17558612681587027" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17142782103804227 0.17558612681587027 C 0.1712827925142047 0.17500208727886649 0.16988827783937097 0.16831055475362122 0.16968747875199136 0.168577652371825 C 0.16988827783937097 0.16831055475362122 0.17418323769781477 0.17269789731622484 0.1738374100865976 0.17238095539742485" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.36073068580951184,0.07684244167054492) rotate(0) scale(1,1) translate(-0.16994746398775143,-0.17193698964626375)"><path d="M 0.1725135206815709 0.17313870717623872 C 0.17278886551571745 0.17418843671703502 0.17622934401279572 0.188223946640276 0.17581765869132973 0.18573546166579416 C 0.17622934401279572 0.188223946640276 0.17759008502648216 0.20443928230370648 0.17745374453916274 0.2030005268700209" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17745374453916274 0.2030005268700209 C 0.17768430670712496 0.2045732684330912 0.18102127007621494 0.2252119850621098 0.1802204905547094 0.22187342562686455 C 0.18102127007621494 0.2252119850621098 0.18763331615077233 0.24482905796513876 0.18706309879722904 0.24306324009296382" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.18706309879722904 0.24306324009296382 C 0.1860750674667372 0.24121092284665285 0.17390799030519236 0.21765376297280306 0.17520672283132685 0.22083543313723225 C 0.17390799030519236 0.21765376297280306 0.17116760728797248 0.20355384520169517 0.17147830848361512 0.2048831981198134" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17147830848361512 0.2048831981198134 C 0.17122941787100882 0.20333927859295214 0.1682031608703047 0.18364582770518365 0.16849162113233962 0.1863561637974784 C 0.1682031608703047 0.18364582770518365 0.16797721568976767 0.1711927484468428 0.16801678533919628 0.1723591650122763" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.16801678533919628 0.1723591650122763 C 0.16815820623572833 0.17213168643391225 0.17008856404277878 0.16969438391890448 0.1697138360975809 0.16962942207190762 C 0.17008856404277878 0.16969438391890448 0.17274682773023672 0.17343114760159964 0.1725135206815709 0.17313870717623872" fill="none" stroke="#000000" stroke-width="0.001"/>
</g></g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB