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,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1">
<g transform="translate(0.33734345282867056,0.2752572326331468) rotate(0) scale(1,1) translate(-0.01919286476298845,-0.019735317662897982)"><path d="M 0.01919286476298845 0.026427532471739314 C 0.01899712013627538 0.026331503332147017 0.016539209556074033 0.024974826161101384 0.01684392924243159 0.02527518279663174 C 0.016539209556074033 0.024974826161101384 0.015571506340923354 0.022203768867999015 0.015536228526697796 0.02282325284537505 C 0.015571506340923354 0.022203768867999015 0.017458880565904337 0.017167171119137473 0.017267263013138297 0.017841375068119305 C 0.017458880565904337 0.017167171119137473 0.017996105972377788 0.014302220470996854 0.017835639159890275 0.014732805457593064 C 0.017996105972377788 0.014302220470996854 0.019305966896579946 0.012502817709912415 0.019192864762988433 0.012674355228964772" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.019192864762988433 0.012674355228964772 C 0.019305966896579946 0.012845892748017129 0.020710557178574094 0.015163390444189257 0.02055009036608658 0.014732805457593047 C 0.020710557178574094 0.015163390444189257 0.021310084065604612 0.01851557901710113 0.021118466512838573 0.017841375068119298 C 0.021310084065604612 0.01851557901710113 0.02288477881350462 0.023442736822751074 0.02284950099927906 0.02282325284537504 C 0.02288477881350462 0.023442736822751074 0.02123708059718773 0.02557553943216207 0.02154180028354528 0.025275182796631716 C 0.02123708059718773 0.02557553943216207 0.018997120136275383 0.026523561611331615 0.01919286476298845 0.026427532471739314" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3373434528286707,0.27834516781562385) rotate(0) scale(1,1) translate(-0.01919286476298845,-0.0207756729228991)"><path d="M 0.01919286476298845 0.023884743351338618 C 0.019056783098497523 0.023823747094186557 0.01738989473549356 0.022763245800041798 0.017559884789097313 0.023152788265513893 C 0.01738989473549356 0.022763245800041798 0.017136202791292836 0.01864812370609132 0.017152984119743444 0.019210233765673487 C 0.017136202791292836 0.01864812370609132 0.017423774703523853 0.01594550312924356 0.017358508847690024 0.016407467550527875 C 0.017423774703523853 0.01594550312924356 0.018089037382690933 0.013326545614157139 0.0179361743897494 0.01366666071026172 C 0.018089037382690933 0.013326545614157139 0.019297588960758352 0.012214371871190491 0.019192864762988433 0.012326086397272893" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.019192864762988433 0.012326086397272893 C 0.019297588960758352 0.012437800923355294 0.020602418129169003 0.014006775806366287 0.020449555136227468 0.013666660710261706 C 0.020602418129169003 0.014006775806366287 0.021092486534120675 0.016869431971812184 0.021027220678286846 0.01640746755052787 C 0.021092486534120675 0.016869431971812184 0.021215964077782812 0.01977234382525565 0.02123274540623342 0.019210233765673483 C 0.021215964077782812 0.01977234382525565 0.020655854683275802 0.02354233073098598 0.02082584473687955 0.023152788265513886 C 0.020655854683275802 0.02354233073098598 0.019056783098497527 0.02394573960849068 0.01919286476298845 0.023884743351338618" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3373434528286707,0.27139456574010246) rotate(0) scale(1,1) translate(-0.022933258138484177,-0.022933258138484177)"><path d="M 0.023905728821085947 0.02231591239838557 C 0.024006783079954082 0.022416785217864648 0.024109843397478844 0.02327937263064611 0.02414590924490179 0.02315358628218623 C 0.024109843397478844 0.02327937263064611 0.023326911017015242 0.02388132877138066 0.023472938652010576 0.023825348579904166 C 0.023326911017015242 0.02388132877138066 0.02224754998996244 0.02376936838842767 0.022393577624957774 0.023825348579904166 C 0.02224754998996244 0.02376936838842767 0.02168454118464362 0.023027799933726348 0.021720607032066568 0.02315358628218623 C 0.02168454118464362 0.023027799933726348 0.022061841714750542 0.022215039578906495 0.021960787455882407 0.02231591239838557 C 0.022061841714750542 0.022215039578906495 0.023095336585584467 0.0219431124484373 0.022933258138484174 0.0219431124484373 C 0.023095336585584467 0.0219431124484373 0.024006783079954082 0.022416785217864648 0.023905728821085947 0.02231591239838557 Z" fill="#cccccc" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3373434528286707,0.2754880484339874) rotate(0) scale(1,1) translate(-0.02456377814682995,-0.024563778146829942)"><path d="M 0.02470502661174586 0.024429220912080933 C 0.024740338727974837 0.024440434014976684 0.02484627507666177 0.02458620435262144 0.02484627507666177 0.02456377814682994 C 0.02484627507666177 0.02458620435262144 0.024669714495516883 0.0247095484844747 0.02470502661174586 0.02469833538157895 C 0.024669714495516883 0.0247095484844747 0.02438721756568506 0.0246871222786832 0.024422529681914038 0.02469833538157895 C 0.02438721756568506 0.0246871222786832 0.024281281216998123 0.024541351941038438 0.024281281216998123 0.02456377814682994 C 0.024281281216998123 0.024541351941038438 0.024457841798143014 0.024418007809185183 0.024422529681914038 0.024429220912080933 C 0.024457841798143014 0.024418007809185183 0.024740338727974837 0.024440434014976684 0.02470502661174586 0.024429220912080933 Z" fill="#cccccc" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3373434528286707,0.2784273467918402) rotate(0) scale(1,1) translate(-0.04481464761927567,-0.044322296567054956)"><path d="M 0.04671819237980382 0.044322296567054956 C 0.04681623032656325 0.04456248600562915 0.0457344363035854 0.04625208464516383 0.045991102980388845 0.04610363940838622 C 0.0457344363035854 0.04625208464516383 0.04338152558135904 0.045955194171608614 0.043638192258162484 0.04610363940838622 C 0.04338152558135904 0.045955194171608614 0.043009140805506954 0.04408210712848076 0.042911102858747524 0.044322296567054956 C 0.043009140805506954 0.04408210712848076 0.04513190507936367 0.043221366145495925 0.044814647619275644 0.043221366145495925 C 0.04513190507936367 0.043221366145495925 0.04681623032656325 0.04456248600562915 0.04671819237980382 0.044322296567054956 Z" fill="#cccccc" stroke="#000000" stroke-width="0.001"/>
</g></svg>

After

Width:  |  Height:  |  Size: 6.2 KiB