понедельник, 23 мая 2022 г.

О рейтрейсинге и видеокартах его поддерживающих

Понятие трассировки лучей появилось в кибернетике задолго до зарождения информатики, 3D-игр и ее использования в качестве метода визуализации. Но мы не будем погружаться в длинную историю, а сразу перейдем к зарождению трехмерных игр, тогда еще 2.5D. Юный Джон Кармак использовал метод рейтрейсинга для обнаружении столкновения выпущенного снаряда со спрайтом персонажа. Именно спрайтом, а не мешем или моделью, потому что псевдо-3D. Без 3D ускорителей игроделы выживали, как могли. 

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

Когда рейтрейсинг стал применяться в качестве способа визуализации еще не существовало подходящих 3D-акселлераторов, поэтому вычисления проводились на центральном процессоре. Трассировка лучей может быть любой по сложности. Если взять упомянутый выше пример со снарядом, это наипростейший случай, так как используется только один вектор. Тогда, как при освещении методом трассировки лучей для создания реального изображения луч, имеющий свойства источника, соприкасаясь с поверхность (определенным пикселем), отдает ей свои свойства, принимает ее и, в соответствии с реальным поведением фотонов, отскакивает в направление к другой поверхности виртуальной сцены. И так продолжается определенное количество раз, зависимое от мощности источника света и многих других условий: затемненности игрового пространства, свойств материалов, с которыми луч соприкасается. В результате, из простого математического выражения образуется сложнейшее уравнение с десятками и сотнями переменных! Необходимо учесть, что освещение — это огромное количество лучей, влияющих на цвет каждого пикселя! 

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

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

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

Плодом этих рассуждений и разработок стала микроархитектура Turing, реализованная в видеокартах Nvidia GeForce RTX 20XX. В ней используются десятки RT-ядер, в задачи которых входит исключительно просчет трассировки лучей. Благодаря их большому количеству, они одновременно просчитывают трассы для многих лучей, из-за чего скорость визуализации с применением рейтрейсинга возросла во много раз!

В итоге, получается, что рейтрейсинг представляет собой алгоритм смешения цветов.

Комментариев нет:

Отправить комментарий