着色器数据类型与精度
post by:追风剑情 2017-5-27 15:29
高精准度float
32位
高精度通常用于世界空间位置,纹理坐标或涉及复数函数(如三角法或幂/取幂)的标量计算。
中等精度half
16位
范围为-60000至+60000,精度约为3位十进制数
半精度对于短矢量,方向,对象空间位置,高动态范围颜色是有用的。
低精度fixed
11位
范围为-2.0至+2.0和1/256精度
固定精度对常规颜色(通常存储在常规纹理中)和对其执行简单操作很有用。
整数int
Direct3D 11,OpenGL ES 3,Metal等现代平台才支持整数数据类型
复合矢量/矩阵类型
HLSL具有从基本类型创建的内置向量和矩阵类型。例如,float3是具有.x,.y,.z组件的3D矢量,并且half4是具有.x,.y,.z,.w组件的中等精度4D矢量。或者,可以使用.r,.g,.b,.a组件对向量进行索引,这在处理颜色时非常有用。矩阵类型以类似的方式构建; 例如float4x4是4x4转换矩阵。请注意,一些平台只支持方阵,最主要的是OpenGL ES 2.0。
纹理/取样器类型
低精度采样器
sampler2D _MainTex;
samplerCUBE _Cubemap;
半精度采样器
sampler2D_half _MainTex;
samplerCUBE_half _Cubemap;
如果纹理包含HDR颜色,则可能需要使用半精度采样器
全精度采样器
sampler2D_float _MainTex;
samplerCUBE_float _Cubemap;
如果您的纹理包含完整的浮点精度数据(例如深度纹理),请使用全精度采样器
注:在PC上GPU会把half和fixed统一按float处理。
评论:
发表评论: