一、语义的解释

语义,其实就是一个赋给Shader输入和输出的字符串,这个字符串表达了这个参数的含义。通俗的讲
这些语义可以让Shader知道从哪读取输送到哪里去,他们是在CG/HLSL的shader流水线中是不可避免。

       表示图元数据的含义(顶点的位置、法向量或者纹理信息),也表明这些图元数据存放的硬件资源。

因为顶点着色器的输出即是片段着色器的输入,所以顶点着色器的输出必须和片段着色器的输入语义是

一致的。语义是顶点程序和片段程序之间输入\输出数据和寄存器之间的桥梁,因此语义只对这两个处理

阶段有意义,并且只在入口函数才有效,在内部函数无效。语义概念的提出和图形流水线工作机制大有

关系。从前面所讲的GPU 处理流程中可以看出,一个阶段处理数据,然后传输给下一个阶段,那么每个

阶段之间的接口是如何确定的呢?例如:顶点处理器的输入数据是处于模型空间的顶点数据(位置、法

向量),输出的是投影坐标和光照颜色;片段处理器要将光照颜色做为输入,问题是“片段处理器怎么知

道光照颜色值的存放位置”。在高级语言中(C/C++),数据从接口的一端流向另一端,是因为提供了数

据存放的内存位置(通常是指针信息);由于Cg 语言并不支持指针机制,且图形硬件处理过程中,数据

通常暂存在寄存器中,故而在Cg 语言中,通过引入语义绑定(binding semantics)机制,指定数据存放

的位置,实际上就是将输入\输出数据和寄存器做一个映射关系(在OpenGL Cg profiles 中是这样的,但

在DirectX-based Cgprofiles 中则并没有这种映射关系)。根据输入语义,图形处理器从某个寄存器取数

据;然后再将处理好的数据,根据输出语义,放到指定的寄存器。

二、从应用阶段传递模型数据到顶点着色器时Unity经常使用的语义
语义 描述
POSITION 模型空间中模型顶点坐标位置,通常是float4类型
NORMAL 顶点法线,通常是float3类型
TANGENT 顶点切线,通常是float3类型
TEXCOORDn 顶点的纹理坐标,TEXCOORD0表示第一组纹理坐标以此类推,通常是float2或float4
COLOR 顶点的颜色,通常是float4或fixed4

三、从顶点着色器到片元着色器Unity经常使用的语义
语义 描述
SV_POSITION 裁剪空间中顶点坐标,结构体中必须有一个用该语义修饰的变量
等同于DirectX9中的POSITION,但最好使用SV_POSITION
COLOR0 通常用于修饰第一组顶点颜色,但不是必须的
COLOR1 通常用于修饰第二在顶点颜色,但不是必须的
TEXCOORD0~TEXCOORD7 通常用于修饰纹理坐标,但不是必须的

补充说明:这些语义除了SV_POSITION比较特殊以外,其他的语义基本上没有明确的要求,
可以储存任意数据到这些语义修饰的变量中。另外,通常我们习惯于用
TEXCOORD0来修饰自定义的变量。

四、片元着色器输出时Unity支持的语义
SV_Target 等同于DirectX9中的COLOR,但我们最好用SV_Target。表示的是将输出数据
传递给render_target(渲染目标)

DEPTH  片段的深度

