Unity Shader学习之Unity Shader中常用变量、文件等说明

1.顶点/片元函数声明

#pragma vertex name

#pragma fragment name

其中name为函数名

2.常用语义

从应用阶段传递模型数据给顶点着色器时Unity支持的常用语义

语义 描述
POSITION 模型空间中的顶点位置,通常为float4类型
NORMAL 顶点法线,通常为float3类型
TANGENT 顶点切线,通常为float4类型

TEXCOORDn,如TEXCOORD0,TEXCOORD1等

该顶点的纹理坐标,TEXCOORD0表示第一组纹理坐标,依此类推,通常为float2或float4类型
COLOR 顶点颜色,通常是fixed4或float4

从顶点着色器传递数据给片元着色器时Unity使用的常用语义

语义 描述
SV_POSITION 裁剪空间中的顶点坐标,结构体中必须包含一个用该语义修饰的变量。等同于DirectX9中的POSITION,但最好使用SV_POSITION
COLOR0 通常用于输出第一组顶点颜色,但不是必须的
COLOR1 通常用于输出第二组顶点颜色,但不是必须的
TEXCOORD0~TEXCOORD7 通常用于输出纹理坐标,但不是必须的

片元着色器输出时Unity支持的常用语义

语义 描述
SV_Target 输出值将会存储到渲染目标(render target)中。等同于DirectX9中的COLOR语义,但最好使用SV_Target

3.ShaderLab属性类型和Cg变量类型的匹配关系

ShaderLab属性类型 Cg变量类型
Color,Vector float4,half4,fixed4
Range,Float float,half,fixed
2D sampler2D
Cube samplerCube
3D sampler3D

4.UnityShader中常用的包含文件

文件名 描述
UnityCG.cginc 包含了最常使用的帮助函数、宏和结构体等
UnityShaderVariables.cginc 在编译Unity Shader时,会被自动包含进来。包含了很多内置的全局变量,如UNITY_MATRIX_MVP等
Lighting.cginc 包含了各种内置的光照模型,如果编写的是Surface Shader的话,会自动包含进来
HLSLSupport.cginc 在编译Unity Shader时,会被自动包含进来。声明了很多跨平台编译的宏和定义

5.UnityCG.cginc中一些常用的结构体

名称 描述 包含的变量
appdata_base 可用于顶点着色器的输入 顶点位置、顶点法线、第一组纹理坐标
appdata_tan 可用于顶点着色器的输入 顶点位置、顶点切线、顶点法线、第一组纹理坐标
appdata_full 可用于顶点着色器的输入 顶点位置、顶点切线、顶点法线、四组(或更多)纹理坐标
appdata_img 可用于顶点着色器的输入 顶点位置、第一组纹理坐标
v2f_img 可用于顶点着色器的输出 裁剪空间中的位置、纹理坐标

6.UnityCG.cginc中的一些常用的帮助函数

函数名 描述
float3 WorldSpaceViewDir(float4 v) 输入一个模型空间中的顶点位置,返回世界空间中从该点到摄像机的观察方向
float3 ObjSpaceViewDir(float4 v) 输入一个模型空间中的顶点位置,返回模型空间中从该点到摄像机的观察方向
float3 WorldSpaceLightDir(float4 v) 仅可用于前向渲染中。输入一个模型空间中的顶点位置,返回世界空间中从该点到光源的光照方向。没有被归一化
float3 ObjSpaceLightDir(float4 v) 仅可用于前向渲染中。输入一个模型空间中的顶点位置,返回模型空间中从该点到光源的光照方向。没有被归一化
float3 UnityObjectToWorldNormal(float3 norm) 把法线方向从模型空间转换到世界空间中。
float3 UnityObjectToWorldDir(float3 dir) 把方向矢量从模型空间转换到世界空间中。
float3 UnityWorldToObjectDir(float3 dir) 把方向矢量从世界空间变换到模型空间中。

7.Cg/HLSL中3种精度的数值类型

类型 精度
float 最高精度的浮点值。通常使用32位来存储。
half 中等精度的浮点值。通常使用16位来存储,精度范围是-60000~60000
fixed 最低精度的浮点值。通常使用11位来存储,精度范围是-2.0~2.0

8.Unity支持的Shader Target

指令 描述
#pragma target 2.0

默认的Shader Target等级。相当于Direct3D 9上的

Shader Model 2.0,不支持对顶点纹理的采样,

不支持显式的LOD纹理采样

#pragma target 3.0

相当于Direct3D 9上的Shader Model 3.0,支持对

顶点纹理的采样等。

#pragma target 4.0

相当于Direct3D 9上的Shader Model 4.0,支持几何

着色器等

#pragma target 5.0 相当于Direct3D 9上的Shader Model 5.0

猜你喜欢

转载自blog.csdn.net/qq_42720695/article/details/124424438
今日推荐