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,41 @@
<?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.03193564947043487 0.030518859602013837 C 0.03156757300575297 0.03126889152895428 0.022733737853387437 0.029768827675073394 0.023101814318069337 0.030518859602013837 C 0.022733737853387437 0.029768827675073394 0.02825488482361589 0.02151847647872851 0.027518731894252097 0.02151847647872851 C 0.02825488482361589 0.02151847647872851 0.03156757300575297 0.03126889152895428 0.03193564947043487 0.030518859602013837 Z" fill="#cccccc" stroke="none" stroke-width="0"/>
</g><g id="お下げ">
<g transform="translate(0.3373434528286707,0.06806009361139365) rotate(0) scale(1,1) translate(-0.19551282657519264,-0.15529045777044517)"><path d="M 0.19551282657519264 0.25814272740180166 C 0.19534603190350763 0.2552744812661542 0.19319358637842954 0.21926061951436507 0.19351129051497243 0.22372377377403227 C 0.19319358637842954 0.21926061951436507 0.19154946747182008 0.20298996816177564 0.19170037693667796 0.2045848762857954" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.19170037693667796 0.2045848762857954 C 0.19163762845397958 0.20289264116759131 0.1909624456468312 0.18007592784100085 0.1909473951442972 0.1842780548673465 C 0.1909624456468312 0.18007592784100085 0.19195878195231855 0.15164946006150598 0.19188098296708614 0.15415935196964756" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.19188098296708614 0.15415935196964756 C 0.19218363660109503 0.15393269090612952 0.1961181338432104 0.1514394192074312 0.19551282657519264 0.1514394192074312 C 0.1961181338432104 0.1514394192074312 0.199447323817308 0.1543860130331656 0.19914467018329912 0.15415935196964756" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.19914467018329912 0.15415935196964756 C 0.19922246916853154 0.15666924387778913 0.20009330850862211 0.18848018189369214 0.20007825800608808 0.1842780548673465 C 0.20009330850862211 0.18848018189369214 0.199262527731009 0.20627711140399946 0.19932527621370738 0.2045848762857954" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.19932527621370738 0.2045848762857954 C 0.1991743667488495 0.20617978440981513 0.19719665849886991 0.22818692803369947 0.1975143626354128 0.22372377377403227 C 0.19719665849886991 0.22818692803369947 0.19534603190350763 0.2610109735374491 0.19551282657519264 0.25814272740180166" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3326696118309858,0.07011170116862092) rotate(0) scale(1,1) translate(-0.17214313748755586,-0.16165585602103322)"><path d="M 0.16860932132744558 0.16286507780244222 C 0.1690227693300489 0.16237213246888835 0.17407817548405316 0.15663687985220115 0.17357069735868547 0.15694973379979577 C 0.17407817548405316 0.15663687985220115 0.17479308895462237 0.1592909218172659 0.174699058831858 0.15911083043130667" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.174699058831858 0.15911083043130667 C 0.17471791275799778 0.16133246092278059 0.1749404727327511 0.1899533202422622 0.17492530594553532 0.18577039632899386 C 0.1749404727327511 0.1899533202422622 0.17487737313952315 0.21126721081232083 0.17488106027844716 0.20930591739052645" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17488106027844716 0.20930591739052645 C 0.17474805935286838 0.21139853443370188 0.1728949900553319 0.23837720279038055 0.17328504917150178 0.23441732190863163 C 0.1728949900553319 0.23837720279038055 0.16994329269381744 0.25869175181008697 0.17020035088440855 0.25682448797151347" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17020035088440855 0.25682448797151347 C 0.17014394781194778 0.25490949468791807 0.16944291121976907 0.22989235849354867 0.16952351401487922 0.23384456856836888 C 0.16944291121976907 0.22989235849354867 0.16920891762043733 0.20736075028244597 0.16923311734308671 0.2093979670736708" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.16923311734308671 0.2093979670736708 C 0.1690832371940182 0.20744023065572548 0.16738257255296085 0.18202738928572432 0.16743455555426429 0.1859051300583267 C 0.16738257255296085 0.18202738928572432 0.1687072184752107 0.1609450734477852 0.16860932132744558 0.16286507780244222" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.33086567066180317,0.07016536446291333) rotate(0) scale(1,1) translate(-0.17471347965485204,-0.16839727901127924)"><path d="M 0.17143308199295756 0.17334006114675074 C 0.17177726913436223 0.17268521369121465 0.17599683215638096 0.16500607928166816 0.1755633276898136 0.16548189168031768 C 0.17599683215638096 0.16500607928166816 0.1767244529169285 0.16780934741984285 0.17663513559176583 0.1676303123629563" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17663513559176583 0.1676303123629563 C 0.17656472390798622 0.16911246714768882 0.17564283291197477 0.18814177751947928 0.1757901953864104 0.18541616977974656 C 0.17564283291197477 0.18814177751947928 0.17478983510788196 0.20158105819474914 0.174866785898538 0.20033760523974894" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.174866785898538 0.20033760523974894 C 0.17470251583043672 0.20303910012880994 0.17229673357047615 0.23745520611078375 0.1728955450813227 0.23275554390848094 C 0.17229673357047615 0.23745520611078375 0.16724650632563395 0.25873171898062447 0.16768104776837925 0.25673355166738265" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.16768104776837925 0.25673355166738265 C 0.16779779090261543 0.25468519570030584 0.16926420783061474 0.2274536178601584 0.16908196537921347 0.23215328006246122 C 0.16926420783061474 0.2274536178601584 0.16993345650235966 0.19768629900452292 0.16986795718519457 0.20033760523974894" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.16986795718519457 0.20033760523974894 C 0.16988831977942448 0.19899836677799426 0.17024273538326692 0.18201694835760962 0.17011230831595334 0.1842667436986928 C 0.17024273538326692 0.18201694835760962 0.17154314646604124 0.17242950426742223 0.17143308199295756 0.17334006114675074" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.32893387565534427,0.0715745449366208) rotate(0) scale(1,1) translate(-0.17582728218728638,-0.17126228311857125)"><path d="M 0.17301102974025206 0.17665820397323162 C 0.17328479787779366 0.17611272362696417 0.17653187463660383 0.17027483830774506 0.1762962473907512 0.1701124398180222 C 0.17653187463660383 0.17027483830774506 0.17580041579879485 0.17931486468589608 0.1758385566904838 0.17860698584990578" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.1758385566904838 0.17860698584990578 C 0.1757540973526309 0.1795550293055196 0.174684564183563 0.19190684846287587 0.17482504463624896 0.18998350731727146 C 0.174684564183563 0.19190684846287587 0.17409677014341932 0.20266237728714928 0.17415279125825237 0.20168707959715867" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17415279125825237 0.20168707959715867 C 0.17395544904535878 0.20383526294478282 0.17117132949626582 0.23098652030580769 0.17178468470352937 0.2274652797686486 C 0.17117132949626582 0.23098652030580769 0.16637651577671989 0.2453150232326024 0.16679252877108985 0.2439419660430675" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.16679252877108985 0.2439419660430675 C 0.1669666207690572 0.24212127210692402 0.16912174947125577 0.2185600142107649 0.1688816327466979 0.22209363880934588 C 0.16912174947125577 0.2185600142107649 0.16973995419237498 0.19982554019765825 0.16967392946578444 0.20153847086009577" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.16967392946578444 0.20153847086009577 C 0.16974766247041426 0.20022820165263433 0.17083681721088123 0.18374188479665324 0.17055872552134227 0.18581524037055858 C 0.17083681721088123 0.18374188479665324 0.1732153884251612 0.17589511760678772 0.17301102974025206 0.17665820397323162" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3420172938263556,0.07011170116862092) rotate(0) scale(1,1) translate(-0.1720805899402084,-0.16165585602103322)"><path d="M 0.17561440610031862 0.16286507780244222 C 0.1757123032480837 0.16478508215709925 0.17673718887219642 0.1897828708309291 0.17678917187349985 0.1859051300583267 C 0.17673718887219642 0.1897828708309291 0.17484072993560892 0.21135570349161614 0.17499061008467745 0.2093979670736708" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17499061008467745 0.2093979670736708 C 0.1749664103620281 0.21143518386489565 0.17461961061777484 0.2377967786431891 0.174700213412885 0.23384456856836888 C 0.17461961061777484 0.2377967786431891 0.17396697347089488 0.25873948125510887 0.17402337654335565 0.25682448797151347" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17402337654335565 0.25682448797151347 C 0.17376631835276454 0.25495722413294 0.17054861914009253 0.2304574410268827 0.1709386782562624 0.23441732190863163 C 0.17054861914009253 0.2304574410268827 0.16920966622373823 0.20721330034735103 0.169342667149317 0.20930591739052645" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.169342667149317 0.20930591739052645 C 0.169338980010393 0.20734462396873207 0.16931358826944465 0.18158747241572554 0.16929842148222887 0.18577039632899386 C 0.16931358826944465 0.18158747241572554 0.169543522522046 0.15688919993983275 0.1695246685959062 0.15911083043130667" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.1695246685959062 0.15911083043130667 C 0.16961869871867058 0.15893073904534744 0.1711605081944464 0.15726258774739038 0.1706530300690787 0.15694973379979577 C 0.1711605081944464 0.15726258774739038 0.17602785410292193 0.1633580231359961 0.17561440610031862 0.16286507780244222" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3438212349955381,0.07016536446291333) rotate(0) scale(1,1) translate(-0.17443583605122104,-0.16839727901127924)"><path d="M 0.17771623371311548 0.17334006114675074 C 0.17782629818619916 0.17425061802607925 0.17916743445743322 0.186516539039776 0.17903700739011963 0.1842667436986928 C 0.17916743445743322 0.186516539039776 0.17930172111510834 0.20167684370150363 0.17928135852087843 0.20033760523974894" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17928135852087843 0.20033760523974894 C 0.17934685783804352 0.20298891147497497 0.18024959277826083 0.23685294226476403 0.18006735032685955 0.23215328006246122 C 0.18024959277826083 0.23685294226476403 0.1815850110719299 0.25878190763445946 0.18146826793769372 0.25673355166738265" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.18146826793769372 0.25673355166738265 C 0.18103372649494842 0.25473538435414084 0.17565495911390372 0.22805588170617813 0.17625377062475028 0.23275554390848094 C 0.17565495911390372 0.22805588170617813 0.17411825973943373 0.19763611035068795 0.174282529807535 0.20033760523974894" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.174282529807535 0.20033760523974894 C 0.17420557901687897 0.19909415228474875 0.17321175784522697 0.18269056204001385 0.1733591203196626 0.18541616977974656 C 0.17321175784522697 0.18269056204001385 0.1724437684305276 0.1661481575782238 0.17251418011430722 0.1676303123629563" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17251418011430722 0.1676303123629563 C 0.1726034974394699 0.16745127730606976 0.17401949248282678 0.1659577040789672 0.1735859880162594 0.16548189168031768 C 0.17401949248282678 0.1659577040789672 0.17806042085452015 0.17399490860228684 0.17771623371311548 0.17334006114675074" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.34575303000199686,0.0715745449366208) rotate(0) scale(1,1) translate(-0.17541252126519447,-0.17126228311857125)"><path d="M 0.17822877371222873 0.17665820397323162 C 0.17843313239713787 0.17742129033967552 0.18095916962067754 0.18788859594446392 0.18068107793113858 0.18581524037055858 C 0.18095916962067754 0.18788859594446392 0.1816396069913262 0.2028487400675572 0.18156587398669638 0.20153847086009577" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.18156587398669638 0.20153847086009577 C 0.18163189871328692 0.2032514015225333 0.18259828743034076 0.22562726340792685 0.1823581707057829 0.22209363880934588 C 0.18259828743034076 0.22562726340792685 0.18462136667935825 0.24576265997921098 0.1844472746813909 0.2439419660430675" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.1844472746813909 0.2439419660430675 C 0.18403126168702094 0.2425689088535326 0.17884176354168785 0.22394403923148953 0.1794551187489514 0.2274652797686486 C 0.17884176354168785 0.22394403923148953 0.17688966998133487 0.19953889624953453 0.17708701219422845 0.20168707959715867" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.17708701219422845 0.20168707959715867 C 0.1770309910793954 0.20071178190716807 0.17627427836354592 0.18806016617166704 0.17641475881623186 0.18998350731727146 C 0.17627427836354592 0.18806016617166704 0.1753167874241442 0.17765894239429197 0.1754012467619971 0.17860698584990578" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.1754012467619971 0.17860698584990578 C 0.17536310587030812 0.17789910701391548 0.17517918330758228 0.16995004132829936 0.17494355606172965 0.1701124398180222 C 0.17517918330758228 0.16995004132829936 0.17850254184977032 0.17720368431949907 0.17822877371222873 0.17665820397323162" fill="none" stroke="#000000" stroke-width="0.001"/>
</g></g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB