С тех пор, как в 2018 году Nvidia анонсировала свои графические карты RTX 20-й серии, ее убийственная функция, «трассировка лучей», стала популярным термином в кругах видеоигр. Но бывает сложно понять, что такое трассировка лучей, как она работает и почему выглядит лучше, чем предыдущие методы.
Что такое трассировка лучей и как она работает?
В реальном мире, когда вы что-то видите, вы видите фотон от источника света. На пути к вам этот фотон мог быть отражен от одной или нескольких поверхностей. Каждое отражение изменяет характеристики света, попадающего в ваши глаза.
Солнце излучает широкий спектр цветов света, каждая поверхность поглощает один свет и отражает другой. То, что мы видим как зеленая поверхность, например лист, выглядит так, потому что отражает в основном зеленый свет. Если свет, отражающийся от листа, попадает на другую поверхность, например на белую стену, то эта поверхность будет выглядеть немного иначе, чем если бы на нее светил чистый белый свет. Каждое отражение влияет на каждую будущую поверхность, с которой взаимодействует свет, изменяя его интенсивность и видимый цвет.
Трассировка лучей - это графический метод, который следует тем же принципам. Проектируются лучи света, вычисляются свойства отраженного и преломленного света, такие как цвет, и луч продолжает движение.
В реальном мире каждый источник света, такой как лампочка или Солнце, испускает фотоны во всех направлениях, подавляющее большинство из которых никогда не достигают ваших глаз. Моделирование этого было бы безумно интенсивным процессом, который в большинстве случаев приводит к бесполезным результатам. Чтобы уменьшить рабочую нагрузку, трассировка лучей работает в обратном направлении, проецируя лучи из камеры. Каждый луч может проходить определенное расстояние без отражения или отражаться определенное количество раз, прежде чем будут выполнены вычисления и установлено значение пикселя.
Например, луч отбрасывается с точки зрения наблюдателя, когда он попадает в белую стену, алгоритм рекурсивно генерирует отраженный луч, который затем проходит через панель из синего стекла, наконец, отраженный луч попадает в источник белого света и впитывается. Синее стекло поглощает весь свет, кроме синего, который отбрасывает синий свет на стену, в результате чего пиксель окрашивается в синий цвет.
Почему трассировка лучей выглядит намного лучше?
Стандартный метод рендеринга сцен в реальном времени включает использование предварительно вычисленных карт освещения и освещения всей сцены. В некоторых играх используется ограниченное объемное освещение, включающее движущиеся источники света и позволяющее создавать динамические тени, хотя этот метод используется экономно, поскольку он требует значительных затрат процессора.
Трассировка лучей может обеспечить фотореалистичный результат, если на этапе разработки игры проделать дополнительную работу. Если все поверхности содержат такие детали, как отражательная способность, прозрачность и то, как свет будет преломляться через них, общий результат может выглядеть более естественным. Хотя такой подход, очевидно, требует больше работы на этапе разработки игры, он позволяет увидеть результат. фотореалистичный: свет реагирует так, как должен, когда он отражается от бетона, металла, дерева и стекла и т.п.
Трассировка лучей позволяет создавать точные отражения и тени как часть процесса рендеринга. в традиционных методах рендеринга оба этих эффекта являются необязательными и могут привести к значительному снижению производительности.
Сама по себе трассировка лучей значительно снижает производительность. До тех пор, пока видеокарты Nvidia RTX не были анонсированы с аппаратным ускорением для трассировки лучей, считалось что необходимая вычислительная мощность для выполнения трассировки лучей в реальном времени в программном обеспечении составляла более десяти лет. прочь. Даже с аппаратным ускорением трассировка лучей по-прежнему вызывает значительное снижение производительности, поскольку это все еще самая медленная часть рендеринга кадра.