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,42 @@
<?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.11344159583471114) rotate(0) scale(1,1) translate(-0.04633367086839623,-0.13069322252871968)"><path d="M 0.012834660110515657 0.12466710458109621 C 0.01127256700358278 0.12504022353737723 0.0014425702273404444 0.12581360162588934 0.0034621014689183993 0.12690581831878234 C 0.0014425702273404444 0.12581360162588934 0.00026003452640285 0.11664846877456411 0.0007174726610479285 0.11811380442373814" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.0007174726610479285 0.11811380442373814 C -0.0008446204458849467 0.11848692338001916 -0.010674617222127277 0.11926030146853127 -0.008655085980549322 0.12035251816142428 C -0.010674617222127277 0.11926030146853127 -0.011857152923064879 0.11009516861720606 -0.0113997147884198 0.11156050426638009" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.0113997147884198 0.11156050426638009 C -0.012961807895352674 0.11193362322266111 -0.022791804671595004 0.11270700131117321 -0.02077227343001705 0.11379921800406623 C -0.022791804671595004 0.11270700131117321 -0.02397434037253261 0.103541868459848 -0.02351690223788753 0.10500720410902203" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.02351690223788753 0.10500720410902203 C -0.025078995344820394 0.10538032306530305 -0.034908992121062674 0.10615370115381516 -0.03288946087948472 0.10724591784670817 C -0.034908992121062674 0.10615370115381516 -0.0360915278220003 0.09698856830248995 -0.035634089687355215 0.09845390395166398" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.035634089687355215 0.09845390395166398 C -0.037196182794288095 0.098827022907945 -0.04702617957053045 0.0996004009964571 -0.045006648328952494 0.10069261768935012 C -0.04702617957053045 0.0996004009964571 -0.04820871527146805 0.09043526814513189 -0.04775127713682297 0.09190060379430592" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.04775127713682297 0.09190060379430592 C -0.049313370243755844 0.09227372275058694 -0.059143367019998165 0.09304710083909905 -0.05712383577842021 0.09413931753199206 C -0.059143367019998165 0.09304710083909905 -0.060325902720935784 0.08388196798777382 -0.0598684645862907 0.08534730363694785" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.0598684645862907 0.08534730363694785 C -0.059547318625403085 0.08481282700340287 -0.057299296899189806 0.08107149056858802 -0.05794158882096503 0.08214044383567798 C -0.057299296899189806 0.08107149056858802 -0.055693567094751775 0.0783991074008631 -0.05601471305563938 0.07893358403440809" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.05601471305563938 0.07893358403440809 C -0.05561079924780891 0.08048799912250629 -0.051678747620707774 0.0895304501337386 -0.05359123020865652 0.08826007456299727 C -0.051678747620707774 0.0895304501337386 -0.043031248747828627 0.08627179794149925 -0.0445398175279469 0.08655583745885612" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.0445398175279469 0.08655583745885612 C -0.044135903720116415 0.08811025254695432 -0.04020385209301526 0.09715270355818661 -0.04211633468096402 0.09588232798744528 C -0.04020385209301526 0.09715270355818661 -0.031556353220136064 0.09389405136594728 -0.03306492200025434 0.09417809088330413" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.03306492200025434 0.09417809088330413 C -0.032661008192423874 0.09573250597140233 -0.028728956565322792 0.10477495698263464 -0.030641439153271534 0.10350458141189331 C -0.028728956565322792 0.10477495698263464 -0.02008145769244361 0.10151630479039528 -0.021590026472561884 0.10180034430775214" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.021590026472561884 0.10180034430775214 C -0.021186112664731405 0.10335475939585034 -0.01725406103763027 0.11239721040708266 -0.01916654362557902 0.11112683483634132 C -0.01725406103763027 0.11239721040708266 -0.008606562164751112 0.10913855821484329 -0.010115130944869384 0.10942259773220016" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.010115130944869384 0.10942259773220016 C -0.009711217137038904 0.11097701282029836 -0.005779165509937747 0.12001946383153067 -0.0076916480978865 0.11874908826078934 C -0.005779165509937747 0.12001946383153067 0.0028683333629414094 0.11676081163929133 0.0013597645828231364 0.11704485115664819" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.0013597645828231364 0.11704485115664819 C 0.0017636783906536148 0.11859926624474638 0.00569573001775476 0.1276417172559787 0.0037832474298060068 0.12637134168523736 C 0.00569573001775476 0.1276417172559787 0.014343228890633932 0.12438306506373936 0.012834660110515657 0.12466710458109621" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3373434528286707,0.11344159583471114) rotate(0) scale(1,1) translate(-0.04633367086839623,-0.13069322252871968)"><path d="M 0.00520496776030785 0.1331067804030176 C 0.004046885218182011 0.13373383824262453 -0.003574918661531827 0.13643263556612212 -0.0017435274924471847 0.1368691274406591 C -0.003574918661531827 0.13643263556612212 -0.006456687881158807 0.12942427944165188 -0.005783379254200004 0.13048782915579576" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.005783379254200004 0.13048782915579576 C -0.006941461796325843 0.1311148869954027 -0.01456326567603969 0.13381368431890028 -0.012731874506955041 0.13425017619343727 C -0.01456326567603969 0.13381368431890028 -0.01744503489566671 0.12680532819443005 -0.0167717262687079 0.12786887790857393" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.0167717262687079 0.12786887790857393 C -0.01792980881083374 0.12849593574818086 -0.02555161269054757 0.1311947330716785 -0.023720221521462925 0.13163122494621546 C -0.02555161269054757 0.1311947330716785 -0.02843338191017456 0.12418637694720823 -0.027760073283215756 0.12524992666135212" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.027760073283215756 0.12524992666135212 C -0.028918155825341595 0.12587698450095902 -0.03653995970505542 0.12857578182445661 -0.03470856853597078 0.1290122736989936 C -0.03653995970505542 0.12857578182445661 -0.039421728924682445 0.12156742569998638 -0.038748420297723636 0.12263097541413027" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.038748420297723636 0.12263097541413027 C -0.03990650283984948 0.12325803325373719 -0.04752830671956332 0.12595683057723478 -0.04569691555047867 0.12639332245177176 C -0.04752830671956332 0.12595683057723478 -0.05041007593919034 0.11894847445276453 -0.04973676731223153 0.12001202416690843" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.04973676731223153 0.12001202416690843 C -0.05089484985435737 0.12063908200651534 -0.05851665373407121 0.12333787933001296 -0.056685262564986565 0.12377437120454993 C -0.05851665373407121 0.12333787933001296 -0.061398422953698226 0.1163295232055427 -0.06072511432673942 0.11739307291968659" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.06072511432673942 0.11739307291968659 C -0.06058418056126046 0.11690157847033042 -0.05959764420290779 0.11346111732483724 -0.059879511733865694 0.11444410622354959 C -0.05959764420290779 0.11346111732483724 -0.058892975375513065 0.11100364507805639 -0.05903390914099201 0.11149513952741257" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.05903390914099201 0.11149513952741257 C -0.05838408947494636 0.11264060498311582 -0.053350577897459776 0.11896825561928775 -0.05513499114471811 0.11836793226163206 C -0.053350577897459776 0.11896825561928775 -0.04719283607622935 0.11455193757529918 -0.04832742965744203 0.11509707967334673" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.04832742965744203 0.11509707967334673 C -0.04767760999139638 0.11624254512904998 -0.04264409841390978 0.12257019576522193 -0.04442851166116812 0.12196987240756624 C -0.04264409841390978 0.12257019576522193 -0.036486356592679334 0.11815387772123336 -0.03762095017389202 0.11869901981928091" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.03762095017389202 0.11869901981928091 C -0.03697113050784637 0.11984448527498416 -0.03193761893035979 0.1261721359111561 -0.033722032177618114 0.12557181255350042 C -0.03193761893035979 0.1261721359111561 -0.02577987710912939 0.12175581786716753 -0.026914470690342064 0.12230095996521509" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.026914470690342064 0.12230095996521509 C -0.026264651024296412 0.12344642542091834 -0.021231139446809832 0.1297740760570903 -0.02301555269406816 0.1291737526994346 C -0.021231139446809832 0.1297740760570903 -0.015073397625579426 0.12535775801310167 -0.016207991206792102 0.12590290011114924" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.016207991206792102 0.12590290011114924 C -0.01555817154074645 0.1270483655668525 -0.010524659963259858 0.13337601620302447 -0.012309073210518192 0.13277569284536878 C -0.010524659963259858 0.13337601620302447 -0.004366918142029418 0.1289596981590359 -0.0055015117232421 0.12950484025708345" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.0055015117232421 0.12950484025708345 C -0.004851692057196456 0.13065030571278669 0.00018181952029008462 0.13697795634895862 -0.001602593726968238 0.13637763299130293 C 0.00018181952029008462 0.13697795634895862 0.0063395613415205155 0.13256163830497003 0.005204967760307836 0.1331067804030176" fill="none" stroke="#000000" stroke-width="0.001"/>
</g><g transform="translate(0.3373434528286707,0.11344159583471114) rotate(0) scale(1,1) translate(-0.04633367086839623,-0.13069322252871968)"><path d="M 0.0168354802512069 0.11460264040576162 C 0.015519022430243206 0.11456664715344048 0.007568947985999443 0.11309297225539795 0.008936733325424738 0.11438668089183478 C 0.007568947985999443 0.11309297225539795 0.008577440696193527 0.10558267320302496 0.008628768214655129 0.10684038858714065" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.008628768214655129 0.10684038858714065 C 0.007312310393691428 0.1068043953348195 -0.0006377640505523818 0.10533072043677695 0.000730021288872923 0.10662442907321379 C -0.0006377640505523818 0.10533072043677695 0.0003707286596416962 0.09782042138440396 0.00042205617810330004 0.09907813676851965" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.00042205617810330004 0.09907813676851965 C -0.0008944016428603918 0.09904214351619851 -0.008844476087104145 0.09756846861815602 -0.0074766907476788505 0.09886217725459284 C -0.008844476087104145 0.09756846861815602 -0.007835983376910069 0.090058169565783 -0.0077846558584484665 0.09131588494989869" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.0077846558584484665 0.09131588494989869 C -0.009101113679412161 0.09127989169757755 -0.01705118812365593 0.08980621679953504 -0.01568340278423063 0.09109992543597187 C -0.01705118812365593 0.08980621679953504 -0.016042695413461882 0.08229591774716201 -0.015991367895000275 0.0835536331312777" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.015991367895000275 0.0835536331312777 C -0.017307825715963975 0.08351763987895655 -0.025257900160207774 0.082043964980914 -0.023890114820782467 0.08333767361735084 C -0.025257900160207774 0.082043964980914 -0.024249407450013725 0.07453366592854099 -0.024198079931552118 0.07579138131265668" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.024198079931552118 0.07579138131265668 C -0.025514537752515807 0.07575538806033555 -0.03346461219675954 0.07428171316229303 -0.03209682685733425 0.07557542179872986 C -0.03346461219675954 0.07428171316229303 -0.03245611948656544 0.06677141410991992 -0.03240479196810384 0.06802912949403563" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.03240479196810384 0.06802912949403563 C -0.03203699252226999 0.06767394969781362 -0.02946239640143306 0.06518769112425955 -0.03019799529310075 0.06589805071670359 C -0.02946239640143306 0.06518769112425955 -0.02762339917226386 0.06341179214314945 -0.0279911986180977 0.06376697193937146" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.0279911986180977 0.06376697193937146 C -0.028001171007275068 0.06508388395619083 -0.026805847429014557 0.07308054594213187 -0.028051032953161907 0.07166844404028769 C -0.026805847429014557 0.07308054594213187 -0.01926492755988889 0.07233477323546136 -0.020520085473213608 0.07223958335043655" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.020520085473213608 0.07223958335043655 C -0.02053005786239098 0.07355649536725592 -0.019334734284130465 0.08155315735319689 -0.02057991980827783 0.08014105545135272 C -0.019334734284130465 0.08155315735319689 -0.011793814415004692 0.0808073846465264 -0.013048972328329425 0.08071219476150159" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.013048972328329425 0.08071219476150159 C -0.013058944717506796 0.08202910677832094 -0.01186362113924631 0.09002576876426191 -0.013108806663393653 0.08861366686241774 C -0.01186362113924631 0.09002576876426191 -0.004322701270120653 0.08927999605759145 -0.0055778591834453675 0.08918480617256663" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M -0.0055778591834453675 0.08918480617256663 C -0.005587831572622733 0.09050171818938599 -0.004392507994362211 0.09849838017532693 -0.005637693518509561 0.09708627827348276 C -0.004392507994362211 0.09849838017532693 0.003148411874763447 0.09775260746865642 0.0018932539614387317 0.09765741758363161" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.0018932539614387317 0.09765741758363161 C 0.001883281572261358 0.09897432960045098 0.0030786051505218405 0.10697099158639198 0.0018334196263744898 0.1055588896845478 C 0.0030786051505218405 0.10697099158639198 0.010619525019647563 0.10622521887972149 0.009364367106322838 0.10613002899469667" fill="none" stroke="#000000" stroke-width="0.001"/>
<path d="M 0.009364367106322838 0.10613002899469667 C 0.009354394717145461 0.10744694101151601 0.010549718295405923 0.1154436029974569 0.009304532771258582 0.11403150109561275 C 0.010549718295405923 0.1154436029974569 0.018090638164531603 0.11469783029078644 0.016835480251206885 0.11460264040576162" fill="none" stroke="#000000" stroke-width="0.001"/>
</g></svg>

After

Width:  |  Height:  |  Size: 14 KiB