Unity3d Shader开发(三)Pass(Pass Tags,Name,BindChannels )
Pass Tags
通过使用tags来告诉渲染引擎在什么时候该如何渲染他们所期望的效果。
Syntax 语法
- Tags { "TagName1" = "Value1" "TagName2" = "Value2" }
- 指定TagName1 的值为 Value1 ,TagName2 的值为 Value2 你可以指定很多你喜欢的标签
Details 细节
标签基本上是键-值对的形式。 内部的Pass 标签用来控制光照管道(环境光照,顶点关照和像素光照)中pass 的任务和一些其它选项。注意以下的标签必须在pass段内部,而不是在SubShader中被识别。
LightMode tag 光照模式标签
LightMode 标签定义了光照观点中的pass的任务。查阅render pipeline了解更多细节。这些标签很少手动使用。常用的shader 需要与光照进行互动的Shader写成表面着色器 然后在去关联那些细节
LightMode 的可选值:
- Always:
总是渲染。没有光照应用。 - ForwardBase:
用于正向渲染,环境主要方向灯和定点光/SH 等的应用 - ForwardAdd:
用于正向渲染,附加的像素光被应用,每个光照一个pass - PrepassBase:
用于延迟光照,渲染法线/镜面指数。lor function)。 - PrepassFinal:
用于延迟光照,通过结合纹理,光照和自发光渲染最终颜色 - Vertex:
用于顶点光照渲染,当物体没有光照映射时,所有顶点光照被应用 - VertexLMRGBM:
用于顶点光照渲染,当物体有光照映射的时候使用顶点光照渲染。在平台上光照映射是RGBM 编码 - VertexLM:
用于顶点光照渲染,当物体有光照映射的时候使用顶点光照渲染。在平台上光照映射是double-LDR 编码(移动平台,及老式台式CPU) - ShadowCaster:
将物体当做阴影产生者来渲染 - ShadowCollector:
为了正向渲染对象的路径,将对象的阴影收集到屏幕空间缓冲区中。
Name
Syntax 语法
- Name "PassName"
- 为当前通道命名 PassName
Details 细节
一个通道能被赋予一个名字以便UsePass 命令能索引到它。
BindChannels
BindChannels命令 允许你指定顶点数据如何映射到显卡中。
可编程顶点着色器使用时,BindChannels将没有效果。在这种情况下,绑定受顶点着色器输入控制。
默认情况下,Unity3D 会为你计算并绑定,但在某些情况下,你要使用自定义绑定。
例如:你可以在第1个纹理处理阶段映射主UV 然后在第2个纹理处理阶段使用次要UV。或者告诉硬件需要考虑顶点颜色
Syntax 语法
- BindChannels { Bind "source", target }
- 例如:指定顶点数据源映射到目标硬件。
Source 可以是下面其中一个
- Vertex: vertex position 顶点:顶点的位置
- Normal: vertex normal 法线:顶点的法线
- Tangent: vertex tangent 切线:顶点的切线
- Texcoord: primary UV coordinate 主要的UV坐标
- Texcoord1: secondary UV coordinate 次要的UV坐标
- Color: per-vertex color 颜色:每个顶点颜色
Target can be one of: Target可以是下面其中的一个:
- Vertex: vertex position 顶点:顶点的位置
- Normal: vertex normal 法线:顶点的法线
- Tangent: vertex tangent 切线:顶点的切线
- Texcoord0, Texcoord1, ...: texture coordinates for corresponding texture stage 各个纹理处理阶段的纹理坐标
- Texcoord: texture coordinates for all texture stages 所有纹理处理阶段的纹理坐标
- Color: vertex color 颜色:顶点颜色
Details 细节
Unity在源和目标的映射上加了一些限制。源和目标必须匹配顶点,法线,切线和颜色。从网格中获取的纹理坐标(Texcoord和Texcoord1)可以映射到纹理坐标的目标(所有纹理处理阶段可以使用Texcoord ,或者在一个特定阶段使用TexcoordN )。
这里有2个典型的情况可以使用BindChannels。
- 需要考虑顶点颜色的着色器。
- 使用两个UV组的着色器。
- // Maps the first UV set to the first texture stage
- //在纹理处理第1阶段映射第1个UV
- // and the second UV set to the second texture stage
- //在纹理处理第2阶段映射第2个UV
- BindChannels {
- Bind "Vertex", vertex
- Bind "texcoord", texcoord0
- Bind "texcoord1", texcoord1
- }
Unity3d Shader开发(三)Pass(Pass Tags,Name,BindChannels )的更多相关文章
- Unity3d Shader开发(三)Pass(Culling & Depth Testing)
剔除是一种通过避免渲染背对观察者的几何体面来提高性能的优化措施.所有几何体都包含正面和反面.剔除基于大多数对象都是封闭的事实:如果你有一个立方体,你不会看到背离你的那一面(总是只有一面在你的前方),因 ...
- Unity3d Shader开发(三)Pass(Color, Material, Lighting )
材质和灯光参数被用于控制内置顶点光照.顶点光照是Direct3D/OpenGL标准的按每顶点计算的光照模型.光照打开时,光照受材质块,颜色材质和平行高光命令的影响. 每像素光照常被实现为自定义顶点/片 ...
- Unity3d Shader开发(四)UsePass ,GrabPass ,SubShader Tags
(一)UsePass 命令 使用 来自另一个着色器的命名通道. Syntax 语法 UsePass "Shader/Name" 插入所有来自给定着色器中的给定名字的通道.Shade ...
- Unity3d Shader开发(三)Pass(Blending )
混合被用于制作透明物体. 当图像被渲染时,所有着色器被执行以后,所有贴图被应用后,像素将被写到屏幕.他们是如何通过Blend命令的控制和已有的图像合并呢? Syntax 语法 Blend Off Tu ...
- Unity3d Shader开发(三)Pass(Alpha testing )
透明度测试是阻止像素被写到屏幕的最后机会. 在最终渲染出的颜色被计算出来之后,可选择通过将颜色的透明度值和一个固定值比较.如果比较的结果失败,像素将不会被写到显示输出中. Syntax 语法 Alph ...
- Unity3d Shader开发(三)Pass(Texturing )
纹理在基本的顶点光照被计算后被应用.在着色器中通过SetTexture 命令来完成. SetTexture 命令在片面程序被使用时不会生效:这种模式下像素操作被完全描述在着色器中. 材质贴图可以用 ...
- Unity3d Shader开发(三)Pass(Fog )
雾参数用于雾命令控制. 雾化是通过混合已生成的像素的颜色和基于到镜头的距离来确定的一个不变色来完成.雾化不会改变已经混合的像素的透明度值,只是改变RGB值. Syntax 语法 Fog { Fog C ...
- Unity3d Shader开发(二)SubShader
(1)SubShader Unity中的每一个着色器都包含一个subshader的列表,当Unity需要显示一个网格时,它能发现使用的着色器,并提取第一个能运行在当前用户的显示卡上的子着色器. 当Un ...
- Unity3d Shader开发(五)Fallback ,Category
Fallback定义在所有子着色器后.简单来说,它表示"如果没有任何子着色器能被运行在当前硬件上,请尝试使用降级着色器". Syntax 语法 Fallback "nam ...
随机推荐
- SQL 四种连接:内连接、左外连接、右外连接、全连接--转载
原文:http://zwdsmileface.iteye.com/blog/2191730 个人理解 内连接(INNER JOIN)(典型的连接运算,使用像 = 或 <> ...
- MySQL(8):数值类型详细分析
1.日期和时间类型 2.varchar和char 固定长度 (char) 或可变长度 (varchar) 字符数据类型. 例如: a char(10)b varchar(10)都存入'abc'a要求 ...
- WebService地址变成计算机名的解决办法
WCF 4.0 has solved this issue in some instances with a new config option that use Request Headers: & ...
- Lucene全文检索系列(一)
1. Lucene简介 Lucene是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎.Lucene以其方便使用.快速实施以及灵活性受到广泛的关注.它可以方便地嵌入到各种应用中实现针对应用的全文 ...
- JS学习笔记——标准对象
一.对象 在js中万物皆对象. 二.对象类型 number.string.boolean.undefined.function.object等 用typeof来获取对象的类型 如: alert( ty ...
- alert
先别着急测试,来猜测一下下面一行代码执行的结果 alert(alert(1234567)); 此刻,我自己还不是不太理解 我的分析是这样: alert() 是window下面的一个方法 alert(1 ...
- nopCommerce的配置以及汉化
这里给大家一些链接,是关于nopCommerce的一些介绍: nopCommerce的源代码 关于nopcommerce Nopcommerce中文资源 第一步 配置nopCommerce 先上一张 ...
- Android res资源文件夹的知识积累
Android的开发框架耦合性还是比较低的,逻辑和布局被原生分开了.在Eclipse一般代码写在src文件夹下,资源等写在res文件夹下. drawable文件夹:该文件夹有很多变种,主要是为了适配A ...
- SQL SERVER中的逻辑读,预读和物理读
sqlserver:数据存储方式:最小单位是页,每一页8k,sqlserver 对页的读取是具有原子性,也就是说,要么读取完整一页,要么完全不读取,不会有中间状态,而页之间的数据组织结构是B树 但是每 ...
- MySQL支持多种存储引擎
MySQL的强大之处在于它的插件式存储引擎,我们可以基于表的特点使用不同的存储引擎,从而达到最好的性能. MySQL有多种存储引擎:MyISAM.InnoDB.MERGE.MEMORY(HEAP).B ...