目录: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)给定对象空间下的坐标和法线,然后再从逐顶点的光源信息和环境光信息计算出光照值。