Unity3d Shader开发(二)SubShader】的更多相关文章

剔除是一种通过避免渲染背对观察者的几何体面来提高性能的优化措施.所有几何体都包含正面和反面.剔除基于大多数对象都是封闭的事实:如果你有一个立方体,你不会看到背离你的那一面(总是只有一面在你的前方),因此我们不需要绘制出背面.因此也被称做背面剔除. 另一个使得渲染看起来正确的是深度测试.深度测试确保只有场景内的对象的最靠近的表面参与绘制. Syntax 语法 Cull Back | Front | Off 控制几何体的那一面会被剔除(不绘制) Back 不绘制背离观察者的几何体面. Front 不…
材质和灯光参数被用于控制内置顶点光照.顶点光照是Direct3D/OpenGL标准的按每顶点计算的光照模型.光照打开时,光照受材质块,颜色材质和平行高光命令的影响. 每像素光照常被实现为自定义顶点/片面程序,并且不使用顶点光照.这种情况下,你不会使用到任何在这里描述的命令,相反,在你完成光照,贴图和任何其他动作时,你需要定义自己的vertex and fragment programs . 顶点颜色和灯光是对任何已渲染过后的几何体所添加的第一步效果.这个操作处在顶点级别,用于计算在纹理被应用之前…
(1)SubShader Unity中的每一个着色器都包含一个subshader的列表,当Unity需要显示一个网格时,它能发现使用的着色器,并提取第一个能运行在当前用户的显示卡上的子着色器. 当Unity选择用于渲染的子着色器时,它为每一个被定义的通道渲染一次对象(可能会更多,这取决于光线的交互作用).当对象的每一次渲染都是一次昂贵的操作时,你能选择使用最小数目的通道来定义着色器.当然,有时在一些显示硬件上需要的效果不能通过单次通道来完成.除了使用多次通道你别无选择. 通道定义的类型包括a r…
(一)UsePass 命令 使用 来自另一个着色器的命名通道. Syntax 语法 UsePass "Shader/Name" 插入所有来自给定着色器中的给定名字的通道.Shader/Name包含了通过斜杠字符分割的着色器的名字和通道的名字 某些着色器重用其他着色器中已存在的通道,减少重复的代码.例如,在许多像素光照着色器中,阴影色或顶点光照通道在在相应的顶点光照着色器中是相同的.UsePass命令只是包含了另一个着色器的给定通道.例如当如下的命令可以使用内置的高光着色器中的名叫&qu…
Pass Tags 通过使用tags来告诉渲染引擎在什么时候该如何渲染他们所期望的效果. Syntax 语法 Tags { "TagName1" = "Value1" "TagName2" = "Value2" } 指定TagName1 的值为 Value1 ,TagName2 的值为 Value2 你可以指定很多你喜欢的标签 Details 细节 标签基本上是键-值对的形式. 内部的Pass 标签用来控制光照管道(环境光照,…
Fallback定义在所有子着色器后.简单来说,它表示"如果没有任何子着色器能被运行在当前硬件上,请尝试使用降级着色器". Syntax 语法 Fallback "name" 退回到给定名称的着色器 Fallback Off 显式声明没有fallback并且不会打印任何警告,甚至没有子着色器会被运行 Details 细节 Fallback标志的功能和将另一个着色器的所有子着色器拷贝到标志所在位置所起的功能相同 Example 示例 Shader "exam…
混合被用于制作透明物体. 当图像被渲染时,所有着色器被执行以后,所有贴图被应用后,像素将被写到屏幕.他们是如何通过Blend命令的控制和已有的图像合并呢? Syntax 语法 Blend Off Turn off blending 关闭混合 Blend SrcFactor DstFactor 配置并启动混合.产生的颜色被乘以SrcFactor. 已存在于屏幕的颜色乘以DstFactor,并且两者将被叠加在一起. Blend SrcFactor DstFactor, SrcFactorA DstF…
透明度测试是阻止像素被写到屏幕的最后机会. 在最终渲染出的颜色被计算出来之后,可选择通过将颜色的透明度值和一个固定值比较.如果比较的结果失败,像素将不会被写到显示输出中. Syntax 语法 AlphaTest Off 渲染所有像素(缺省) AlphaTest comparison AlphaValue 设定透明度测试只渲染在某一确定范围内的透明度值的像素. Comparison 对照表 比较下列词语: Greater Only render pixels whose alpha is grea…
纹理在基本的顶点光照被计算后被应用.在着色器中通过SetTexture 命令来完成.   SetTexture 命令在片面程序被使用时不会生效:这种模式下像素操作被完全描述在着色器中. 材质贴图可以用来做老风格的混合器效果.你能在一个通道中使用多个SetTexture 命令 - 所有纹理被顺序的应用,如同绘画程序中的层一样.SetTexture 命令必须放置在通道的末尾. Syntax 语法 SetTexture [TexturePropertyName] { Texture Block } 分…
着色器可以定义一个参数列表,可以由开发者在材质检视面板编辑参数.着色器文件中的Properties块定义了这些参数: 语法: Properties { Property [Property ...]   } 定义属性块,其中可包含多个属性,其定义如下 : name ("display name", Range (min, max)) = number 定义浮点数属性,在检视器中可通过一个标注最大最小值的滑条来修改. _WaveScale ("Wave scale",…