文章

shader入门基础知识三

shader入门基础知识三
  • content

常用的语义,Cg 中的变量,后续还会有其他的补充

完成第一个实例后 shader 入门基础知识二,一些我们之前还不是很清楚的地方需要扩展。

Cg 代码中与 Properties 关联

前文提过需要使用 Properties 中的代码,需要在 Cg 代码块中声明类型和名称都匹配的变量,这里完善shader 入门基础知识二中的表格,方便之后使用

属性类型例子Cg 变量类型
Int_Int(“Int”,Int)=2float
Float_Float(“Float”,Float)=2float,half,fixed
Range_Range(“Range”,Range(1.0,3.0))=2.0float,half,fixed
Color_Color(“Color”,Color)=(1.0,1.0,1.0,1.0)float4,half4,fixed4
Vector_Vector(“Vector”,Vector)=(1.0,1.0,1.0,1.0))float4,half4,fixed4
2D_2D(“2D”,2D)=””{}sampler2D
Cube_Cube(“Cube”,Cube)=”white”{}samplerCube
3D_3D(“3D”,3D)=”white”{}sampler3D
  • float:32 位高精度浮点数。
  • half:16 位中精度浮点数。范围是[-60000, +60000]
  • fixed:11 位低精度浮点数。范围是[-2.0, 2.0]

根据使用情形,尽量使用低精度的数据类型。例如采样颜色的时候使用 fixed 类型。

顶点着色器输入结构体中常用语义,模型输出到 shader 的数据

语义描述
NORMAL顶点法线,通常是 float3 类型
POSITION模型空间中的顶点位置,通常是 float4 类型
TANGENT顶点切线,通常是 float4 类型
TEXCOORDn模型纹理坐标,TEXCOORD0 表示第一组坐标纹理,依次类推,通常是 float2,float4 类型,ShaderModel4 一下版本最多支持 8 个纹理,4 和以上支持 16 个
COLOR顶点颜色,通常是 fixed4 或 float4 类型

顶点着色器输出结构体中常用语义,并且片元着色器的输入

语义描述
SV_POSITION裁剪空间中的顶点坐标,结构体中必须包含一个用该语义修饰的变量。否则将无法得到裁剪空间中的顶点坐标,也就无法把顶点渲染到屏幕上
COLOR0输出第一组顶点颜色
COLOR1输出第二组顶点颜色
TEXCOORDn通常用于输出纹理坐标,不是必须

片元着色器输出时常用语义

语义描述
SV_Target输出值将会储存到渲染目标(render target)中

为了让 Shader 能在所有平台下正常工作,需尽可能使用如下语义描述 Shader 的输入输出变量

SV_POSITION:顶点着色器输出的顶点位置 SV_Target:片元着色器的输出颜色

SV 即 system value

本文由作者按照 CC BY 4.0 进行授权