Unity 更新自定义渲染纹理时,默认情况下会使用材质立即更新整个纹理。自定义渲染纹理允许定义部分更新的区域。可以使用此功能根据需要定义多个区域以及处理这些区域的顺序。
可以将更新区域用于各种用途。例如,您可以使用多个小区域在纹理上绘制水滴,然后执行完整通道以模拟波纹。此外,如果不需要更新完整纹理,也可以使用此功能作为优化手段。
更新区域具有各自的属性集。Update Zone Space 会出现在显示中。坐标取决于纹理的 Dimension 属性:对于 2D 和立方体纹理为 2D,对于 3D 纹理为 3D。
可以在脚本 API 中访问大多数自定义渲染纹理功能。还可以使用脚本更改材质参数、更新频率、更新区域、请求更新等。
当 Unity 更新或初始化自定义渲染纹理时,它会使用当前属性来渲染下一帧。这种机制可保证使用此纹理的任何材质都具有最新结果。例如,在以下脚本中,Unity 使用第二个更新区域数组执行两次更新:
customRenderTexture.updateZones = updateZones1;
customRenderTexture.Update();
customRenderTexture.updateZones = updateZones2;
customRenderTexture.Update();
注意:Unity 不会在调用 Update() 或 Initialize() 的同时更新或初始化自定义渲染纹理。这是因为 Unity 始终在下一帧开始时更新和初始化自定义渲染纹理。
可以对自定义渲染纹理进行双缓冲。为此,请在 Custom Render Textures 组件中启用 Double Buffered,或使用 CustomRenderTexture.doubleBuffered。
双缓冲意味着在一个自定义渲染纹理内有两个纹理,Unity 可以在每次更新后交换它们。这种机制可让用户在自定义渲染纹理中写入新结果时读取上次更新的结果。
如果着色器需要使用 Unity 已在纹理中写入的内容但不能将值与经典混合模式混合,则双缓冲尤其有用。如果着色器必须对前一结果中的不同像素进行采样,也需要用到此功能。
性能警告:双缓冲当前涉及每次交换时进行纹理的复制,这可能导致性能下降,具体取决于其执行频率和纹理分辨率。