2016-02-26 46 views
3

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

回答

1

这个“可能”理论上有效,但我没有测试过。我假设这是某种按需调试或测试,将在需要时调用?如果你试图写出每一帧文件,这将不是非常有利于性能。

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

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

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

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

您可以通过启用主摄像头上一帧或两帧的后期处理效果并抓住它来使用主摄像头。再次,我没有测试过这个。

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

这位先生向您展示了这项原则在工作中作为后处理效果的基础知识。你将不得不扩展他的范例来获得你正在寻找的东西。

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

对不起,我不能更具体的与工作的例子。我现在无法访问我的Unity机器来测试它。