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

Отражение кристалла

Пытаться повторить физику реального мира для создания 3d сцены — это путь к тому, чтобы сделать ее более реалистичной, это люди поняли еще в двадцатом веке. Но почему же тогда по этому пути никто не идет? Ответ один:

 

В точности повторять законы физики — это красиво, эффектно, реалистично, но неэффективно.

Модель машины

Это - всего лишь моделька, она призвана создать иллюзию реального автомобиля, но нет никакого смысла наполнять ее реальным содержимым.

Модель женщины
Модель мужчины

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

 

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

 

Зачем нам тратить ресурсы на те вещи, которые никто никогда не увидит и не услышит?

 

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

 

Алгоритм трассировки лучей

 

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

 

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

 

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

 

Хороший пример — это эхолокация. Еще в 18 веке итальянский физик Ладзаро Спалланцани заметил, что летучие мыши спокойно передвигаются в абсолютной темноте, не задевая никаких препятствий, и когда его коллега поставил опыт: залепил им уши воском, они перестали ориентироваться. Тогда они пришли к выводу, что, по всей видимости, «летучие мыши замечают препятствия ушами».

 

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

 

Сейчас огромное количество радаров работают именно по этому принципу. Именно по этому пути «заимствования у природы» пошел алгоритм трассировки лучей.

 

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

Позиция камеры

Вы выбираете позицию, в которой находится камера, и направление, в котором она смотрит, далее Вы строите перед собой двумерную матрицу, эту самую картинку 800*800 px.

Позиция камеры и пикселя

Через каждый из пикселей мы пропускаем луч. Это будет прямая, которая проходит через камеру и этот пиксель (см. фото выше). Затем мы проверяем, с каким из объектов на сцене она пересекается. Оказывается, что наш луч пересекается вот с этим зеленым деревом, значит нам необходимо сделать этот пиксель зеленым.

 

Это если говорить очень простым языком. На самом деле может случиться так, что один и тот же луч пересекается с несколькими объектами, в таком случае мы берем тот, расстояние от точки обзора до которого меньше.

 

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

Попадание луча на зеркало

Отражения, построенные таким методом, выглядят просто шикарно. А теперь посмотрите на реальный мир. Цвета пикселя будет мало, чтобы сделать картинку по-настоящему реалистичной.

 

Метод трассировки лучей хорош еще и тем, что позволяет создавать очень крутые тени и очень правильное освещение.

Метод трассировки

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

 

Далее эффект освещения от всех источников суммируется и учитывается при выборе цвета пикселя.

 

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

 

Поскольку это - RGB, мы берем цвет отраженного луча, цвет преломленного луча и цвет кристалла с определенными коэффициентами.

 

Проблема всего одна — это всё правильно работает, только если заранее просчитано и заранее прорендерино.

 

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

 

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

 

По материалам Артура Шарифова.

 

Напоминаем Вам, что в нашем журнале "Наука и техника" Вы найдете много интересных оригинальных статей о развитии авиации, кораблестроения, бронетехники, средств связи, космонавтики, точных, естественных и социальных наук. На сайте Вы можете приобрести электронную версию журнала за символические 60 р/15 грн.

 

В нашем интернет-магазине Вы найдете также книгипостерымагнитыкалендари с авиацией, кораблями, танками.


Понравилась статья? Не забудьте поделиться ею: