Аннотация
В работе выполнен сравнительный анализ шейдерных подходов к деформируемому снегу в real-time рендеринге.
Типы шейдеров (вершинные, тесселяционные, геометрические, пиксельные) сопоставлены на единой базовой сцене в Unity URP.
Оптимизированная гибридная сцена достигла 242 FPS при 114 FPS базовой.
Сформулированы рекомендации по выбору и комбинированию подходов.
Описание предметного поля
В компьютерной графике получение финального изображения происходит с помощью процесса рендеринга. По описанию геометрии сцены, материалов, освещения и камеры создается изображение для простейших мультфильмов или фотореалистичного изображения. Результат компьютерных вычислений выводится на экран и/или сохраняется в файл.
По способу получения этих кадров рендеринг принято делить в литературе на два основных типа: «в реальном времени» (real-time) и «офлайн рендеринг» (pre-render, offline-render) [1]
Предварительный или офлайн-рендеринг — это генерация кадров заранее. В таком случае нет строгого лимита по времени на создание одного кадра, а значит могут быть использованы ресурсоемкие методы расчета. Таким образом создание самых сложных кадров может занимать до нескольких часов.
В зависимости от степени гравитационного линзирования изображения, для создания одного изображения в формате IMAX при работе на десяти процессорных ядрах обычно требуется от 30 минут до нескольких часов
Так в своей работе пишет команда ученых, занимавшаяся расчетом преломления света от гравитационного линзирования для фильма «Интерстеллар». Такой рендеринг требует значительных вычислительных ресурсов и объёмов данных.
Ограничением здесь выступают сроки производства. Это типично для кино, рекламы, визуализации.
Рендеринг в реальном времени — быстрая генерация изображения на компьютере. Часто действия зрителя могут немедленно влиять на содержание следующего кадра.
This cycle of reaction and rendering happens at a rapid enough rate that the viewer does not see individual images
Этот цикл реакции и рендеринга происходит с такой скоростью, что зритель не видит отдельных изображений
В этом случае скорость отображения измеряется в кадрах в секунду (frame per second или FPS). При 1 FPS интерактивность почти отсутствует.
Сравнение частоты кадров
Ощущение отклика появляется примерно с 6 FPS. В играх стремятся достичь 30, 60 или более FPS. Для 60 FPS на отрисовку одного кадра есть примерно 16,7 миллисекунды, это и отличает рендеринг в реальном времени.
Ограничения обусловлены не только временными ресурсами, но и аппаратными. Устройство зрителя, на котором должен вычисляться каждый кадр, в разы слабее, а значит нельзя использовать высоконагруженные сцены, поскольку кадр будет отрисовываться дольше, а частота кадров снизится.
график не отражает математическую функции зависимости, а демонстрирует порядок значений
Шейдеры
Термин «шейдер» (Shader) в компьютерной графике появился в 1980‑е годы в компании Pixar в рамках языка описания материалов RenderMan Shading Language (RSL) — специализированного языка программирования, предназначенного для описания внешнего вида поверхностей, свет, объём.
Шейдеры RSL выполнялись на процессоре (CPU) в офлайн‑конвейере. [3]
В 1987 году была представлена видеокарта IBM 8514/A — одна из первых графических плат, реализующих так называемый конвейер с фиксированной функциональностью (fixed-function pipeline).
IBM 8514/A
Это означает, что видеокарта способна выполнять только те операции, которые изначально заложены её производителем.
Можно было нарисовать треугольник, наложить текстуру или выполнить простые операции с освещением, чем и пользовались разработчики игр для real-time рендеринга. Но тогда еще не было возможности создать свой собственный эффект. [4]
«Mission», Loriciels, 1987
Это продолжалось до 1999 года. Разработчики могли пользоваться исключительно фиксированным конвейером. Трансформация вершин, освещение, растеризация были жестко заданы и можно было только настраивать их отдельные параметры. [5]


