← Назад к вопросам

Какие модели освещения вы знаете?

2.0 Middle🔥 151 комментариев
#C# и ООП

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Модели освещения в Unity и компьютерной графике

В Unity и компьютерной графике существует несколько фундаментальных моделей освещения, которые описывают взаимодействие света с поверхностями. Эти модели комбинируются для создания реалистичного или стилизованного визуального восприятия. Я разделю их на физические (PBR), эмпирические (традиционные) и специализированные (стилизованные).

1. Физически-корректный рендеринг (PBR)

Физически-корректный рендеринг — это современный стандарт, основанный на законах физики света. В Unity он реализован через Standard Shader (и URP/HDRP аналоги) и использует следующие ключевые компоненты:

  • Модель отражающей способности (BRDF — Bidirectional Reflectance Distribution Function):
    *   **Cook-Torrance BRDF** — наиболее распространённая модель, включающая:
        *   **Diffuse (диффузная) компонента**: Обычно рассчитывается по **Lambert** или более точной модели **Disney diffuse** (Oren-Nayar для шероховатых поверхностей).
        *   **Specular (зеркальная) компонента**: Рассчитывается как произведение трёх факторов:
            *   **Функция распределения нормалей (D)** — описывает микрогеометрию поверхности (например, **GGX/Trowbridge-Reitz**, даёт реалистичные "длинные" блики).
            *   **Геометрическая функция затенения (G)** — учитывает затенение микровыступов (например, **Smith**).
            *   **Функция Френеля (F)** — описывает зависимость отражения от угла обзора (**Шлик** — распространённая аппроксимация).

// Упрощённая структура Cook-Torrance в шейдере
float3 CookTorranceBRDF(float3 N, float3 L, float3 V, float roughness, float metallic) {
    float3 H = normalize(L + V);
    float NDF = DistributionGGX(N, H, roughness);
    float G   = GeometrySmith(N, V, L, roughness);
    float3 F  = fresnelSchlick(max(dot(H, V), 0.0), F0);
    float3 numerator = NDF * G * F;
    float denominator = 4.0 * max(dot(N, V), 0.0) * max(dot(N, L), 0.0) + 0.0001;
    float3 specular = numerator / denominator;
    float3 kS = F;
    float3 kD = (1.0 - kS) * (1.0 - metallic);
    float3 diffuse = kD * albedo / PI;
    return diffuse + specular;
}

2. Эмпирические (традиционные) модели

Эти модели более просты и исторически использовались в фиксированном конвейере (Fixed Function Pipeline).

  • Модель Ламберта (Lambertian Diffuse):
    *   Описывает идеально рассеянное отражение. Яркость не зависит от угла зрения.
    *   `float diffuse = max(dot(N, L), 0.0);`

  • Модель Фонга (Phong) и модифицированная модель Блинна-Фонга (Blinn-Phong):
    *   **Phong**: Суммирует ambient (фоновое), diffuse (рассеянное) и specular (зеркальное) освещение. Specular рассчитывается через отражённый вектор R.
    *   **Blinn-Phong**: Более эффективная оптимизация Фонга, использующая полувектор H, что даёт более правдоподобные и быстрые вычисления.
```hlsl
// Blinn-Phong specular
float3 H = normalize(L + V);
float specular = pow(max(dot(N, H), 0.0), shininess);
```

3. Специализированные и стилизованные модели

Используются для нереалистичного рендеринга (NPR — Non-Photorealistic Rendering).

  • Модель отрисовки в стиле "cel-shading" или "toon":
    *   Освещение квантуется (дискретизируется) с помощью **ramp-текстуры** или пошаговой функции.
```hlsl
// Простой toon diffuse
float toonDiffuse = floor(diffuse * _Steps) / _Steps;
```
  • Модель освещения для волос, кожи или ткани (Kajiya-Kay, Marschner и др.):
    *   Специализированные BRDF, учитывающие анизотропию или многократное рассеяние внутри среды (подповерхностное рассеяние — **Subsurface Scattering**).

Практическое применение в Unity

В Unity выбор модели освещения определяется конвейером рендеринга и используемым шейдером:

  1. Built-in Render Pipeline: Использует Standard Shader (PBR) или можно писать кастомные шейдеры на HLSL/CG, реализующие любую модель.
  2. Universal Render Pipeline (URP): Предоставляет Lit Shader (PBR, основанный на Cook-Torrance) и Baked Lit, Simple Lit (использует упрощённую модель, похожую на Blinn-Phong).
  3. High Definition Render Pipeline (HDRP): Использует более сложную и точную Physically Based Lighting с поддержкой площадных источников света, продвинутого подповерхностного рассеяния и спектрального рендеринга.

Итог: Выбор модели зависит от задач:

  • Реализм для AAA-проектов → PBR в HDRP.
  • Мобильные или стилизованные проекты → Simple Lit (Blinn-Phong) в URP или кастомные тоон-шейдеры.
  • Понимание основ → начинать с Lambert/Blinn-Phong, затем углубляться в Cook-Torrance для работы с современным PBR. Ключевая тенденция — физическая корректность, так как она обеспечивает консистентность материалов при любом освещении и ускоряет процесс художникам.