基于离屏Framebuffer获取深度图

截止目前,在cosos中获取深度图并不容易,早期版本我们需要复制场景并对场景编写特殊的着色器来通过另一个相机输出renderTexture的方式来获取深度图,这种方式导致在场景调整时需要同时调整两份布局,导致维护比较麻烦,而且多相机渲染造成dc成倍增加。

后来这位大佬提出了一种办法


通过修改自定义管线新增一个pass,来专门获取深度图,这样开发者就不用复制场景了,这样简单了很多,参阅: 可以直接在shander中获取的深度图,不再复制场景。 - Creator 3.x - Cocos中文社区

但即便如此,在自定义管线中新增pass,双倍的dc问题依然存在,在web端和移动端性能空间如此珍贵的前提下,双倍dc带来的性能消耗让我使用深度图代价变得很高昂。

为什么从cocos获取深度图会变得非常困难?

因为Cocos 3.8 Legacy ForwardPipeline 从架构上并没有把“Camera Depth 是一个可供后续 Shader 使用的场景资源”作为核心设计。想要实现从相机中直接获取深度图,就需要

把 Cocos 原本直接渲染到屏幕的主相机,改成先渲染到一个自建的离屏 Framebuffer,同时生成可采样的 SceneColor 和 SceneDepth,再把 SceneColor 输出到屏幕。

预览效果:

该方式只会在全局增加1次dc。
预览视频:
cocos-基于离屏Framebuffer采样的深度图获取_哔哩哔哩_bilibili

提示:代码由gpt实现

1赞