1、ShaderLab和CG变量的匹配关系
| ShaderLab属性类型 | CG变量类型 |
| Color, Vector | float4, half4, fixed4 |
| Range, Float | float, half, fixed |
| 2D | sampler2D |
| Cube | samplerCube |
| 3D | sampler3D |
2、UnityCG的一些常用结构体
| 名称 | 描述 | 包含变量 |
| appdata_base | 顶点着色器的输入 | 顶点位置、顶点法线、第一组纹理坐标 |
| appdata_tan | 顶点着色器的输入 | 顶点位置、顶点切线、顶点法线、第一组纹理坐标 |
| appdata_full | 顶点着色器的输入 | 顶点位置、顶点切线、顶点法线、四组(或更多)纹理坐标 |
| appdata_img | 顶点着色器的输入 | 顶点位置、第一组纹理坐标 |
| v2f_img | 顶点着色器的输出 | 裁剪空间中的位置、纹理坐标 |
3、UnityCG的一些常用工具函数
| 函数名 | 描述 |
| float3 WorldSpaceViewDir(float4 v) | 输入一个模型空间中的顶点位置,返回世界空间中从该点到摄像机的观察方向 |
| float3 ObjSpaceViewDir(float4 v) | 输入一个模型空间中的顶点位置,返回模型空间中从该点到摄像机的观察方向 |
| float3 WorldSpaceLightDir(float4 v) | 输入一个模型空间中的顶点位置,返回世界空间中从该点到光源的光照方向,没有被归一化。仅可用于前向渲染中。 |
| float3 ObjSpaceLightDir(float4 v) | 输入一个模型空间中的顶点位置,返回世界空间中从该点到光源的光照方向,没有被归一化。仅可用于前向渲染中。 |
| float3 UnityObjectToWorldNormal(float3 norm) | 把法线方向从模型空间转换到世界空间中。 |
| float3 UnityObjectToWorldDir(in float3 dir) | 把方向矢量从模型空间变换到世界空间中。 |
| float3 UnityWorldToObjectDir(float3 dir) | 把方向矢量从世界空间变换到模型空间中。 |
4、顶点着色器输入数据的语义(Unity所支持的)
| 语义 | 描述 |
| POSITION | 模型空间中的顶点位置,通常是float4类型 |
| NORMAL | 顶点法线,通常是float3类型 |
| TANGENT | 顶点切线,通常是float4类型 |
| TEXCOORDn | 该顶点的纹理坐标,TEXCOORD0表示第一组纹理坐标,以此类推。通常是float2或者float4类型 |
| COLOR | 顶点颜色,通常是fixed4或者float4类型 |
5、顶点着色器的输出数据的语义(Unity所支持的)
| 语义 | 描述 |
| SV_POSITION | 裁剪空间中的顶点坐标,结构体中必须包含一个用该语义修饰的变量。等同于DX9中的POSITION,但最好使用SV_POSITION |
| COLOR0 | 通常用于输出第一组顶点颜色,但不是必需的 |
| COLOR1 | 通常用于输出第二组顶点颜色,但不是必需的 |
| TEXCOORD0~TEXCOORD7 | 通常用于输出纹理坐标,但不是必需的 |
本文介绍了ShaderLab与CG变量的匹配关系、UnityCG的常用结构体和工具函数、顶点着色器输入输出数据的语义等内容。适用于Unity开发人员学习着色器编程。

267

被折叠的 条评论
为什么被折叠?



