【Unity3D_Shader】流水Shader的名词查找和疑问

Shader "Mobile/Transparent/Vertex Color" {  
    Properties {  
        _Color ("Main Color"Color) = (1,1,1,1)  
        _SpecColor ("Spec Color"Color) = (1,1,1,0)  
        _Emission ("Emmisive Color"Color) = (0,0,0,0)  
        _Shininess ("Shininess"Range (0.11)) = 0.7  
        _MainTex ("Base (RGBTrans (A)"2D) = "white" {}  
    } 
    Category {【1】 
        Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}【2】 
        ZWrite Off//关闭深度记录,用于半透明物体 
        Alphatest Greater 0 //Alpha大于0的物体才渲染
        Blend SrcAlpha OneMinusSrcAlpha//最终颜色 = (源颜色rgb*源颜色alpha)+(累积颜色*(1-源颜色alpha)) 效果是alpha值高的地方源颜色突出,alpha低的地方,累积颜色突出 
        SubShader {  
            Material {  
                Diffuse [_Color]  
                Ambient [_Color]  
                Shininess [_Shininess]  
                Specular [_SpecColor]  
                Emission [_Emission]      
            }  
            Pass {  
                ColorMaterial AmbientAndDiffuse//替代材质的环境光和漫反射值,即不受光源影响光泽,光泽自定义 
                Fog { Mode Off }     
                Lighting Off//关闭顶点光照 
                SeparateSpecular On//允许使用一个单独的颜色作为镜面高光
                 SetTexture [_MainTex] {  
                     Combine texture * primarytexture * primary【3】
                 }  
                 SetTexture [_MainTex] {  
                     constantColor [_Color]  
                     Combine previous * constant DOUBLEprevious * constant//DOUBLE:提亮 
                 }    
            }  
        }   
    }  
}

【1】Category 是一个分类逻辑组。它将具有相同操作的SubShader分组到一起。大多数情况下是用来继承渲染状态。举例:

你的Shader可能含有多个SubShader, 每一个SubShader都需要关闭fog并且激活blending。这种情况下你就可以使用分类:

        Shader "example" {
               Category {
                   Fog { Mode Off }
                   Blend One One
                   SubShader {
                   }
                   SubShader {
                   }
              }
         }

【2】

1)"Queue"="Transparent"

除光晕层外,物体在所有图像层最上方

预定义的Queue有:

  • Background - 最早被调用的渲染,用来渲染天空盒或者背景
  • Geometry - 这是默认值,用来渲染非透明物体(普通情况下,场景中的绝大多数物体应该是非透明的)
  • AlphaTest - 用来渲染经过Alpha Test的像素,单独为AlphaTest设定一个Queue是出于对效率的考虑
  • Transparent - 以从后往前的顺序渲染透明物体
  • Overlay - 用来渲染叠加的效果,是渲染的最后阶段(比如镜头光晕等特效)

2)"IgnoreProjector"="True"

物体不会产生投影

3)"RenderType"="Transparent"

告诉系统应该在渲染非透明物体时调用我们

Unity定义了一些列这样的渲染过程,与RenderType是Opaque相对应的显而易见的是"RenderType" = "Transparent",表示渲染含有透明效果的物体时调用。在这里Tags其实暗示了你的Shader输出的是什么,如果输出中都是非透明物体,那写在Opaque里;如果想渲染透明或者半透明的像素,那应该写在Transparent中。

【3】

语法

Combine ColorPart,AlphaPart

你可能感兴趣的:(【Unity3D_Shader】流水Shader的名词查找和疑问)