一般来说,我们使用CG/HLSL来编写UnityShader代码,在CG/HLSL中有三种精度的数值类型:float,half,fixed.不同精度计算出的数值范围不一样
777.png
现在大多数的电脑GPU会把所有的计算都按最高的浮点精度来计算,float,half,fixed在这些平台上实际是等价的,但是在移动平台,GPU会有不同的精度范围,而且不同精度的浮点值运算速度也会有所差异(这也是优化项目的一个点啊,挤挤牙膏)。
fixed精度目前基本上不用在移动平台了,GPU会把fixed和half当成同等精度来对待。
Shader优化
我们在编写shader的过程中,应该尽可能的使用精度较低的类型,特别是在移动平台。一般来说我们可以使用fixed来储存颜色和单位矢量。如果需要储存更大范围的数据可以选择half,最差的情况下再考虑float。
网友评论