提取_CameraDepthTexture值Unity

时间:2016-02-26 16:30:32

标签: unity3d shader depth-buffer

我需要提取相机屏幕的深度值并写入文件。我读到_CameraDepthTexture只能从着色器访问。我对着色器不太熟悉是否可以在着色器代码中写入文件?或者有没有其他方法从_CameraDepthTexture中提取这些信息?

1 个答案:

答案 0 :(得分:1)

这"可能"理论上工作,但我没有测试过。我假设这是某种按需调试或测试,将在需要时调用?如果您尝试写出要存档的每个帧,这将不会非常友好。

1)创建第二个渲染纹理的相机。将其放在与主相机相同的位置和方向上。

2)在第二台摄像机上启用深度缓冲区。

3)编写一个简单的像素着色器,它获取深度缓冲区值并将其作为颜色值输出。

4)使用Unity提供的Texture2D工具将渲染的纹理转换为png或jpg并写入文件。

通过在主摄像头上启用一帧或两帧的后期处理效果并抓取它,您可以仅使用主摄像头执行此操作。我再也没有对此进行测试。

这是一个完整的黑客攻击,但没有办法直接在着色器中编写文件(它在GPU上运行),也无法在脚本中获取最终深度缓冲区。

这位先生向您展示了这项原则在工作中作为后处理效果的基础知识。你必须扩展他的榜样以获得你想要的东西。

Unity Shaders – Depth and Normal Textures (Part 1) - by William Chyr

抱歉,我不能通过一个有效的例子来更具体。我现在无法访问我的Unity计算机来测试它。