Рубрики
Custom Surface

«Объект красного цвета»

[post10644 surfaceshader]

#pragma surface surf Standard
Shader "Custom/SH_surf"
{
    SubShader
    {
        CGPROGRAM
        #pragma surface surf Standard
        sampler2D _MainTex;

        struct Input
        {
            float3 color : RED;
        };
        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            o.Albedo = IN.color;
            o.Alpha = 1;
        }
        ENDCG
    }
}
Рубрики
ShaderLab Surface

#pragma surface

Поверхностный шейдер

#pragma surface <surface function> <lighting model> <optional parameters>
  • <surface function> своя процедура отрисовки поверхности

[post10604 pragma]

[post10639 lightingmodel]

Рубрики
ShaderLab Шейдеры

lighting model

в шейдере будет использоваться модель освещения

  • Световые составляющие модели освещения
    • diffuse
      • Модель Ламберта рассеянная составляющая
        • моделирует идеальное диффузное освещение. Считается, что свет при попадании на поверхность рассеивается равномерно во все стороны. При расчете такого освещения учитывается только ориентация поверхности (нормаль N) и направление на источник света (вектор L). Рассеянная составляющая рассчитывается по закону косинусов (закон Ламберта)
  • простые встроенные
    • физически обоснованные
      • Standard настройка отражения
        • SurfaceOutputStandard
      • StandardSpecular
        • SurfaceOutputStandardSpecular
    • не физически обоснованные
      • Lambert diffuse
      • BlinnPhong specular
Рубрики
GameObject "Inspector" Unity-C# "GUI"

GUI «Функции»

//текущая прорисовка фона интерфейса имеет зелёный цвет
//по умолчанию white (белый)
GUI.backgroundColor = Color.green;
//текущая прорисовка элементов интерфейса имеет зелёный цвет
//по умолчанию white (белый)
GUI.color = Color.green;
//"пробел" в интерфейсе c отступом в 100 пикселей
UnityEngine.GUILayout.Space(100);
//статическая переменная (только для чтения)
//длинна элемента интерфейса 10 
static public readonly GUILayoutOption[] w10 = new GUILayoutOption[] { GUILayout.Width(10) };
//Переключать bool b c заголовком и длинной 
var new_b = EditorGUILayout.Toggle("заголовок", b, vars.w10);
Рубрики
Component "Material" (.mat) HLSL

Material «понятие»

это инстанс шейдера
файл с расширением .mat

экземпляр какого-то шейдера, в котором мы заранее настраиваем значения свойств этого шейдера.

«/» слеш в имени шейдера
разбирает парсингом как меню
чем больше слешей, тем больше вложенностей в меню имени шейдера

Плюсы

  • изменение шейдера можно делать на лету
  • нам не требуется перекомпиляции
  • шейдер хранится в видеопамяти
  • шейдер выполняется всеми тысячами процессоров

Минус

требуется только бинарный шейдер компилировать

Подразделение на секции

  1. Properties
    отображается в инспекторе материала
    в этой секции описываем значения констант для второй секции
    написан на языке ShaderLab и является оберткой Unity для работы с шейдером под множеством устройств
  2. SubShader
    этой секции может быть несколько
    присутствие уникальных особенностей это параметры для Unity
    Tags, Cull,ZWrite,Fog,Blend
  • каждый шейдер
    это минимум три программы по порядку
  1. вертексный #pragma vertex name
  2. геометрический #pragma geo name
  3. фрагметный (пиксельный) #pragma fragment name