Skip to content

雨夜便利店:一份提示词跑出来的完整夜景 ​

初始化中…

这个场景我没有建任何一个模型文件,也没有用任何一张外部贴图,全部是代码里生成的几何与材质。做法是先把交付要求写成一份提示词交给 AI,再逐条核对产物。下面这份提示词是我自己重写的版本,数值和验收标准都按我自己的机器调过。

这次想验证三件事 ​

  1. 材质能不能分出层次。 一个夜景最容易翻车的方式就是全场一个塑料感。玻璃、不锈钢、湿沥青、混凝土路缘、橡胶轮胎,这五种必须一眼能分开。
  2. 夜里靠灯撑,不靠环境亮度。 把环境光调亮就变成白天了。要看的是冷月光和暖店内光撞在一起的对比。
  3. 雨和涟漪的帧成本能不能压住。 两千多条雨丝加几十圈涟漪,如果每帧都在新建对象,移动端直接掉帧。

我交给 AI 的交付要求 ​

场景与尺度

  1. 一间开间 8 m、进深 5 m、檐高 3.4 m 的临街小店,正面整片玻璃幕墙加一扇推拉门,门前有台阶、防滑垫、垃圾桶和一辆自行车。远处围一圈楼群剪影,别让它孤立在城市外面。
  2. 所有尺寸按米来,相机初始高度 3 m 左右、距离 13 m,人眼视角,不做俯视上帝镜头。

材质

  1. 湿地面 roughness 0.1、metalness 0.9,必须能反出招牌和路灯光;水洼单独一层,roughness 0.02。玻璃用透明加清漆层,opacity 0.26,要能看清室内货架。冷柜门、灯管、招牌是自发光面,不参与光照计算。
  2. 橡胶轮胎和防滑垫 roughness 0.95 以上,跟金属差出至少两档。

灯光

  1. 一套冷色月光(方向光,强度 0.5 量级)负责轮廓和阴影,一套暖色店内光(点光源 55 / 26 量级,从屋顶往下打)负责把里面照亮,招牌和路灯各给一盏补光。环境亮度只用来提供反射,不许把场景整体提亮。
  2. 阴影只给主方向光,贴图 2048,bias 压到不产生悬浮阴影为止。

天气与动效

  1. 雨用线段画,2600 条,每条长度随下落速度变化,带 0.6 m/s 的斜向偏移;落到地面后回到云底重新随机位置。湿面上要有涟漪扩散,固定 36 圈循环复用,不许每帧新建几何。
  2. 招牌要有轻微闪烁,偶尔跳一下亮度,别做成匀速呼吸灯。

交付形态

  1. 页面里能直接拖拽查看,自动播放,不加进度条和按钮。画面左下角给文字读数:雨丝条数、三角面数、光源数、平均帧耗时。
  2. 不引用任何外部模型、贴图、HDR、字体文件;离开网络也能跑。组件卸载时把几何、材质、贴图、环境生成器全部释放。

实现里几个值得记的点 ​

点光源的强度单位。 新版渲染器默认按物理单位算,点光源衰减是平方反比。我一开始按老习惯写 intensity: 1.5,结果店内黑成一团。这套场景里暖光要 55、路灯要 90 才正常。这种单位变化 AI 经常搞混,必须在提示词里把量级写死。

店面必须留空腔。 第一版用一个 8×3.4×5 的实心盒子当体量,止于“看起来是一间店”;结果正面玻璃后面就是墙,货架、冷柜、收银台全部被埋在里面,画面看上去就是一个黑箱子。改成后墙加两侧墙加屋面板的壳体、正面只留玻璃,室内才看得见。但室内一亮就过曝,又把地坪与货架的底色从接近白色压到中灰,暖光量级维持不变。这类“体量还是壳体”的歧义,提示词里不写清就会踩。

反射靠程序化环境,不靠 HDR 文件。 湿地面能反出东西,靠的是一段代码生成的环境贴图(RoomEnvironment 过一遍 PMREM)。这样既满足了"不引外部素材",又拿到了金属和玻璃的反射。

中文招牌用画布画。 一块 512×128 的画布,写两行字,贴到平面上,材质用不受光的 BasicMaterial 并关掉色调映射,夜里就是自己发亮的招牌。字体走系统字体栈,不打包字体文件。

涟漪是池化复用。 36 个环形图元常驻场景,每个带一个 0 到 1 的进度,走完就把位置随机到新的点、透明度归零重来。缩放和透明度都是改属性,不新建对象。

闪烁改颜色不改贴图。 直接把材质的颜色乘一个标量,比换贴图便宜得多。偶尔插一个随机低值,比正弦曲线更像真的旧招牌。

远处楼群用实例化。 22 栋剪影一次实例化画完,88 个亮窗再一次实例化,两个 draw call 搞定背景。

按交付要求核对 ​

要求实际做到判定
五种材质看得出差异湿面、玻璃、不锈钢、混凝土、橡胶参数都分开了达成
冷暖两套光撞对比月光 0.5 冷色 + 店内 55 暖色,招牌加一盏冷补光达成
雨与涟漪不新建对象雨丝改顶点数组,涟漪池 36 个循环达成
无外部素材几何、贴图、环境全部代码生成达成
文字读数雨丝、三角面、光源、帧耗时四项达成
卸载清理几何、材质、贴图、PMREM 生成器全释放达成
招牌闪烁标量亮度调制加随机低值达成
自行车与垃圾桶圆环轮加细盒车架,圆柱桶达成(模型偏简陋)

已知不足 ​

  • 没有人、没有车。 一个雨夜的店门口没有人和车,氛围就少一半。这些要额外建模,我这次给自己定的约束是纯代码几何,所以先不做。
  • 雨没有体积光。 路灯下应该有能看到的光柱,这需要体积雾或者着色器,我用的指数雾是全局的,出不来局部光柱。
  • 玻璃没有真折射。 用的是透明加清漆,不是透射材质。好处是便宜且不闪,坏处是隔着玻璃看货架没有变形。
  • 商品只是色块,不是包装。 120 件货全是随机颜色的小盒子,远看没问题,凑近就露馅。
  • 地面反射是环境贴图,不是实时反射。 招牌在水里并没有真的倒影,只是湿面把环境光反出来了。要做真倒影得上反射平面或者镜像相机。

本站所有 3D 孪生场景、可视化系统均为个人技术实验 Demo,仅用于技术学习与效果展示,不属于对外运营平台,不提供任何商业服务。

本站为个人技术展示网站,仅用于个人研发作品、3D 数字孪生技术学习展示,无任何经营性服务、无社区互动、不对外提供商业服务。

本站为个人技术展示网站,仅用于个人研发作品、3D 数字孪生技术学习展示,无任何经营性服务、无社区互动、不对外提供商业服务。

蜀ICP备2026068005号-1|个人 3D 数字孪生技术研发展示站