Godot 4.x中如何正确访问SubViewport的深度缓冲区?
解决SubViewport深度缓冲区访问问题
核心配置步骤
- 先修正SubViewport的渲染目标设置:
- 打开SubViewport的
Render Target > Enable Render Target开关 - 在
Render Target > Texture Format中勾选Depth选项——这是SubViewport生成自身深度纹理的前提
- 打开SubViewport的
- 修改Shader的采样器声明:
把原声明里的source_color替换为source_depth,因为source_color会默认绑定主视口的缓冲区,而source_depth才会关联当前节点所在视口的深度数据:uniform sampler2D depth_texture : source_depth, hint_depth_texture; - 确认节点层级:
应用该Shader的网格必须是SubViewport的直接或间接子节点,确保渲染上下文属于这个SubViewport而非主视口
额外验证项
- 检查SubViewport的
Clear Mode,确保每次渲染都会正确清除深度缓冲区,避免残留旧的深度数据 - 若使用Godot 4.x,确认Shader的
render_mode没有开启会干扰深度采样的特殊模式
官方文档提到的"仅能读取当前视口的深度纹理",这里的"当前视口"指的是渲染Shader所在节点的视口,所以必须让SubViewport成为该网格的渲染上下文,主视口只是最终显示SubViewport纹理的容器
内容的提问来源于stack exchange,提问作者Hectortilla
相关产品推荐
相关产品推荐

