いい、そこを切り分けてくれたの大きい。
今話している「詳細度」は 意味の細かさ じゃなくて、
同じ “目” をどれくらいリッチな幾何で表現するか という 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(リッチ)
      具体的なプリミティブ構成表を作る、いく?