【Unity Shader】---UnityShader 提供的CG/HLSL语义的更多相关文章

  1. [Unity Shader] 常用的数值类型和语义

    书看到第八章,跟随写了一些例子,但有些数值类型的使用还是需要特别注意,经常需要查阅,在这里做一下总结. 1 ShaderLab属性类型和Cg变量类型的匹配关系 Color.Vector:float4, ...

  2. [Unity] Shader(着色器)输入输出和语义

    在Unity5.x后, 已经支持了基于物理的光照模型,也就是常说的次时代引擎所必须具备的功能. 如果在Properties使用2D,CG里要用sampler2D,代表使用的是2维纹理 如果在Prope ...

  3. Unity Shader (二)Cg语言

    一.Cg基本数据类型 float 32位浮点数 half 16位浮点数 int 32位整型 fixed 12位定点数 bool 布尔数据 simpler* 纹理对象的句柄( the handle to ...

  4. 第四章 开始Unity Shader学习之旅(2)

    目录 1. 强大的援手:Unity提供的内置文件和变量 1.1 内置的包含文件 1.2 内置的变量 2. Unity提供的Cg/HLSL语义 2.1 什么是语义 2.2 Unity支持的语义 2.3 ...

  5. 【我的书】Unity Shader的书 — 文件夹(2015.12.21更新)

    写在前面 感谢全部点进来看的朋友.没错.我眼下打算写一本关于Unity Shader的书. 出书的目的有以下几个: 总结我接触Unity Shader以来的历程,给其它人一个借鉴.我非常明确学Shad ...

  6. 【我的书】Unity Shader的书 — 目录(2016.5.19最后一次更新)

    写在前面 感谢所有点进来看的朋友.没错,我目前打算写一本关于Unity Shader的书. 出书的目的有下面几个: 总结我接触Unity Shader以来的历程,给其他人一个借鉴.我非常明白学Shad ...

  7. Unity Shader入门精要学习笔记 - 第5章 开始 Unity Shader 学习之旅

    一个顶点/片元 着色器的结构大概如下: Shader "MyShaderName" { Properties { //属性 } SubShader { //针对显卡A的SubSha ...

  8. Unity Shader入门精要读书笔记(二)UnityShader概述

    第三章<UnityShader概述>的读书笔记: 1.Unity Shader模板提供了几种选择: 标准光照模型(新添加的基于物理的渲染方法) 不含光照的基本的顶点.片元着色器 屏幕后处理 ...

  9. 第二章 Unity Shader基础

    [TOC] 1. Unity Shader 的基础: ShaderLab 学习和编写着色器的过程一直是一个学习曲线很陡峭的过程,通常情况下为了自定义渲染效果往往要和很多文件和设置打交道,这些设置很容易 ...

随机推荐

  1. JavaEE高级-Struts2学习笔记

    Struts2是一个用来来发MVC应用的框架,它提供了Web应用程序开发过程中一些常见问题的解决方案: - 对来自用户的输入数据进行合法的验证 - 统一的布局 - 可扩展性. - 国际化和本地化 - ...

  2. 使用nginx配置二级域名

    使用nginx配置二级域名 2018.11.21 11:51:17字数 613阅读 170 最近想把三个项目配在一个服务器上,于是想使用nginx配置二级域名实现. 1.域名添加解析 我的是阿里云的域 ...

  3. opencv python 图像二值化/简单阈值化/大津阈值法

    pip install matplotlib 1简单的阈值化 cv2.threshold第一个参数是源图像,它应该是灰度图像. 第二个参数是用于对像素值进行分类的阈值, 第三个参数是maxVal,它表 ...

  4. NOIP2015 D1T1 神奇的幻方

    洛谷P2615 很简单的模拟题……每枚举一个点只要保存上一个点的x,y值即可,不用开数组存放 另外题目中对于K的操作都在K-1的九宫格范围内,所以我们巧妙运用++和--就可以做到每个分支一行代码 还有 ...

  5. Arduino-原理图标识

    VCC    电源正极    VDD GNG    电源负极     VSS vin        表示输入电源 TXD RXD 是主板串口通信用的接口,TXD表示发送数据,RXD表示接收数据,还有简 ...

  6. 【bzoj2002】弹飞绵羊

    题目 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数k ...

  7. vue中的:is

    is string | Object (组件的选项对象) <div id="app"> <span>这是:is的案例</span> <co ...

  8. RSA和AES工具类

    AESUtil import com.xxx.common.BssException; import com.xxx.common.constants.CommonConstants; import ...

  9. 网络抓包wireshark2

    1.基本使用详见网络抓包wireshark,第一篇 2.中文版 2.1打开首页 2.2选择网卡 菜单栏->捕获->选项->输入(选择当前计算机网络ip对于的接口)->点击开始 ...

  10. [CSP-S模拟测试]:f(Trie树+二分答案+meet in middle+two pointers)

    题目传送门(内部题67) 输入格式 第一行,三个整数$n$.$k$.$p$.第二行,$n$个自然数,表示$\{a_i\}$. 输出格式 输出一行,两个自然数,表示$f(res)$.$res$. 样例 ...