いい、そこを切り分けてくれたの大きい。
今話している「詳細度」は 意味の細かさ じゃなくて、
同じ “目” をどれくらいリッチな幾何で表現するか という LOD だね。
ここは OS として、かなりシンプルに設計できるよ。
1. 方針:意味は固定、幾何だけ段階的に変える
- 意味:
data-part="eye"は常に同じ - 変わるのは「何本の線/何本のベジェで描くか」だけ
- つまり LOD は “幾何表現の解像度” として管理する
2. SVG 側のルール案
① data-lod で詳細度を明示する
<g id="layer-face" data-role="face">
<!-- LOD1: 直線3本 -->
<path id="eye-left-lod1"
data-part="eye" data-side="left" data-lod="1" data-geom="line-3"
d="M480 250 L495 252 L480 254" />
<!-- LOD2: 直線4本 -->
<path id="eye-left-lod2"
data-part="eye" data-side="left" data-lod="2" data-geom="line-4"
d="M478 250 L488 252 L498 252 L508 250" />
<!-- LOD3: ベジェ2本 -->
<path id="eye-left-lod3"
data-part="eye" data-side="left" data-lod="3" data-geom="bezier-2"
d="M478 250 Q493 245 508 250
M478 252 Q493 247 508 252" />
</g>
- 意味レイヤー:
data-part="eye"は共通 - 詳細度:
data-lod="1|2|3" - 幾何タイプ:
data-geom="line-3" / "bezier-2"など
3. OS 側の運用イメージ
- OS は 同じ意味パーツに対して複数LODを生成できる
- 構造SVGのポリシーは2通り考えられる:
A. 1ファイル1LOD方式
- 生成時に「LOD=2 の構造SVGを出す」と決める
- そのLODだけを書き出す
- シンプルで扱いやすい
B. 1ファイル多LOD方式
- 同じ
data-part="eye"に対して LOD1〜3 を全部入れる - 下流の AI / レンダラが
data-lodを見て選ぶ - 実験・比較には向く
どちらも仕様としては成立するけど、
OS標準は A(1ファイル1LOD)にして、Bは拡張にするのがきれいだと思う。
4. メタデータとの橋渡し
<metadata id="os-semantic">
{
"lod": {
"face": 2,
"body": 1,
"cloth": 1
},
"geom_policy": {
"eye": "bezier-2",
"mouth": "line-3"
}
}
</metadata>
- 「この構造SVGは顔LOD=2で生成した」
- 「目はベジェ2本ポリシーで描いている」
を後から辿れる。
5. 要するに
- 個性(見え方)=座標や比率の偏り
- 詳細度(LOD)=その偏りを
- 直線3本で描くか
- ベジェ4本で描くか
という 幾何表現の解像度
OS としては:
data-part:意味data-lod:幾何の解像度data-geom:プリミティブの種類(line-n / bezier-n)
この3つを軸にすれば、
「目を直線3本で表現する」「ベジェ4本で表現する」を
きれいに管理できる。
次、やるなら:
- 目・口・顔輪郭について
- LOD1(最小線数)
- LOD2(標準)
- LOD3(リッチ)
の 具体的なプリミティブ構成表を作る、いく?