对于一些shader常用的一些函数以及相关内置变量的整理

1,UnityCG.cginc 常用函数(为了避免跟矩阵混淆,可以以一些结构特点来区分,比如函数一般没有下划线
而矩阵可能会有下划线标示,比如矩阵的unity_…,而函数会是Unity…。)

函数说明
float3 WorldSpaceViewDir(float4 v)输入一个模型空间的顶点位置,返回世界空间中从该点到摄像机的观察
方向。内部实现使用了 UnityWorldSpaceViewDir函数
float3 UnityWorldSpaceViewDir(float4 v)输入一个世界空间的顶点位置,返回世界空间中从该点到摄像机的观察方向
可以在UnityCG.cginc查看其代码计算
float3 ObjSpaceViewDir(float4 v)输入一个模型空间中的顶点位置,返回模型空间中从该点到摄像机的观察方向
UnityObjectToClipPos(v.vertex)这个函数是将模型空间顶点转换到裁剪空间函数:应用举例:o.pos = UnityObjectToClipPos(v.vertex)
float3 ObjSpaceLightDir(float4 v)仅用于前向渲染中(ForwardBase),输入一个模型空间中的顶点位置,
返回模型空间中从该点到光源的光照方向,没有被归一化
float3 WorldSpaceLightDir(float4 v)仅用于前向渲染中(ForwardBase),输入一个模型空间中的顶点位置,返回世界
空间中从该点到光源的光照方向,没有被归一化
float3 UnityWorldSpaceLightDir(float4 v)仅可用于前向渲染中,输入一个世界空间的顶点位置,返回世界空间从该点到
光源的光照方向,没有被归一化
float3 UnityObjectToWorldNormal(float3 norm)把法线从模型空间转换到世界空间中
float3 UnityObjectToWorldDir(float3 dir)把方向矢量从模型空间转换到世界空间中
float3 UnityWorldToObjectDir(float3 dir)把方向矢量从世界空间转换到模型空间中
float3 Shade4PointLights(…)仅可用于前向渲染中,计算四个点光源的光照,它的参数是已经打包进矢量的
光照数据。前向渲染通常会使用这个函数来计算逐顶点光照

2,内置的一些变量

变量说明
UNITY_LIGHTMODEL_AMBIENT是Unity自带的宏定义常量,目的获取环境光。 应用举例:
float3 ambientLighting = float3(UNITY_LIGHTMODEL_AMBIENT) * float3(_Color)
_WorldSpaceLightPos0获得世界空间灯光位置 fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);求光源方向还有中写法是用上面的UnityWorldSpaceLightDir(float4 v),这是Unity5新添加的内置函数。这个变量一般在Forward渲染路径下使用,存储的是重要的pixel光源,没错,的确是使用w来判断这个光源的类型的,一般和_LightColor0配合使用
_WorldSpaceCameraPos过这个可以获得世界空间的摄像机位置fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - i.worldPos.xyz);

3.Unity内置的变换矩阵

矩阵名说明
UNITY_MATRIX_MVP当前的模型观察投影矩阵,用于将顶点/方向矢量从模型空间转换到裁剪空间
UNITY_MATRIX_MV当前的模型*观察矩阵,用于将顶点/方向矢量从模型空间转换到观察空间
UNITY_MATRIX_V当前的观察矩阵,用于将顶点/方向矢量从世界空间转换到观察空间
UNITY_MATRIX_P当前的投影矩阵,用于将顶点/方向矢量从观察空间转换到裁剪空间
UNITY_MATRIX_VP当前的观察*投影矩阵,用于将顶点/方向矢量从世界空间转换到裁剪空间
UNITY_MATRIX_T_MVUNITY_MATRIX_MV的转置矩阵
UNITY_MATRIX_IT_MVUNITY_MATRIX_MV的逆转置矩阵,用于将发现从模型空间转换到观察空间,也可以用于得到UNITY_MATRIX_MV的逆矩阵
unity_ObjectToWorld(_Object2World)当前的模型矩阵,用于将顶点/方向矢量从模型空间变换到世界空间
unity_WorldToObject(_World2Object)用于将顶点/方向矢量从世界空间转换到模型空间。应用举例:o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;

4.摄像机和屏幕参数

类型变量名描述
_WorldSpaceCameraPosfloat3该摄像机在世界空间中的位置
_ProjectionParamsfloat4x=1.0(或-1.0,如果正在使用一个翻转的投影矩阵进行渲染),y=Near,z=Far,w=1.0+1.0/Far,其中Near和Far分别是近裁剪平面和远裁剪平面到摄像机的距离
_ScreenParamsfloat4x=width,y=height,z=1.0+1.0/width,w=1.0+1.0/height,其中width和height分别是该摄像机的渲染目标(render target)的像素宽度和高度
_ZBufferParamsfloat4x=1-Far/Near,y=Far/Near,z=x/Far,w=y/Far,该变量用于线性化Z缓存中的深度值
unity_OrthoParamsfloat4x=width,y=height,z没有定义,w=1.0(该摄像机是正交摄像机)或w=0.0(该摄像机是透视摄像机),其中width和height是正交投影摄像机的宽度和高度
unity_CameraProjectionfloat4x4该摄像机的投影矩阵
unity_CameraInvProjectionfloat4x4该摄像机的投影矩阵的逆矩阵
unity_CameraWorldClipPlanes[6]float4x4该摄像机的6个裁剪平面在世界空间下的等式,按左、右、下、上、近、远裁剪平面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值