OpenGL:使用仅颜色获取扩展在 Tiled GPU 上获取深度
OpenGL: Fetch depth on Tiled GPU with color-only fetch extension
我想使用 OpenGL ES 从图块本地内存中获取深度。
在视频游戏中制作软粒子效果和仅颜色延迟贴花需要它。
ARM_shader_framebuffer_fetch_depth_stencil 扩展效果很好,可以直接访问深度值。
现在我想获得与 ARM_shader_framebuffer_fetch and EXT_shader_framebuffer_fetch 相同的结果。
在 GDC 讨论中 Bringing Fortnite to Mobile with Vulkan and OpenGL ES 我看到一种可能的解决方案是 将深度值写入 alpha。
这种方法对我不起作用,因为精度损失很大,我的 alpha 只有 8 位。
我考虑添加足够精确的第二个附件并用 MRT.
写入
问题是:捷运是一种可行的方式,还是我错过了一些重要的技巧?
支持 ARM_shader_framebuffer_fetch
的实现根本不保证支持 MRT。如果他们确实支持它,那么只能检索附件零的颜色。颜色格式也有一些限制;例如它仅支持非标准颜色格式,因此即使您将深度信息放在附件零中,也可能无法获得足够的深度精度。
使用 EXT_shader_framebuffer_fetch
更通用并添加了完整的 MRT 支持,但并非所有基于图块的 GPU 都支持它。
我想使用 OpenGL ES 从图块本地内存中获取深度。
在视频游戏中制作软粒子效果和仅颜色延迟贴花需要它。 ARM_shader_framebuffer_fetch_depth_stencil 扩展效果很好,可以直接访问深度值。
现在我想获得与 ARM_shader_framebuffer_fetch and EXT_shader_framebuffer_fetch 相同的结果。 在 GDC 讨论中 Bringing Fortnite to Mobile with Vulkan and OpenGL ES 我看到一种可能的解决方案是 将深度值写入 alpha。
这种方法对我不起作用,因为精度损失很大,我的 alpha 只有 8 位。 我考虑添加足够精确的第二个附件并用 MRT.
写入问题是:捷运是一种可行的方式,还是我错过了一些重要的技巧?
支持 ARM_shader_framebuffer_fetch
的实现根本不保证支持 MRT。如果他们确实支持它,那么只能检索附件零的颜色。颜色格式也有一些限制;例如它仅支持非标准颜色格式,因此即使您将深度信息放在附件零中,也可能无法获得足够的深度精度。
使用 EXT_shader_framebuffer_fetch
更通用并添加了完整的 MRT 支持,但并非所有基于图块的 GPU 都支持它。