Введение
Нажмите на картинку для увеличения.
За последние несколько лет метод трассировки лучей (ray tracing), похоже, стал “мечтой номер один” мира 3D-графики в реальном времени. Интерес к этой технологии рендеринга вырос до максимума, когда молодой исследователь Дэниел Похл (Daniel Pohl) объявил о своём проекте в области этой технологии ещё в 2004 году.
Причина интереса широких масс публики к работе заключалась, по большей мере, в том, что Похл сфокусировался на знаменитых играх id Software Quake III, Quake IV и шутере-франшизе Quake Wars 3D. Исследователь привлёк немало внимания со стороны прессы, а геймеры начали мечтать о светлом будущем, когда их любимые игры будут просчитываться по методу трассировки лучей и избавятся от растеризации.
Intel довольно быстро обратила внимание на проект, и компании он показался идеальным способом для оправдания увеличения числа ядер в процессорах. Компания быстро запустила собственную исследовательскую программу, и сегодня Intel никогда не упускает возможность подчеркнуть, что трассировка лучей является будущим 3D-игр в реальном времени. Но так ли это на самом деле? Какие технологические реальности скрываются за маркетинговой шумихой? Каковы реальные преимущества метода трассировки лучей? Можем ли мы ожидать, что трассировка лучей заменит растеризацию? Мы попытаемся ответить на эти вопросы.
Нажмите на картинку для увеличения.
Основные принципы
Основная идея метода трассировки лучей очень проста: для каждого пикселя на дисплее движок рендеринга проводит прямой луч от глаза наблюдателя (камеры) до элемента выводимой сцены. Первое пересечение используется для определения цвета пикселя как функции пересекаемой поверхности элемента.
Но одного этого мало для вывода реалистичной сцены. Необходимо определить освещение пикселя, что требует проведения вторичных лучей (в отличие от первичных лучей, которые определяют видимость разных объектов, составляющих сцену). Чтобы рассчитать эффекты освещения сцены, проводятся вторичные лучи от точек пересечения к разным источникам света. Если эти лучи блокируются объектом, то данная точка находится в тени, которую отбрасывает рассматриваемый источник света. Иначе источник света влияет на освещение. Совокупность всех вторичных лучей, которые достигают источника света, определяет качество освещения, которое попадает на наш элемент сцены.
Но и это ещё не всё. Чтобы получить наиболее реалистичный рендеринг, необходимо учитывать характеристики отражения и преломления материала. Другими словами, нужно знать, какое количество света отражается в точке пересечения первичного луча, а также количество света, которое проходит через материал в этой точке. Опять же, для расчёта финального цвета пикселя необходимо проводить лучи отражения и преломления.
В итоге мы получаем несколько типов лучей. Первичные лучи используются для определения видимости объекта и напоминают своего рода Z-буфер, используемый в растеризации. А вторичные лучи разделяются на следующие:
- лучи тени/освещения;
- лучи отражения;
- лучи преломления.
Классический алгоритм трассировки лучей. Нажмите на картинку для увеличения.
Данный алгоритм трассировки лучей является результатом работы Тёрнера Виттеда (Turner Whitted), исследователя, который изобрёл алгоритм 30 лет назад. До того времени алгоритм трассировки лучей работал только с первичными лучами. И улучшения, внесённые Виттедом, оказались гигантским шагом в сторону реализма рендеринга сцены.
Если вы знакомы с физикой, то наверняка обратили внимание на то, что алгоритм трассировки лучей работает “в обратную сторону” от явлений, протекающих в реальном мире. В отличие от распространённого в Средние века мнения, наши глаза не излучают лучи света, напротив, они получают лучи света от источников света, которые отражаются на различных объектах, окружающих нас. В принципе, так и работали самые первые алгоритмы трассировки лучей.
Но главным недостатком первых алгоритмов было то, что они налагали огромную вычислительную нагрузку. Для каждого источника освещения вам нужно провести тысячи лучей, многие из которых вообще не будут влиять на выводимую сцену (поскольку они не пересекают плоскость построения изображения). Современные алгоритмы трассировки лучей являются оптимизацией базовых алгоритмов, при этом они используют так называемую обратную трассировку луча, поскольку лучи проводятся в обратном направлении по сравнению с реальностью.
Оригинальный алгоритм трассировки лучей приводил к большому количеству ненужных расчётов. Нажмите на картинку для увеличения.
Преимущества трассировки лучей
Как вы уже видели, основным преимуществом метода трассировки лучей является его простота и элегантность. Алгоритм использует только один объект-примитив для отображения эффектов, которые часто требуют нетривиального подхода и сложных технологий стимуляции при использовании стандартного метода растеризации.
Карта окружения (environment map) даёт хорошее приближение к симуляции отражений окружающей среды, однако метод трассировки лучей может симулировать даже отражения глаз машины Луиджи на капоте. Нажмите на картинку для увеличения.
Отражения – это одна из областей, в которых метод трассировки лучей превосходно показывает себя. Сегодня в 3D-движках современных игр отражения рассчитываются с помощью карт окружений (environment map). Эта технология даёт хорошее приближение к отражениям объектов, расположенных “в бесконечности” или в окружающей среде (как можно видеть по названию), но для близко расположенных объектов подход показывает свои ограничения.
Разработчики игр-гонок, в частности, создали свои трюки для симуляции отражений близких объектов с помощью так называемых динамических кубических карт (dynamic cube maps). Камера располагается на уровне машины геймера, после чего проводится рендеринг в основных направлениях. Затем результаты рендеринга сохраняются в кубических картах, которые и используются для вывода отражений.
Динамические кубические карты могут симулировать отражения близких объектов, например, самолёта на чайнике. Но они не справляются с отражениями частей объекта друг на друге, например, носика чайника на его корпусе. Нажмите на картинку для увеличения.
Конечно, у динамических кубических карт тоже есть свои недостатки. Довольно накладно по вычислительной мощности просчитывать несколько результатов рендеринга, и, чтобы производительность не падала слишком сильно, кубические карты не пересчитываются столько раз, сколько основная картинка. Это может привести к небольшой задержке отражений. Чтобы снизить нагрузку на скорость заполнения (fill rate), рендеринг выполняется с меньшим разрешением, что может привести к появлению пикселизации в отражениях. Наконец, эта технология часто ограничивается машиной геймера, а все другие объекты используют более простые (сферические) карты окружения.
При методе трассировки лучей отражения отображаются идеально, причём без сложных алгоритмов, поскольку всё просчитывается основным алгоритмом рендеринга. Ещё одним преимуществом можно считать вывод отражений частей объекта друг на друге, например, отражение зеркала бокового вида на теле машины, что очень сложно получить с помощью метода растеризации – а здесь это отражение получается так же, как и другие.
Метод трассировки лучей позволяет симулировать отражения частей объектов друг на друге, например, отражение зеркала бокового вида на корпусе машины. Нажмите на картинку для увеличения.
Другие преимущества метода трассировки лучей
Другим бесспорным преимуществом метода трассировки лучей является качественная обработка эффектов прозрачности. С помощью алгоритма растеризации крайне сложно выводить эффекты прозрачности, поскольку расчёт прозрачности напрямую зависит от порядка рендеринга. Чтобы получить хорошие результаты, необходимо отсортировать прозрачные полигоны в порядке самых дальних от камеры к самым близким, а уже потом выполнять рендеринг.
Но на практике эта задача слишком тяжёлая с точки зрения вычислений, да и ошибки прозрачности тоже возможны, поскольку выполняется сортировка полигонов, а не пикселей. Существует несколько технологий, позволяющий обойти сортировку полигонов сцены (таких как depth peeling и A-буферы), но на данный момент ни одну из них нельзя назвать спасительной. Вместе с тем алгоритм трассировки лучей позволяет элегантно справиться с эффектами прозрачности.
Правильная обработка эффектов прозрачности с помощью растеризатора требует использования сложных алгоритмов, например, A-буферов. Нажмите на картинку для увеличения.
Другим важным преимуществом является расчёт теней. В мире растеризации стандартом стала технология карт теней (shadow mapping). Но у неё несть несколько проблем, такие как “лесенки” на контурах и объём используемой памяти. Алгоритм трассировки лучей позволяет решить проблему теней весьма элегантно, не прибегая к сложным алгоритмам, используя тот же объект-примитив и не требуя дополнительную память.
Наконец, ещё одним сильным преимуществом метода трассировки лучей является “родная” возможность работы с искривлёнными поверхностями. Уже несколько лет у современных GPU есть поддержка искривлённых поверхностей (она то появляется, то исчезает по мере выхода новых драйверов и новых архитектур). Но если растеризаторам приходится выполнять изначальный проход тесселяции, чтобы создавать треугольники (это единственный примитив, с которым может работать движок растеризации), то движок методом трассировки лучей может просто работать с пересечением лучей, без точного математического определения поверхности.
Мифы о трассировке лучей
Но метод трассировки лучей всё же не стоит идеализировать, поэтому настало время разбить некоторые мифы, окружающие этот алгоритм.
Начнём с того, что многие геймеры считают алгоритм трассировки лучей принципиально лучше, чем растеризации, поскольку его используют в фильмах. Это не так. Большинство фильмов с синтезированной/рисованной картинкой (например, все фильмы студии Pixar) используют алгоритм под названием REYES, который базируется на растеризации. Pixar добавила трассировку лучей к своему движку рендеринга RenderMan только позднее, во время производства мультфильма “Тачки/Cars”. Но даже для этого фильма метод трассировки лучей использовался избирательно, чтобы не перегрузить существующие вычислительные мощности. До этого проекта Pixar использовала внешний модуль для ограниченного использования метода трассировки лучей, например, для эффектов затенения ambient occlusion (AO).
Нажмите на картинку для увеличения.
Второй распространённый миф среди защитников метода трассировки лучей касается сложности сцен, которые можно выводить с помощью метода трассировки лучей и с помощью растеризации. Чтобы разобраться, нам нужно внимательнее рассмотреть каждый алгоритм.
Ниже показано, как алгоритм растеризации работает с каждым треугольником сцены.
- Определяется набор пикселей, который покрывает каждый треугольник;
- для каждого задействованного пикселя его глубина сравнивается с глубиной соседнего пикселя.
Основное ограничение метода растеризации касается числа треугольников. Алгоритм имеет сложность O(n), где n – число треугольников. Алгоритм в данном случае имеет линейную сложность в зависимости от числа треугольников, поскольку для каждого кадра составляется список треугольников, которые нужно обработать, один за другим.
Напротив, алгоритм трассировки лучей работает следующим образом.
Для каждого пикселя кадра:
- проводится луч, определяющий, какой треугольник является самым близким;
- для каждого треугольника рассчитывается расстояние от треугольника до плоскости вывода изображения.
Как видим, последовательность обработки стала обратной. В первом случае мы брали каждый полигон и смотрели, какие пиксели он покрывает. А во втором случае мы брали каждый пиксель и смотрели, какой полигон ему соответствует. Поэтому можно подумать, что метод трассировки лучей меньше зависит от числа полигонов, чем метод растеризации, поскольку число полигонов не влияет на основной цикл. Но на практике это не так. Фактически, чтобы определить, какой треугольник будет пересекаться с лучом, нам нужно обработать все треугольники сцены. Здесь, конечно, защитники метода трассировки лучей скажут, что не нужно обрабатывать все треугольники сцены с каждым лучом. Если использовать соответствующий тип структуры данных, то очень легко организовать треугольники таким образом, чтобы только небольшой их процент тестировался с каждым лучом, то есть мы получаем, что метод трассировки лучей имеет сложность O(log n), где n – число полигонов.
Да, доводы можно признать верными. Но защитники метода трассировки лучей немного лукавят в том, что то же самое верно и для растеризации. Игровые движки уже многие годы используют BSP-деревья (binary space partitioning) и другие методы, ограничивающие число полигонов, которые нужно рассчитать для каждого кадра. Ещё один спорный момент – такие структуры более всего эффективны для статических данных. Всё, что нам нужно: рассчитать данные один раз, после чего просто обеспечивать к ним доступ, и это даёт очень хорошие результаты. Но что делать с динамическими данными? В данном случае данные придётся пересчитывать для каждого изображения, а для этого нет никаких чудесных формул. Всё равно придётся изучать каждый полигон.
Простой алгоритм?
Последний миф касается естественной простоты и элегантности алгоритма трассировки лучей. Конечно, алгоритм трассировки лучей можно написать несколькими строчками кода (некоторые алгоритмы умещаются на одной стороне “визитки”), но высокопроизводительный алгоритм трассировки лучей – совершенно иное дело.
Дэвид Любке (David Luebke), инженер nVidia, сделал следующий комментарий, прекрасно отражающий реальность: “Растеризация выполняется быстро, но необходимо тщательно продумывать то, как выполнять сложные визуальные эффекты. Метод трассировки лучей поддерживает сложные визуальные эффекты, но необходимо тщательно продумывать то, как сделать его быстрым”.
Код минимального алгоритма трассировки лучей, написанный Полем Хекбертом (Paul Heckbert), чтобы уместить его на “визитке”. Нажмите на картинку для увеличения.
Всё, что вам нужно – прочитать несколько статей про оптимизации, которые необходимо внести в алгоритм трассировки лучей, чтобы оценить слова Любке. Например, самые мощные алгоритмы трассировки лучей не обрабатывают лучи независимо, они используют так называемые наборы лучей, что позволяет оптимизировать производительность с лучами, которые имеют одинаковое происхождение и одинаковое направление. Подобная оптимизация прекрасно подходит для функциональных блоков “одна инструкция много данных” (SIMD) внутри CPU и GPU, а также очень эффективна для основных лучей с некоторой степенью когерентности (сонаправленности) или для теневых лучей. Но, с другой стороны, оптимизация уже не подходит для лучей преломления или отражения.
Более того, как указывает Даниэль Похл в своей статье по поводу Quake Wars RT, использование наборов лучей может стать проблематичным с прозрачными текстурами (знаменитые альфа-текстуры, используемые для деревьев), поскольку если все лучи в наборе не будут вести себя одинаково (некоторые затрагивают поверхность, другие проходят через неё), то возникающие дополнительные издержки могут стать намного больше, чем преимущества от оптимизаций, которые даёт использование наборов лучей.
Визуализация “стоимости” рендеринга каждого пикселя, где красные пиксели являются самыми “дорогими”. Как можно видеть, рендеринг деревьев стоит очень дорого в версии Quake Wars с методом трассировки лучей. Нажмите на картинку для увеличения.
Наконец, как мы уже упоминали, метод трассировки лучей требует подходящей структуры данных, чтобы хранить разные элементы сцены, и как раз эта структура будет играть определяющую роль в итоговой производительности. Но выбор и затем работа с такой структурой данных не такие простые, как кажется на первый взгляд. Некоторые структуры обладают лучшими характеристиками для статических данных, а другие можно быстрее обновлять в случае с динамическими данными, или они занимают меньше памяти. Как обычно, всё сводится к поиску приемлемого компромисса. Чудес не бывает.
Поэтому, как мы видим, алгоритм трассировки лучей не всегда можно назвать идеалом простоты и элегантности, как считают некоторые. Чтобы получить хорошую производительность от алгоритма трассировки лучей нужно найти ничуть не меньше нетривиальных решений программирования, чем в случае получения сложных визуальных эффектов в методе растеризации.
Ограничения трассировки лучей
Теперь, когда мы рассеяли некоторые мифы, связанные с трассировкой лучей, давайте обратимся на реальные проблемы, которые связаны с этой технологией.
И начнём мы с основной проблемы, связанной с данным алгоритмом рендеринга: его медлительностью. Конечно, некоторые энтузиасты скажут, что это уже не проблема, поскольку алгоритм трассировки лучей хорошо распараллеливается, а число ядер процессора увеличивается каждый год, поэтому мы должны увидеть линейный рост производительности трассировки лучей. Кроме того, исследования по поводу оптимизаций, которые можно применить к трассировке лучей, всё ещё находятся в младенческом состоянии. Если посмотреть первые 3D-ускорители и сравнить их с тем, что доступно сегодня, то для оптимизма действительно есть поводы.
Однако такая точка зрения не учитывает важный момент: самое интересное в методе трассировки лучей заключается во вторичных лучах. На практике расчёт картинки только с первичными лучами не даст особого улучшения качества изображения по сравнению с классическим алгоритмом с Z-буфером. Но проблема со вторичными лучами заключается в том, что у них абсолютно отсутствует когерентность (сонаправленность). При переходе от одного пикселя к другому нужно рассчитывать совершенно разные данные, что сводит на нет все обычные техники кэширования, очень важные для хорошей производительности. Это означает, что расчёт вторичных лучей очень сильно зависит от подсистемы памяти, в частности, от её задержек. Это наиболее худший сценарий из возможных, поскольку из всех характеристик памяти именно задержки менее всего улучшились за последние годы, и нет никаких поводов считать, что ситуация исправится в обозримом будущем. Довольно легко увеличить пропускную способность памяти, используя несколько чипов параллельно, но задержки всё равно останутся прежними.
У видеокарт задержки памяти (latency) уменьшаются намного медленнее, чем увеличивается пропускная способность (bandwidth). Если последняя улучшается в 10 раз, то задержки улучшаются только в два раза.
Причина популярности GPU кроется в том, что создание “железа”, специализирующегося на растеризации, оказалось очень эффективным решением. При растеризации доступ к памяти выполняется когерентно (параллельно), независимо от того, работаем мы с пикселями, текселями или вершинами. Поэтому небольшие кэши, дополненные серьёзной пропускной способностью памяти, будут идеальным решением для получения великолепной производительности. Конечно, увеличение пропускной способности обходится весьма накладно, но такое решение вполне подходит при условии окупаемости. Напротив, сегодня нет каких-либо решений для ускорения доступа к памяти при расчёте нескольких лучей. Именно по этой причине метод трассировки лучей никогда не будет таким эффективным, как растеризация.
Ещё одна характерная проблема метода трассировки лучей касается сглаживания (AA). Лучи проводятся в виде простой математической абстракции, и реального размера они не учитывают. Проверка на пересечение с треугольником является простой логической функцией, которая даёт ответ “да” или “нет”, но не даёт таких деталей, как “луч на 40% пересекает треугольник”. Прямым следствием такого эффекта будет появление “лесенок”.
Чтобы решить эту проблему, было предложено несколько технологий, таких как трассировка пучков (beam tracing) и трассировка конусов (cone tracing), которые учитывают толщину лучей, но их сложность не позволяет получить эффективную реализацию. И единственной технологией, которая может дать хорошие результаты, является расчёт большего числа лучей, чем есть пикселей, то есть суперсэмплинг (рендеринг при большем разрешении). Вряд ли стоит лишний раз упоминать, что эта технология намного более накладна по вычислительной мощности, чем мультисэмплинг, использующийся в современных GPU.
Гибридный движок рендеринга?
Если вы прочитали всю статью до этого места, то наверняка уже подумываете о том, что метод трассировки лучей пока что не может заменить растеризацию, но, возможно, стоит смешать две технологии вместе? И на первый взгляд кажется, что две технологии дополняют друг друга. Легко представить растеризацию треугольников для определения видимой картинки, получая преимущество от великолепной производительности данной технологии, после чего будет применяться трассировка лучей только для некоторых поверхностей, добавляя реализм там, где это необходимо, например, для добавления теней или получения хороших отражений и прозрачности. Собственно, такой подход Pixar и использовала для мультфильма “Тачки/Cars”. Геометрические модели создаются с помощью REYES, а трассировка лучей используется “по требованию” там, где нужно симулировать определённые эффекты.
Для мультфильма “Тачки/Cars” Pixar использовала гибридный движок рендеринга, сочетающий REYES для визуализации и трассировку лучей “по требованию” для отражений и ambient occlusion. Нажмите на картинку для увеличения.
К сожалению, несмотря на то, что такой метод звучит обещающе, гибридные решения не так легко реализовать. Как мы уже видели, одним из важных недостатков метода трассировки лучей является необходимость организации структуры данных таким образом, чтобы ограничить количество проверок пересечения лучей и объектов. И использование гибридной модели вместо чистой трассировки лучей это не меняет. Нужно организовывать структуру данных вместе со всеми недостатками, которые с этим связаны. Например, предположим, что метод трассировки лучей основан на статических данных, а рендеринг динамических данных производится через растеризацию. Но в данном случае мы теряем все преимущества трассировки лучей. Поскольку для метода трассировки лучей динамических данных не существует, то нельзя будет заставить объекты отбросить тень или посмотреть отражения.
Более того, что касается производительности, то самой большой проблемой является доступ к памяти, связанный со вторичными лучами, а эти лучи как раз и необходимы в нашем гибридном движке рендеринга. Так что прирост производительности не будет таким большим, как можно было бы ожидать изначально. Поскольку большая часть времени рендеринга будет уходить на вторичные лучи, то выигрыш от отсутствия просчёта основных лучей будет мизерным.
Другими словами, пытаясь скомбинировать преимущества обоих методов, мы неизбежно комбинируем и их недостатки, теряя элегантность метода трассировки лучей и высокую производительность растеризации.
Заключение
Как мы уже неоднократно упомянули в нашей статье, предстоит решить немало проблем, прежде чем метод трассировки лучей станет достойной альтернативой растеризации в сфере рендеринга в реальном времени. И если вдуматься, то станет ли этот метод панацеей от всех бед? Преимущества метода трассировки лучей не такие революционные, чтобы оправдать существенное снижение производительности. Сильные моменты алгоритма связаны с отражениями и прозрачностью, поскольку два этих эффекта сложнее всего вывести на существующих алгоритмах растеризации. Но, опять же, такой ли это серьёзный недостаток? Мир вокруг нас не состоит целиком из очень прозрачных или сияющих объектов, поэтому наше зрение вполне может удовлетвориться грубым приближением.
Если посмотреть на последние автосимуляторы, например, Gran Turismo и Forza, то там достаточно хорошо заметно вполне удовлетворительное качество рендеринга, пусть даже отражения на корпусе полностью лживые. И точное отражение зеркала заднего вида на краске вряд ли можно считать достаточным, чтобы признать ещё один шаг в сторону фотореализма.
На самом деле отражений нет. Например, зеркало бокового вида на корпусе машины не отражается. Но нужен ли вам “честный” рендеринг Audi R8 с помощью метода трассировки лучей? Нажмите на картинку для увеличения.
Большинство энтузиастов считают, что метод трассировки лучей по своей природе даёт лучшее изображение, чем растеризация – но они часто основывают своё мнение на картинке, произведённой оффлайновым движком, работающем не в реальном времени. Однако результаты таких движков намного лучше, чем способности современных игр. Кроме того, вокруг трассировки лучей наблюдается определённая путаница. Энтузиасты часто сравнивают с растеризацией фотореалистичные изображения, которые получены комбинацией нескольких техник, таких как трассировка лучей для прямых отражений, метод излучательности (radiosity) для диффузного отражения, фотонное отображение (photon mapping) для каустики и т.д. Все эти технологии сочетаются, чтобы обеспечить максимально фотореалистичное качество.
Чтобы получить фотореалистичный рендеринг, необходимо сочетать несколько технологий. Трассировка лучей сама по себе недостаточна для симуляции сложных взаимодействий между материалами разных типов и света. Нажмите на картинку для увеличения.
В своей базовой версии метод трассировки лучей, если рассматривать существующие попытки реализации в реальном времени, подходит только для идеальных отражений и жёстких (резких) теней. Игра Doom 3 несколько лет назад доказала, что можно создать надёжный 3D-движок, который идеально бы справлялся с динамическими тенями и через растеризацию, но если посмотреть в прошлое, то игра показала и то, что жёсткие тени не являются реалистичными.
Нажмите на картинку для увеличения.
Чтобы создавать мягкие тени или диффузные отражения (такие, какие вы видите на текстурированном металле, например), требуются более развитые техники трассировки лучей, такие как трассировка путей (path tracing) и или распределённая трассировка лучей (distributed ray tracing). Но подобные техники требуют существенно большего количества лучей, так что они пока ещё слабо подходят для реального времени.
Некоторые пользователи считают, что рано или поздно будет доступна столь большая вычислительная мощность, что преимущество растеризации по производительности перестанет быть решающим фактором. По закону убывающей отдачи о приросте производительности при растеризации быстро забудут, получив элегантность трассировки лучей. Примерно так же, как и раньше было забыто преимущество кодирования на ассемблере по производительности, которое оказалось недостаточным, чтобы перевесить преимущества языков высокого уровня.
Впрочем, нас это вряд ли убедит. В любом случае, мы ещё пока далеки до того времени, когда мы сможем пожертвовать производительностью из-за элегантности и простоты. Просто посмотрите, что произошло за последние 10 лет в мире оффлайнового рендеринга. Если рендеринг одного кадра мультфильма “История игрушек/Toy Story” выполнялся, в среднем, за два часа, то кадр из мультфильма “Рататуй/Ratatouille” – уже за шесть с половиной часов, несмотря на вычислительную мощность, которая увеличилась в промежутке между двумя картинами более чем в 400 раз. Другими словами, чем больше вычислительной мощности и ресурсов вы предоставляете компьютерным художникам, тем быстрее они их поглощают.
Если даже компания, подобная Pixar, которая может позволить себе выделить несколько часов вычислений для создания одного кадра, решила использовать трассировку лучей только время от времени из-за негативного влияния на производительность, это значит, что времена, когда мы получим достаточную вычислительную мощность в 3D-играх реального времени для выполнения всего рендеринга методом трассировки лучей, очень и очень далеки. Да и в будущем у энтузиастов наверняка будет, куда потратить такую вычислительную мощность.