本文主要参考来自《unity shader入门精要》一书
一.ShaderLab属性类型和Cg变量类型的匹配关系
Color,Vector----float4,half4,fixed4
Range,Float----float,half,fixed
2D----sampler2D
Cube----samplerCube
3D----sampler3D
属性的修饰符有如下几种:
二.Cg/HLSL中3种精度的数值类型
float:最高精度的浮点值,32为存储
half:中等精度,16位存储
fixed:最低精度,11位存储
大多数现代的GPU会把所有计算都按最高浮点精度计算
一个基本建议:尽可能使用精度较低的额类型,因为这可以优化Shader的性能
由于颜色属性的范围在0-1之间,因此用fixed精度的变量来存储它,而range类型的数据较大,用float精度存储。
三.unity支持的Cg语义
A.从应用阶段传递模型数据给顶点着色器时unity支持的语义
POSITION:模型空间中的顶点位置
NORMAL:顶点法线,float3
TANGENT:顶点切线,float4
TEXCOORDn:该顶点的纹理坐标,TEXCOORD表示第一组纹理坐标。
COLOR:顶点颜色,float4/fixed4
B.从顶点着色器传递数据给片元着色器时
SV_POSITION:裁剪空间中的顶点坐标,结构体中必须包含一个用该语义修饰的变量。
COLOR0:通常用于输出第一组顶点颜色
COLOR1:通常用于输出第二组顶点颜色
TEXCOORD0-TEXCOORD7:通常用于输出纹理坐标
C.片元着色器输出时
SV_Target:输出值将会存储到渲染目标(Render Target)中。