UnityCG.cginc

作者:追风剑情 发布于:2023-4-16 12:27 分类:Shader

数学常量
描述
UNITY_PI 圆周率
UNITY_TWO_PI 2倍圆周率
UNITY_FOUR_PI 4倍圆周率
UNITY_INV_PI 圆周率的倒数
UNITY_INV_TWO_PI 2倍圆周率的倒数
UNITY_INV_FOUR_PI 4倍圆周率的倒数
UNITY_HALF_PI 半圆周率
UNITY_INV_HALF_PI 半圆周率的倒数
UNITY_MATRIX_V 观察矩阵
UNITY_MATRIX_P 投影矩阵
UNITY_MATRIX_VP 观察矩阵与投影矩阵的乘积
TANGENT_SPACE_ROTATION 一个类型为float3x3的矩阵。这个矩阵由顶点的法线、切线,以及与顶点的法线和切线都垂直的副法线组成,构成了一个正交的切线空间。
unity_ObjectToWorld 把一个顶点从模型空间变换到世界空间的变换矩阵
unity_WorldToObject 把一个顶点从世界空间变换到模型空间的变换矩阵
_WorldSpaceLightPos0 世界空间中主光源位置
_WorldSpaceCameraPos 世界空间中主摄像机位置
结构体
顶点信息结构体 描述
appdata_base
struct appdata_base {
	float4 vertex: POSITION;	//世界坐标下的顶点坐标
	float3 normal: NORMAL;		//顶点法线
	float4 texcoord: TEXCOORD0;	//顶点使用的第一层纹理坐标
	UNITY_VERTEX_INPUT_INSTANCE_ID; //顶点多例化的ID
};
appdata_tan
struct appdata_tan {
	float4 vertex: POSITION;	//世界坐标下的顶点坐标
	float4 tangent: TANGENT;	//顶点切线
	float3 normal: NORMAL;		//顶点法线
	float4 texcoord: TEXCOORD0;	//顶点使用的第一层纹理坐标
	UNITY_VERTEX_INPUT_INSTANCE_ID; //顶点多例化的ID
};
appdata_full
struct appdata_full {
	float4 vertex: POSITION;	//世界坐标下的顶点坐标
	float4 tangent: TANGENT;	//顶点切线
	float3 normal: NORMAL;		//顶点法线
	float4 texcoord: TEXCOORD0;	//顶点使用的第一层纹理坐标
	float4 texcoord1: TEXCOORD1;	//顶点使用的第二层纹理坐标
	float4 texcoord2: TEXCOORD2;	//顶点使用的第三层纹理坐标
	float4 texcoord3: TEXCOORD3;	//顶点使用的第四层纹理坐标
	fixed4 color: COLOR;		//顶点颜色
	UNITY_VERTEX_INPUT_INSTANCE_ID; //顶点多例化的ID
};
该结构体定义了四层纹理坐标和顶点颜色,在做地形渲染时,通常会用到非常多的纹理以产生复杂多变的地面效果。
颜色空间工具函数
函数 描述
bool IsGammaSpace() 判断当前是否启用了伽马颜色空间。函数内部根据宏UNITY_COLORSPACE_GAMMA是否被启用了来做出判断。
float GammaToLinearSpaceExact(float value) 把一个颜色值精确的从伽马颜色空间变换到线性颜色空间。
half3 GammaToLinearSpace(float sRGB) 把一个颜色值近似的从伽马颜色空间变换到线性颜色空间。
float LinearToGammaSpaceExact(float value) 把一个颜色值精确的从线性颜色空间变换到伽马颜色空间。
空间变换工具函数
函数 描述
float4 UnityWorldToClipPos(in float3 pos) 世界空间坐标转齐次裁剪空间坐标。
float4 UnityViewToClipPos(in float3 pos) 观察空间坐标转齐次裁剪空间坐标。
float3 UnityObjectToViewPos(in float3 pos) 模型局部空间坐标转观察空间坐标。
float3 UnityObjectToViewPos(float4 pos) 重载版。
模型局部空间坐标转观察空间坐标。
float3 UnityWorldToViewPos(in float3 pos) 世界空间坐标转观察空间坐标。
float3 UnityObjectToWorldDir(in float3 dir) 把一个方向向量从模型空间变换到世界空间并进行单位化。
float3 UnityWorldToObjectDir(in float3 dir) 把一个方向向量从世界空间变换到模型空间并进行单位化。
float3 UnityObjectToWorldNormal(in float3 norm) 把某顶点的法线从模型空间变换到世界空间。
float3 UnityWorldSpaceLightDir(in float3 worldPos) 返回从worldPos指向世界空间中光源位置_WorldSpaceLightPos0的方向矢量。
float3 WorldSpaceLightDir(in float4 localPos) 函数先将localPos从模型空间变换到世界空间,再调用UnityWorldSpaceLightDir()函数计算从localPos指向世界空间中光源位置_WorldSpaceLightPos0的方向矢量。
float3 ObjSpaceLightDir(in float4 v) 函数先将_WorldSpaceLightPos0从世界空间变换到模型空间,再计算从v指向模型空间中光源位置_WorldSpaceLightPos0的方向矢量。
float3 UnityWorldSpaceViewDir(in float3 worldPos) 计算世界空间中worldPos到摄像机位置_WorldSpaceCameraPos的连线向量。
float3 WorldSpaceViewDir(in float4 localPos) 函数会先将localPos变换到世界空间中。再计算世界空间中localPos到摄像机位置_WorldSpaceCameraPos的连线向量。
float3 ObjSpaceViewDir(in float4 v) 函数会先将_WorldSpaceCameraPos变换到模型空间中。再计算模型空间中v到摄像机位置_WorldSpaceCameraPos的连线向量。

标签: Shader

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号