Что такое Ray Tracing?
Представьте игровую сцену: разработчики создали мир, расставили объекты, осталось добавить свет (солнце, лампы, факелы). Безликая картинка оживает, появляются тени, блики и отражения. В реальности свет взаимодействует с поверхностями сложно: отражается, преломляется. Наиболее реалистичное изображение в играх достигается с помощью трассировки пути (Path Tracing). Этот метод моделирует физическое поведение света максимально точно, создавая картинку, близкую к реальной. Он эффективен даже в сложных сценах с множеством источников света и отражающих поверхностей.
Однако сложность расчёта огромна. Например, для генерации одного кадра в 4K космической сцены потребовалось бы 12 дней работы всего населения Земли, непрерывно вычисляющего отражения лучей. Из источника света исходит бесконечное количество лучей, но в камеру попадает лишь малая часть.
Поэтому для экономии ресурсов в играх используется трассировка лучей (Ray Tracing) – упрощённая версия Path Tracing. Основное отличие – в финальной стадии. В Ray Tracing лучи попадают в сцену, проверяются на пересечение с объектами, и после этого выполняются расчёты и закрашивание пикселя. В Path Tracing пересечения повторяются многократно для сбора данных перед выводом результата, что требует больших вычислительных мощностей и времени.
Каждый объект в сцене состоит из треугольников (например, 8 миллионов в одной сцене). Для рендера кадра потребуется около 8,3 миллиардов лучей (более тысячи на пиксель). Ray Tracing – параллельная операция: тысячи лучей из одного пикселя обрабатываются параллельно с лучами из соседних.
Луч из камеры проходит через пиксель, попадает в треугольник объекта. Цвет объекта связывается с лучом и пикселем. Финальный цвет – среднее значение от всех лучей, прошедших рядом (первичные лучи – primary rays). Это создаёт плоскую картинку с правильной перспективой.
Освещение и затенение
Для реалистичности нужны освещение и затенение. Для определения степени затемнения пикселя учитывается прямое освещение (от источника света) и непрямое (отражённые лучи). Суммирование даёт глобальное освещение (Global Illumination). Затемнение вычисляется с помощью теневых лучей (Shadow Rays). Они считывают параметры прямого источника света (размер, дистанция, цвет, яркость) или, если треугольник не под прямым освещением, порождают вторичные лучи (secondary rays), ищут путь к свету и учитывают свет от отражающих поверхностей. Просчёт отражений зависит от материала объектов (шероховатость, преломление – refraction rays).
Почему Ray Tracing вызывает недовольство?
Ray Tracing создаёт реалистичную картинку, но цена высока. Даже без него игры могли выглядеть красиво. В хорошо сделанных играх Ray Tracing не сильно меняет картинку, но снижает FPS. Пользователи, потратившие значительные суммы на видеокарты с поддержкой RTX, ожидают впечатляющих изменений.
Отражения
В зеркальных отражениях (например, в игре) Ray Tracing справляется хорошо. Но часто используется планарное отражение: разработчик создаёт виртуальную камеру для каждой зеркальной поверхности, которая рендерит сцену с другого ракурса. Это ручная работа для каждой поверхности. Планарное отражение работает для плоских поверхностей.
Для выпуклых поверхностей (например, кузов автомобиля) используется динамическая кубическая карта – статичная панорамная текстура, обновляемая каждый кадр. Это ресурсоёмко, поэтому качество отражений снижается, или отражаются только определённые объекты.
Screen Space Reflections (SSR) – технология, анализирующая изображение на экране и создающая отражения на основе пикселей. Недостаток: если объект выходит из поля зрения, его отражение пропадает.
Тени и свет
Lightmaps – текстурные карты, содержащие запечённые тени и свет для статичных объектов. Это даёт красивую картинку, но все объекты становятся статичными. Движущиеся объекты выглядят некорректно.
Screen Space Shadows (SSS) – технология, похожая на SSR, использующая данные на экране для расчёта теней. Она подходит для динамических теней, но имеет ограничения (тень пропадает, если объект выходит из поля зрения). Различные техники теней (Shadow Volumes, Shadow Maps, PCSS) были разработаны для улучшения качества теней, но не достигают реализма Ray Tracing.
DLSS
Deep Learning Super Sampling (DLSS) увеличивает разрешение изображения, снижая нагрузку на видеокарту. Игра рендерится в низком разрешении, затем DLSS масштабирует картинку. Это похоже на растягивание изображения в графическом редакторе. DLSS восстанавливает FPS, но может ухудшать качество изображения. DLSS 3.0 даёт значительный прирост FPS, но имеет артефакты и снижает отзывчивость управления.
Выводы
Ray Tracing – работающая технология, идеальная для кино и моделирования. Для игр пока проблематична. Не каждой игре нужна реалистичная графика. Игроки ценят интересный геймплей больше, чем фотореалистичность. Маркетинг играет роль в восприятии технологии. Если вы не видите разницы между RTX on и RTX off, возможно, разработчики хорошо поработали.