【unity shader 入门精要】CH5-2 语义
发布日期:2021-05-07 01:50:09 浏览次数:28 分类:精选文章

本文共 895 字,大约阅读时间需要 2 分钟。

文章目录

Unity提供的CG/HLSL语义

语义是一个赋给Shader输入或输出的字符串,这个字符串表达了这个参数的含义。

这些语义可以让Shader知道从哪里读取数据,并把数据输出到哪里。

Unity并没有支持所有的语义。

供查阅

通常情况下,这些输入输出变量并不需要有特别的意义,我们可以自行决定这些变量的用途。

SV语义

在DirectX 10以后,有了一种新的语义类型,以SV开头,就是系统数值语义(system-value semantics)

这些语义在渲染流水线中有特殊的含义。

我们使用SV_POSITION语义去修饰顶点着色器的输出变量pos,那么就表示pos包含了可用于光栅化的变换后的顶点坐标(即齐次裁剪空间中的坐标)。

用这些语义描述的变量是不可以随便赋值的,因为流水线需要使用它们来完成特定的目的,例如渲染引擎会把用SV_POSITION修饰的变量经过光栅化后显示在屏幕上。读者有时可能会看到同一个变量在不同的Shader里面使用了不同的语义修饰。例如,一些Shader会使用POSITION而非SV_POSITION来修饰顶点着色器的输出。

Unity 支持的语义

在这里插入图片描述

TEXCOORDn中n的数目是和Shader Model有关的,一般在ShaderModel 2(即Unity默认编译到的Shader Model版本)和Shader Model 3中,n等于8;而在Shader Model 4和Shader Model 5中,n等于16。

通常情况下,一个模型的纹理坐标组数一般不超过2,即我们往往只使用TEXCOORD0和TEXCOORD1。

在Unity内置的数据结构体appdata_full中,它最多使用了6个坐标纹理组。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
一个语义可以使用的寄存器只能处理4个浮点值(float)。因此,如果我们想要定义矩阵类型,如float3×4、float4×4等变量就需要使用更多的空间。一种方法是,把这些变量拆分成多个变量,例如对于float4×4的矩阵类型,我们可以拆分成4个float4类型的变量,每个变量存储了矩阵中的一行数据。

其他文章

专题文章:

上一篇:【unity shader 入门精要】CH6-1 Unity中的基础光照-理论部分
下一篇:【unity shader 入门精要】CH5-1 顶点 / 片元 着色器

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年03月30日 18时56分37秒