包含此页的版本:
不含此页的版本:
默认情况下,GPU 使用 32 位精度。您可以在 GPU 计算中使用 16 位精度,这在移动平台上具有以下优势:
要在着色器中使用 16 位精度,请使用half声明标量、向量或矩阵时。例如:
half _Glossiness;
half4 _Color;
half4x4 _Matrix;
若要在纹理采样器中使用 16 位精度,请将half4当你声明它时。例如:
Texture2D<half4> _MainTex;
对于某些着色器计算,16 位精度可能不足。这可能会导致可见的错误,例如色带或卡顿几何体。要检查错误,请在支持half.如果有错误,请使用float相反。
一个half变量存储在大小和对齐方式为 32 位的缓冲区中。
默认情况下,half对 Unity 中更高性能的平台(例如使用 MacOS 的平台)没有影响。一个half变量变成float,GPU 使用 32 位值进行计算。
要在更多平台上使用 16 位精度,请转到 编辑>项目设置(Project Settings) > 播放器,并将 着色器精度模型(Shader Precision Model) 设置为 均匀(Uniform)。然后 Unity 将half在 HLSL 代码中,如下所示:
min16float标量float用于纹理采样器当 Unity 编译着色器时,min16float成为一种平台数据类型,允许 GPU 使用 16 位精度进行计算(如果它支持)。例如:
min16float.mediump.RelaxedPrecision浮。float,但 GPU 使用 16 位值进行计算。要覆盖纹理的着色器精度模型设置,请将_half声明纹理采样器时。例如Texture2D<half4> _MainTex.