语义简介:实际上就是一个表达参数含义的字符串。

应用阶段到顶点着色器时用常用的语义如下:
POSITION:模型空间中的顶点坐标
NORMAL:模型空间中的法线方向
TANGENT:模型空间中的切线方向
TEXCOORDn:模型空间中第n组纹理坐标
COLOR:模型空间中顶点的颜色

顶点着色器传递数据给片元着色器时常用的语义如下:
SV_POSITION:裁剪空间中的顶点坐标
COLOR0:输出第一组顶点颜色,不是必须
COLOR1:输出第二组顶点颜色,不是必须
TEXCOORDn:输出第n组纹理坐标,不是必须

片元着色器输出数据到unity阶段常用的语义如下:
SV_Target:输出值存储到渲染目标中。

语义使用时注意点:
1.unity中有些语义是必须的,有些不是必须的,而且在不同的阶段,语义的必须性不一样,对于不必须的语义,我们可以自定义使用。
2.SV代表的含义是系统数值,在高版本的渲染引擎中会使用到,虽然低版本的渲染引擎也会有类似语义的字符串,但是最好用高版本的,这样可以向下兼容。
3.不同的shader model支持的语义类型各不相同,默认支持的是2.0版本,如果需要自己指定版本,可以使用”#pragmatarget 版本号”来指定。

shader应该注意的差异性:
1.平台差异:不同的平台,坐标系的轴心是不同的,但是unity内部又帮我们处理了这种差异,除非我们开启了抗锯齿功能,并且同时处理多张纹理时,就会出现主纹理和其他纹理的轴心不一致的问题,此时我们需要对其他纹理进行y轴转换,否则采样变换时,结果会是错的。
2.语法差异:由于DirectX中语法检测比较严格,一些OpenGL中通过的语法在DirectX中可能就不能通过,此时就必须要按照DirectX语法来操作shader。比如:float4类型赋值在OpenGL中可以只赋值一个参数,但是在DirectX中必须每个参数都赋值。
3.语义差异:不同的语义之间可能有相同的含义,但是在别的平台可能就不能表达相同的含义了,比如SV_POSITION和POSITION在DirectX和OpenGL平台上都表示齐次裁剪空间输出坐标,但是在PS4上就不是。

shader编写应该遵循的原则:
1.数据类型应该按照从小到大的使用原则,保证数据大小的最优化。
2.规范的语法,因为DirectX,OpenGL中存在不同的语法,所以应该使用两边都支持的语法。
3.规范的语义,因为DirectX,OpenGL中存在不同的语义,所以应该使用两边都支持的语义。
4.避免不必要的计算,因为着色器中寄存器和指令数是有限的,所以不宜计算过于复杂,可以通过制定shader target model大小来支持不同的指令和寄存器数。
5.慎用分支和循环语句,应该GPU中执行分支和循环语句性能会低。
6.不要除以0,因为这会造成一些未知的结果,有些平台会报错,有些平台不报错,但是取值具有随机性,得到结果不正确。

UnityShader中的语义相关的更多相关文章

  1. paip.语义相关是否可在 哈米 的语义分析中应用

    paip.语义相关是否可在 哈米 的语义分析中应用 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn. ...

  2. Linux中exec命令相关

    Linux中exec命令相关 exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. b ...

  3. PHP 错误与异常 笔记与总结(3)PHP 配置文件(php.ini)中与错误相关的选项 与 设置错误级别

    [PHP 配置文件中与错误相关的选项 ] 选项 描述 error_reporting 设置错误报告的级别 display_errors 是否显示错误 log_errors 设置是否将错误信息记录到日志 ...

  4. LWIP协议中tcp_seg结构相关指针的个人理解

    我曾经写在新浪博客上面,后来复制到这,图片就不行了. 原文地址转载  LWIP协议中tcp_seg结构相关指针的个人理解(http://blog.sina.com.cn/s/blog_7e586985 ...

  5. Java中Date各种相关用法

    Java中Date各种相关用法(一) 1.计算某一月份的最大天数 Java代码 Calendar time=Calendar.getInstance(); time.clear(); time.set ...

  6. 关于Makefile.am中与Build相关的变量设置 AM_CPPFLAGS

    http://tonybai.com/2010/10/26/about-variables-related-to-building-in-makefile-am/ 关于Makefile.am中与Bui ...

  7. C++ STL中Map的相关排序操作:按Key排序和按Value排序 - 编程小径 - 博客频道 - CSDN.NET

    C++ STL中Map的相关排序操作:按Key排序和按Value排序 - 编程小径 - 博客频道 - CSDN.NET C++ STL中Map的相关排序操作:按Key排序和按Value排序 分类: C ...

  8. TCP/IP协议栈源码图解分析系列10:linux内核协议栈中对于socket相关API的实现

    题记:本系列文章的目的是抛开书本从Linux内核源代码的角度详细分析TCP/IP协议栈内核相关技术 轻松搞定TCP/IP协议栈,原创文章欢迎交流, byhankswang@gmail.com linu ...

  9. MVC中Controller控制器相关技术

    第6章Controller相关技术 Controller(控制器)在ASP.NET MVC中负责控制所有客户端与服务器端的交互,并 且负责协调Model与View之间的数椐传递,是ASP.NET MV ...

随机推荐

  1. 【题解】 Luogu P4312 / SP4155 [COCI 2009] OTOCI / 极地旅行社

    原题地址:P4312 [COCI 2009] OTOCI / 极地旅行社/SP4155 OTOCI - OTOCI lct入门难度的题,十分弱智(小蒟蒻说lct是什么,能吃吗?) bridge操作判联 ...

  2. face_recognition 基础接口

    face_recognition 基础接口 face_recognition使用世界上最简单的人脸识别库,在Python或命令行中识别和操作人脸. 使用dlib最先进的人脸识别技术构建而成,并具有深度 ...

  3. Github网站加载不完全,响应超时,解决办法

    Github网站加载缓慢信息不全解决方法 Github是一个代码托管平台和开发者社区,开发者可以在Github上创建自己的开源项目并与其他开发者协作编码.毫不夸张地说,高效利用Github是一个优秀的 ...

  4. Qone 自动删除说说脚本

    请看图 script var delay = 1000; function del() { document.querySelector('.app_canvas_frame').contentDoc ...

  5. mvc 文件下载

    public class DownLoadHelper { /// <summary> /// WriteFile实现下载--测试通过 /// </summary> /// & ...

  6. PHP 将大量数据导出到 Excel 的方法

    原文链接:https://blog.csdn.net/bkcnl/article/details/76152505 public function getxiajiueser(){ $id = req ...

  7. 20145208 蔡野 《网络对抗》Exp6 信息搜集与漏洞扫描

    20145208 蔡野 <网络对抗>Exp6 信息搜集与漏洞扫描 本实践的目标是掌握信息搜集的最基础技能.具体有(1)各种搜索技巧的应用(2)DNS IP注册信息的查询 (3)基本的扫描技 ...

  8. Install Apache Maven on Ubuntu

    Download the Apache maven from this link https://maven.apache.org/download.cgi, extract the download ...

  9. 打造性感好用的 VS Code 编辑器

    官网: https://code.visualstudio.com/ Blog链接:打造性感好用的VS Code编辑器 主命令框 F1或Ctrl+Shift+P: 打开命令面板.在打开的输入框内,可以 ...

  10. P3979 遥远的国度

    P3979 遥远的国度 思路 一开始我用这个函数得到左端点 int get_l(int x,int y) { if(top[x]==top[y]) return son[x]; int last=to ...