如何知道我们是否可以使用 half4 而不是 float4?

How to know if we can use half4 instead of float4?

在metal shader实现中,推荐使用half4而不是float4。但是如何知道我们是否可以使用 half4 而不是 float4?如何知道我们需要多少精度?

基于此Metal Shading Language Specification

浮动:

A 32-bit floating-point. The float data type must conform to the IEEE 754 single precision storage format.

完整 float 精度通常用于世界 space 位置、纹理坐标或涉及复杂函数的标量计算,例如三角函数或 power/exponentiation。

一半:

A 16-bit floating-point. The half data type must conform to the IEEE 754 binary16 storage format.

Half 精度对于短向量、方向、对象 space 位置、高动态范围颜色很有用。

您知道可以使用 half4 而不是 float4,具体取决于颜色在传递到片段着色器时的编码方式。

半精度浮点数可以准确地表示 0 到 2048 之间的值,因此如果它用于表示 8 位通道(即几乎所有常用的纹理格式),则不会损失保真度。

它还会节省内存传输带宽,这在移动平台上很重要。