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,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1">
<g transform="translate(0.317739745606258,0.11889466917980429) rotate(0) scale(1,1) translate(-0.061780495912221296,-0.0594468243068542)"><path d="M 0.06637992415557262 0.06563478930146649 C 0.06620611959653404 0.06565960149485306 0.06379147837927962 0.06576388628123556 0.06429426944710964 0.06593253562210526 C 0.06379147837927962 0.06576388628123556 0.060017444832820926 0.0634175356767738 0.06034643134161237 0.06361099721103007" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.06034643134161237 0.06361099721103007 C 0.0598140800872952 0.06350739957731999 0.05287028425727779 0.06208191149609971 0.05395821628980631 0.06236782560650917 C 0.05287028425727779 0.06208191149609971 0.04673566617305883 0.05999771140941716 0.047291246951270176 0.060180027886116545" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.047291246951270176 0.060180027886116545 C 0.04721362735799686 0.05998922284797538 0.046162558842563185 0.057822059665266386 0.04635981183199045 0.05789036742842257 C 0.046162558842563185 0.057822059665266386 0.04480457768198907 0.05948283200322726 0.04492421107814302 0.05936033472824228" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.04492421107814302 0.05936033472824228 C 0.044808414377114886 0.059326419765886124 0.04325994861602366 0.058875832980374375 0.04353465066580546 0.058953355179968435 C 0.04325994861602366 0.058875832980374375 0.0414688811320078 0.05838646109587565 0.041627786480761465 0.05843006833311355" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.041627786480761465 0.05843006833311355 C 0.04166555625222288 0.05823967177644394 0.04215038298023335 0.05578592675327898 0.04208102373829846 0.05614530965307813 C 0.04215038298023335 0.05578592675327898 0.042491686854453634 0.05394848719239424 0.042460097383980155 0.05411747353552377" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.042460097383980155 0.05411747353552377 C 0.04281506911240073 0.05408264785268854 0.04747778285774676 0.05363367939582477 0.04671975812502704 0.05369956534150103 C 0.04747778285774676 0.05363367939582477 0.051959447180915976 0.053295781924567666 0.051556394176616824 0.05332684218740869" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.051556394176616824 0.05332684218740869 C 0.0521867088244637 0.05330748518158436 0.06006832370909532 0.053093987245064936 0.05912016995077931 0.053094558117516746 C 0.06006832370909532 0.053093987245064936 0.06325207838687806 0.053338777851359494 0.06293423927640893 0.05331999171798697" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.06293423927640893 0.05331999171798697 C 0.06308512646760839 0.053386903035580344 0.06501311528163714 0.05434821511577338 0.06474488557080241 0.05412292752910746 C 0.06501311528163714 0.05434821511577338 0.06627033832606108 0.05618181902705062 0.0661529958064258 0.05602344275797807" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.0661529958064258 0.05602344275797807 C 0.06624783593515464 0.05620468305019934 0.0674514422594901 0.05858498682702458 0.06729107735117192 0.05819832626463336 C 0.0674514422594901 0.05858498682702458 0.06814289948583321 0.06086878977684268 0.06807737470624388 0.06066336950667273" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.06807737470624388 0.06066336950667273 C 0.068078235443259 0.06092505346747567 0.06794624933786934 0.06421786201920747 0.06808770355042529 0.06380357703630798 C 0.06794624933786934 0.06421786201920747 0.06623760920600157 0.06578739032356304 0.06637992415557262 0.06563478930146649" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.31716380700753133,0.11709862663113163) rotate(0) scale(1,1) translate(-0.008532876177554964,-0.005607832739230756)"><path d="M 0.00514475497125913 0.002877450813809398 C 0.00553623192272231 0.002980150084859448 0.010379964216585678 0.004450763714837352 0.009842478388817293 0.004109842066409995 C 0.010379964216585678 0.004450763714837352 0.011740593780784977 0.00720673297231498 0.01159458490447977 0.006968510594937674" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.0105924091117854 0.004111436570109276 C -0.00994684202680749 0.004052410752442073 -0.0015341737517967627 0.003300294611744513 -0.002845604092050473 0.003403126758102836 C -0.0015341737517967627 0.003300294611744513 0.005810618226534924 0.0028336444851182804 0.005144754971259124 0.0028774508138094002" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.31716380700753133,0.11709862663113163) rotate(0) scale(1,1) translate(-0.008532876177554964,-0.005607832739230756)"><path d="M 0.006754741102550914 0.009007859763186396 C 0.006998541982991787 0.008949942367238917 0.010097253675844553 0.008455114038413883 0.009680351667841395 0.008312851011816641 C 0.010097253675844553 0.008455114038413883 0.01193066632615109 0.010915196504898032 0.011757565198588806 0.010715016082353309" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.006107023144912941 0.0038270822334418773 C -0.005636695822241911 0.00413619952293987 0.0006087184144280761 0.00796822116822984 -0.00046309527286057806 0.007536489707417798 C 0.0006087184144280761 0.00796822116822984 0.007356227467168531 0.009130473934500446 0.006754741102550908 0.009007859763186396" fill="none" stroke="#000000" stroke-width="0.001"/>
</g></svg>

After

Width:  |  Height:  |  Size: 5.4 KiB