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,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1">
<g transform="translate(0.33323901007843065,0.22510377835095385) rotate(0) scale(1,1) translate(-0.0562503924684768,-0.06022872118377538)"><path d="M 0.053121123711480187 0.05800574300752832 C 0.05328906937384727 0.05803612907385957 0.05541710523720883 0.058511068257115134 0.05513647165988516 0.058370375803503384 C 0.05541710523720883 0.058511068257115134 0.05666506295087081 0.059949291718307006 0.05648872663936426 0.059694052450869284 C 0.05666506295087081 0.059949291718307006 0.057316155794513705 0.061578179892913275 0.057252507397963746 0.06143324701275604" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.057252507397963746 0.06143324701275604 C 0.05683870338023671 0.06331174635370707 0.051940848946730074 0.09259884075260978 0.052286859185239294 0.08397523910416838 C 0.051940848946730074 0.09259884075260978 0.05316817831507092 0.17166156910154332 0.0531003845358531 0.16491646679405295" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.0531003845358531 0.16491646679405295 C 0.051524933526716 0.16374597664677557 0.03157753230446926 0.14828470477406389 0.03419497242620791 0.1508705850267243 C 0.03157753230446926 0.14828470477406389 0.01999553594740469 0.1307610891087885 0.02169110307498924 0.13388590376212814 C 0.01999553594740469 0.1307610891087885 0.012747403611108378 0.11008232340611622 0.013848166895193336 0.11337280918664862 C 0.012747403611108378 0.11008232340611622 0.00837213522637301 0.09171326310027107 0.008481943665969738 0.09440007439573936 C 0.00837213522637301 0.09171326310027107 0.013720272929658389 0.07934264083404416 0.0125304656200326 0.08113107364102917 C 0.013720272929658389 0.07934264083404416 0.023612061861599774 0.0722561979678267 0.022759631381479222 0.0729388807119192" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.022759631381479222 0.0729388807119192 C 0.02394650927948301 0.07233110351104845 0.039532290518358104 0.06440112615943763 0.03700216615752469 0.0656455543014702 C 0.039532290518358104 0.06440112615943763 0.054464370174309815 0.05736909206636649 0.053121123711480187 0.05800574300752832" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.30537375641031694,0.24570013460656276) rotate(0) scale(1,1) translate(-0.03935448257433991,-0.07209276069361464)"><path d="M 0.06406972830982996 0.15618415004828332 C 0.0629152115896045 0.15294524375416982 0.04649732426130092 0.1114409084857285 0.05021552766712453 0.11731727451892131 C 0.04649732426130092 0.1114409084857285 0.016887600754348416 0.08303029791089042 0.01945128743994658 0.08566775764996971" fill="none" stroke="none" stroke-width="0"/>
<path d="M 0.01945128743994658 0.08566775764996971 C 0.019957625719517598 0.08807104268436868 0.027621688634014287 0.119175427728492 0.025527346794798775 0.11450717806275724 C 0.027621688634014287 0.119175427728492 0.04779525463678535 0.14515983463758064 0.04458338951053275 0.1416867536387868 C 0.04779525463678535 0.14515983463758064 0.06569358987643806 0.15739226641574136 0.06406972830982996 0.15618415004828332" fill="none" stroke="#000000" stroke-width="0.001"/>
</g></svg>

After

Width:  |  Height:  |  Size: 3.1 KiB