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 @@
id: 胸郭腹板
original_key: 胸郭腹板
resource: 胴体
morph_x: 1
morph_y: 1
variants:
- x: 0
y: 0
file: x0y0.svg
fields:
- name: 腹板
- name: 縦線
joints:
- position: [
0.5000000158677831,
0.5526169508801205
]

View File

@@ -0,0 +1,15 @@
<?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.16513021119802657) rotate(0) scale(1,1) translate(-0.5000000158677831,-0.5162142508926452)"><path d="M 0.5000000158677831 0.558642918051714 C 0.5010956315538182 0.559104501365569 0.51043762719035 0.5623797133578695 0.5087649413560636 0.5623355845625541 C 0.51043762719035 0.5623797133578695 0.5139585726903255 0.5585784938956978 0.5133815025420742 0.5589959484142374" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.5133815025420742 0.5589959484142374 C 0.5129848220802024 0.5582631291978591 0.5075062131100881 0.5491683707588887 0.5086213369996124 0.5502021178176979 C 0.5075062131100881 0.5491683707588887 0.49928157244013066 0.5462900558660962 0.5000000158677831 0.5465909837085271" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.5000000158677831 0.5465909837085271 C 0.49928157244013066 0.546891911550958 0.49026357084642946 0.5512358648765071 0.49137869473595375 0.5502021178176979 C 0.49026357084642946 0.5512358648765071 0.48622184873162 0.5597287676306156 0.4866185291934918 0.5589959484142374" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.4866185291934918 0.5589959484142374 C 0.48719559934174317 0.559413402932777 0.49290777621378906 0.5622914557672386 0.49123509037950264 0.5623355845625541 C 0.49290777621378906 0.5622914557672386 0.5010956315538182 0.5581813347378589 0.5000000158677831 0.558642918051714" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3373434528286707,0.20153291118550193) rotate(0) scale(1,1) translate(-0.011152769902399133,-0.011152769902399133)"><path d="M 0.010133122315786119 0.005470866761548204 C 0.010303063580221622 0.005413522769234768 0.011492652431270137 0.005126802807667589 0.011152769902399133 0.005126802807667589 C 0.011492652431270137 0.005126802807667589 0.012342358753447639 0.0055282107538616385 0.012172417489012138 0.0054708667615482025" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.012172417489012138 0.0054708667615482025 C 0.012131996680953291 0.00550777813885488 0.011640777950030162 0.0060325209617473514 0.011687367792305984 0.005913803289228334 C 0.011640777950030162 0.0060325209617473514 0.011607170347485311 0.0069772851269887535 0.011613339381702286 0.006895478831776413" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.011613339381702286 0.006895478831776413 C 0.011613339381702286 0.00725025308766164 0.011613339381702286 0.01186231841416958 0.011613339381702286 0.01115276990239913 C 0.011613339381702286 0.01186231841416958 0.011613339381702286 0.015764835228907065 0.011613339381702286 0.015410060973021838" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.011613339381702286 0.015410060973021838 C 0.011625426226556065 0.015506689147221987 0.011857913098423432 0.016780750222936992 0.01175838151994763 0.01656959906342363 C 0.011857913098423432 0.016780750222936992 0.012895163057033933 0.0180583978724954 0.01280771832341191 0.017943874887182187" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.01280771832341191 0.017943874887182187 C 0.012531893586576446 0.017816352036693038 0.010601120428728206 0.0171787377842473 0.011152769902399133 0.0171787377842473 C 0.010601120428728206 0.0171787377842473 0.009221996744550888 0.018071397737671337 0.009497821481386351 0.017943874887182187" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.009497821481386351 0.017943874887182187 C 0.009585266215008374 0.017829351901868976 0.01064668986332643 0.016358447903910268 0.010547158284850628 0.01656959906342363 C 0.01064668986332643 0.016358447903910268 0.010704287267949749 0.015313432798821703 0.01069220042309597 0.015410060973021852" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.01069220042309597 0.015410060973021852 C 0.01069220042309597 0.015055286717136625 0.01069220042309597 0.010443221390628683 0.01069220042309597 0.011152769902399136 C 0.01069220042309597 0.010443221390628683 0.01069220042309597 0.0065407045758911955 0.01069220042309597 0.006895478831776422" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.01069220042309597 0.006895478831776422 C 0.010686031388878995 0.006813672536564082 0.010571582170216457 0.005795085616709323 0.010618172012492278 0.0059138032892283405 C 0.010571582170216457 0.005795085616709323 0.010092701507727272 0.0054339553842415265 0.010133122315786119 0.005470866761548204" fill="none" stroke="#000000" stroke-width="0.001"/>
</g></svg>

After

Width:  |  Height:  |  Size: 4.5 KiB