内置着色器 helper 函数

时间:2023-02-16   阅读次数:

为强化记忆,除了经常实践中应用以外,也在此手写抄录官网的资料,以加深和更加清晰的明白其中原理。以下资料直接摘录自官网,原文链接:https://docs.unity3d.com/cn/2023.1/Manual/SL-BuiltinFunctions.html

Unity 具有许多内置实用函数,旨在使编写着色器更简单,更轻松。


UnityCG.cginc 中声明的函数


顶点变换函数

功能描述
float4 UnityObjectToClipPos(float3 pos)将对象空间中的点变换到齐次坐标中的摄像机裁剪空间。这与mul(UNITY_MATRIX_MVP,float4(pos,1.0))等效,应该在适当的位置使用,(注:使用频率很高,在顶点渲染中经常出现)
float4 UnityObjectToViewPos(float3 pos)将对象空间中的点变换到视图空间。这与 __mul(UNITY_MATRIX_MV,float4(pos,1.0)).xyz__ 等效,应该在适当的位置使用。


通用helper函数

功能描述
float3 WorldSpaceViewDir (float4 v)返回从给定对象空间顶点位置朝向摄像机的世界空间方向(未标准化)
float3 ObjSpaceViewDir (float4 v)返回从给定对象空间顶点位置朝向摄像机的对象空间方向(未标准化)
float3 ParallaxOffset (half h,half height,half3 viewDir)计算视差法线贴图的UV偏移
fixed Luminance (fixed3 c)将颜色转换为亮度(灰阶)
fixed3 DecodeLightMap (fixed4 color)从Unity光照贴图(RGBM或dLDR,具体取决于平台)解码颜色
float4 EncodeFloatRGBA (float v)将[0..1)范围浮点数编码为RGBA颜色,用于存储在低精度渲染目标中
float DecodeFloatRGBA (float4 enc)将RGBA颜色解码为浮点数
float2 EncodeFloatRG (float v)将[0..)范围浮点数编码为float2
float DecodeFloatRG (float2 enc)解码先前编码的 RG 浮点数
float2 EncodeViewNormalStereo (float3 n)将视图空间法线编码为 0 到 1 范围内的两个数字
float3 DecodeViewNormalStereo (float4 enc4)从 enc4.xy 解码视图空间法线


前向渲染 helper 函数

功能描述
float3 WorldSpaceLightDir (float4 v)根据给定的对象空间顶点位置计算朝向光源的世界空间方向(未标准化)
float3 ObjSpaceLightDir (float4 v)根据给定对象空间顶点位置计算朝向光源的对象空间方向(未标准化)
float3 Shade4PointLights (...)计算四个点光源的光照,将光源数据紧密打包到矢量中。前向渲染使用它来计算每顶点光照


屏幕空间 helper 函数

功能描述
float4 ComputeScreenPos (float4 clipPos)计算用于执行屏幕空间贴图纹理采样的纹理坐标,输入是裁剪空间位置。
float4 ComputeGrabScreenPos (float4 clipPos)计算用于GrabPass纹理采样的纹理坐标,输入是裁剪空间位置。


顶点光照 helper 函数

功能描述
float3 ShadeVertexLights (float4 vertex, float3 normal)根据给定的对象空间位置和法线计算四个每顶点光源和环境光的光照。


其它文章