2023年12月7日发(作者:)

的工具函数和宏(一)

一、包含的数学常数

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 半圆周率的倒数

二、与颜色空间相关的常数和工具函数

1、IsGammaSpace() 用于判断当前是否启用了伽马颜色空间

根据宏UNITY_COLORSPACE_GAMMA是否被启用了,判断当前是否启用了伽马颜色空间。本函数在新版本中不再使

用,保留它是为了兼容旧版本及很多已经存在的着色器。

2、GammaToLinearSpaceExact(float value) 把一个颜色值精确地从伽马颜色空间变换到线性空间。

3、GammaToLinearSpace(half3 sRGB) 把颜色值近似地从伽马颜色空间变换到线性空间。

4、LinearToGammaSpaceExact(float value) 把一个颜色值精确地从线性空间变换到伽马颜色空间。

5、LinearToGammaSpace(half3 linRGB) 把颜色值近似地从线性空间变换到伽马颜色空间。

三、描述顶点数据的结构体

不同场合中渲染引擎需要顶点携带的信息是不同的,如果只用一个把所有顶点信息都添加在内的结构体去描述顶点,在

很多场合会造成数据的冗余。因此,Unity预定了若干用以描述顶点数据的结构体,方便开发者在不同的场合使用。

1、appdata_base

struct appdata_base{ float4 vertex : POSITION; //模型空间顶点坐标 float3 normal : NORMAL; //模型空间顶点法线 float4

texcoord : TEXCOORD0; //模型空间顶点使用的第一层纹理坐标 UNITY_VERTEX_INPUT_INSTANCE_ID //顶点多例

化的ID};

UNITY_VERTEX_INPUT_INSTANCE_ID为定义顶点多例化ID用的一个宏。

2、appdata_tan

struct appdata_tan { float4 vertex : POSITION; //模型空间顶点坐标 float4 tangent : TANGENT; //模型空间顶点切线

float3 normal : NORMAL; //模型空间顶点法线 float4 texcoord : TEXCOORD0; //顶点使用的第一层纹理坐标

UNITY_VERTEX_INPUT_INSTANCE_ID //顶点多例化的ID};

相对于appdata_base结构体,appdata_tan多了一个顶点的切线信息,在使用法线贴图等技术时需要利用顶点的切线。相对于appdata_base结构体,appdata_tan多了一个顶点的切线信息,在使用法线贴图等技术时需要利用顶点的切线。

3、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};

appdata_full定义了最全的顶点信息,该结构体有四层纹理坐标和顶点颜色。在做地形渲染时,通常会用到非常多的纹

理,以产生复杂多变的地面效果。