【Color, Material, Lighting】
The material and lighting parameters are used to control the built-in vertex lighting. Vertex lighting is the standard Direct3D/OpenGL lighting model that is computed for each vertex.
material & parameters 参数用于控制vertex lighting。
Lighting on turns it on. Lighting is affected by Material block, ColorMaterial and SeparateSpecular commands.
Lighting on 命令开启顶点光照。Lighting受Material、ColorMaterial、SeparateSpecular命令的影响。
Per-pixel lights are usually implemented with custom vertex/fragment programs and don't use vertex lighting. For these you don't use any of the commands described here, instead you define your own vertex and fragment programs where you do all lighting, texturing and anything else yourself.
Per-pixel 光照通过通过vertex/fragment 程序来实现,它们不使用顶点光照。Per-pixel光照不使用上述的任何命令,你需要定义自己的vertex & fragment 程序,在那里你要做lighting、texturing等所有的事。
[Syntax]
Color:ColorSets the object to a solid color. A color is either four RGBA values in parenthesis, or a color property name in square brackets.
Material:{ Material Block }The Material block is used to define the material properties of the object.
Lighting:On | Off。For the settings defined in the Material block to have any effect, you must enable Lighting with the Lighting On command. If lighting is off instead, the color is taken straight from the Color command.
SeparateSpecular:On | Off。 This command makes specular lighting be added to the end of the shader pass, so specular lighting is unaffected by texturing. Only has effect when Lighting On is used.
[Material Block]
This contains settings for how the material reacts to the light. Any of these properties can be left out, in which case they default to black (i.e. have no effect).
Diffuse:ColorThe diffuse color component. This is an object's base color.
Ambient:ColorThe ambient color component. This is the color the object has when it's hit by the ambient light set in the RenderSettings.
Specular:ColorThe color of the object's specular highlight.
Shininess:NumberThe sharpness of the highlight, between 0 and 1. At 0 you get a huge highlight that looks a lot like diffuse lighting, at 1 you get a tiny speck.
Emission:ColorThe color of the object when it is not hit by any light.
The full color of lights hitting the object is:
The light parts of the equation (within parenthesis) is repeated for all lights that hit the object.
[Examples]
1、Always render object in pure red:
Shader "Solid Red" { SubShader { Pass { Color (1,0,0,0) } } }
2、Basic Shader that colors the object white and applies vertex lighting:
Shader "VertexLit White" { SubShader { Pass { Material { Diffuse (1,1,1,1) Ambient (1,1,1,1) } Lighting On } } }
3、An extended version that adds material color as a property visible in Material Inspector:
Shader "VertexLit Simple" { Properties { _Color ("Main Color", COLOR) = (1,1,1,1) } SubShader { Pass { Material { Diffuse [_Color] Ambient [_Color] } Lighting On } } }
4、And finally, a full fledged vertex-lit shader (see also SetTexture reference page):
Shader "VertexLit" { Properties { _Color ("Main Color", Color) = (1,1,1,0) _SpecColor ("Spec Color", Color) = (1,1,1,1) _Emission ("Emmisive Color", Color) = (0,0,0,0) _Shininess ("Shininess", Range (0.01, 1)) = 0.7 _MainTex ("Base (RGB)", 2D) = "white" {} } SubShader { Pass { Material { Diffuse [_Color] Ambient [_Color] Shininess [_Shininess] Specular [_SpecColor] Emission [_Emission] } Lighting On SeparateSpecular On SetTexture [_MainTex] { Combine texture * primary DOUBLE, texture * primary } } } }