ShaderLab: Legacy Lighting

来源:互联网 发布:过滤器相关java面试题 编辑:程序博客网 时间:2024/06/17 00:28

ShaderLab: Legacy Lighting

材质和光照参数被用来控制内建的顶点光照。顶点光照是标准的 Direct3D/OpenGL 光照模型用来计算每个顶点的光照。Lighting on 将其打开。光照被 Material 模块影响, ColorMaterialSeparateSpecular 命令.

Note: 当vertex programs被使用时 Material/Lighting 命令不会生效;在这种情况下,所有的计算都被完整的描述在shader中。目前使用可编程 shader 代替旧的顶点光照是明智的。这样你不需要使用任何命令描述,而是自定义 vertex and fragment programs ,来做所有的光照,贴图和其他任何事。

对于任何几和渲染,顶点的颜色和光照影响都是第一个被计算的。它在顶点级别被操作,并计算在应用纹理之前它的基础颜色。

Syntax

顶层的命了控制了是否使用固定管线光照,和一些配置选项。主要的步骤是在 Material Block,将在后边介绍。

Color

    Color color

将对象设为纯色。颜色是在圆括号中的RGBA值,或在方括号中的颜色属性名称。

Material

    Material {Material Block}

Material 块用来定义对象的材质属性。

Lighting

    Lighting On | Off

为了使定义在材质块中的设置有效,你必须使用 Lighting On 命令开启光照。如果光照是关闭状态,颜色会直接从 Color 命令获得。

SeparateSpecular

    SeparateSpecular On | Off

该命令使镜面光泽被加到shader pass的最后,因此,镜面光泽不受纹理化影响。只有当 Lighting On 被使用时,才有效。

ColorMaterial

    ColorMaterial AmbientAndDiffuse | Emission

让逐顶点颜色代替材质中的颜色。AmbientAndDiffuse 代替材质中的 Ambient 和 Diffuse 值; Emission 代替材质中的 Emission 值。

Material Block

该块包含了材质对光的响应的设置。任何属性都可以忽略,这种情况下,它们默认为黑色(例如 没有效果)。

Diffuse color: The diffuse color component. 这是一个对象的基础颜色。

Ambient color: The ambient color component. 这是当物体被 ambient light 照射时的颜色。在 Lighting Window中设置。

Specular color: 对象高光的颜色。

Shininess number: 高光的锐度, 在 0 和 1 之间。 当值为 0 你会得到一个巨大的高光,它看起来更像漫反射光,为 1 时你会得到一个小光斑。

Emission color: 当物体没有被任何光照亮时的颜色。

所有光击中物体后的颜色是:

Ambient * Lighting Window’s Ambient Intensity setting + (Light Color * Diffuse + Light Color * Specular) + Emission

等式中的光照部分,被复用于所有击中该对象的光。

通常,你希望漫反射的光照与环境光颜色相同。(所有 built-in Unity shaders 都是这样).

Examples

总是渲染物体为纯红色:

Shader "Solid Red" {    SubShader {        Pass { Color (1,0,0,0) }    }}

基础的shader,用来给物体上色为白色,并提供顶点光照:

Shader "VertexLit White" {    SubShader {        Pass {            Material {                Diffuse (1,1,1,1)                Ambient (1,1,1,1)            }            Lighting On        }    }}

一个扩展的版本,它把材质颜色变为一个在材质监视面板中可见的属性:

Shader "VertexLit Simple" {    Properties {        _Color ("Main Color", COLOR) = (1,1,1,1)    }    SubShader {        Pass {            Material {                Diffuse [_Color]                Ambient [_Color]            }            Lighting On        }    }}

最后,一个完全成熟的顶点光照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            }        }    }}

原创粉丝点击