内置着色器功能函数

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) 从四个顶点光源和环境中计算照明,给定对象空间位置和正常
原文地址:https://www.cnblogs.com/leiGameDesigner/p/8458650.html