UE中,全屏输出深度缓冲(Depth Buffer),最常用且最标准的方法是使用后处理材质 (Post Process Material)。这和Unity的ScriptableRenderPass逻辑类似,在UE中完全可以通过材质编辑器可视化实现。

方法一:使用后处理材质

1.1 创建后处理材质

        新建材质,命名为 M_VisualizeDepth 。打开材质,在左侧详情面板中 (Details) 中,将 Material Domain 修改为 Post Process

        

1.2 获取深度缓冲

        新建 SceneTexture 节点,将 Scene Texture Id 设置为 SceneDepth,获取场景深度纹理。

注:这相当于Unity Shader中采样深度纹SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv)。UE的SceneDepth返回的是世界单位 (厘米) 的线性距离,是浮点数(例如 1000.0 代表 10米)

        

1.3 处理深度缓冲值

        获取 SceneDepth 的R通道数值,连接一个 Mask 节点,只取R通道。连接 Divide (除法) 节点,在 Divide 的B输入端创建一个 Constant,设为2000 (代表20米)。连接 Saturate (截断) 节点 (防止超过1过曝)。连到 Emissive Color,效果:0 ~ 20米是从黑到白的渐变,超过20米全是白色。 

 ​​1.4 应后处理材质

        在场景中添加 PostProcessVolume 组件,勾选 Infinite Extent (Unbound) 使其全局生效。在 Details 面板找到 Rendering Features -> Post Process Materials,添加一项,在下拉菜单选择 Asset Reference。将后期材质 M_VisualizeDepth 拖入。

        

        

方法二:场景捕获 (Scene Capture 2D)

        创建一个 Scene Capture Component 2D (或者拖入一个 Scene Capture 2D Actor)。创建一个 Render Target 资源,赋给它的 Texture Target。关键设置:将 Capture Source 改为 SceneDepth in R。现在 Render Target 纹理里存的就是 32位的深度数据了。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