目录:Unity Shader - 知识点目录(先占位,后续持续更新)
原文:Built-in shader helper functions
版本:2019.1
Built-in shader helper functions
(这里的说明做个总览,详细了解最好还是看Unity对应的.cginc文件)
内置shader辅助函数
Unity有许多的内置工具函数,目的让编写shader时更简单方便。
Functions declared in UnityCG.cginc
定义在UnityCG.cginc的函数
查看 Built-in shader include files 可总览Unity提供的shader头文件。
Vertex transformation functions in UnityCG.cginc
在UnityCG.cginc中的顶点转换函数
函数 | 描述 |
---|---|
float4 UnityObjectToClipPos(float3 pos) | 将一个坐标从对象空间转换到相机裁剪空间的齐次坐标。等价于 mul(UNITY_MATRIX_MVP, float4(pos, 1.0)),应该使用这个宏来代替这种写法。 |
float3 UnityObjectToViewPos(float4 pos) | 将一个坐标从对象空间转换到视角空间下的坐标。等价于 mul(UNITY_MATRIX_MV, float4(pos, 1.0)).xyz,应该使用这个宏来代替这种写法。 |
Generic helper functions in UnityCG.cgin
在UnityCG.cginc的其他辅助函数
函数 | 描述 |
---|---|
float3 WorldSpaceViewDir(float4 v) | 给定对象空间顶点坐标返回的世界空间下朝向相机的方向(没有归一化)。 |
float4 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颜色(每个通道8位)。 |
float DecodeFloatRGBA(float4 enc) | 将RGBA颜色解码成一个float数值。 |
float2 EncodeFloatRG(float v) | 将一个0~1范围的float编码到一个float2。 |
float DecodeFloatRG(float2 enc) | 将之前编码的RG解码成一个float。 |
float2 EncodeViewNormalStereo(float3 n) | 将视角空间下的法线编码成两个0~1范围的float数值。 |
float3 DecodeViewNormalStereo(float4 enc) | 将一个float4的前两个分量.xy解码成一个float3的视角空间下的法线。 |
Forward rendering helper functions in UnityCG.cginc
在UnityCG.cginc中的正向渲染辅助函数
这些函数仅在使用正弦渲染(ForwardBase或是ForwardAdd类型的pass)中有用。
函数 | 描述 |
---|---|
float3 WorldSpaceLightDir(float4 v) | 给定对象空间下的顶点坐标,计算转换为世界空间下朝向光源方向的向量(无归一化)。 |
float3 ObjSpaceLightDir(float4 v) | 给定对象矿建下的顶点坐标,计算出对象空间下朝向光源方向的向量(无归一化)。 |
float3 Shade4PointLights(…) | 通过4个点光源的数据紧紧打包在向量中,来计算出光亮度。正向渲染使用这个来计算逐顶点光照。 |
Screen-space helper functions in UnityCG.cginc
在UnityCG.cginc中的屏幕空间下的辅助函数
下面的函数用于辅助计算用来采样屏幕空间纹理的坐标。它们返回 float4坐标,该坐标是最终用于采样纹理的坐标,可以通过透视除法得到(如:xy/w) 。
这些函数在计算渲染纹理坐标时也会处理相对不同平台的差异(platform differences)。
函数 | 描述 |
---|---|
float4 ComputeScreenPos(float4 clipPos) | 输入裁剪空间下的坐标。计算出可用于采样屏幕空间纹理的坐标。 |
float4 ComputeGrabScreenPos(float4 clipOs) | 输入裁剪空间下的坐标。计算出可用于采样 GrabPass 出来的纹理的坐标。 |
Vertex-lit helper functions in UnityCG.cginc
在UnityCG.cginc中的顶点光照辅助函数
这些函数仅仅在使用逐顶点光照的shader中有用("Vertex"类型的pass)。
函数 | 描述 |
---|---|
float3 ShadeVertexLights(float4 vertex, float3 normal) | 给定对象空间下的坐标和法线,然后再从逐顶点的光源信息和环境光信息计算出光照值。 |