ShaderLab: Legacy Lighting

25 篇文章 0 订阅
25 篇文章 0 订阅

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
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值