天天看点

Unity Shader - ShaderLab: Legacy Lighting 旧版光照ShaderLab: Legacy Lighting

先吐槽:

  • CSDN的写文章系统这么渣,就因为那个自动保存功能太渣,每10~20秒卡7秒左右,还是准备换平台写博客好了。我就像不懂为何这么渣,不会去优化吗?不会写异步处理吗?
  • CSDN的文章写好后,点击发布,弹出那个发布页面也是无语,每选择一个选项,都卡5秒,你是将用户配置的发布属性,每个都同步等待发送完毕(WaitingSendToServerComplete)、等待接收服务器反馈(WaitingRecieveServerResponse)吗?不会写异步回调处理吗?想不懂了。
  • Unity部分说明文章太垃圾,翻译的时候,我真的忍不住删减掉冗余、啰嗦的描述。(是不是英文描述一件事物时,都是这么啰嗦的语法?还是我们国语好啊,可惜很多前言知识都掌握在国外,希望国家越来越强大)

目录:Unity Shader - 知识点目录(先占位,后续持续更新)

原文:ShaderLab: Legacy Lighting

版本:2019.1

ShaderLab: Legacy Lighting

旧版光照

材质与光照参数用于控制内置的顶点光照。顶点光照是标准的Direct3D/OpenGL的计算逐顶点光照模型。Lighting on 将打开光照。光照受Material 块,ColorMaterial 和 SparateSpecular 命令的影响。

注意:Material/Lighting 命令将会在使用了vertex programs 时失效;使用此方式的话,所有的计算将在你的vertex shader中完成。建议使用可编程的着色器来替代旧版的顶点光照。这样的话你就不需要使用这些命令来描述在此了,而是使用你自己自定义的vertex and fragment programs 来使用所有的光照,纹理,与其他你想要内容。

顶点颜色与光照是渲染几何体首先计算内容效果。它是顶点级别的操作,并在纹理应用前计算了基础颜色。

Synatax

语法

顶级命令控制固定函数的光照与否,或是配置一些选项。主要是再 Material Block (Material块)中设置的,详情如下:

Color

Color color
           

设置对象的颜色。该颜色可以是RGBA值,或是一个属性名称使用方括号括起来。

Material

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

Lighting

Lighting On | Off
           

为了设置Material块中的一些效果,你必须开启光照,使用 Lighting On 命令。如果lighting 是off的话,那么颜色就直接使用Color命令指定的颜色。

SeparateSpecular

独立的高光()

SeparateSpecular On | Off
           

该命令将控制高光光照的开光,高光光照不受纹理影响。

ColorMaterial

ColorMaterial AmbientAndDiffuse | Emission
           

设置逐顶点颜色而不是使用Material中的颜色。AmbientAndDiffuse 替代材质的Ambient(环境光)和Diffuse(漫反射光)的值;Emission 替代材质的Emission(自发光)值。

Material Block

这包含设置材质如何对光照做出反应。下面的每个属性都可以设置,默认我部门都是黑色(就是没有效果的意思)。

  • Diffuse color: 漫反射颜色分量。对象的基础颜色。
  • Ambient color: 环境光颜色分量。当对象环境光颜色,可在Light 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

该表公式中的括号内的设置是对每个对象都生效的光照设置。

Examples

显示纯红色:

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

基础颜色是白色,并且应用了顶点光照:

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

将颜色属性显示在Inspector面板中:

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

最后,一个完整的顶点光照shader(也可参考 SetTexture 应用页面):

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