Разработчик описал приём Stylized GGX Shading, мультяшные блики поверх PBR

Автор технического блога о графике описал собственный приём под названием «Stylized GGX Shading», способ получить крупные резкие мультяшные блики при низкой шероховатости поверхности и мягкие, физически достоверные градиенты при высокой. Классический мультяшный (toon) шейдинг обычно просто отсекает освещение по порогу, превращая плавные цветовые градиенты в плоские зоны цвета. Автор предлагает смешать этот подход с физически достоверным (PBR) рендерингом на основе микрофасетной модели GGX (Cook-Torrance), чтобы одновременно получить стилизованный вид и сохранить преимущества PBR, энергосохранение, лёгкую интеграцию в существующие рендер-пайплайны и физически откалиброванные материалы.
Технически приём сводится к правке функции распределения нормалей (NDF) Trowbridge-Reitz, которая лежит в основе GGX. Простая версия добавляет один параметр, SpecularSize, расширяющий блик при низкой шероховатости; по словам автора, эта версия «крайне дешёвая» и стоит всего одно дополнительное умножение и одну операцию max, но у неё есть побочный эффект: она слишком сильно осветляет шероховатые материалы. Улучшенная версия добавляет второй параметр, GGXMatching (по опыту автора хорошо работают значения 4 или 8), который заставляет кривую при высокой шероховатости точнее совпадать с исходной GGX-моделью, сохраняя расширение бликов только при низкой шероховатости.
В качестве примера смешения 2D- и 3D-стилистики автор приводит The Legend of Zelda: Breath of the Wild, где персонажи отрисованы в чистом мультяшном стиле, а окружение, ближе к 3D/PBR-виду, из-за чего персонажи визуально отделяются от фона. Сам автор применял описываемый приём при работе над игрой Spellcasters Chronicles: команда тестировала именно этот вариант «Stylized GGX Shading», но в итоге остановилась на другом решении, которое тем не менее тоже сочетает 2D- и 3D-визуал; что именно это за решение, в тексте не раскрывается.
Чтобы усилить мультяшное ощущение, на Spellcasters Chronicles пробовали и другие приёмы: для проб освещённости (GI probes) использовали не привычные 9 коэффициентов сферических гармоник, а всего 3 (общий, «вверх» и «вниз», для неба и земли), что снижает направленность освещения, приближая картинку к рисованной 2D-графике, и заодно экономит производительность за счёт хранения меньшего числа коэффициентов; автор отмечает, что похожий приём со сниженным числом коэффициентов применён в игре Hi-Fi Rush. Среди других приёмов, упрощение дальних объектов через сочетание фильтра Кувахары с учётом глубины, смещения мип-уровней и обычного тумана, контурный (rim) свет, а также обводка и внутренние линии (аутлайны и инлайны).
Ключевые факты
- Автор предложил гибридный приём «Stylized GGX Shading»: расширяет мультяшные блики при низкой шероховатости, изменив функцию распределения нормалей (NDF) Trowbridge-Reitz в GGX-модели PBR-рендеринга
- Простая версия добавляет параметр SpecularSize и стоит всего одно умножение и один max, но переосвещает шероховатые материалы; улучшенная версия добавляет параметр GGXMatching (хорошо работают значения 4 или 8) и лучше сохраняет исходную форму кривой при высокой шероховатости
- Пример смешения стилей, The Legend of Zelda: Breath of the Wild, где мультяшные персонажи показаны на фоне PBR-окружения
- На игре Spellcasters Chronicles, где работал автор, команда тестировала именно этот приём, но в итоге выбрала другое решение, тоже сочетающее 2D и 3D
- Дополнительные приёмы для усиления мультяшности: сокращение коэффициентов сферических гармоник для проб освещённости с 9 до 3 (как в Hi-Fi Rush), фильтр Кувахары с учётом глубины, смещение мип-уровней, туман, контурный свет и обводка
Почему это важно
Игры, которые хотят выглядеть «рисованными», но при этом использовать современный физически достоверный (PBR) рендеринг, обычно вынуждены выбирать одно из двух или городить сложные гибридные пайплайны. Описанный приём, недорогая правка одной формулы в шейдере, которая позволяет получить крупные мультяшные блики, не отказываясь от стандартной GGX-модели и её преимуществ (энергосохранение, совместимость с существующими материалами и пайплайнами).
Кому это важно
Прежде всего, программистам рендеринга и техническим художникам в игровых студиях, особенно инди- и AA-проектах, которые целятся в стилизованную, «мультяшную» картинку поверх современного PBR-движка. Полезно и тем, кто уже сталкивался с классическими проблемами toon-шейдинга (плоские, неестественные блики) и ищет промежуточный вариант.
Как это применить
Приём вносится прямо в функцию NDF Trowbridge-Reitz внутри шейдера: для дешёвого варианта добавляется один параметр SpecularSize, расширяющий блик при низкой шероховатости (цена, одно умножение и один max). Для более качественного результата на шероховатых материалах добавляется второй параметр, GGXMatching, значения 4 или 8 автор называет рабочими. Дальше эффект можно усилить сопутствующими приёмами: сократить число коэффициентов сферических гармоник для проб освещённости с 9 до 3, добавить фильтр Кувахары с учётом глубины и смещение мип-уровней для дальних объектов, контурный свет, обводку и внутренние линии.
Можно ли доверять
Автор описывает собственный практический опыт, приём проверен на реальном коммерческом проекте (Spellcasters Chronicles), в посте приведены формулы, фрагменты шейдерного кода и интерактивные графики для проверки поведения кривой. Это личный технический блог, а не рецензируемая публикация: независимой проверки или редакторского контроля нет, а на Hacker News пост набрал 24 балла, но не получил ни одного комментария, то есть сообщество его формулы и утверждения не обсуждало и не оспаривало. В тексте также не указаны ни имя автора, ни дата публикации.
Риски и подводные камни
Простая версия приёма имеет известный недостаток, переосвечивает шероховатые материалы, и для его устранения нужна более сложная (и не так тривиально настраиваемая) улучшенная версия с параметром GGXMatching. По приёму с сокращением коэффициентов сферических гармоник автор приводит только качественное утверждение об экономии производительности, без конкретных цифр по кадровому времени или памяти. Также в тексте не назван ни игровой движок, ни платформа, на которых это реализовано, так что применимость к конкретному пайплайну требует собственной проверки.
«Это ощущается более современно, чем классический мультяшный шейдинг»
— автор поста