Version: 6000.3
语言: 中文
为多个平台编写计算着色器
在URP中编写自定义着色器

优化着色器

此页面包含有关优化您的着色器在 GPU 上运行的程序。更多信息
请参阅术语表
用于运行时性能,尤其是在 GPU 性能有限的移动平台上。

避免复杂的计算

若要避免复杂的计算,请执行以下作,例如:

  • 使用查找纹理而不是资源密集型函数,例如pow,logsin.
  • 使用 Unity HLSL 函数,例如normalizedot,而不是自己写。这确保了驱动程序可以生成更好的代码。

避免重复计算

若要避免着色器重复计算,请执行以下作,例如:

  • 将计算从片段着色器移动到顶点着色器 渲染模型时在 3D 模型的每个顶点上运行的程序。更多信息
    请参阅术语表
    ,因此它们仅针对每个顶点运行,而不是针对每个片段运行。
  • 改为在 C# 脚本中执行计算,然后在着色器中使用计算值。
  • 避免不必要的计算。例如,如果您始终使用相同的颜色,请删除支持每种材质多种颜色的代码。

使用较低精度的数据类型

half而不是float对于除世界空间坐标和纹理坐标之外的所有变量。有关详细信息,请参阅在着色器中使用 16 位精度

使用强制转换而不是后缀

Unity 不支持后缀,因此像2.0h变成一个完整的float.这意味着当 GPU 进行计算时,它可能必须将其他值转换为float然后回来。这会减慢着色器的速度。

为防止这种情况,请使用强制转换而不是后缀。例如,使用half(2.0)而不是2.0h.

避免丢弃像素或通道

若要避免着色器速度变慢,请避免使用以下资源密集型方法:

  • discard片段着色器中的方法。
  • 移动平台上的 ColorMask

避免写入深度缓冲区

为确保移动 GPU 可以使用早期深度测试来加快渲染速度,请勿将深度缓冲区 保存图像中每个像素的 z 值深度的内存存储,其中 z 值是投影平面中每个呈现像素的深度。更多信息
请参阅术语表
在片段着色器中。

有关深度测试的更多信息,请参阅 ShaderLab 命令:ZTest

其他资源

为多个平台编写计算着色器
在URP中编写自定义着色器