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,37 @@
<?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.2178778082444383,-0.21061995408824444)"><path d="M 0.2456020006120999 0.23378664862188522 C 0.24529247248894492 0.23493027155705123 0.24082127081227234 0.24972370812541383 0.24188766313423996 0.2475101238438775 C 0.24082127081227234 0.24972370812541383 0.2308044715076716 0.262207331506811 0.23280529274848838 0.26034966000032117 C 0.2308044715076716 0.262207331506811 0.21538989416043028 0.26980218192175565 0.2178778082444386 0.26980218192175565 C 0.21538989416043028 0.26980218192175565 0.200949502499572 0.2584919884938314 0.2029503237403888 0.2603496600003213 C 0.200949502499572 0.2584919884938314 0.19280156103266954 0.2452965395623412 0.19386795335463716 0.24751012384387755 C 0.19280156103266954 0.2452965395623412 0.18984408775362221 0.23264302568671918 0.1901536158767772 0.23378664862188522" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.1901536158767772 0.23378664862188522 C 0.1904631439999322 0.23264302568671918 0.19502312803662308 0.2180823603714842 0.1938679533546372 0.22006317339989281 C 0.19502312803662308 0.2180823603714842 0.20601653330142475 0.20887326934581574 0.20401571206060795 0.21001689228098178 C 0.20601653330142475 0.20887326934581574 0.22018815760841043 0.20633969817790035 0.21787780824443864 0.20633969817790035 C 0.22018815760841043 0.20633969817790035 0.2337407256690861 0.21116051521614781 0.23173990442826933 0.21001689228098178 C 0.2337407256690861 0.21116051521614781 0.24304283781622593 0.22204398642830142 0.24188766313424004 0.22006317339989281 C 0.24304283781622593 0.22204398642830142 0.2459115287352549 0.23493027155705126 0.2456020006120999 0.23378664862188522" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g id="お下げ">
<g transform="translate(0.33734345282867095,0.12379564176882465) rotate(0) scale(1,1) translate(-0.08512163657345904,-0.0749625261910107)"><path d="M 0.09005188720557471 0.09752048584487923 C 0.08984235155370979 0.09786185809875456 0.08692528659637469 0.10195832514525849 0.08753745938319572 0.10161695289138316 C 0.08692528659637469 0.10195832514525849 0.08209364097690133 0.10127558063750783 0.08270581376372237 0.10161695289138316 C 0.08209364097690133 0.10127558063750783 0.07998185028947846 0.0971791135910039 0.08019138594134338 0.09752048584487923" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.08019138594134338 0.09752048584487923 C 0.0797580372298141 0.09633877917856025 0.07439556154822781 0.08146017587789582 0.07499120140299209 0.08334000584905153 C 0.07439556154822781 0.08146017587789582 0.07288141654093705 0.07426440288617396 0.07304370768417205 0.0749625261910107" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.09719956546274605 0.0749625261910107 C 0.09703727431951105 0.07566064949584743 0.09465643188916172 0.08521983582020724 0.095252071743926 0.08334000584905153 C 0.09465643188916172 0.08521983582020724 0.08961853849404543 0.0987021925111982 0.09005188720557471 0.09752048584487923" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.33734345282867095,0.14635360142269319) rotate(0) scale(1,1) translate(-0.020184612282548316,-0.020184612282548316)"><path d="M 0.024875998926522182 0.018660288359277216 C 0.025117618626550778 0.019403917332312448 0.02245148009586505 0.024634932103891602 0.02308404868289147 0.024175344123536648 C 0.02245148009586505 0.024634932103891602 0.01665260729517875 0.023715756143181693 0.017285175882205166 0.024175344123536648 C 0.01665260729517875 0.023715756143181693 0.015734845338603046 0.017916659386241984 0.01549322563857445 0.018660288359277216 C 0.015734845338603046 0.017916659386241984 0.02096651005654396 0.015251796447113858 0.020184612282548316 0.015251796447113858 C 0.02096651005654396 0.015251796447113858 0.025117618626550778 0.019403917332312448 0.024875998926522182 0.018660288359277216 Z" fill="#cccccc" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.33734345282867095,0.14635360142269319) rotate(0) scale(1,1) translate(-0.02639292779899103,-0.02639292779899103)"><path d="M 0.029587391730907443 0.025354983548605776 C 0.029751915671387442 0.025861336171692267 0.027936485816611307 0.02942324425628728 0.028367215084751006 0.029110301124927164 C 0.027936485816611307 0.02942324425628728 0.023987911245091358 0.028797357993567047 0.024418640513231057 0.029110301124927164 C 0.023987911245091358 0.028797357993567047 0.023362987807554615 0.024848630925519286 0.023198463867074616 0.025354983548605776 C 0.023362987807554615 0.024848630925519286 0.026925338454310433 0.023034069647889278 0.02639292779899103 0.023034069647889278 C 0.026925338454310433 0.023034069647889278 0.029751915671387442 0.025861336171692267 0.029587391730907443 0.025354983548605776 Z" fill="#cccccc" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3334085348186441,0.148189999717076) rotate(0) scale(1,1) translate(-0.17491035026257845,-0.17443573639196525)"><path d="M 0.1714106737829024 0.18190980148971994 C 0.1717736032395435 0.18116887574539217 0.17597901032166133 0.17314475094382875 0.1757658272625957 0.1730186925577866 C 0.17597901032166133 0.17314475094382875 0.17381912409411437 0.18428948625259592 0.17396887049168985 0.18342250212222597" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17396887049168985 0.18342250212222597 C 0.1738698486185716 0.18404955914062154 0.17258511973600515 0.19243432828183257 0.1727806080142708 0.19094718634297303 C 0.17258511973600515 0.19243432828183257 0.17152654474735443 0.20212829030900448 0.17162301115250184 0.2012682053885405" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17162301115250184 0.2012682053885405 C 0.17158066127936467 0.20251633871960753 0.17066783227052204 0.21846753853033765 0.17111481267485568 0.2162458053613448 C 0.17066783227052204 0.21846753853033765 0.1658546157693016 0.22890260325438064 0.16625924630049807 0.2279290034164548" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.16625924630049807 0.2279290034164548 C 0.16639155951276752 0.2267994611280089 0.1679217572624767 0.2120565131746216 0.16784700484773127 0.2143744959551038 C 0.1679217572624767 0.2120565131746216 0.16709871447991947 0.19892476955863206 0.16715627527744345 0.20011321005066834" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.16715627527744345 0.20011321005066834 C 0.1673392411803876 0.1992142868973652 0.16970639932156142 0.1878091814976182 0.16935186611277317 0.18932613221103056 C 0.16970639932156142 0.1878091814976182 0.1715822410887465 0.1812917739296107 0.1714106737829024 0.18190980148971994" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.33507072873560473,0.14633598263922498) rotate(0) scale(1,1) translate(-0.17301747436630827,-0.1665549443625739)"><path d="M 0.1700319481673693 0.1741485011878991 C 0.17017091891847616 0.17361448989179407 0.17198020186451615 0.16701308569346915 0.1716995971806516 0.16774036563463887 C 0.17198020186451615 0.16701308569346915 0.17354083830650185 0.16522787324879779 0.17339920437374415 0.16542114189386248" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17339920437374415 0.16542114189386248 C 0.1734277655097517 0.16703249346726723 0.17372689303592576 0.18759838439638796 0.17374193800583473 0.18475736077471944 C 0.17372689303592576 0.18759838439638796 0.17317505862892 0.20074309740214857 0.17321866473483652 0.1995134253538848" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17321866473483652 0.1995134253538848 C 0.17313387598243182 0.20085464924593055 0.1718130109486585 0.2178959534725261 0.1722011997059803 0.2156081120584336 C 0.1718130109486585 0.2178959534725261 0.16825699964205768 0.22791413984504144 0.1685603996469748 0.2269675223229947" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.1685603996469748 0.2269675223229947 C 0.16860096182900583 0.22592551547431577 0.1689969692667601 0.21200143145174305 0.16904714583134695 0.2144634401388476 C 0.1689969692667601 0.21200143145174305 0.16786754212531493 0.1960034162393143 0.1679582808719328 0.19742341807773994" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.1679582808719328 0.19742341807773994 C 0.16798382152220712 0.19651420798948296 0.16843757428317765 0.18457332061116935 0.1682647686752246 0.1865128970186561 C 0.16843757428317765 0.18457332061116935 0.17017921312504802 0.17311813486866934 0.1700319481673693 0.1741485011878991" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3412783708386977,0.148189999717076) rotate(0) scale(1,1) translate(-0.17132080444909886,-0.17443573639196525)"><path d="M 0.1748324997895199 0.18258760341340735 C 0.17500743642185507 0.183292271340781 0.17722985456801757 0.19248937361335322 0.17693173937754203 0.1910436185418911 C 0.17722985456801757 0.19248937361335322 0.17853306063336682 0.20067775141504104 0.17840988207522646 0.19993666427095258" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17840988207522646 0.19993666427095258 C 0.17839479547819714 0.20111366752952128 0.1784143152138697 0.21632810075434716 0.17822884291087454 0.2140607033737771 C 0.1784143152138697 0.21632810075434716 0.18083610861119254 0.22823582695979439 0.18063554971116808 0.22714543283779307" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.18063554971116808 0.22714543283779307 C 0.18015747550143324 0.22613303833955 0.17435672014443418 0.21281870147322565 0.17489865919435021 0.2149966988588765 C 0.17435672014443418 0.21281870147322565 0.17406841627199457 0.1998438613225748 0.17413228111217577 0.20100946420998264" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17413228111217577 0.20100946420998264 C 0.17406935941398238 0.20025649275911767 0.1732054545618033 0.19054003271339034 0.17337722073385528 0.1919738067996028 C 0.1732054545618033 0.19054003271339034 0.17196224257369347 0.18312337254008584 0.17207108704755206 0.1838041751754333" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17207108704755206 0.1838041751754333 C 0.1719422802533402 0.1829114137434521 0.17075552324550716 0.17298965701149002 0.17052540551700984 0.17309103799165884 C 0.17075552324550716 0.17298965701149002 0.17519142431222906 0.18337898386521972 0.1748324997895199 0.18258760341340735" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3396161769217372,0.14633598263922498) rotate(0) scale(1,1) translate(-0.17301747436630838,-0.1665549443625739)"><path d="M 0.1759473002932622 0.173899787346787 C 0.1760920517244373 0.17491893022294946 0.1778336450081524 0.18812255717244952 0.1776843174673632 0.18612950186073685 C 0.1778336450081524 0.18812255717244952 0.17774380689234667 0.19879036352288934 0.17773923078273257 0.19781645108733914" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17773923078273257 0.19781645108733914 C 0.17765603304061203 0.19919858915293942 0.17677664654920222 0.21683280671977456 0.1767408578772862 0.21440210787454247 C 0.17677664654920222 0.21683280671977456 0.1782876812597617 0.22803339800975603 0.17816869484572512 0.22698483723012422" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17816869484572512 0.22698483723012422 C 0.1778018976784321 0.2260792201370772 0.17329516627681768 0.2139962101381576 0.17376712883820902 0.2161174321135599 C 0.17329516627681768 0.2139962101381576 0.17239997871493076 0.20031456864294114 0.1725051441090291 0.20153017352529642" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.1725051441090291 0.20153017352529642 C 0.17246149588040652 0.20040813631260537 0.17198301458894177 0.1850508982622594 0.1719813653655581 0.18806572697300383 C 0.17198301458894177 0.1850508982622594 0.17257023224163934 0.1634594374983099 0.1725249347896331 0.1653522289963633" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.1725249347896331 0.1653522289963633 C 0.17268443892185908 0.16556762920182996 0.17472418150164737 0.16864932799116533 0.17443898437634495 0.16793703146196334 C 0.17472418150164737 0.16864932799116533 0.17607299328633863 0.1743966836705223 0.1759473002932622 0.173899787346787" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.33734345282867095,0.14635360142269319) rotate(0) scale(1,1) translate(-0.19551282657519264,-0.15725534279570835)"><path d="M 0.1958108277546985 0.22262095008111574 C 0.19556867129864494 0.22082680902009771 0.1926387047215027 0.19818480537526192 0.19290495028205593 0.2010912573488994 C 0.1926387047215027 0.19818480537526192 0.19259179192356018 0.18663121548484657 0.19261588102805985 0.18774352639746603" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.19261588102805985 0.18774352639746603 C 0.1926291675157583 0.18678461682173444 0.19285914816889954 0.17359903291546822 0.192775318880441 0.1762366114886869 C 0.19285914816889954 0.17359903291546822 0.1936923752903224 0.15441391452135456 0.1936218324895623 0.15609258351884167" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.1936218324895623 0.15609258351884167 C 0.1937705351484707 0.15602138826860823 0.19571219594663156 0.1552324403471676 0.1954062643964631 0.15523824051604046 C 0.19571219594663156 0.1552324403471676 0.1974502399828436 0.15608837657372804 0.19729301109158356 0.15602298149236746" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.19729301109158356 0.15602298149236746 C 0.1973636240658457 0.1576926491921826 0.1982212946125289 0.17871062004257643 0.1981403667827293 0.176058993890149 C 0.1982212946125289 0.17871062004257643 0.1982744599047161 0.18882445377410872 0.19826414504917864 0.18784249532149644" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.19826414504917864 0.18784249532149644 C 0.198233650642417 0.18900672396161589 0.19769376906016561 0.20471144356623155 0.19789821216803896 0.20181323900292994 C 0.19769376906016561 0.20471144356623155 0.1956368790535868 0.22435492600429788 0.1958108277546985 0.22262095008111574" fill="none" stroke="#000000" stroke-width="0.001"/>
</g></g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB