Поясняем за RayTracing: великий обман, или великая технология?

scale_1200

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

scale_1200

Внимание широкой общественности трассировка привлекла в 2018 году, когда компания NVIDIA презентовала линейку видеокарт 20-й серии с поддержкой RayTracing. С тех пор склоки, споры и обсуждения не утихают. Пользователи говорят, что технология бесполезна, снижает производительность, не добавляет ничего нового в игровой процесс. Но так ли это на самом деле?
Разберёмся, совершив небольшое путешествие в геймдизайн. Выясним, как технология повлияла на игровую индустрию, какие особенности привнесла, и почему на ней рано ставить крест.

Освещение и тени

scale_1200

scale_1200

scale_1200

При создании игр объекты моделируются в трехмерном пространстве. Каждая точка в нём имеет три координаты (x, y, z). Все объёмные объекты соcтоят из треугольников потому, что именно три точки, три вершины задают плоскость. Такие треугольники называются полигонами. Чем больше полигонов, тем точнее моделируется объект.

scale_1200

scale_1200

Так создаются 3D-объекты, но смотрят люди на них через 2D-мониторы. Важная техническая задача – передать ощущение объёма через плоский экран. Основные инструменты для решения – перспектива и светотень.

scale_1200

С перспективой всё относительно просто. Объекты, которое отдалены от зрителя, должны быть меньше объектов, которые находятся близко. А вот со светотенью всё посложнее.


Пиксели и растеризация

scale_1200

scale_1200

scale_1200

3D-графика состоит из треугольников, а изображение на мониторе из квадратов – пикселей. Для передачи изображения нужно треугольники описать квадратами. Делается это условно. Чем больше используется пикcелей, тем точнее будет изображение. Такой процесс трансформации называется растеризация.

scale_1200

scale_1200

При растеризации нужно передать силуэт предмета, его цвет, свет в сцене, тени и отражения. Задача это довольно сложная.

scale_1200

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

scale_1200

scale_1200
Пример некорректной обработки источников света. Разница между скринами секунда

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


Как работает RayTracing

scale_1200

scale_1200

Испускаемый свет представляет собой не условный столб света, собранный из квадратиков, а пучок лучей. При этом поведение каждого луча рассчитывается отдельно. Столб только проецируется на поверхность, меняя её тон, а луч отражается, поглощается и преломляется. И происходит это постоянно.

scale_1200

scale_1200

Луч продолжает движение, сталкивается с новыми поверхностями и взаимодействует с ними. Поэтому свет при трассировке кажется более реалистичным. На один пиксель на экране могут влиять тысячи сгенерированных лучей.

scale_1200

Важный неразделимый партнёр света – тень. При трассировке лучей свет распределяется согласно условным законам физики, и тени получаются автоматически.

scale_1200
Примерно так выглядит карта теней

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

scale_1200

С таким подходом для каждого предмета приходится создавать свой рисунок тени. Это сложный, кропотливый труд, поэтому часто разработчики делают их только для основных, больших объектов. Получается забавная картинка: часть теней просто отсутствует в кадре.

scale_1200

scale_1200Пример некорректной обработки источников света. Разница между скринами секунда

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

scale_1200Пример жёстких теней

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

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

Отражения

scale_1200

scale_1200

Самая большая проблема, с которой сталкивается растеризация – создание отражений и рефлектов (бликов, которые появляются на объекте от соседних предметов).

scale_1200

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

scale_1200

scale_1200

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

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

scale_1200

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

scale_1200

scale_1200

Современная трассировка лучей создает отражения автоматически. При чём даже для малейших отражающих поверхностей, что не может не удивлять. Разработчики при растеризации не могут позволить себе тратить время на такие мелкие детали. Иначе одна игра будет создаваться вечно.

scale_1200

scale_1200

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


Что даёт трассировка?
Трассировка позволяет рассчитывать поведение света, автоматически создавать тени, блики и отражения. Разработчикам не нужно добавлять множество мелких объектов вручную. Программа сама создает детализированное изображение. Это происходит быстро и удивительно реалистично.
Пользователь получает действительно красивую картинку. Трассировка лучей позволяет получить минимум визуальных ошибок и свето-теневых несостыковок.


Недостатки RayTracing
Основная претензия к RayTracing – потеря производительности и FPS при использовании. И она действительно обоснована. Правда, важно отметить, что компания NVIDIA это понимает и работает над оптимизацией технологии.

scale_1200

Для этого, во-первых, карты получили специальные вычислительные блоки – RT- и Tensor-ядра.

scale_1200

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

scale_1200

В-третьих, компания ищет программные улучшения, привлекает ИИ. Новая технология DLSS искусственно добавляет лучи уже после расчетов и сглаживает картинку, позволяя получать лучшее качество изображения из исходников в низком разрешении.

Все эти меры дают свои плоды, и потери в производительности снижаются.


Итоги

scale_1200

Итак, мы рассмотрели, какие преимущества имеет трассировка лучей. Весьма вероятно, что многих из них преувеличены маркетологами, но полностью отрицать их глупо. Любые технологии могут подвергаться критике, особенно от тех, кто даже не попытался разобраться в теме. Это не должно останавливать прогресс. Со временем многие разработки становятся стабильнее, доступнее и дешевле, а значит ещё больше людей смогут получить ещё больше удовольствия от игрового процесса. И это самое важное.

Как известно, все процессы время поворачивает вспять. Когда-то топовые видеокарты «нагибал» переход в 3D. Потом PhysX, потом тесселяция, потом продвинутые методы сглаживания. Тогда тоже ходили разговоры, мол всё это от лукавого. Но со временем эти технологии стали стандартом индустрии, видеокарты адаптировались и теряют в быстродействии незначительно. Возможно, пройдёт ещё 3-5 лет, и RayTracing тоже станет стандартом?

Также у этого материала есть видеоверсия:



784 0 850 3
0
RENDER.RU