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.1, 1)) = 0.7
_MainTex ("Base (RGB) Trans (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 * primary, texture * primary【3】
}
SetTexture [_MainTex] {
constantColor [_Color]
Combine previous * constant DOUBLE, previous * constant//DOUBLE:提亮
}
}
}
}
}
Category {
Fog { Mode Off }
Blend One One
SubShader {
}
SubShader {
}
}
}
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.1, 1)) = 0.7
_MainTex ("Base (RGB) Trans (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 * primary, texture * primary【3】
}
SetTexture [_MainTex] {
constantColor [_Color]
Combine previous * constant DOUBLE, previous * 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