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,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1">
<g transform="translate(0.3162111684713726,0.08586243713995967) rotate(0) scale(1,1) translate(-0.14337612156732896,-0.14974815774481318)"><path d="M 0.14317137725915027 0.16387569941995161 C 0.1431317429191061 0.16412471966228054 0.14245202122595937 0.16726102076161806 0.14269576517862015 0.16686394232789872 C 0.14245202122595937 0.16726102076161806 0.13979331997227556 0.16874906447592983 0.14024644982722106 0.1686406406245836 C 0.13979331997227556 0.16874906447592983 0.13686112848555468 0.1679212845913927 0.137258206919274 0.16816502854405346 C 0.13686112848555468 0.1679212845913927 0.13533345043119874 0.16551160358003783 0.13548150862258915 0.1657157131926544" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.13548150862258915 0.1657157131926544 C 0.13524346336613322 0.16502745848162786 0.13246143021464313 0.15615608833577427 0.13262496554511796 0.15745665666033606 C 0.13246143021464313 0.15615608833577427 0.1337994453327777 0.14905602853360517 0.13351908465689105 0.15010889329791272 C 0.1337994453327777 0.14905602853360517 0.13651430131506057 0.1440019505196239 0.13598929365575782 0.14482227948864548 C 0.13651430131506057 0.1440019505196239 0.13999829191730628 0.14047204320008821 0.13981917656852413 0.14026494566965342 C 0.13999829191730628 0.14047204320008821 0.13800955447059676 0.14839931014059762 0.13813867784114378 0.14730744985386304 C 0.13800955447059676 0.14839931014059762 0.13845030587584956 0.15428301795946314 0.13826969612195997 0.15336726911046827 C 0.13845030587584956 0.15428301795946314 0.14071446831591816 0.15917213856759185 0.14030599488781897 0.15829643604180157 C 0.14071446831591816 0.15917213856759185 0.1434101591234279 0.16434063803479745 0.14317137725915027 0.16387569941995161" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3120109350754008,0.1012223238337305) rotate(0) scale(1,1) translate(-0.024452356684618076,-0.027256273054233456)"><path d="M 0.02762015224785631 0.02445014159806117 C 0.027538505647299743 0.024709604510902698 0.026217049871333668 0.02772755947384585 0.02664039304117751 0.027563696552159487 C 0.026217049871333668 0.02772755947384585 0.02208569751718332 0.026501231294222112 0.022540034209730175 0.026416496658297515 C 0.02208569751718332 0.026501231294222112 0.02107571260735565 0.028760846810334435 0.02118835273061523 0.02858051218325467" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.31025201740242486,0.09764449947346893) rotate(0) scale(1,1) translate(-0.024452356684618076,-0.027256273054233456)"><path d="M 0.027575163441274447 0.02451052498039342 C 0.02749179581704164 0.024764187385962446 0.02615993865403926 0.02771540426137022 0.02657475195048073 0.027554473847221705 C 0.02615993865403926 0.02771540426137022 0.022159785119943137 0.02651911683756192 0.022597403883976814 0.026441689950175592 C 0.022159785119943137 0.02651911683756192 0.02121715369025158 0.0286537553746645 0.021323326782076598 0.02848359649585766" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.30871903501716547,0.0939242590703728) rotate(0) scale(1,1) translate(-0.024452356684618076,-0.027256273054233456)"><path d="M 0.027588417419420704 0.025095394666454034 C 0.027487711046868212 0.025318502530635906 0.025983449959519248 0.027872488407426725 0.026379940948790797 0.027772689036636506 C 0.025983449959519248 0.027872488407426725 0.022417312305892112 0.02631488409387899 0.022830525548162114 0.026292987115936677 C 0.022417312305892112 0.02631488409387899 0.021303953415999825 0.02818065824327822 0.02142138204155077 0.028035452771944257" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3081081061284201,0.0900236887672505) rotate(0) scale(1,1) translate(-0.024452356684618076,-0.027256273054233456)"><path d="M 0.02725573610858555 0.025467879324594395 C 0.027160479241206563 0.025659206686337446 0.02576396493798217 0.02783894121029688 0.026112653700037725 0.02776380766551098 C 0.02576396493798217 0.02783894121029688 0.02271210937555642 0.02637590322637617 0.023071470963918907 0.02636948186202519 C 0.02271210937555642 0.02637590322637617 0.02169438494600198 0.02796347921903087 0.021800314639687898 0.02784086403772274" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3084728949577362,0.0861516436938132) rotate(0) scale(1,1) translate(-0.024452356684618076,-0.027256273054233456)"><path d="M 0.026819425779074257 0.025971205974049543 C 0.02673022660723961 0.02611976921390731 0.025464069124122416 0.02779565666022784 0.025749035717058485 0.027753964852342754 C 0.025464069124122416 0.02779565666022784 0.02311014784099538 0.02645656173361471 0.023399826663841414 0.026471507668670572 C 0.02311014784099538 0.02645656173361471 0.022178978441161457 0.027666539128589244 0.02227288984290607 0.027574613631672424" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.30965624029925654,0.08206282050617497) rotate(0) scale(1,1) translate(-0.024452356684618076,-0.027256273054233456)"><path d="M 0.02625510017734503 0.026422093657018326 C 0.026183117599119076 0.02652644242118342 0.02517879628695785 0.02769206931491979 0.025391309238633586 0.02767427882699945 C 0.02517879628695785 0.02769206931491979 0.023492979353228458 0.026613425889138807 0.0237049447572362 0.026635579512062406 C 0.023492979353228458 0.026613425889138807 0.022776289359982705 0.027472840005237434 0.022847724390540666 0.02740843535191628" fill="none" stroke="#000000" stroke-width="0.001"/>
</g></svg>

After

Width:  |  Height:  |  Size: 5.5 KiB