用微软 Decision-1 为 3D 室内关卡自动填充资产:LevelDez 演示
Using Microsoft-Decision-1 (out yesterday) to fill 3D indoor levels with assets
LevelDez 借助昨日发布的 Microsoft Decision-1,把校准概率转成按钮操作,为 3D 室内关卡自动布置家具、灯光与装饰,一次完整 Autopilot 运行成本约十分之一美分。
演示视频:用任意素材集填充任意布局(约即时完成)
哥特式
demo.mp4
科幻
demo-scifi.mp4
为什么做这个
给一个可信的室内做灰盒很慢:一张平面图、四十扇门、一百个道具、灯光,还有上百个让房间感觉有人住的小决定。LevelDez 用一个小而便宜的模型和真实素材库来自动化这些决定,并通过一个普通的编辑器和撤销功能让你保持掌控。
- 🏰 一句话 → 一整栋建筑。走廊、侧翼、大厅和各种大小的房间,配有家具、灯光和装饰。
- 🧠 一个是/否模型作为“手”。Microsoft Decision-1 给出校准过的概率。LevelDez 把它们转化为按钮按下(一次完整的自动驾驶运行大约花费十分之一美分)。
- 🎨 每个房间都有身份。每个房间的壁纸或石材、地板、护墙板、装饰线条和彩色氛围灯,都根据房间是什么来选择。
- 🪑 房间是被编排的,不是随意撒的。阅读角、带烛台的神坛、带坩埚的实验室长凳、墓穴排、教室排、仪式圈。
- 📦 约 600 个手工制作的素材(一个完整的哥特式死灵法师学院包),在 Blender 中构建,懒加载以保持编辑器快速。
- 🎬 电影级视口。环境光遮蔽、泛光、色彩分级、灰尘、闪烁的烛光和柔和阴影。
- 🧰 零 npm 依赖。一个小型 Node 服务器和静态文件。
快速开始
最快的方式是你自己随意搞(花了我几个小时),但我分享我的项目,这样我的说法就不是空口无凭,也可以试用。
git clone https://github.com/yeme-oss/LevelDez.git cd LevelDez cp .env.example .env # optional: add your keys (see below) npm start # -> http://localhost:5173
需要 Node 18+。不需要 npm install。three.js 从 CDN 加载,所以首次加载需要互联网连接。
然后,在浏览器中:
- 在页眉中点击 Generate layout(选择小 / 中 / 大)。
- 打开 Decision 标签页,勾选 all rooms 并按下 Autopilot。
- 用鼠标环绕,点击道具来移动它们,满意时点击 Export GLB。
更喜欢用文字来驱动?在 Go 框中输入这个:
Generate a large, complex gothic necromancer academy: a main corridor with side corridors and many rooms of varying sizes (classrooms, dormitories, libraries, alchemy laboratories, a crypt, a ritual chamber, chapels and a grand hall). Use the gothic style and asset pack, give every room a different wallpaper and floor, and furnish it richly with composed setups, gothic architecture (pillars, window tracery, ceiling vaults, cobwebs), candlelight and lighting, curtains, paintings and tapestries on the walls, decorated surfaces and lived-in clutter.
然后按下 Autopilot(所有房间),让 Decision-1 完成仍然缺失的部分。相同的提示保存在 promptGO.txt 中。
API 密钥
两个密钥都是可选的。没有它们编辑器也能工作。
| 变量 | 用于 | 没有它时 |
|---|---|---|
OPENROUTER_API_KEY |
Decision-1:Go 框、Autopilot、Critic、Ask 和每个房间的主题选择。密钥保留在你的服务器上,永远不会发送到浏览器。 | 关键词路由和基于规则的自动驾驶仍然有效。 |
GEMINI_API_KEY |
用 Nano Banana 重新生成墙面艺术和纹理(每张图片约 $0.034)。 | 没有影响:生成的图像已经随 assets/ 一起提供。 |
其他可选设置:DECISION_MODEL、PORT、HOST、BLENDER_PORT、LEVELDEZ_ROOT(见 .env.example)。在 .env 中设置它们,或作为真实环境变量(优先)。永远不要提交 .env。
安全默认值。服务器仅监听
127.0.0.1。原始 Blender 桥接(/api/blender,可以在连接的 Blender 内运行任意 Python)是禁用的,除非你设置LEVELDEZ_ALLOW_RAW_BLENDER=1。
使用编辑器
| 添加房间 | + Room(选择一种类型)、Add adjoining room 按钮,或 Generate layout 来生成整个平面图。 |
| 放置家具 | 在左侧面板中点击一个物品(可搜索,按包分组),然后在房间内点击。墙面、天花板和桌面物品会自动吸附到正确的表面。 |
| 编辑 | 点击一个道具将其选中:拖动操纵器来移动或旋转(吸附到 5 厘米 / 15°),或在 Inspect 中编辑数值。房间有名称、尺寸、高度、主题,以及可添加或移除的门/窗。 |
| 快捷键 | Del 删除 · R 旋转 45° · T 顶视图 · Esc 取消选择 · Ctrl+Z / Ctrl+Y 撤销 / 重做 |
| 视图 | Top、Ceiling(显示天花板)、Cutaway(隐藏朝向相机的墙壁)、Fx(电影级渲染)。 |
| 样式与包 | 样式下拉菜单(modern、scandi、rustic、industrial、luxe、gothic)和包下拉菜单会整体替换调色板和模型集。 |
| 重新开始 | New 会给出一个空白关卡;每一次更改,包括 New,都可以撤销。 |
大约有 35 种程序化家具类型,完全不需要任何资源即可使用,而任何拖入 assets/ 的 GLB 都会自动覆盖或扩展它们(参见 Asset packs)。
AI 层:Decision-1
microsoft/microsoft-decision-1 不是聊天模型。它读取一个状态,并针对固定答案选项返回校准后的概率。LevelDez 通过 OpenRouter 的 decisions 端点使用三种问题类型,并将许多问题批量合并到一个请求中:
| 类型 | 返回 | 用于 |
|---|---|---|
noul |
yes 的概率 | “是否应该按下 Add rug 按钮?” |
choice |
每个选项的概率 | 样式、房间类型、目标房间、每个房间的墙面/地板主题 |
score |
每个等级的概率 | 评价房间的家具充实感(empty → cluttered) |
flowchart LR
U[You: Go box / Autopilot] --> A[Analyse each room<br/>fill %, lights, art, problems...]
A --> G{Cheap local gates}
G --> D[Decision-1<br/>batched yes/no panel]
D -->|p ≥ 0.5| B[Press buttons<br/>furnish, compose, light, decorate]
B --> C[Critic: score empty..cluttered]
C -->|not done| A
C -->|done| E[Export JSON + GLB]
Loading
- Go box:自由文本 → 对每一个按钮生成一个批量的是/否面板 → 按合理顺序按下已批准的按钮 →
choice问题填充参数(样式、房间类型、尺寸、哪个房间)。 - Autopilot:针对每个房间,本地规则决定哪些问题值得问;Decision-1 提供品味;已批准的按钮被按下;critic 决定何时停止,或填充还是清理。
- Vary surfaces:每个房间一个
choice(类型、尺寸和相邻房间),并对重复施加惩罚,因此相邻房间会得到不同的饰面。 - Ask:关于所选房间的任何是/否问题,以百分比作答。
- 没有密钥或 API 不可用?一切都会回退到关键词路由和仅门控的 autopilot。
按钮
Decision-1 按下的按钮与你自己能点击的按钮相同。
| 组 | 按钮 |
|---|---|
| Layout | Furnish core · Compose room · Fill empty space · Declutter · Fix overlaps · Snap to walls · Face seating · Clear room |
| Furnish | Add rug · Bedside tables · Style surfaces · Hang wall art · Gothic architecture · Add clutter · Add plants · Add lighting · Add curtains |
| Structure | Add window · Add door · Resize room · Add adjoining room · Generate layout |
| Style | Restyle · Apply asset pack · Vary surfaces · Mirror layout |
什么让一个房间感觉经过设计
- 生成平面图。 一条主走廊、侧走廊、大型尽头大厅,以及每条走廊两侧大小不一的房间。门穿过双层墙对齐,窗户只出现在外墙上。15 种房间类型:起居室、卧室、餐厅、厨房、办公室、浴室、大厅、图书馆、实验室、墓室、礼拜堂、走廊、教室、宿舍、仪式厅。
- 房间主题。 墙面饰面(锦缎、石材、砖块、瓷砖、镶板……)、地板(大理石棋盘格、人字拼、鹅卵石、木板……)、护墙板、椅轨、顶角线、饰边颜色和氛围灯,按房间类型选取。
- 组合房间。 19 个设置“套件”放置协调的集群。每个套件最多在 10 个位置尝试,得分最高者胜出:橱柜、祭坛和壁炉前方保持畅通,门之间的走道保持开放,布置分散,墙面部件贴墙。
- 建筑处理。 柱子、壁柱、窗花格和门套按每个开口缩放,天花板拱顶、蜘蛛网和地面符印。
- 生活痕迹层。 装饰过的桌面、墙面艺术、窗帘、地毯和地面杂物,如木桶、骨堆和雕像。
- 照明。 固定 18 个点光源的池跟随相机焦点:房间氛围灯加上蜡烛、火盆和火焰,带有闪烁。光源数量从不改变,因此不会触发着色器重新编译。
- 电影级视口(Fx):MSAA、真实环境光遮蔽、泛光、带暗角和颗粒的分色调调色、飘浮尘埃、来自最近光源的柔和阴影。道具获得盒映射的细节贴图(木纹、石材、划痕铁、织物……)以及使墙面低处变暗的污垢。这是视口着色器:导出的 GLB 保持普通材质。
资源包
assets/ 的子文件夹就是包。放入 GLB,可选地在 manifest.json 中描述它们,然后在标题栏中选择包。没有条目的 GLB 会自动注册,放置和光照根据文件名猜测。GLB 按需延迟下载,只下载关卡实际使用的道具,使用清单中的包围盒。
| 字段 | 含义 |
|---|---|
as |
基础类型的变体(bed、wardrobe、rug……)。布局逻辑继续作用于基础类型;模型被替换并适配其占地。 |
replaces |
仅包内类型,用于替代基础类型(candelabra 替代 floor_lamp,arched_mirror 替代 mirror……)。 |
place / y |
floor、wall(安装高度)、ceiling,或 surface(放在桌子和架子上)。 |
tags |
wall-hug、holds-decor、light、altar、curtain、decor……(这些驱动按钮)。 |
light、lightColor、lightY |
发光:在模型上方添加一个点光源。 |
tint |
调色板键,用于重新着色名为 tint_* 的材质。 |
包含:死灵法师学院包(assets/gothic,约 600 个资源)
| 组 | 已构建 | 内容 |
|---|---|---|
| 建筑 | 87 | 柱子、壁柱、拱形面板、窗套和门套、天花板拱顶、蜘蛛网、墙面武器、头骨挂饰、锁链、地面特征、高台 |
| 家具 | 95 | 床、衣柜、书架、桌子、椅子、王座、长椅、书桌、箱子……变体;橱柜、讲台、管风琴、浴缸和厨房部件 |
| 神圣与死亡 | 65 | 祭坛、石棺、棺材、墓碑、墓龛、雕像、石板、洗礼池、圣物箱、骨堆 |
| 炼金术 | 95 | 大锅、工作台、器具、12 种药水、8 个标本罐、草药、魔法书、卷轴、宝珠、头骨、笼子 |
| 照明 | 41 | 烛台、枝形吊灯、壁灯、蜡烛组、灯笼、火盆、漂浮灯 |
| 研究 | 27 | 书堆、地球仪、太阳系仪、星盘、望远镜、沙漏、地图桌 |
| 装饰 | 75 | 瓮、圣杯、渡鸦、木桶、板条箱、地毯、旗帜、镜子、时钟、面具、帷幔 |
| 学院 | 30 | 学生课桌、讲台、石板、奖杯柜、长袍人台、架子、箱子 |
| 构图 | 11 | 壁炉、整面墙的书柜、跪凳、大型烛台 |
| 墙面艺术 | 50 | 绘画、挂毯和彩色玻璃,使用 Nano Banana 生成 |
外加一个包含 49 种纹理的库(墙壁、地板、护墙板和中性细节贴图),全部由脚本生成并无缝处理。tools/gothic/PLAN.md 是每个项目的完整清单。
包含:科幻包(assets/scifi,325 个资源)
基于 docs/make-a-pack-prompt - Scifi.md 构建,作为 make-a-pack 提示词的测试。选择 style: scifi(它会选择该包以及八个科幻房间主题:船体白、舰桥海军蓝、霓虹黑色、洁净实验室、货舱灰、水培绿、船员舱、医疗舱)。
| 分组 | 已构建 | 内容 |
|---|---|---|
| 家具(基础类型的变体) | 134 | 床、沙发、扶手椅、椅子、桌子、书桌、储物柜、地毯、镜子、灯具、植物、窗帘、浴室和厨房用品 |
| 标志性道具 | 86 | 低温舱、舰桥控制台、全息桌、反应堆核心、服务器机架、医疗舱、无人机、自动售货机、水培设施、传送器、仿生人台 |
| 照明 | 28 | 霓虹招牌、灯带、壁灯、信标、全息灯 |
| 墙面 | 34 | 全息海报、屏幕、通风口、架子、管道、标牌、控制面板 |
| 装饰 | 22 | 数据板、全息方块、迷你机器人、小瓶、飞船模型、线缆 |
| 建筑 | 20 | 柱子、壁柱、门窗框、天花板细节、地面贴花 |
使用 tools/scifi/load.py 生成或扩展它(与哥特包相同的可恢复工作流;PLAN.md 列出了每个项目)。墙壁和地板纹理复用中性纹理库,按主题着色。
制作你自己的内容
你不需要学习工具链。任何题材都适用(赛博朋克面馆、地中海别墅、闹鬼汽车旅馆、外星巢穴……):
- 打开
docs/make-a-pack-prompt.md并填写题材、包名和尺寸。 - 将其粘贴到能够运行代码并驱动 Blender 的 LLM 智能体中(例如在此文件夹中启动的、带有 BlenderMCP 服务器的 Claude Code)。
- 智能体规划资源列表、构建 GLB、编写
manifest.json,然后打开编辑器并检查自己的工作。 - 在页眉中选择
pack: <your name>并按下 Generate layout。
该提示词可恢复(它会保留计划和进度文件),并且如果设置了 GEMINI_API_KEY,它还可以添加 AI 墙面艺术。想看看哥特包是如何制作的吗?配方位于 tools/gothic/(PLAN.md 列出了每个项目),而 python tools/gothic/gen_art.py / gen_textures.py 会重新生成其绘画和纹理(通过 Nano Banana 每张图像约 $0.034)。
导出
- 导出 JSON:完整关卡,可重新导入(导入)。也可在 JSON 选项卡中查看和编辑。
- 导出 GLB:每个道具都是一个命名节点,拥有自己的网格;共享材质会被去重。两种导出都会下载并复制到
exports/。 - 在 Blender 中打开:Blender 选项卡可以将导出的 GLB 推送到正在运行的 Blender 中。
房间是以米为单位的轴对齐矩形(x,z = 中心)。rot 是绕 Y 轴的角度;host 将灯或花瓶链接到它所在的桌子。
项目布局
server.js zero-dependency Node server: static files, Decision-1 proxy, asset scan, exports
public/
index.html app.js the editor (three.js scene, UI, undo, export, Fx stack)
level.js level model, geometry, analysis, every button, layout generator, composition kits
decision.js Decision-1 client: router, autopilot, critic, theme chooser
catalog.js procedural furniture + lazy GLB loading, variants/replacements, detail shader
themes.js surfaces.js room themes and textured wall/floor materials
assets/
gothic/ ~600 GLBs + manifest.json + art/ source images
textures/ wall, floor, wainscot and detail textures + manifest.json
tools/
blender_kit.py modelling kit for BlenderMCP
gothic/ recipes, generator core, plan, Nano Banana scripts and prompts
docs/screenshots/ images used in this README
已知限制
- 模型是风格化的倒角基本体(每个大约 1–3k 面),不是雕刻网格。生成器的构建方式使得可以替换为更好的资源。
- 房间是轴对齐矩形;目前还没有 L 形房间或多层楼。
- 特效、细节着色器和氛围灯仅限视口。导出的 GLB 只包含普通材质,没有灯光。
- Decision-1 是一个 alpha 端点模型;其请求格式可能会改变。
想法与路线图
- 贴花和故事道具(污渍、蜡滴、裂缝、打开的书、洒出的药水)
- Decision-1 作为艺术总监,进行有节制的构图检查(遮挡的窗户、视觉焦点、拥挤程度)
- 为导出的 GLB 制作 Blender 精美渲染和烘焙光照
- 非矩形房间、楼梯和多层楼层
鸣谢与说明
- 使用 three.js 和 Blender 构建(通过 BlenderMCP 插件驱动)。
- 编辑决策由 Microsoft Decision-1 通过 OpenRouter 提供支持。
- AI 生成的图像:50 幅画作和所有纹理均使用 Google 的 Nano Banana 生成。商业再分发前请查看 Google 的条款。
许可
根据 Unlicense 属于公有领域:可用于任何目的、修改和出售,无需署名。(Nano Banana 图像带有上述注意事项。)
关注我
我在 Patreon 上。我分享关于 AI 创业的见解和实用的动手内容。没有废话。
来源:Hacker News · github.com

