Version: 2017.4
Синтаксис ShaderLab: Name
ShaderLab: Legacy Texture Combiners

Синтаксис ShaderLab: цвет, материал, освещение

Параметры материала и освещения используются для управления встроенным вершинным освещением. Вершинное освещение - это стандартная Direct3D/OpenGL модель освещения, которая просчитывается для каждой вершины. Lighting on включает освещение. На освещение влияет блок Material и команды ColorMaterial и SeparateSpecular .

Попиксельные источники света обычно реализуются с помощью пользовательских вершинных/фрагментных программ и не используют вершинное освещение. Для этого, вам не понадобятся какие-либо команды описанные здесь. Вместо этого, напишите свои собственные вершинные и фрагментные программы, где вы прописываете освещение, текстуры и что угодно сами.

Вершинные освещение и окраска - это первый эффект, который будет просчитан для любой рендерящейся геометрии. Оно работает на уровне вершин и рассчитывает используемый цвет основы ещё до применения текстур.

Синтаксис

Команды верхнего уровня контролируют, использовать ли fixed function освещение или нет и некоторые другие настройки. Главная система в блоке Material расписана детально ниже.

Цвет

    Color color

Задаёт объекту равномерный цвет. Цвет указывается либо в виде 4-х RGBA значений во вставке, либо именем цвета в квадратных скобках.

Материал

    Material {Material Block}

Блок Material используется для указания свойств материала объекта.

Освещение

    Lighting On | Off

Чтобы настройки, определённые в блоке Material, возымели эффект, вы должны включить освещение командой Lighting On. Если освещение наоборот выключено, то цвет берётся напрямую из команды Color.

SeparateSpecular

    SeparateSpecular On | Off

Это команда добавляет отражение света в конце прохода шейдера, таким образом, освещение не подвержено влиянию текстур. Работает, только если используется команда Lighting On.

ColorMaterial

    ColorMaterial AmbientAndDiffuse | Emission

Эта команда использует повертексный цвет вместо набора цветов в материале. AmbientAndDiffuse заменяет значения материала Ambient и Diffuse; Emission заменяет значение материала Emission.

Блок Material

Он содержит настройки того, как материал должен реагировать на свет. Любая из этих настроек может быть выкинута, в результате чего они по умолчанию будут чёрными (другими словами, эффекта не будет).

Diffuse color: Настройка диффузного цвета. Это базовый цвет объекта.

Ambient color: Настройка внешнего цвета. Объект приобретает этот цвет при попадании на него света окружающей среды, указанного в настройках рендера.

Specular color: Цвет светового отражения.

Shininess number: Резкость зоны подсветки отражения света в пределах от 0 до 1. При значении 0, у вас будет огромная зона подсветки, которая уже будет больше походить на диффузное освещение, при значении 1, у вас будет крошечное пятнышко.

Emission color: Цвет объекта, когда на него не падает свет.

Итоговый цвет источников света падающих на объект:

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

Выделенные части уравнения (вместе со скобками) повторяются для каждого источника света, что падает на объект.

Скорее всего, вы захотите, чтобы Diffuse и Ambient цвета были одинаковыми (так сделано во всех встроенных в Unity шейдерах).

Примеры

Всегда рендерить объект в красных цветах:

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

Расширенная версия, которая добавляет цвет материала как видимое свойство в инспекторе материалов:

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

И, наконец, полноценный шейдер вершинного освещения (см. также страницу справки по 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
            }
        }
    }
}
Синтаксис ShaderLab: Name
ShaderLab: Legacy Texture Combiners