Shader语义

概念


概念:顾名思义,就是语句的含义,通俗的说:就是告诉Shader从哪里得到这些参数,并且又把这些参数输出到哪里。
其实语义是HLSL中的语法,但是Unity中的ShaderLab并不支持全部语义
DirectX10之后,有了一种新的语义,叫做系统数值语义,这些语义是以SV开头的。
这些语义有特殊的含义,不能随便赋值,比如SV_POSITION,在系统中表示齐次空间下的坐标。
再比如SV_Target,就代表从片段着色器中输出的即将要存储到渲染目标上的颜色值。
比如索尼的PS4上就不能使用COLOR来代替SV_Target
所以为了良好的跨平台型,特殊的地方要使用特殊语义。
 
Unity中所支持的语义:
从应用阶段传输参数到顶点着色器阶段的时候有一些特殊的语义:
1:POSITION:通常代表模型坐标系下的顶点坐标,通常是float4
2NORMAL :  顶点法线,通常是float3类型
3:TANGENT : 顶点切线,通常是float4类型
4:TEXCOORDn : 从第1套到第七套
5:COLOR : 顶点颜色,通常是fixed4或者float4类型
 
从顶点着色器传输参数到片段着色器阶段的时候一些特殊语义:
SV_POSITION :代表齐次裁剪坐标系中的坐标位置,是必须要有的
COLOR0 :通常用于输出第一组顶点颜色,但是不是必须的
COLOR1 : 通常用于输出第二组顶点颜色,但是不是必须的
TEXCOORD0 ~ TEXCOORD7 : 通常用于输出纹理坐标,从第一套到第八套。
 
片段着色器输出的时候Unity支持的语义:
SV_Target : 输出的值会存储到渲染目标中, 等同于 Direct9 中的COLOR, 但是大家必须要在这里使用SV_Target;
 

Unity内置变换矩阵:

属性名 含义
UNITY_MATRIX_MVP 模型(M)观察(V)投影(P)矩阵,从模型空间到裁剪空间
UNITY_MATRIX_MV 模型(M)观察(V)矩阵,从模型空间到观察空间
UNITY_MATRIX_V 观察(V)矩阵,从世界空间到观察空间
UNITY_MATRIX_P 投影(P)矩阵,从观察空间到裁剪空间
UNITY_MATRIX_VP 观察(V)投影(P)矩阵,从世界空间到裁剪空间
UNITY_MATRIX_T_MV UNITY_MATRIX_MV的转置矩阵
UNITY_MATRIX_IT_MV UNITY_MATRIX_MV的逆转置矩阵,用于将法线从模型空间转换到观察空间
_Object2World 模型矩阵,从模型空间到世界空间
_World2Object _Object2World的逆矩阵,从世界空间到模型空间

Untiy摄像机和屏幕参数:

属性名 含义
_WorldSpaceCameraPos(float3) 摄像机的世界坐标
_ProjectionParams(float4) 投影参数: x=±1.0(-1.0表示使用翻转投影矩阵进行渲染)y=Near近裁剪平面与摄像机的距离z=Far远裁剪平面与摄像机的 距离w=1.0+1.0/Far
_ScreenParams(float4) 屏幕参数: x=width渲染目标的像素宽度,y=height渲染目标的像素高度,z=1.0+1.0/width,w=1.0+1.0/height
_ZBufferParams(float4) 线性化Z(深度)缓冲参数,x=1-Far/Near,y=Far/Near,z=x/Far,w=y/Far
unity_OrthoParams(float4) 正交投影摄像机参数,x=width,y=height,z未使用,w=1.0(正交投影摄像机)或0.0(透视摄像机)
unity_CameraProjection(float4x4) 摄像机投影矩阵
unity_CameraInvProjection(float4x4) unity_CameraProjection的逆矩阵
unity_CameraWorldClipPlanes(float4[6]) 摄像机6个裁剪平面在世界空间下的方程式。顺序:左、右、下、上、近、远

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!