Skip to content

UE5 场景搭建与光影调试流程 ​

个人技术实验记录。目的是验证同一条数据管线能不能同时喂给 Web 端和 UE5,不是做影视级场景。

Web 端渲染和 UE5 最大的差别不在画质,在默认假设。UE5 默认你有一个"游戏场景",而我的输入只是一堆建筑体块加一张地面。这篇记的是从导入到能看的这条最短路径。

一、导入:先把轴向对上 ​

glTF 导出后是 X=东、Z=北,UE5 是左手系(X 前、Y 右、Z 上)。导入时统一做一次旋转,之后所有位置计算都按 UE 的约定走,不要一边导一边手动微调,那样第二次换模型就全乱了。

体块模型按"每栋一个 Actor"导入,而不是合并成一个大网格。原因很实际:后面要做单体高亮和按栋控制,合并了就得重导。

二、场景组织:三层就够 ​

LWPark
 ├─ LevelInstance_Ground     地面与网格
 ├─ LevelInstance_Buildings  建筑体块(按栋)
 └─ BP_DeviceMarker          动态 Actor(由外部数据驱动生成)

用 Level Instance 的好处是可以整层开关,调光照时能只看建筑、不看地面反光。

三、光照:先固定太阳,再谈别的 ​

我的顺序是先让 DirectionalLight 的影子对,再动天光,最后才加环境光遮蔽:

  1. DirectionalLight:先定太阳角度。我把高度角固定在 35°~45° 之间试,接近垂直的顶光会让体块全部糊成一片灰,太低又只剩影子。
  2. Shadow Distance / Resolution:默认阴影距离在我的尺度下会提前断掉,拉到场地方向外扩一圈;分辨率先 2048,看边缘锯齿再决定要不要提。
  3. SkyAtmosphere + ExponentialHeightFog:天光提供环境反射,雾只用来给远处体块一点空气透视,浓度一律往低了给——雾一大整个场景就脏。
  4. PostProcess:曝光先设成"目视匹配"(手动固定),别用自动曝光。自动曝光会随画面内容变化,同一份模型每次截图亮度都不一样,没法对比参数。

最后一条是我踩得最久的:自动曝光让所有参数对比都失去意义。固定曝光之后,改一个参数看一个效果,调试才有效。

四、材质:程序化贴图在 UE 里的取舍 ​

Web 端我用的程序化波纹板贴图(在建模端生成后内嵌进 glb),导入 UE5 后能直接用,但有两个问题:

  • 贴图是无烘焙的灰度条纹,UE5 里看着偏"塑料",需要补一张法线贴图才有金属压型的体积感
  • 金属度、粗糙度在 glTF 里只有两个标量,UE 侧要重设,不然屋顶金属板反光不对

我的处理是在 UE 里做材质实例覆盖,不改原始 glb,这样 Web 端和 UE 端可以共用同一份几何。

五、动态数据接进来 ​

场景搭好后要验证的是"外部数据能不能驱动 Actor"。这块我单独设计了一个极简协议,写在另一篇里:多端遥测可视化:一套极简 WebSocket 协议。

要点只有三个:设备坐标直接复用局部米制(乘 100 转 UE 厘米)、首次出现自动创建 Actor、断线重连不清空已有 Actor。

六、打包验证 ​

开发环境跑通不代表打包后能跑,我的检查清单:

  • [ ] 打包后首帧不黑屏(光照贴图与材质实例引用是否丢失)
  • [ ] 非开发机上帧率(体块数量在几百级时 CPU 剔除开销)
  • [ ] WebSocket 连接在打包版能建立(开发环境证书与打包版策略不同)
  • [ ] 窗口标题与画面文字是否是我想要的(截图要发布时这点很重要)

最后一条是我自己加上的:画面里烧进的文字,发布前一定会被忽略,直到某天要对外放截图才发现改不掉。标题、HUD 文案这类东西,从一开始就应该做成可配置字符串。

相关 ​

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

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

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