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 切线:顶点的切线
  • Texcoord0Texcoord1, ...: 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 )的更多相关文章

  1. Unity3d Shader开发(三)Pass(Culling & Depth Testing)

    剔除是一种通过避免渲染背对观察者的几何体面来提高性能的优化措施.所有几何体都包含正面和反面.剔除基于大多数对象都是封闭的事实:如果你有一个立方体,你不会看到背离你的那一面(总是只有一面在你的前方),因 ...

  2. Unity3d Shader开发(三)Pass(Color, Material, Lighting )

    材质和灯光参数被用于控制内置顶点光照.顶点光照是Direct3D/OpenGL标准的按每顶点计算的光照模型.光照打开时,光照受材质块,颜色材质和平行高光命令的影响. 每像素光照常被实现为自定义顶点/片 ...

  3. Unity3d Shader开发(四)UsePass ,GrabPass ,SubShader Tags

    (一)UsePass 命令 使用 来自另一个着色器的命名通道. Syntax 语法 UsePass "Shader/Name" 插入所有来自给定着色器中的给定名字的通道.Shade ...

  4. Unity3d Shader开发(三)Pass(Blending )

    混合被用于制作透明物体. 当图像被渲染时,所有着色器被执行以后,所有贴图被应用后,像素将被写到屏幕.他们是如何通过Blend命令的控制和已有的图像合并呢? Syntax 语法 Blend Off Tu ...

  5. Unity3d Shader开发(三)Pass(Alpha testing )

    透明度测试是阻止像素被写到屏幕的最后机会. 在最终渲染出的颜色被计算出来之后,可选择通过将颜色的透明度值和一个固定值比较.如果比较的结果失败,像素将不会被写到显示输出中. Syntax 语法 Alph ...

  6. Unity3d Shader开发(三)Pass(Texturing )

    纹理在基本的顶点光照被计算后被应用.在着色器中通过SetTexture 命令来完成.   SetTexture 命令在片面程序被使用时不会生效:这种模式下像素操作被完全描述在着色器中. 材质贴图可以用 ...

  7. Unity3d Shader开发(三)Pass(Fog )

    雾参数用于雾命令控制. 雾化是通过混合已生成的像素的颜色和基于到镜头的距离来确定的一个不变色来完成.雾化不会改变已经混合的像素的透明度值,只是改变RGB值. Syntax 语法 Fog { Fog C ...

  8. Unity3d Shader开发(二)SubShader

    (1)SubShader Unity中的每一个着色器都包含一个subshader的列表,当Unity需要显示一个网格时,它能发现使用的着色器,并提取第一个能运行在当前用户的显示卡上的子着色器. 当Un ...

  9. Unity3d Shader开发(五)Fallback ,Category

    Fallback定义在所有子着色器后.简单来说,它表示"如果没有任何子着色器能被运行在当前硬件上,请尝试使用降级着色器". Syntax 语法 Fallback "nam ...

随机推荐

  1. Hibernate学习笔记--------1.单表操作

    一.hibernate基本开发步骤 1.引入包,官网下载的包,目录\lib\required下的jar都加进去,这里使用的是 hibernate-release-5.2.1.Final 2.编写配置文 ...

  2. windows下搭建属于自己的web服务器

    这次需要记录一下我搭建web服务器的过程. 第一步,确定自己要使用的平台:这次我用的是windows2008 server版本 第二步,计划是想要纯手工的安装apache.php等.但是我们可以下载一 ...

  3. JAVA构造器、this、super

    构造器是为了创建一个类的实例.这个过程也可以在创建一个对象的时候用到: Platypus p1 = new Platypus(); 相反,方法的作用是为了执行java代码. 修饰符,返回值和命名的不同 ...

  4. php中GD库的一些简单使用

    今天了解了一些GD库的简单使用,现在稍微做一下总结! GD库是什么?,graphic device,图像工具库,gd库是php处理图形的扩展库,gd库提供了一系列用来处理图片的API,使用GD库可以处 ...

  5. jsp的useBean标签使用

    创建JavaBean package com.itheima.domain; public class Person { private String name; private int age; p ...

  6. django 学习-1

    1.首先是安装django 解压包然后 python setup.py install  安装成功 2.建立一个项目 django-admin.py startproject  study 3. 再到 ...

  7. hadoop mapreduce 优化

    http://www.cnblogs.com/c840136/archive/2013/03/10/2952887.html http://irwenqiang.iteye.com/blog/1535 ...

  8. Extjs3笔记 fbar

    在项目中会遇到在grid右下角显示合计之类的显示. 之前使用过的方式: 1.用width强制顶过去. 2.利用css来控制. 弊端: 利用第一种方式:导致调整窗口大小时会导致合计不能根据窗体的大小变化 ...

  9. apk 反编译记录

    反编译资源文件 工具:apktool 使用命令:java -jar apktool.jar d test.apk apktool官网下载地址:github 反编译classes.dex文件 工具:de ...

  10. procedure的over(partition by ) function

    转载自:http://www.2cto.com/database/201310/249722.html oracle的分析函数over(Partition by...)   Sql代码       o ...