Unity Shader - Built-in shader helper functions 内置shader辅助函数

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

你可能感兴趣的:(Unity,Shader,译文)