unityshader之内置辅助文件初探

最近刚开始学shader。

unity为我们封装了许多很实用的变量、函数。

先mark一下,方便以后使用的时候查看。(只记录目前经常用到的,以后会不断更新、整理

 

首先,这些变量函数都是封装在一些文件里的。

Unity中的着色器包含文件具有.cginc扩展名,内置的文件是(其中自动包含的已用绿色标记):

  • HLSLSupport.cginc- 声明了很多用于跨平台编译的宏和定义
  • UnityShaderVariables.cginc- 常用的全局变量。
  • UnityCG.cginc- 常用的辅助函数。
  • AutoLight.cginc- 照明和阴影功能,例如表面着色器内部使用此文件。
  • Lighting.cginc- 包含各种内置的光照模型,如果编写的是表面着色器的话,会自动包含进来。
  • TerrainEngine.cginc- 地形辅助功能和植被着色器。

 

这些文件放在:Unity/Editor/Data/CGIncludes文件夹下,可以随时查看里面的内容。

 

包含在UnityShaderVariables.cginc中:

变换矩阵(描述中的x代指“顶点/方向矢量”)

名称描述
UNITY_MATRIX_MVP当前模型*视图*投影矩阵,用于将x从模型空间变换到裁剪空间
UNITY_MATRIX_MV当前模型*视图矩阵,用于将x从模型空间变换到视图空间
UNITY_MATRIX_V当前视图矩阵,用于将x从世界空间变换到视图空间
UNITY_MATRIX_P当前投影矩阵。用于将x从观察空间变换到裁剪空间
UNITY_MATRIX_VP当前视图*投影矩阵。用于将x从世界空间变换到裁剪空间
UNITY_MATRIX_T_MVUNITY_MATRIX_MV矩阵的转置
UNITY_MATRIX_IT_MVUNITY_MATRIX_MV的逆转置,用于将法线从模型空间变换到观察空间
unity_ObjectToWorld当前模型矩阵,用于将x从模型空间变换到世界空间
unity_WorldToObjectunity_ObjectToWorld的逆矩阵,用于将x从世界空间变换到模型空间

 

灯光:

光参数以不同的方式传递给着色器,具体取决于渲染路径中使用,以及着色器中使用的LightMode 。
ForwardBaseForwardAdd传递类型:

名称类型
_LightColor0 (在Lighting.cginc中声明)fixed4访问该Pass处理的光源的颜色和强度信息
_WorldSpaceLightPos0float4光源方向(只适用于单光源)

 

雾和环境:

   
名称类型
UNITY_LIGHTMODEL_AMBIENTfixed4环境照明颜色(渐变环境中的天空颜色)。

 

在UnityCG.cginc中声明的函数:

UnityCG.cginc中的顶点变换功能

功能:描述:

float4 UnityObjectToClipPos(

float3 pos)

将点从对象空间转换为相机在齐次坐标系中的剪裁空间。

这相当于mul(UNITY_MATRIX_MVP,float4(pos,1.0))

float3 UnityObjectToViewPos( float3 pos)

将点从对象空间转换为视图空间。这相当于

mul(UNITY_MATRIX_MV,float4(pos,1.0)).xyz

UnityCG.cginc中的通用助手函数

功能:描述:
float3 WorldSpaceViewDir (float4 v)

给定一个模型空间顶点位置,返回世界空间中从该点到摄像机的

观察方向(未归一化)。

float3 ObjSpaceViewDir (float4 v)

给定一个模型空间顶点位置,返回模型空间中从该点到摄像机的

观察方向(未归一化)。

在UnityCG.cginc中转发渲染辅助函数

这些函数仅在使用正向渲染时有用(ForwardBase或ForwardAdd传递类型)。

功能:描述:
float3 WorldSpaceLightDir (float4 v)给定一个模型空间顶点位置,返回世界空间中从该点到光源的光照方向。(未归一化)
float3 ObjSpaceLightDir (float4 v)给定一个模型空间顶点位置,返回模型空间中从该点到光源的光照方向。(未归一化)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值