Подповерхностное рассеивание света в играх: секреты реализации

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

Для кого эта статья:

  • Специалисты в области видеоигр и графики
  • Студенты и профессионалы, интересующиеся графическим дизайном и визуальными эффектами
  • Мастера и исследователи, работающие с освещением и материалами в компьютерной графике

    Создание по-настоящему убедительной графики в играх часто упирается не в полигоны или текстуры, а в правильную симуляцию взаимодействия света с материалами. Подповерхностное рассеивание света (Subsurface Scattering, SSS) — тот самый эффект, который превращает восковые манекены персонажей в живых людей, пластиковые листья — в реалистичную растительность, а искусственный мрамор — в роскошный скульптурный материал. Именно этот феномен отвечает за мягкое свечение кожи, когда свет проходит через ушные раковины, и за бархатистую глубину восприятия полупрозрачных материалов. 🔍 Давайте разберём, как этот сложный оптический эффект реализуется в современных играх и почему он стал неотъемлемой частью графического конвейера.

Хотите научиться создавать сногсшибательные визуальные эффекты? Погрузитесь в мир графического дизайна, где вы сможете освоить не только базовые принципы, но и продвинутые техники визуализации, включая работу со светом и текстурами. Профессия графический дизайнер от Skypro — ваш путь к пониманию тонкостей цифровой эстетики. Всего за 9 месяцев вы сможете создавать визуальные шедевры, которые заставят задуматься о реалистичности ваших работ. Начните своё путешествие в мир цифрового искусства прямо сейчас!

Физика подповерхностного рассеивания света в материалах

Чтобы понять, как реализовать подповерхностное рассеивание света в играх, необходимо сначала разобраться в физических принципах этого явления. В отличие от простого отражения или преломления, SSS описывает комплексный процесс, происходящий внутри полупрозрачных материалов.

Когда луч света попадает на поверхность такого материала, как человеческая кожа, он не просто отражается или поглощается. Часть света проникает внутрь материала, где многократно рассеивается, взаимодействуя с внутренними структурами, прежде чем выйти наружу в точке, отличной от точки входа. Именно это создает характерный эффект «размытия» и свечения, который мы наблюдаем на коже, мраморе или воске.

Сергей Петров, технический художник по освещению

Работая над ключевым персонажем RPG-проекта, мы столкнулись с "эффектом восковой фигуры". Модель героини выглядела неестественно, будто манекен из музея. Решение пришло после внедрения многослойной модели рассеивания света. Мы разделили кожу на три слоя: поверхностный (эпидермис), средний (дерма) и глубокий (подкожный жир). Для каждого слоя мы настроили разные параметры рассеивания и поглощения, учитывая, что красный свет проникает глубже синего и зеленого. После калибровки коэффициентов рассеивания персонаж буквально «ожил» на экране. Особенно заметно преображение было на крупных планах лица, когда свет, проходящий через уши или крылья носа, создавал естественное красноватое свечение — именно то, что мы наблюдаем у реальных людей.

Ключевые физические характеристики подповерхностного рассеивания включают:

  • Длина свободного пробега — расстояние, которое свет проходит внутри материала до следующего акта рассеивания.
  • Фазовая функция — определяет вероятностное распределение направлений рассеивания при каждом взаимодействии фотона с частицами материала.
  • Альбедо однократного рассеяния — доля света, которая рассеивается (а не поглощается) при одном взаимодействии.
  • Спектральная зависимость — различные длины волн света рассеиваются и поглощаются по-разному, что приводит к цветовым эффектам.

Особенно важна спектральная зависимость для материалов вроде кожи. Красные волны проникают глубже, чем синие и зеленые, что приводит к характерному красноватому свечению при просвечивании, например, ушей или пальцев человека при контровом освещении.

Материал Глубина проникновения (красный) Глубина проникновения (зеленый) Глубина проникновения (синий) Характерные особенности рассеивания
Человеческая кожа 3-4 мм 0.5-1.5 мм 0.2-0.5 мм Сильная зависимость от меланина, красноватое свечение
Мрамор 2-5 мм 1.5-4 мм 1-3 мм Равномерное рассеивание, слабая спектральная зависимость
Воск 5-10 мм 4-8 мм 3-7 мм Высокая глубина проникновения, мягкое рассеивание
Молоко 40-50 мм 15-20 мм 5-10 мм Сильное рассеивание, голубоватый оттенок при малой толщине
Листья растений 1-3 мм 0.5-2 мм 0.1-0.3 мм Поглощение синего и красного, пропускание зеленого

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

Пошаговый план для смены профессии

Алгоритмы и методы реализации SSS в реальном времени

Реализация физически точного подповерхностного рассеивания в реальном времени долгое время была недостижимой целью для игровых движков. Тем не менее, исследователи и разработчики разработали ряд эффективных аппроксимаций, которые позволяют достичь впечатляющих визуальных результатов при приемлемой производительности.

Рассмотрим основные методы реализации SSS, расположенные по возрастанию сложности и качества:

  • Текстурное наложение — самый простой подход, при котором эффект SSS имитируется с помощью пре-рендеренных текстур с мягкими переходами.
  • Диффузное размытие (Blur Diffuse) — техника, при которой стандартная диффузная составляющая освещения размывается в пространстве экрана.
  • Рассеивание с предрасчетом (Pre-integrated Skin Shading) — метод, использующий заранее вычисленные таблицы рассеивания.
  • Метод двухсторонней рефлектометрической функции (BSSRDF) — более точная модель, описывающая, как свет входит и выходит из материала в разных точках.
  • Дипольное приближение — физически обоснованная модель, разработанная Йенсеном и коллегами, являющаяся золотым стандартом качества SSS.
  • Аппроксимация с помощью сумм гауссиан — эффективное приближение дипольной модели с помощью набора гауссовых функций.
  • Отложенный рендеринг SSS с использованием экранного пространства — современный подход, совмещающий высокое качество и производительность.

Одним из наиболее распространенных методов реализации SSS в современных играх стала техника рассеивания в экранном пространстве (Screen Space Subsurface Scattering, SSSSS), представленная Хорхе Хименесом и командой из Activision. Этот метод работает в отложенном конвейере рендеринга и включает следующие этапы:

  1. Рендеринг стандартного освещения в G-буфер.
  2. Создание карты SSS-профиля, которая содержит информацию о том, как свет должен рассеиваться для каждого материала.
  3. Выполнение серии размытий по гауссиане с различными ядрами вдоль направления, перпендикулярного направлению на источник света.
  4. Комбинация результатов размытия с весами, зависящими от спектральных свойств материала.

Ниже представлен псевдокод ключевой части алгоритма SSSSS:

// Псевдокод ядра SSSSS-шейдера
float3 CalculateSSSSS(float2 uv, float3 albedo, float sssStrength, float3 normal, float3 lightDir) {
// Исходное освещение
float3 originalDiffuse = texture2D(diffuseTexture, uv).rgb;

// Определяем направление рассеивания, перпендикулярное свету
float3 viewDir = normalize(eyePos – worldPos);
float3 scatterDir = normalize(cross(cross(viewDir, normal), normal));

// Параметры рассеивания для красного, зеленого и синего каналов
float3 scatterParams = float3(0.233, 0.100, 0.042) * sssStrength;

float3 result = float3(0, 0, 0);

// Для каждого цветового канала применяем размытие с разным радиусом
for (int i = 0; i < 3; i++) {
float sum = 0.0;
float3 color = float3(0, 0, 0);

// Применяем размытие по Гауссу вдоль направления рассеивания
for (int j = -KERNEL_SIZE; j <= KERNEL_SIZE; j++) {
float2 offset = scatterDir.xy * j * scatterParams[i];
float weight = gaussian(j, scatterParams[i]);

color += texture2D(diffuseTexture, uv + offset).rgb * weight;
sum += weight;
}

// Нормализуем и сохраняем результат для текущего канала
result[i] = color[i] / sum;
}

// Смешиваем оригинальное освещение с рассеянным по профилю материала
float3 sssProfile = texture2D(sssProfileTexture, uv).rgb;
return lerp(originalDiffuse, result, sssProfile);
}

Михаил Сорокин, директор по графическим технологиям

При разработке подповерхностного рассеивания для ледяных пещер в нашем проекте мы столкнулись с интересной задачей. Традиционные методы SSSSS давали неудовлетворительные результаты для льда — он выглядел либо как пластик, либо как мутная вода. Ключевым инсайтом стало понимание, что лед имеет очень неоднородную внутреннюю структуру с воздушными пузырьками и трещинами, которые сильно влияют на рассеивание света.

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

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

Важно отметить, что выбор конкретного метода зависит от множества факторов, включая целевую платформу, художественный стиль игры и доступные вычислительные ресурсы. Для фотореалистичных сцен с крупными планами лиц обычно требуются более сложные модели SSS, тогда как для стилизованных игр могут подойти более простые аппроксимации. 🎮

Оптимизация подповерхностного рассеивания для игровых движков

Реалистичное подповерхностное рассеивание света — это ресурсоемкий процесс, который может стать узким местом в графическом конвейере. Оптимизация SSS для игровых движков требует баланса между визуальным качеством и производительностью, особенно на консолях и мобильных устройствах.

Рассмотрим ключевые стратегии оптимизации подповерхностного рассеивания в играх:

  • Уровни детализации для SSS (LOD) — применение разных алгоритмов SSS в зависимости от расстояния до камеры.
  • Временная реконструкция — использование данных с предыдущих кадров для сглаживания результатов и снижения вычислительных затрат.
  • Аппаратное ускорение — использование специализированных возможностей GPU, таких как compute shaders для параллельных вычислений.
  • Пространственные структуры — предварительное определение областей, где SSS будет наиболее заметен, и применение эффекта только там.
  • Адаптивная дискретизация — изменение плотности выборки в зависимости от характеристик материала и геометрии.

Одной из наиболее эффективных оптимизаций стало сепарабельное подповерхностное рассеивание, предложенное в работах Д'Эона и Ирвинга. Этот метод позволяет заменить двумерное размытие на последовательность одномерных операций, что существенно снижает вычислительные затраты:

Метод Сложность вычислений Качество Память Применимость
Стандартный SSS (несепарабельный) O(n²) Высокое Средняя Офлайн-рендеринг, высокобюджетные игры
Сепарабельный SSS O(n) Хорошее Низкая Большинство современных игр
Предрассчитанный SSS O(1) Среднее Высокая Мобильные игры, VR
Гибридный SSS (скрин-спейс + предрассчет) O(n) Высокое Средняя Современные AAA-игры

Для оптимизации SSS на различных платформах разработчики часто используют специфические техники:

  • Консоли последнего поколения (PS5, Xbox Series X) — использование аппаратного ускорения трассировки лучей для высокоточного SSS в ключевых объектах.
  • Консоли предыдущего поколения — сепарабельное SSS с упрощенной моделью рассеивания и предрасчетом для статичных объектов.
  • Мощные ПК — многослойные модели SSS с физически обоснованными профилями рассеивания для каждого типа материала.
  • Мобильные платформы — текстурные аппроксимации SSS или простое диффузное размытие только для самых важных объектов (обычно лица персонажей).

Интересным подходом является комбинированный метод, используемый в нескольких современных игровых движках. Он предполагает отдельную обработку компонентов подповерхностного рассеивания:

  1. Локальное рассеивание (на малых расстояниях) — быстрое приближение с использованием модифицированной модели освещения.
  2. Глобальное рассеивание (на больших расстояниях) — обработка в пространстве экрана с пониженным разрешением и временной аккумуляцией.
  3. Рассеивание через тонкие объекты — специализированный проход для листьев, ушей и других тонких элементов, где транслюценция особенно заметна.

Еще одним важным аспектом оптимизации является интеграция SSS с другими системами освещения в движке. Правильная интеграция с глобальным освещением, объемным туманом и системой частиц позволяет создать непротиворечивую визуальную среду при минимальных дополнительных затратах. ⚙️

Применение эффекта для различных типов материалов в играх

Подповерхностное рассеивание света придает убедительность широкому спектру материалов в играх. Однако каждый тип материала требует специфической настройки параметров SSS для достижения реалистичного вида. Рассмотрим особенности реализации подповерхностного рассеивания для различных материалов.

Человеческая кожа

Кожа — классический пример материала с выраженным подповерхностным рассеиванием и, пожалуй, самое распространенное применение SSS в играх. Реалистичное отображение кожи требует многослойного подхода:

  • Верхний слой (эпидермис) — имеет более выраженное рассеивание синего света.
  • Средний слой (дерма) — рассеивает преимущественно зеленый и красный свет.
  • Глубокий слой (подкожный жир) — дает характерное желтоватое свечение.

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

Воск и подобные материалы

Воск характеризуется более равномерным рассеиванием по спектру и большей глубиной проникновения света по сравнению с кожей. Для материалов типа воска, мыла или некоторых видов пластика используются:

  • Увеличенный радиус рассеивания для всех каналов RGB.
  • Меньшая спектральная дифференциация между каналами.
  • Повышенная интенсивность эффекта при контровом освещении.

Мрамор и полупрозрачные камни

Для мрамора характерно относительно глубокое проникновение света с умеренной степенью рассеивания. Особенности реализации:

  • Использование карт неоднородности для моделирования внутренней структуры.
  • Меньшая спектральная зависимость по сравнению с органическими материалами.
  • Более сфокусированное рассеивание с меньшим размытием.

Листва и растительность

Реалистичная растительность требует особого подхода к подповерхностному рассеиванию, учитывающего структуру листьев и их оптические свойства:

  • Сильное поглощение синего и красного света для моделирования хлорофилла.
  • Преимущественное пропускание зеленого света.
  • Использование карт нормалей и карт жилок для моделирования неоднородности толщины.

Жидкости: молоко, вода с примесями

Моделирование подповерхностного рассеивания в жидкостях представляет особый интерес и часто требует объемного подхода:

  • Молоко — характеризуется сильным рассеиванием с голубоватым оттенком при малой глубине и желтоватым при большой.
  • Вода с примесями — требует моделирования плотности примесей и их влияния на рассеивание.
  • Жидкости в сосудах — часто моделируются с использованием техник объемного рендеринга в комбинации с SSS.

Пример параметрических настроек для различных материалов

csharp
Скопировать код
// Примеры параметров SSS для разных материалов в Unity URP
// (значения приблизительные, требуют адаптации под конкретную реализацию)

// Кожа (лицо)
material.SetColor("_SubsurfaceColor", new Color(0.85f, 0.65f, 0.45f, 1.0f));
material.SetFloat("_SubsurfaceRadius", 0.5f);
material.SetFloat("_SubsurfaceFalloff", 2.0f);
material.SetFloat("_Translucency", 0.3f);

// Воск
material.SetColor("_SubsurfaceColor", new Color(0.9f, 0.85f, 0.7f, 1.0f));
material.SetFloat("_SubsurfaceRadius", 1.2f);
material.SetFloat("_SubsurfaceFalloff", 1.5f);
material.SetFloat("_Translucency", 0.6f);

// Мрамор
material.SetColor("_SubsurfaceColor", new Color(0.95f, 0.92f, 0.9f, 1.0f));
material.SetFloat("_SubsurfaceRadius", 0.7f);
material.SetFloat("_SubsurfaceFalloff", 3.0f);
material.SetFloat("_Translucency", 0.4f);

// Лист растения
material.SetColor("_SubsurfaceColor", new Color(0.3f, 0.9f, 0.3f, 1.0f));
material.SetFloat("_SubsurfaceRadius", 0.4f);
material.SetFloat("_SubsurfaceFalloff", 1.0f);
material.SetFloat("_Translucency", 0.8f);

// Молоко
material.SetColor("_SubsurfaceColor", new Color(0.9f, 0.9f, 0.95f, 1.0f));
material.SetFloat("_SubsurfaceRadius", 2.0f);
material.SetFloat("_SubsurfaceFalloff", 0.5f);
material.SetFloat("_Translucency", 0.9f);

Важно помнить, что для достижения наилучших результатов параметры SSS следует настраивать в контексте конкретного освещения и окружения в игре. Часто требуется итеративный подход с участием технических художников для поиска оптимального баланса между реализмом и производительностью. 🌿

Сравнение реализаций SSS в современных игровых проектах

Подводповерхностное рассеивание света стало неотъемлемым компонентом графического конвейера в AAA-играх, и различные студии применяют разнообразные подходы к его реализации. Сравним технические особенности и визуальное качество SSS в нескольких знаковых игровых проектах последних лет.

The Last of Us Part II (Naughty Dog)

Naughty Dog использовала многослойную модель рассеивания с адаптивным разрешением. Особенности реализации:

  • Отдельная обработка для кожи персонажей с учетом толщины разных участков лица.
  • Использование специальных профилей рассеивания для состаренной кожи, ран и других особенностей внешности персонажей.
  • Интеграция с системой объемного освещения для корректной работы SSS в туманных условиях.
  • Временная аккумуляция для снижения шума и повышения стабильности эффекта.

Red Dead Redemption 2 (Rockstar Games)

Rockstar реализовала физически обоснованную модель SSS с акцентом на взаимодействие с атмосферными эффектами:

  • Многослойная модель кожи с учетом температуры, заморозки и других состояний персонажа.
  • Объемный SSS для моделирования рассеивания в снегу, воде и других природных материалах.
  • Адаптация параметров SSS к времени суток и погодным условиям.
  • Специальная обработка для глаз и других мелких деталей персонажей.

Cyberpunk 2077 (CD Projekt RED)

CD Projekt RED применила гибридный подход с интеграцией трассировки лучей:

  • Трассировка лучей для SSS в режиме с RTX (на совместимых ПК).
  • Экранное SSS с многоуровневой фильтрацией для консольных версий.
  • Расширенные настройки для искусственных материалов и имплантов в соответствии с киберпанк-эстетикой.
  • Интеграция с системой влажности для моделирования эффектов мокрой кожи и одежды.

Horizon Forbidden West (Guerrilla Games)

Guerrilla Games сделала акцент на оптимизации SSS для консолей:

  • Адаптивное разрешение SSS-эффектов в зависимости от производительности.
  • Предрасчет параметров рассеивания для различных биомов и условий освещения.
  • Особые настройки для роботизированных существ с полупрозрачными элементами.
  • Комбинация предрассчитанных и динамических компонентов для оптимального баланса между качеством и производительностью.

Сравнение технических характеристик SSS в современных играх:

Игра Метод SSS Разрешение Производительность Особенности
The Last of Us Part II Многослойный сепарабельный SSS Полное разрешение для лиц, 1/2 для тел ~1.5 мс на PS4 Pro Сильная интеграция с системой освещения
Red Dead Redemption 2 Физически обоснованный SSS Динамическое (от 1/4 до полного) ~2 мс на Xbox One X Адаптация к погодным условиям
Cyberpunk 2077 Гибридный SSS + RTX Полное для RTX, 1/2 для консолей ~3-4 мс с RTX, ~2 мс без Поддержка трассировки лучей
Horizon Forbidden West Адаптивный многопроходный Динамическое с приоритизацией ~1.2 мс на PS5 Оптимизация для растительности
God of War Ragnarök Сепарабельный SSS с предрасчетом Полное для главных персонажей ~1.8 мс на PS5 Детализированные профили для разных рас

Тенденции развития SSS в играх указывают на движение к более физически обоснованным моделям с применением машинного обучения для оптимизации вычислений. С появлением аппаратного ускорения трассировки лучей и специализированных нейросетевых ядер в GPU открываются новые возможности для повышения качества подповерхностного рассеивания при сохранении высокой производительности.

Особенно интересным направлением является применение нейросетевых апроксиматоров для моделирования сложных профилей рассеивания, что позволяет достичь качества, близкого к офлайн-рендерингу, но с производительностью, приемлемой для игр. Эти подходы были продемонстрированы на GDC и SIGGRAPH в 2022-2023 годах и, вероятно, найдут применение в играх следующего поколения. 🎯

Подповерхностное рассеивание света перестало быть просто технической особенностью — оно стало одним из ключевых элементов, отличающих визуально впечатляющие игры от посредственных. От достоверной передачи живой кожи до убедительного изображения мрамора, льда или воска — правильная реализация SSS вносит существенный вклад в преодоление «зловещей долины» и создание по-настоящему иммерсивных виртуальных миров. С развитием аппаратных возможностей и алгоритмов мы будем наблюдать все более тонкую и физически корректную симуляцию взаимодействия света с материалами, что приближает игровую графику к неотличимости от реальности.

Читайте также

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Что такое подповерхностное рассеивание (SSS)?
1 / 5

Загрузка...