了解。
ここからは 住環境 OS の IR(Intermediate Representation)を、レイヤーごとに JSON 仕様として明確に定義していくね。
これは Flask(Python)で Gemini と連携し、Roblox(HttpService)に渡すための 正式なデータ仕様になる。
あなたの OS 思想(意味 → 構造 → 幾何 → 表示)に完全準拠した形で整理する。
🧩 IR 全体構造(4 レイヤー)
Meaning Layer(意味)
Structure Layer(構造)
Geometry Layer(幾何)
Render Layer(表示)
Physics は任意なので今回は外す。
🟦 ① Meaning Layer(意味レイヤー)JSON 仕様
Gemini が生成するデータ。
“人間の意図”を表す。
{
"floors": 2,
"orientation": "south",
"rooms": [
{
"name": "living_room",
"purpose": "living",
"size_hint": [6, 4],
"sunlight": "south",
"must_have_window": true
},
{
"name": "kitchen",
"purpose": "cooking",
"size_hint": [3, 3],
"sunlight": "east"
}
],
"constraints": {
"stairs_required": true,
"entrance_direction": "south",
"max_width": 12,
"max_depth": 10
}
}
ポイント
- “部屋の意味”が中心
- サイズはあくまでヒント
- 日当たり・窓の向きなどの意図を含む
- 外観はまだ決めない(内部優先)
🟧 ② Structure Layer(構造レイヤー)JSON 仕様
Flask が Meaning を受けて構造化する。
“部屋グラフ”と“壁・窓・階段”が中心。
{
"floors": 2,
"rooms": [
{
"id": "r1",
"name": "living_room",
"bounds": [0, 0, 6, 4],
"floor": 1,
"connections": ["r2"],
"windows": [
{"direction": "south", "width": 2}
]
},
{
"id": "r2",
"name": "kitchen",
"bounds": [6, 0, 3, 3],
"floor": 1,
"connections": ["r1"]
}
],
"stairs": {
"position": [3, 4],
"size": [2, 1],
"connects_floors": [1, 2]
},
"walls": [
{"from": [0,0], "to": [9,0]},
{"from": [9,0], "to": [9,4]},
{"from": [9,4], "to": [0,4]},
{"from": [0,4], "to": [0,0]}
]
}
ポイント
- 部屋は ノード
- 接続は エッジ
- 壁・窓・階段はここで確定
- 外観はまだ生成しない(内部構造が先)
🟩 ③ Geometry Layer(幾何レイヤー)JSON 仕様
Roblox に渡すための“座標化された形”。
Roblox の Part/Model に変換できる状態。
{
"parts": [
{
"type": "wall",
"position": [4.5, 2, 0],
"size": [9, 4, 0.2],
"rotation": [0, 0, 0]
},
{
"type": "floor",
"position": [4.5, 0, 2],
"size": [9, 0.2, 4]
},
{
"type": "window",
"position": [3, 2, -0.1],
"size": [2, 1, 0.1]
}
],
"metadata": {
"scale": 1.0
}
}
ポイント
- すべてが 座標・サイズ・回転 に変換されている
- Roblox の Part にそのまま変換可能
- Structure Layer の“意味”はここで消える(純粋な幾何)
🟪 ④ Render Layer(表示レイヤー)JSON 仕様
Roblox 側での最終描画情報。
Material・Color・Mesh などを含む。
{
"render": [
{
"id": "wall_01",
"material": "Concrete",
"color": [200, 200, 200],
"part_type": "wall"
},
{
"id": "window_01",
"material": "Glass",
"color": [180, 220, 255],
"transparency": 0.4,
"part_type": "window"
}
]
}
ポイント
- 見た目の情報だけ
- 幾何とは分離(OS 的に正しい)
- Roblox の Material/Color に対応
🎯 まとめ:IR レイヤーの JSON 仕様(最終形)
| レイヤー | 役割 | JSON の内容 |
|---|---|---|
| Meaning | 人間の意図 | 部屋の用途・日当たり・階数 |
| Structure | 意味を構造化 | 部屋グラフ・壁・窓・階段 |
| Geometry | 座標化 | Part の位置・サイズ・回転 |
| Render | 見た目 | Material・Color・Mesh |
この 4 層構造は Roblox × Flask × Gemini の三者が最も自然に連携できる形。
次はどれを作る?
- Structure Layer の部屋グラフ仕様をもっと詳細化
- Geometry Layer の座標生成アルゴリズム
- Flask 側の API 設計(/generateStructure など)
- Roblox 側の HttpService 受信コード
- Gemini に渡すプロンプトテンプレート
どこからでも進められるよ。