Проблемы трассировки лучей — из будущего в реальное время

Предисловие

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

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

Вступление

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

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

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

Таким образом, происходит некоторая симуляция распространения света. Метод имеет множество сложных модификаций, но в их основе лежит «трассировка луча», то есть, нахождение пересечения луча (света) с объектами сцены.

Проблема

Пусть метод трассировки и позволяет отрисовать сцену с эффектами освещения, прозрачностью и отражениями, он вычислительно крайне затратен. Операция нахождения пересечения произвольного луча с объектами сложной сцены весьма нетривиальна. И она не может быть так же легко ускорена специальными (достаточно простыми) «ускорителями», как математически простая операция растеризации треугольников. Поэтому, в игровой графике используется растеризационный метод, который позволяет быстро нарисовать геометрию, то есть, фигуры объектов и текстуры со всевозможными шейдерами. А освещение почти всей сцены статическое. Только для отдельных движущихся моделей используются частные методы рисования теней. Они тоже основаны на растеризации: тени, по сути, просто рисуются.

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

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

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

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

Далее в статье мы предметно рассмотрим различные проекты в области трассировки, но, например, в свое время Intel демонстрировала рендеринг уровней из Quake III с помощью трассировки. Низкополигональные уровни в низком разрешении медленно рисовались на очень дорогой и продвинутой системе, далекой от потребительского рынка. Фишка была в том, что можно рисовать динамические тени и сложные отражения.

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

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

В играх часто также используется пререндрённое освещение для сцены, которое заранее рассчитывается тем же методом трассировки лучей и записывается в текстуры материалов объектов. Хорошо, в большинстве случаев мы в реальной жизни наблюдаем статический свет. Солнце медленно идет по небу, когда же мы входим в помещение, то включаем свет, если он там ещё не горит. Потом берем автомат и расстреливаем лампочки, свет выключается. Все это можно заранее рассчитать и поместить в специальные текстуры, которые называются lightmap (для экономии места, они меньшего разрешения, чем текстуры материалов, так как освещение меняется плавно и его можно качественно интерполировать для каждой точки, используя малоразмерные текстуры). Или рассчитать освещение для каждой вершины треугольников высоко детализированной сцены, а тени от движущихся моделей рисовать приближенно одним из частных методов.