UnityShader内置函数总结

一、在学习shader入门精要过程中我用的unity2018.4版本

1、Unity常用包含文件

Unity常用包含文件
文件名 描述
UnityCG.cginc 包含了常用的帮助函数、宏和结构体
UnityShaderVariables.cginc 在编译UnityShader时,会被自动包含进去,包含了许多内置的全局变量,如:UNITY_MATRIX_MVP等
Lighting.cginc 包含了各种内置的光照模型,如果编写的的是SurfaceShader的话,会自动包含进去
HLSLSupport.cginc 在编译UnityShader时,会自动包含进来,声明了很多用于跨平台编译的宏和定义

2、UnityCG.cginc中一些常用的结构体

UnityCG.cginc中一些常用的结构体
名称 描述 包含的变量
appdata_base 可用于顶点着色器的输入 顶点位置、顶点法线、第一组纹理坐标
appdata_tan 可用于顶点着色器的输入 顶点位置、顶点切线、顶点法线、第一组纹理坐标
appdata_full 可用于顶点着色器的输入 顶点位置、顶点切线、顶点法线、四组(或更多)纹理坐标
appdata_img 可用于顶点着色器的输入 顶点位置、第一组纹理坐标
v2f_img 可用于顶点着色器的输出 裁切空间中的位置、纹理坐标

 

3、Unity.cginc中一些常用的帮助函数

Unity.cginc中一些常用的帮助函数
float3 WorldSpaceViewDir(float4 v) 输入一个模型空间中的顶点位置,返回世界空间中的从该点到摄像机的观察方向
float3 UnityWorldSpaceViewDir(float4 v) 输入一个世界空间中的顶点位置,返回世界空间中的从该点到摄像机的观察方向
float3 ObjSpaceViewDir(float4 v) 输入一个模型空间中的顶点位置,返回模型空间中的从该点到摄像机的观察方向
float3 WorldSpaceLightDir(float4 v) 仅可用于前向渲染中。输入一个模型空间中的顶点位置,返回世界空间中的从该点到光源的光照方向,没有被归一化。
float3 UnityWorldSpaceLightDir(float4 v) 仅可用于前向渲染中。输入一个世界空间中的顶点位置,返回世界空间中的从该点到光源的光照方向,没有被归一化。
float3 ObjSpaceLightDir(float4 v) 仅可用于前向渲染中。输入一个模型空间中的顶点位置,返回模型空间中的从该点到光源的光照方向,没有被归一化。
float3 Shade4PointLights(...) 仅可用于前向渲染中。计算四个点光源的光照,它的参数是已经打包进矢量的光照数据,如unity_4LightPosX0、unity_LightColor等。前向渲染通常会使用这个函数计算逐顶点光照。
float3 UnityObjectToWorldNormal(float3 norm) 把法线方向从模型空间转换到世界空间中
float3 UnityObjectToWorldDir(in float3 dir) 把方向矢量从模型空间变换到世界空间中
float3 UnityWorldToObjectDir(float3 dir) 把方向矢量从世界空间变换到模型空间中

4、从应用阶段传递模型数据给顶点着色器时Unity支持的常用语义

从应用阶段传递模型数据给顶点着色器时Unity支持的常用语义
语义 描述
POSITION 模型空间中的顶点位置,通常是float4类型
NORMAL 顶点法线,通常是float3类型
TANGENT 顶点切线,通常是float4类型
TEXCOORDn,如:TEXCOORD0、TEXCOORD1 该顶点的纹理坐标,TEXCOORD0表示第一组纹理坐标
COLOR 顶点颜色,通常是fixed4或者float4类型
   

5、从顶点着色器传递数据给片元着色器时Unity使用的常用语义

从顶点着色器传递数据给片元着色器时Unity使用的常用语义
语义 描述
SV_POSITION 裁切空间中的顶点坐标,结构体中必须包含一个用该语义修饰的变量
COLOR0 通常用于输出第一组顶点颜色,但不是必须的
COLOR1 通常用于输出第二组顶点颜色,但不是必须的
TEXCOORD0~TEXCOORD7 通常用于输出纹理坐标,但不是必须的

6、片元着色器输出时Unity支持的常用语义

片元着色器输出时Unity支持的常用语义
语义 描述
SV_Target 输出值将会存储到渲染目标中。
   

 

7、CG提供帮助函数

CG提供函数
样式 函数 参数 返回值
saturate(x) 把x截取在[0,1]范围内,如果x是一个矢量,那么会对它的每个分量进行这样的操作 x:为用于操作的标量或者矢量 [0,1]范围
reflect(i,n) 计算反射方向 i:入射方向;n:法线方向 反射方向
tex2D(m,v) 对纹理进行采样 m:需要被采样的纹理,v:float2类型的纹理坐标 得到的纹素值

clip(float4 x)

clip(float3 x)

clip(float2 x)

clip(float1 x)

clip(float x)

透明度测试(如果给定的参数任何一个分量是负数,就会舍弃当前像素的输出颜色) 裁切时使用的标量或者矢量条件  
cross(A,B) 返回两个三元向量的叉积(cross product)。注意,输入参数必须是三元向量    
floor(f) 返回小于等于参数的最大整数值    
frac(f) 取小数部分    

 

8、前向渲染可以使用的内置光照变量

名称 类型 描述
LightColor0 float4 访问该Pass处理的光源的颜色和强度信息(想要得到正确的值需要定义合适的LightMode标签)
_WorldSpaceLightPos0 float4 _WorldSpaceLightPos0.xyz是该Pass处理的逐像素光源的位置。如果该光源是平行光,那么_WorldSpaceLightPos0.w是0,其他光源类型w值为1.
_LightMatrix0 float4x4 从世界空间到光源空间的变换矩阵。可以采用cookie和光强衰减(attenuation)纹理

unity_4LightPosX0,

unity_4LightPosY0,

unity_4LightPosZ0

float4 仅用于BasePass。前4个非重要的点光源在世界空间中的位置
unity_4LightAtten0 float4 仅用于BasePass。存储了前4个非重要的点光源的衰减因子
unity_LightColor half[4] 仅用于BasePass。存储了前4个非重要的点光源的颜色

9、unity内置的时间变量

名称 类型 描述
_Time float4 t是自该场景加载开始所经过的时间,4个分量的值分别是(t/20,t,2t,3t)
_SinTime float4 t是时间的正弦值,4个分量的值分别是(t/8,t/4,t/2,t)
_CosTime float4 t是时间的余弦值,4个分量的值分别是(t/8,t/4,t/2,t)
unity_DeltaTime float4 dt是时间增量,4个分量的值分别是(dt,1/dt,smoothDt,1/smoothDt)

 

你可能感兴趣的:(图像处理,unity)