Физика нереального мира. Школьная программа на страже современного 3D

0
17

Содержание статьи

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

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

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

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

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

Рейкастинг

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

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

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

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

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

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

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

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

Растеризация

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

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

Схематическое отображение предмета на экранСхематическое отображение предмета на экран

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

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

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

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here

4 + 1 =