Version: Unity 6.0 (6000.0)
语言 : 中文
摄像机输出
从摄像机输出深度纹理

摄像机输出简介

摄像机可生成深度、深度+法线或运动矢量纹理。这是一种极简化的 G 缓冲纹理,可用于后期处理效果或实现自定义光照模型。

这些主要用于效果;例如,后期处理效果 (post-processing effects) 经常使用深度信息。

深度纹理中的像素值介于 0 和 1 之间,具有非线性分布。精度通常为 32 或 16 位,具体取决于所使用的配置和平台。从深度纹理读取时,将返回 0 到 1范围内的高精度值。如果您需要获取与摄像机之间的距离或其他 0 到 1 之间的线性值,请使用 helper 宏手动进行计算。

大多数现代硬件和图形 API 都支持深度纹理。下面列出了特殊要求:

  • Direct3D 11+ (Windows)、OpenGL 3+ (Mac/Linux)、Metal (iOS) 和主流的游戏主机都支持深度纹理。

可使用脚本中的 Camera.depthTextureMode 变量来启用摄像机的深度纹理模式。还可以使用着色器替换 (Shader Replacement) 功能来自行构建类似纹理。

有三种可能的深度纹理模式:

  • __DepthTextureMode.Depth__:深度纹理。
  • __DepthTextureMode.DepthNormals__:打包到一个纹理中的深度和视图空间法线。
  • __DepthTextureMode.MotionVectors__:当前帧的每个屏幕纹理像素的每像素屏幕空间运动。打包到 RG16 纹理中。

这些是标志,因此可以指定上述纹理的任何组合。

背景

深度纹理可以直接来自实际深度缓冲区,也可以在单独通道中渲染,具体取决于使用的渲染路径和硬件。通常,在使用内置渲染管线中的延迟着色渲染路径时,深度纹理实际上是“自动生成”的,因为它们本来就是 G 缓冲区渲染的产物。

启用时,MotionVectors 纹理始终来自额外的渲染通道。Unity 会将移动的游戏对象渲染到此缓冲区中,并构建从最后一帧到当前帧的运动。

摄像机输出
从摄像机输出深度纹理