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 ...
随机推荐
- Kali安全测试相关书籍
Kali安全测试相关书籍http://www.automationqa.com/forum.php?mod=viewthread&tid=4052&fromuid=2
- PV信号量的一些理解
进程通常分为就绪.运行和阻塞三个工作状态.三种状态在某些条件下可以转换,三者之间的转换关系如下: 进程三个状态之间的转换就是靠PV操作来控制的.PV操作主要就是P操作.V操作和信号量.其中信号量起 ...
- 关于JSP异常的处理
jsp中错误处理页面-isErrorPage="true" 举例说明:mustBeError.jsp <%@ page contentType="text/html ...
- Redis常见问题及处理方法
一.Redis状态检查 唯一标记一个redis实例的是ip和端口,前端是用tcp方式来访问redis的,我们提供给应用访问的是一个ip+63379(一般使用63379) 端口.因此我们执行如下命令检查 ...
- android的平台架构及特性
Android平台采用了整合的策略思想,包括底层Linux操作系统.中间层的中间件和上层的Java应用程序.下面我把Android的特性及其架构体系结构总结一下. 一.Android的平台特性 And ...
- 【转】Linux网络相关查询脚本
1. 查看TCP连接状态 netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn netstat -n | awk '/^tcp/ {++S[$NF] ...
- asp发布至IIS
最近做的一个任务是使用asp写的,显示的是数据库的报表,但是将报表当前目录发布至IIS后,发现还是运行不了 Set conn = Server.CreateObject("ADODB.Con ...
- ArrayList() 输出
import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Li ...
- 实现html伪静态竟然那么简单
1.单参数 功能: 把:www.44721.cn/movie.asp?id=123 伪静态为:www.44721.cn/movie.asp?123.html 代码如下: ASP/Visual Basi ...
- Android IntentService使用
因为多数启动服务不必同时处理多个请求(在多线程情景下会很危险),所以使用IntentService类实现服务是很好的选择.本经验将通过继承IntentService输出当前时间教大家如何使用Inten ...