«Resident Evil 2», Capcom R&D Division 4, 1998
В августе 1999 года выходит видеокарта GeForce 256
Nvidia GeForce 256
Был оснащён аппаратным блоком преобразований и освещения (Transform and Lighting, T&L) [6].
Данный модуль позволил перенести вычисление геометрических преобразований и модели освещения с центрального процессора на графический, что существенно повысило пропускную способность графического конвейера при сохранении архитектуры с фиксированным функционалом (fixed-function pipeline).
«Deus Ex», Ion Storm, 2000

«Counter-Strike», Valve, 2000

Уже в феврале 2001 года выходит GeForce 3, а вместе с ней и программируемые шейдеры: Vertex Shader 1.1 и Pixel Shader 1.1 [7].
С этого момента конвейер становится программируемым. DirectX 8, а затем OpenGL 2.0 с GLSL закрепили модель шейдеров как основу пайплайна в 2004 году.
«Resident evil 4», Capcom, 2005
Процесс отрисовки кадра
Для того чтобы кадр появился на экране должны завершиться несколько последовательных операций. Этот конвейер и называется пайплайном. По нему данные идут от программы до пикселей на мониторе. Конвейер разделяют на четыре основные стадии [8]
Схема последовательности этапов конвейера
Application (CPU) — логика приложения. Разработчик напрямую влияет на производительность, например изменением количества треугольников в кадре
Geometry (GPU) — обработка геометрии для каждого полигона и вершины, на этом этапе мы понимаем какие объекты, их формы, освещение, попали в итоговый кадр. Знаем вершины объектов в экранном пространстве
Rasterization (GPU) — проекция сцены на двухмерный экран и присвоение каждому объекту в кадре его набора пикселей. Определяем, где окажутся пиксели
Pixel processing/Fragment Shading (GPU) — этап конвейера рендеринга, на котором для каждого фрагмента (потенциального пикселя) вычисляется итоговое значение цвета и, при необходимости, других атрибутов (глубина, покрытие и т. д.) перед записью в буфер кадра. Иными словами, на этом этапе определяется, каким будет пиксель на экране: выполняется финальная подстановка цвета для каждого фрагмента после растеризации
CPU формирует сцену и подготавливает необходимые данные, однако непосредственный рендеринг выполняется на GPU, что обусловлено архитектурными особенностями этих устройств [8].
Процессор, как правило, содержит несколько высокопроизводительных ядер (типично 4–16), каждое из которых способно эффективно решать сложные, слабо распараллеливаемые задачи. Видеокарта, напротив, опирается на тысячи более простых вычислительных ядер [8].
Задача рендеринга по своей природе хорошо распараллеливается: требуется многократно повторять одни и те же операции над миллионами вершин и пикселей.
В результате каждое ядро GPU одновременно выполняет часть вычислений, что позволяет обрабатывать на порядки больший объём данных по сравнению с CPU [8].
Процессор не рисует сам, он формирует задания на отрисовку для видеокарты и кладет их в command buffer (очередь, буфер команд) [8]. Каждая команда «нарисуй этот объект» — один draw call (вызов отрисовки) [8].
Физически эти чипы находятся в разных местах и обмен данными между ними, в том числе этими командами, происходит по шине PCIe (Peripheral Component Interconnect Express) [9].
Её пропускная способность очень высокая, но в разы ниже скорости работы каждого чипа с собственной памятью. Каждый обмен занимает много времени, относительно скорости расчета [9]. Поэтому принято стремиться к уменьшению количества этих вызовов для отрисовки каждого кадра.
Каждый draw call — отдельная инструкция с набором настроек для шейдера или текстуры. Переключение между ними создает дополнительные расходы на CPU [10, 11].
Для того чтобы уменьшить их число существует батчинг (batching), он позволяет объединять объекты с одинаковым материалом в один draw call.
В Unity существует batch (батч) — группа объектов, отрисованных одним draw call [10]. А показатель Batches говорит о том, сколько фактически вызовов рендера сейчас делается, чтобы отрисовать кадр.
То есть меньше batches = меньше draw calls = меньше нагрузка на CPU и лучше производительность. [10, 11]
Виды шейдеров
Во всем этом конвейере отрисовки кадра существуют шейдеры.
Шейдеры — программы, которые выполняются на ядрах GPU на одном из этапов конвейера [8, 12]:
Вершинный (vertex) — расчет геометрии для каждой вершины отдельно. Преобразование координат из локального пространства в клиповое/экранное, вычисление нормалей в нужной системе координат, передача атрибутов (UV, цвета, тангенты) дальше по конвейеру;
Тесселяция (hull + domain) — перерассчитывает разбиение объекта на треугольники, изменяет позицию вершин
— Hull управляет степенью тесселяции патчей (насколько сильно разбить полигоны на более мелкие). Здесь задаются коэффициенты тесселяции в зависимости от расстояния до камеры, угла, уровня детализации и т.п
— Domain получает уже «разбитую» геометрию и вычисляет итоговое положение новых вершин (в том числе с учётом высотных карт, деформаций и т. д.)
Геометрический (geometry) — расчет геометрии объекта, учитывает все вершины примитива. Работает с целыми примитивами (треугольниками/линиями) и может порождать новые примитивы или отбрасывать существующие. Удобен для процедурного «наращивания» геометрии
Пиксельный (pixel/fragment) — Рассчитывает итоговый цвет каждого фрагмента: выбор и выборка текстур, освещение, тени, BRDF, смешивание с буфером кадра и пр
Вычислительный (compute) — считается на GPU, вне конвейера отрисовки, а до, после и/или во время, может быть несколько раз за кадр. Считает то, где нужны массовые вычисления, например физика частиц [12]
Релевантность
Значимость интерактивного окружения для погружения (immersion) и геймплея широко признаётся: когда мир реагирует на действия игрока, в том числе за счёт деформации снега, грунта или воды — усиливается связь между действием и откликом и повышается вовлечённость [12, 13].
Hanák в своей работе по реалтайм-деформации снега подчёркивает, что возможность динамических объектов взаимодействовать со снежной средой в реальном времени способствует погружению и открывает новые игровые механики. Аналогично, Crause и соавторы показывают, что реалистичное физическое взаимодействие с террейном поддерживает подобный способ погружения, в отличие от исключительно иллюзионистских приёмов [12].
В играх, ориентированных на уют и расслабление, отзывчивость среды и эстетика «дома» формируют переживание безопасности и принадлежности миру, коузи при этом понимается не только как жанр, но и как структурный и смысловой элемент[13]. Иными словами, уют здесь задаёт логику устройства игрового мира и одновременно формирует ценностно-эмоциональный контекст, смысл.
Механики ухода за пространством (в том числе уборка, расчистка снега, взаимодействие с сезонными объектами) согласуются с такой эстетикой и востребованы в проектах разного масштаба от AAA до инди [12, 13, 14].
«Hozy (demo)», Come On Studio, 2026
При работе над игровым проектом передо мной встала задача реализации взаимодействия со снегом в игре подобного жанра, однако технических решений для реализации не только деформируемого снега, но и сходных эффектов в проектах с мультяшной графикой и умеренной политональностью (лоу-мид поли) в литературе и открытых руководствах практически не систематизированы.
Найденные мной решения разрознены. Одни рассказывают поверхностно о реализации в ААА проектах [14], другие повествуют об отдельных подходах в учебных проектах, но без единой системы сравнения и без описания применения к кейсу инди игр.
Возникает необходимость в сравнительном анализе шейдерных подходов, который бы позволил обоснованно выбирать и комбинировать подходы и технологии.
Цель работы:
Систематизировать и сравнить основные типы шейдеров применительно к деформируемому снегу на единой базовой сцене по заданным критериям.
Исследовательские вопросы:
Какие шейдерные подходы лучше удовлетворяют заданным критериям (функциональным, техническим и визуальным)?
Как каждый подход влияет на метрики производительности и визуальный результат?
Как целесообразно комбинировать шейдерные подходы в гибридной сцене и какие рекомендации по выбору и настройке можно сформулировать для проектов с деформируемым снегом?





