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、前向渲染可以使用的内置光照变量

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

unity_4LightPosX0,

unity_4LightPosY0,

unity_4LightPosZ0

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

9、unity内置的时间变量

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值