内置着色器功能函数
unity有一系列的内置功能函数,这些函数非常实用,能够帮助用户更加简单的编写shader。
UnityCG.cginc中的函数
- 顶点变换函数
函数 | 描述 |
float4 UnityObjectToClipPos(float3 pos) |
将一个点从物体空间转化到摄像机裁剪空间的坐标。这个函数等价于 mul(UNITY_MATRIX_MVP,float(pos,1.0)),应该应用在它的位置上 |
float3 UnityObjectToViewPos(float3 pos) | 将一个点从物体空间转化到视口空间。这个等价于mul(UNITY_MATRIX_MV,float4(pos,1.0).xyz) |
- 其它函数
函数 | 描述 |
float3 WorldSpaceViewDir (float4 v) | 返回从给定的物体空间顶点位置向相机位置的世界空间方向(非标准化)。 |
float3 ObjSpaceViewDir (float4 v) | 返回从给定的物体空间顶点位置到相机位置的世界空间方向(非标准化) |
float2 ParallaxOffset (half h, half height, half3 viewDir) | 计算视差正常映射的UV偏移量 |
fixed Luminance (fixed3 c) | 转化颜色变为亮度(灰度) |
fixed3 DecodeLightmap (fixed4 color) | 从Unity lightmap (RGBM或dLDR依赖于平台)解码颜色。 |
float4 EncodeFloatRGBA (float v) | 编码[0,1]范围float数到RGBA颜色,用于低精度渲染目标的存储 |
float DecodeFloatRGBA (float4 enc) | 将RGBA颜色转译为float |
float2 EncodeFloatRG (float v) | 将[0,1]范围内的float转化为float2 |
float DecodeFloatRG (float2 enc) | 解码一个预先编码的RG浮点数 |
float2 EncodeViewNormalStereo (float3 n) | 将视图空间法线编码为两个0-1范围的数字 |
float3 DecodeViewNormalStereo (float4 enc4) | 从enc4.xy中解码视图空间法线 |
- 前置渲染功能函数
这些功能函数只有在使用前置渲染是才有用(ForwardBase or ForwardAdd 传递类型)
函数 | 描述 |
float3 WorldSpaceLightDir (float4 v) | 从给定物体空间顶点位置,计算到光的世界空间方向(非标准化) |
float3 ObjSpaceLightDir (float4 v) | 从给定物体空间顶点位置,计算到光的世界空间方向(非标准化) |
float3 Shade4PointLights (...) | 用四个点光源计算照明,将光数据紧密地压缩成矢量。向前渲染使用这个来计算每个顶点照明 |
- 屏幕空间函数
下面的功能是帮助计算用于取样屏幕空间纹理的坐标。它们返回float4类型,在那里,可以通过透视分割来计算纹理的最终坐标
在渲染纹理坐标的时候,函数也会处理平台的差异。
函数 | 描述 |
float4 ComputeScreenPos (float4 clipPos) | 计算纹理坐标来做一个屏幕空间的纹理样本。输入是剪辑空间位置。 |
float4 ComputeGrabScreenPos (float4 clipPos) | 计算纹理坐标,以采样一个GrabPass文本。输入是剪辑空间位置。 |
顶点光照函数
这些函数只有在使用每个顶点光照着色时才有用。
函数 | 描述 |
float3 ShadeVertexLights (float4 vertex, float3 normal) | 从四个顶点光源和环境中计算照明,给定对象空间位置和正常 |