Как работает технология Рейтрейсинг

Рейтрейсинг

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

Реальность против эффективности

Глаз человека воспринимает большое количество лучей: прямых — от источников света — и отраженных от различных предметов. Камеры фотоаппаратов очень похожи на сетчатку наших глаз: каждый «пиксель» глаза воспринимает излучение, создающее цвет. Из-за этого логичным решением разработчиков было воспользоваться законом обратимости хода лучей и для каждого пикселя экрана — по сути, виртуального глаза — рассчитывать, откуда придет луч света и какого он будет цвета.

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

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

Технология рейкастинг

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

  1. Все доступное в игре пространство — это комната с прямоугольными (чаще квадратными) стенами.
  2. Нет лестниц, лифтов, любого вида спусков и подъемов.
  3. Потолок везде имеет одинаковую высоту.
  4. Нет других трехмерных объектов, кроме стен, пола и потолка.
  5. Все остальные сущности — это «билборды», двумерные изображения, расположенные в трехмерном пространстве.

Wolfenstein 3D — первая очень популярная игра, разработчики которой этим воспользовались.

Скриншот игры Wolfenstein 3D
Скриншот игры Wolfenstein 3D

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

Перечисленные допущения приводят к тому, что стены всегда находятся на одном уровне экрана — ровно посередине, поэтому нарисовать их довольно просто.

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

Движок Wolfenstein 3D стал огромным шагом в развитии компьютерной графики, но разработчикам было понятно, что такого подхода хватит ненадолго.

Технология растеризация

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

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

Разтеризация. Схематическое отображение предмета на экран
Схематическое отображение предмета на экран

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

Проецирование точки из пространства на плоскость экрана, вид сбоку
Проецирование точки из пространства на плоскость экрана, вид сбоку

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

Плюсы и минусы растеризации

За годы развития этого подхода люди разработали тонны усовершенствований всех возможных аспектов растеризации. Реалистичные тени на объектах, имитация фактуры материалов. Особенно стоит отметить комплексный подход к эффективности: GPU, имеющие тысячи ядер, справляются с легко распараллеливающимся процессом проектирования виртуальных точек на реальный экран. И если десять лет назад мало какие компьютеры могли позволить себе выводить 30 кадров в секунду, то сейчас и 60, и 144 кадра в секунду — не редкость.

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

РЕКОМЕНДУЕМ:
Как работает технология HDR

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

Технология рейтрейсинг

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

Принцип работы рейтрейсинга

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

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

Уравнение прямой — ключ к пониманию рейтрейсинга
Уравнение прямой — ключ к пониманию рейтрейсинга

Здесь P1(x1, y1, z1) — это координаты камеры (для упрощения процесса обычно нули), а P2(x2, y2, z2) — координаты пикселя на виртуальном экране.

Процесс начинается с того, что находится плоскость, в которой лежит треугольник.

Компоненты нормали плоскости
Компоненты нормали плоскости
Уравнение плоскости
Уравнение плоскости

Так, из трех точек треугольника (Q1, Q2, Q3) и двух точек прямой мы можем получить неизвестный коэффициент уравнения прямой.

Неизвестный коэффициент уравнения прямой в случае, если P1(0, 0, 0)
Неизвестный коэффициент уравнения прямой в случае, если P1(0, 0, 0)

Если k > 0, значит, пересечение есть. Необходимо лишь проверить, попадает ли точка пересечения в сам треугольник. И здесь мы вспоминаем школьную геометрию: сумма внутренних углов треугольника равна 180°.

Углы в треугольнике
Углы в треугольнике

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

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

Рейтрейсинг на реальном оборудовании

Теперь, когда процесс рендеринга разобран, давай посмотрим, как это работает в жизни.

Возьмем решение Nvidia RTX, которое работает на серии видеокарт GeForce 20. Несмотря на то что внутреннее строение и механизм работы видеокарт — большой секрет, благодаря спецификациям и статьям в научных журналах мы можем попытаться понять, что же происходит внутри.

Конструкция этих видеокарт включает два вида ядер — обычные и тензорные. Обычные ядра, или, как они названы здесь, CUDA, как и во всех других видеокартах, могут заниматься растеризацией, используя стандартные шейдеры. Однако, объединяясь в блоки по 64 ядра, CUDA образуют специальный блок — ядро, которое способно выполнять рейтрейсинг, — это RT core. В каждой видеокарте их количество начинается от 68.

Тензорные же ядра, которые в каждой видеокарте исчисляются сотнями, предназначены для быстрой работы нейронных сетей. Их главная задача здесь — запуск специальной сети Nvidia — DLSS (Deep Learning Super Sampling), которая позволяет в режиме реального времени увеличивать разрешение изображения вдвое: создавать из Full HD 4K и убирать шум.

Сравнение рейкастинга и рейтрейсинга
Сравнение рейкастинга и рейтрейсинга

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

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

Хотя рейтрейсинг в реальном времени — это только зарождающаяся индустрия, но результат завораживает уже сейчас. Посмотрите, например, минутный ролик в 4K с рендером Battlefield V на RTX. Нам же остается только ждать следующего шага в развитии видеокарт, ну или хотя бы пока нынешний уровень станет по карману.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий