给 Marble 一段中文描述,等上一段时间,你会拿到一个能在浏览器里用鼠标转视角、用键盘走进去的 3D 场景。这篇教程以“一句话造出重庆山城”为例,把文本输入、图片输入、生成筛选、漫游找穿帮、局部编辑与场景扩展、导出视频和 3D 资产这条链路完整走一遍,最后给一份能直接照抄的提示词模板和排错清单。
这篇能做出什么
走完全流程,你手上会有三样东西:
1. 一个可漫游的 3D 世界:浏览器里打开,拖鼠标转视角,按 W/A/S/D 或方向键在场景里走动,能沿着石阶往上爬、拐进楼与楼之间的窄巷,看到远处的江面和缆车。它不是一段固定镜头拍的视频,也不是一张全景图,而是有真实空间纵深、可以自由选视角的场景。
2. 一段运镜视频:在场景里设定几个机位,导出成 15 到 30 秒的短片,用来给同事、客户做方案演示,或者发到社交平台。
3. 一份 3D 资产文件:导出成高斯泼溅格式或网格格式,导入 Blender、支持泼溅的查看器,或者游戏引擎里继续加工。具体支持哪些格式,以官方页面当前版本为准。
以重庆山城为例,目标画面大致是:陡坡上一层层叠起来的居民楼,楼与楼之间是湿漉漉的石阶和窄巷,黄桷树从挡土墙后探出来,远处一条跨江索道缓慢移动,江面反着暖色灯光,傍晚蓝调时刻,薄雾。
先把能力边界说清楚,免得中途期待错位:
- 这类工具擅长“氛围对、构图对、能走进去”,不擅长精确尺寸。想要“这栋楼必须 24 米高、巷子必须 3 米宽”,它给不了。
- 同一段提示词跑两次,结果会不一样。想要稳定复现,得靠参考图加参数记录。
- 场景范围内的文字招牌通常靠不住,会出现乱码或不存在的字。要精确文字,导出后自己贴。
- 走得太远、视角转到场景边缘之外,容易看到穿帮。这是所有生成式 3D 场景的通病,后面会讲怎么处理。
前置条件清单
动手前把这些准备好,能省掉一半的折腾:
- 账号:在 World Labs 官方页面注册并登录 Marble,是否需要排队、免费额度多少、订阅怎么算,以官方页面当前版本为准。
- 浏览器:Chrome 或 Edge 的较新版本,开启硬件加速,关掉省电模式。同时在跑十几个标签页的机器,漫游时会掉帧。
- 网络:上传参考图、生成场景都吃带宽,用稳定的有线或 5G 网络。
- 参考图(可选但强烈建议):洪崖洞的夜景、长江索道、李子坝轻轨穿楼、山城步道的阶梯巷子,各存两三张。注意图片版权和画面里的路人肖像,商用前要确认来源。
- 本地工具(可选):ffmpeg 用来处理导出的视频;Blender 或支持高斯泼溅的查看器用来验证 3D 文件能不能正常打开。
- 一份“场景说明书”:见下一步。随手写一句“重庆山城”和写一份结构化说明,出图质量差得很远。
第 1 步:写场景说明书,而不是写一句话
“一句话生成”是产品形态,不是提示词写法。真正好用的做法是先在文档里把场景拆成几个维度,再压成一段话。用下面这个模板:
```text
【主体】山城街区:层叠的混凝土居民楼、石阶、窄巷、挡土墙
【地形】明显的坡度与高差,至少三层台地,主路径是一条向上的石阶
【材质与色彩】水泥灰、旧瓷砖、褪色的招牌红、湿漉漉反光的路面
【植被】黄桷树从墙头探出,墙角有杂草
【光线与时间】傍晚蓝调时刻,暖色窗灯与冷色天光对比,薄雾
【远景】江面、跨江索道缆车、对岸模糊的城市轮廓
【镜头感受】站在巷口往上看,视线被楼体挤压,有纵深感
【排除项】不要现代玻璃幕墙、不要宽马路、不要清晰可读的文字招牌
```
把这份说明书压成一段可以直接粘进输入框的中文提示词:
```text
一座建在陡坡上的中国山城街区,傍晚蓝调时刻。三四层高的旧居民楼沿着山坡层层叠叠向上堆,楼与楼之间是湿漉漉的石阶和窄巷,墙面是水泥灰和褪色瓷砖,零星挂着发光的小招牌但不要求文字清晰。黄桷树从挡土墙后面探出枝叶,墙角有杂草。镜头站在巷口向上看,两侧楼体挤压出纵深感。远处能看到江面、缓慢移动的跨江索道缆车和对岸模糊的城市灯光,空气里有薄雾。写实风格,带一点电影感。不要玻璃幕墙高楼,不要宽阔马路。
```
如果工具的英文效果更好,用英文再写一版,关键词密度更容易控制:
```text
A steep hillside neighborhood in Chongqing, China, at blue hour. Three-to-four
story old concrete apartment blocks stacked up the slope, wet stone stairs and
narrow alleys between them, gray concrete and faded tile walls, a few small
glowing signs with unreadable text. Ficus trees spilling over retaining walls,
weeds at the corners. Camera stands at the alley mouth looking uphill, buildings
squeezing the view into depth. In the distance: a river, a slow-moving cable car,
blurred city lights on the far bank, light mist. Photorealistic, cinematic.
No glass skyscrapers, no wide roads.
```
三个写作要点:
- 写高差。山城的关键不是楼,是坡。提示词里出现“坡”“台阶”“台地”“挡土墙”,生成结果才会有上下层次,否则容易出来一片平地。
- 写排除项。生成模型对“不要什么”的响应比想象中好,尤其在防止它自动补上现代都市元素时。
- 别写精确数字。写“三四层”帮助它判断尺度,写“24.5 米”没有意义。
第 2 步:选输入方式,纯文本、图片或图文结合
Marble 支持文本、图片,以及两者混合的输入。三种方式各有适用场景:
纯文本:适合第一轮探路。成本低、试错快,用来确认构图方向对不对。建议先用纯文本跑两三次,看它理解成什么样。
图片输入:给一张图,它会推断出图里空间的三维结构,并把视角之外的部分补全。适合你手上有明确参考画面的情况。注意:图片里没有的东西,它会自己编,编得对不对不受控。
图文结合(推荐做法):图片定风格和材质,文本定布局和内容。提示词里明确分工:
```text
参考这张图的色调、材质和雾气氛围,但空间布局改成:一条向上的石阶窄巷,
两侧是层叠的居民楼,尽头能看到江面和索道缆车。
```
一个实用的流程是:先用纯文本跑出构图满意的一版,把这个场景的某个视角截图下来,再用这张截图作为图片输入、配合上面的文本重新生成。这样风格会比纯文本稳定得多。
第 3 步:生成与第一轮筛选
生成需要时间,点一次就等着,别连点。一次跑两到四个候选,然后按同一套标准打分,避免凭第一眼喜好挑:
| 检查项 | 判断方法 |
|---|---|
| 地形成立 | 有没有真实的坡和高差,还是贴了张斜纹理的平地 |
| 可漫游性 | 沿主路径往里走十秒,有没有撞墙、掉出场景、明显穿帮 |
| 细节密度 | 近景有没有东西可看,还是走近了就是一片糊 |
| 风格一致 | 近景和远景的材质、光照是不是同一套逻辑 |
| 尺度合理 | 门、台阶、栏杆、树的比例对不对 |
四项以上过关就留下,进入下一步。都不行就回头改提示词,重点补“地形”和“排除项”两栏。
如果界面提供随机种子或参数记录,把每次的输入和结果对应记下来。生成式工具最大的时间浪费就是“上次那个挺好的,但我不记得怎么调出来的”。
```json
{
"id": "cq-003",
"input_type": "text+image",
"prompt_ref": "prompts/cq-hillside-v3.txt",
"ref_image": "refs/hongyadong-night.jpg",
"score": { "terrain": 4, "walkable": 3, "detail": 4, "style": 5, "scale": 4 },
"issues": ["巷子尽头地面断裂", "远景楼体重复纹理明显"],
"next_action": "从巷子尽头向外扩展一次"
}
```
第 4 步:在浏览器里漫游,专门找穿帮
进入场景后,先别急着欣赏。按固定路线走一遍,这是决定成品能不能用的关键步骤:
- 用鼠标拖拽转视角,用 W/A/S/D 或方向键移动,滚轮或触控板调远近。具体操作以界面提示为准。
- 从起始点沿主路径走到尽头,再原路返回,注意脚下地面是否连续。
- 贴着墙走一遍,看贴图有没有拉伸、闪烁。
- 抬头看天,低头看地,转到侧面看远景边缘。
- 找一个有门或台阶的地方,判断整体比例。
把每一处问题记下位置和现象。比如“从巷口向上走约十步,右侧墙面出现明显重复纹理”“转到背向江面的一侧,远景是空白”。
第 5 步:局部编辑与场景扩展
拿到一个“大致对”的场景后,靠编辑把它推到“能用”。常见三类操作:
局部修改:圈定一块区域,改材质、加物体、删掉多余的东西。原则是一次只改一个变量,改完立刻漫游验证。同时改材质又改光照,出问题你不知道是哪一步导致的。
场景扩展:从场景边缘往外“长”出新区域,这是做出纵深感的关键。山城最吸引人的就是“拐进去还有一条巷子”,用扩展把主路径往前推两三次,漫游体验会完全不同。每次扩展后都要回到接缝处走一遍,接缝是穿帮高发区。
多场景拼接:把几个独立生成的 world 拼在一起,比如一个“山城巷子”加一个“江边码头”。拼接时注意两边的光照时间要一致,一个傍晚一个正午拼在一起会很怪。
第 6 步:导出视频与 3D 资产
导出视频:在场景里设几个机位,定好起点、终点和时长,导出成片。检查分辨率、帧率、时长是否符合你的发布平台要求。拿到文件后可以先看一眼参数:
```bash
ffprobe -v error -show_entries format=duration,size -show_entries stream=codec_name,width,height,r_frame_rate -of default=noprint_wrappers=1 input.mp4
```
需要把几段运镜拼成一条片子时:
```bash
ffmpeg -i shot1.mp4 -i shot2.mp4 -i shot3.mp4 \
-filter_complex "[0:v][1:v][2:v]concat=n=3:v=1:a=0[v]" \
-map "[v]" -c:v libx264 -crf 20 -pix_fmt yuv420p walkthrough.mp4
```
要发到聊天工具里,转个体积小一点的版本:
```bash
ffmpeg -i walkthrough.mp4 -vf "scale=1280:-2,fps=30" -c:v libx264 -crf 23 -pix_fmt yuv420p walkthrough_web.mp4
```
导出 3D 资产:常见的是高斯泼溅格式和网格格式。下载后先确认文件能打开——泼溅文件需要专门的查看器或 Blender 的对应插件,网格文件(如 glTF/GLB)用 Blender 直接导入即可。支持的格式清单以官方页面当前版本为准。
```bash
先看文件大小和扩展名,确认下载完整
ls -lh exports/
```
常见坑与排错
走两步就穿帮、场景像一张弧形贴图
提示词里缺少高差描述。补上“坡地、台阶、多层台地、挡土墙”,并在生成后立刻沿主路径走一遍,别等到导出才发现。
招牌上的字是乱码
生成模型渲染文字不可靠。提示词里直接写“不要清晰可读的文字”,把招牌当成色块和光点处理;需要精确文字的,导出后在 Blender 或后期软件里贴上去。
人物、车辆比例怪异
场景里出现人形参照物时,比例问题会被放大。提示词里加“空无一人”或“只有远处少量模糊行人”,减少参照物数量。
同一段提示词,两次结果差很多
固定参考图,记录参数。也可以把满意的一版截图下来作为图片输入,用图去锁风格。
上传参考图后风格跑偏
图片的权重往往盖过文本。在提示词开头明确分工:“参考这张图的色调与材质,但空间布局改为……”,把“改什么、不改什么”写清楚。
浏览器卡顿、黑屏、转视角掉帧
先确认硬件加速是开启状态,换 Chrome 试一次,关掉其他吃显存的标签页。分辨率高的场景对显卡有要求,笔记本用电池模式时尤其明显。
导出的 3D 文件打不开
多数情况是格式与查看器不匹配。泼溅文件和网格文件是两套工具链,别用看网格的软件硬开泼溅文件。确认扩展名后再找对应查看器,插件安装方式以插件官方文档为准。
视频有时长或水印限制
与账号权限相关,以官方页面当前版本为准。需要更长的成片,可以分段导出后用上面的 ffmpeg 命令拼接。
下一步建议
场景能跑通之后,往下走几个方向:
做同一地点的不同时间。用同一份场景说明书,只改“光线与时间”一栏,生成清晨、正午、雨夜三个版本。这套对比素材在方案汇报里很好用。
把真实地点风格化。找一张自己拍的城市照片作为图片输入,看它能把多少真实结构保留下来。这是这类工具真正有意思的地方——把一张二维照片变成可以走进去的空间。
接进网页。如果导出的是 glTF/GLB,用 three.js 起一个最小页面就能嵌到自己的站点里,先跑通加载,再考虑加漫游控制:
```javascript
// npm i three,用 Vite 之类的打包工具起页面
import * as THREE from 'three';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(60, innerWidth / innerHeight, 0.1, 2000);
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setPixelRatio(devicePixelRatio);
renderer.setSize(innerWidth, innerHeight);
document.body.appendChild(renderer.domElement);
scene.add(new THREE.HemisphereLight(0xffffff, 0x404050, 1.2));
new GLTFLoader().load('/models/chongqing.glb', (gltf) => {
scene.add(gltf.scene);
});
camera.position.set(0, 2, 8);
camera.lookAt(0, 1, 0);
renderer.setAnimationLoop(() => renderer.render(scene, camera));
```
再加第一人称或轨道控制、碰撞检测,就是一个能分享的网页版漫游。
当成概念图生成器用。给美术、导演、客户看空间关系,比手绘概念图快得多,也比纯图片多了“能走进去”的说服力。把它放在前期沟通环节,而不是最终交付环节。
攒一份自己的提示词库。按“地形 / 材质 / 光线 / 排除项”分文件夹存,下次做别的城市直接换关键词。江边码头、北方胡同、南方骑楼,结构其实是同一套模板。
最后提醒一句:这类工具迭代很快,界面按钮、导出格式、额度规则都会变。遇到和本文描述不一致的地方,以官方文档当前版本为准,按上面的流程思路重走一遍即可。
