За последние несколько лет трехмерная графика сделала большой скачок в развитии: качество и реалистичность созданных компьютером изображений достигли высокого уровня, а популярность VR бьет все рекорды. Но революция в мире компьютерной графики только началась — речь о появлении технологий рейтрейсинга в реальном времени. Давай разберемся, что это такое, как мы к этому пришли и как это работает.
Человеческий глаз воспринимает множество лучей: прямых — от источников света — и отраженных от всевозможных предметов. Камеры фотоаппаратов очень похожи на сетчатку: каждый «пиксель» глаза воспринимает излучение, создающее цвет. Поэтому логичным решением разработчиков было воспользоваться законом обратимости хода лучей и для каждого пикселя экрана — по сути, виртуального глаза — рассчитывать, откуда придет луч света и какого он будет цвета.
Наверняка с уроков физики ты помнишь закон отражения света: угол падения равен углу отражения. Этот закон позволяет в корне поменять концепцию виртуального мира. Вместо того чтобы рассчитывать миллиарды лучей, исходящих от одного источника, имея маленькую надежду, что эти лучи попадут в виртуальный глаз, компьютер может думать лишь о нескольких миллионах лучей (по одному на пиксель экрана), гарантированно важных для создания картинки.
Несмотря на это, во времена зарождения трехмерных компьютерных игр (а это начало 1980-х — конец 1990-х годов) процессоры не были достаточно мощны, чтобы рассчитывать путь луча для каждого отдельного пикселя, поэтому разработчики использовали различные хаки — либо уменьшали количество рассчитываемых пикселей, либо применяли менее физически обоснованный способ создания картинки. Об этих уловках мы сейчас и поговорим.
Добиваясь эффективности, программисты решились на множество допущений, которые позволили снизить затраты времени на создание изображения в сотни раз, — это в первую очередь допущения о виртуальном мире.
Wolfenstein 3D — первая действительно популярная игра, разработчики которой этим воспользовались.
Для каждого вертикального кусочка предназначен специальный луч, который двигается маленькими шагами — алгоритм каждый раз проверяет, есть ли попадание в препятствие. Как только луч заканчивает свое движение, подсчитывается количество пройденных шагов, и получается расстояние до стены. Зная это расстояние, мы можем нарисовать стену соответствующей высоты — чем дальше, тем короче стена.
Перечисленные допущения приводят к тому, что стены всегда находятся на одном уровне экрана — ровно посередине, поэтому нарисовать их относительно просто.
У такого типа игр много заметных особенностей. Например, все существа здесь постоянно повернуты к игроку лицом, так как они не трехмерные, рисуются без использования 3D, на них не падают тени.
Движок Wolfenstein 3D стал большим шагом в компьютерной графике, но разработчикам было понятно, что такого подхода надолго не хватит.
Желание приблизить картинку к реальному миру потребовало в корне изменить принцип отрисовки. Мощность компьютеров возросла, и вместо отдельных лучей, которые попадают исключительно в стены, стало возможно использовать самую простую геометрическую фигуру — треугольник.
Треугольник задается тремя отдельными точками, в каждую из которых возможно отправить виртуальный луч. Треугольник остается самим собой всегда, даже после попадания из трехмерного пространства в двумерное.
Каждая точка каждого объекта в трехмерном пространстве переводится в точку на экране, а затем определенные точки — изначально заданные в модели треугольники — соединяются. Так получается изображение исходного объекта.
Так как из треугольников можно составить любую фигуру и любой трехмерный объект, было решено основываться на этом, и до сих пор все механизмы рендеринга в реальном времени работают по такому механизму.
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее
1 год7690 р. |
1 месяц720 р. |
Я уже участник «Xakep.ru»
Читайте также
Последние новости