Рейтрейсинг: что это такое и зачем нужно
easy

Рейтрейсинг: что это такое и зачем нужно

RTX ON

Тренд компьютерных игр последних лет — добавлять в них поддержку рейтрейсинга. Считается, что благодаря ему игры становятся более реалистичными и поэтому — интересными. Мы собрали самые популярные вопросы про рейтрейсинг — что это такое, как работает и где применяется, кроме игр. Чисто для общего айтишного кругозора. 

Что такое рейтрейсинг

Рейтрейсинг — это русский вариант английского термина «ray tracing», что означает отслеживание лучей. Перевод: рейтрейсинг — это когда компьютер считает, как летят лучи света, от чего отражаются и какие отбрасывают тени. 

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

Для примера — вот кадр из игры «Киберпанк 2077» без рейтрейсинга и с ним. Слева свет как будто просвечивает сквозь машину и равномерно освещает всё: и героя, и интерьер. Справа видно, что свет проходит сквозь стекла машины и тени отбрасываются как нужно. Всё ещё очевидно, что перед нами трёхмерная графика, но уровень реализма выше:

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

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

Общий смысл рейтрейсинга такой:

  1. У нас есть трёхмерная сцена, в которой мы хотим смоделировать максимально реалистичное освещение.
  2. Мы добавляем в нужные места источники света: солнце, лампы, и прочую подсветку.
  3. На эту трёхмерную сцену мы смотрим из определённой точки через монитор, поэтому на выходе у нас получается двумерное изображение.
  4. Для каждой точки на экране монитора компьютер считает, как свет отражается от объектов, учитывая то, что свет может несколько раз отразиться от разных поверхностей.
  5. В итоге мы получаем реалистичную картинку с точки зрения освещения — тени находятся там, где должны быть, а поверхности освещены так, как это было бы в реальном мире.

Например, вот так выглядит моделирование естественного освещения для шариков из разных материалов. Обратите внимание на отражения и перевёрнутые изображения внутри прозрачных шаров:

А вот пример рендера с рейтрейсингом в сложной для моделирования сцене — стеклянных предметах с многократным отражением и преломлением света внутри стекла. Чтобы сформировать такое изображение, компьютеру нужно объяснить, как свет проходит через стекло разной толщины и формы, причем много раз:

Первичное и вторичное отражение

Представим простую сцену: синий фон, тёмный низ и две фигуры, которые стоят на полу. Где-то сверху светит яркая точка — это глобальное освещение, которое светит на все объекты в сцене:

На картинке у фигур резкие тени, потому что свет идёт из одной точки: он проходит вдоль каждой грани и там, куда он не попадает, мы видим чёрный фон. Такого в жизни не бывает, но пока так:

Если мы сделаем источник света побольше, например как солнце, то увидим, то тени стали мягче и меньше. Это всё потому, что тень от одних лучей немного освещается лучами с другой стороны источника света:

Белый квадрат наверху — это новый источник света

Всё это — первичное освещение. Слово «первичное» означает, что луч света один раз отразился от поверхности и мы увидели готовый кадр. Но это только начало.

Посмотрите на цвет тени: он чёрный, хоть и с мягкими краями. То же самое и с задней стороной кубика и шара — они чёрные:

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

У теней появился синий оттенок, а задние части объектов получили синее затенение

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

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

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

Если бы мы моделировали третье отражение лучей, то на боковой стенке кубика появилось бы светлое пятно. Это шар бы отдал назад часть лучей, которые дал ему кубик. Или не отдал бы — мы не знаем отражательной способности шара.

Проблемы быстродействия в рейтрейсинге

Алгоритмы рейтрейсинга известны давно и применяются в киноиндустрии еще с 1990-х годов. Проблема была и остается в быстродействии: траектории лучей считать долго, а лучей очень много. 

Один из способов решить проблему — считать лучи не на лету, а в специально отведённое время, это называется рендерингом. Когда студии делают компьютерную графику для фильмов, они сначала моделируют сцену (например, за один день), а потом отдают эту сцену на визуализацию на специальную рендер-ферму, где свет просчитывают в течение нескольких дней.

Рендер-ферма — это десятки компьютеров, которые просчитывают свет. На фото — ферма компании Pixar времен 2010-х годов. Фото — Slashfilm

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

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

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

Предел рейтрейсинга в реальном времени на 2022-й — начало 2023 года показан вот в этом концепт-видео от Вачовских. Демо сделано на движке Unreal Engine 5:

Почему не все видеокарты так умеют

Посчитать отражения и преломления света можно на чём угодно — хоть на Raspberry Pi. Другое дело, что для игр нужно считать полный кадр пикселей как минимум 30 раз в секунду, а для этого обычным процессорам не хватит дури. 

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

А вообще рейтрейсинг в глобальном освещении можно запустить даже на старой Денди — картинка будет так себе, зато настоящие тени и отражения:

Что такого особенного в видеокартах Nvidia серии RTX

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

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

Зачем это разработчикам игр

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

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

Ещё с рейтрейсингом наконец-то можно получить настоящие отражения — в стекле, на мокром асфальте и разных поверхностях. Для примера — видео с ремастером игры Человека-паука с технологией RTX и без неё:

Становятся ли игры лучше с рейтрейсингом? 

А вот тут интересно. 

Качество игры — понятие многомерное. Там важно всё: от драматургии и логики самой игры до качества моделей, текстур, анимации и озвучки. Если у игры пластиковые персонажи, неинтересная история и деревянные анимации, то RTX не поможет. 

Если игра уже хорошо работала, то есть шанс, что рейтрейсинг всё испортит. Например, разработчики специально нарисовали такие текстуры, чтобы героя было видно в кадре. Когда добавляется рейтрейсинг, кадр наполняется отражениями и бликами, всё смешивается в кашу. Это видно на кадрах из «Человека-паука»: сцены не становятся лучше, они становятся более шумными и мокрыми. 

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

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

Где ещё применяется рейтрейсинг

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

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

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

Железо от RTX незаменимо в математике для нейросетей и криптографии. Всякие Midjourney, ChatGPT и Stable Diffusion невозможны без железа от рейтрейсинга. Возможно, в будущем появятся отдельные нейрокомпьютеры, которые мы будем устанавливать по аналогии с видеокартами, но пока что запустить Stable Diffusion можно только на компьютере с RTX. 

Что дальше

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

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Вам может быть интересно
easy
[anycomment]
Exit mobile version