提取 _CameraDepthTexture 值 Unity
Extracting _CameraDepthTexture values Unity
我需要提取相机屏幕的深度值并写入文件。我读到 _CameraDepthTexture 只能从着色器访问。我对着色器不是很熟悉是否可以在着色器代码中写入文件?或者有没有其他方法可以从 _CameraDepthTexture 中提取这些信息?
这个"might"在理论上是可行的,但我还没有测试过。我假设这是某种按需调试或测试,将在需要时调用?如果您尝试将每一帧都写到文件中,这将对性能不太友好。
1) 创建第二个渲染到纹理的相机。将其放在与主摄像头相同的位置和方向。
2) 在第二个摄像头上启用深度缓冲区。
3) 编写一个简单的像素着色器,获取深度缓冲区值并将它们作为颜色值输出。
4) 使用Unity 提供的Texture2D 工具将渲染的纹理转换为png 或jpg 并写入文件。
您可以只使用主摄像头来完成此操作,方法是在主摄像头上为一两帧启用 post 处理效果并抓取它。同样,我还没有测试过。
这是一个完整的 hack,但是无法直接在着色器(它在 GPU 上运行)中写入文件,也无法在脚本中获取最终的深度缓冲区。
这位先生以 post 处理效果的形式向您展示了这一原理的基础知识。您必须扩展他的示例才能获得您要查找的内容。
Unity Shaders – Depth and Normal Textures (Part 1) - by William Chyr
抱歉,我不能用一个有效的例子来说明。我现在无法访问我的 Unity 机器来测试它。
我需要提取相机屏幕的深度值并写入文件。我读到 _CameraDepthTexture 只能从着色器访问。我对着色器不是很熟悉是否可以在着色器代码中写入文件?或者有没有其他方法可以从 _CameraDepthTexture 中提取这些信息?
这个"might"在理论上是可行的,但我还没有测试过。我假设这是某种按需调试或测试,将在需要时调用?如果您尝试将每一帧都写到文件中,这将对性能不太友好。
1) 创建第二个渲染到纹理的相机。将其放在与主摄像头相同的位置和方向。
2) 在第二个摄像头上启用深度缓冲区。
3) 编写一个简单的像素着色器,获取深度缓冲区值并将它们作为颜色值输出。
4) 使用Unity 提供的Texture2D 工具将渲染的纹理转换为png 或jpg 并写入文件。
您可以只使用主摄像头来完成此操作,方法是在主摄像头上为一两帧启用 post 处理效果并抓取它。同样,我还没有测试过。
这是一个完整的 hack,但是无法直接在着色器(它在 GPU 上运行)中写入文件,也无法在脚本中获取最终的深度缓冲区。
这位先生以 post 处理效果的形式向您展示了这一原理的基础知识。您必须扩展他的示例才能获得您要查找的内容。
Unity Shaders – Depth and Normal Textures (Part 1) - by William Chyr
抱歉,我不能用一个有效的例子来说明。我现在无法访问我的 Unity 机器来测试它。