что такое рейтрейсинг в играх
Трассировка лучей. Современные возможности видеокарт
Содержание
Содержание
Технология построения реалистичных сцен методом трассировки лучей (ray tracing) известна уже несколько десятков лет, но только пару последних лет она полноправно заявляет свои права в сфере компьютерных игр. Тем самым переставая быть инструментом, применяемым сугубо в профессиональной сфере, постепенно становясь ближе простому обывателю.
Виртуальные фотоны
Технологии в сфере графики обычно сложно объяснить и максимально доступно разложить по полочкам, но в случае с трассировкой лучей — все довольно просто. Сама идея построения картинки, можно сказать, взята из реальной жизни, а в ее основе лежат процессы из школьного курса физики. Суть идеи — просчет поведения луча света при преломлении и отражении от моделируемого объекта. При этом в расчет берутся, как интенсивность виртуального луча (его освещенность), так и его взаимодействие с другими объектами, другими виртуальными лучами и источниками света. В результате чего, пользователь на экране монитора наблюдает изображение, максимально приближенное к тому, что он привык видеть в реальной жизни.
По сути, в цифровую среду перенесена работа света из реального мира. Виртуальный фотон движется из исходной точки и по пути взаимодействует с объектом. В точке соприкосновения с моделью его дальнейшее движение определяется свойствами самого объекта. Световой луч может быть полностью поглощен темным объектом, или отражен его зеркальной поверхностью.
Технология трассировки лучей пытается максимально реалистично отобразить объекты и их взаимодействие со светом так же, как это происходит в реальном мире.
Такое сходство рейтрейсинга с процессами, происходящими в реальном мире, делает его довольно успешной техникой 3D-рендеринга. Даже в «кубических» играх наподобие Minecraft, картинка выглядит довольно реалистично, насколько это конечно возможно.
Основная проблема — такая насыщенная среда довольно сложно поддается моделированию. Воссоздание процессов работы света в реальном мире — очень сложный и требовательный к вычислительным ресурсам процесс. Для примера, при расчете одного кадра с разрешением Full HD потребуется одновременно просчитать 2073600 виртуальных лучей, каждый их которых, прежде чем сформирует один пиксель на экране, по пути следования будет взаимодействовать не с одним десятком своих «сородичей». При этом не стоит забывать, что речь идет о динамичной сцене, а не о статичной картинке, поэтому количество вычислений, при комфортном значении FPS, как правило, составляющих 50–60 FPS, возрастает в разы! Понимание этого процесса объясняет наличие огромных серверных ферм для рендеринга на киностудиях и студиях визуализации, профессионально занимающихся созданием контента высокого качества.
Главная идея при продвижении трассировки лучей в массы, заключалась в том, что для качественного скачка необходимо было разработать алгоритм, который по сильно зашумленной картинке, полученной в результате всего нескольких проходов (итераций) определял основные параметры создаваемого изображения. А именно: характеристики освещенности сцены, расположение теней и отражений объектов. И, исходя из имеющихся данных, дорисовывал ее до удобоваримого вида.
Это и было ключевым новшеством. Все остальное — уже давно известно визуализаторам. Существует огромнее количество различных программ и плагинов к ним, ориентированных на удаление методом аппроксимации посторонних шумов изображения. Главное в технологии — определение начальных параметров сцены.
Трассировка лучей в игровом контенте
Из-за проблематики, озвученной выше, рядовому геймеру предоставляется урезанная версия технологии, которая не потребует внушительных затрат, но позволит насладиться сочной картинкой, максимально приближенно передающей игру света и теней.
Чтобы сделать рейтрейсинг ближе к народу, производители контента вынуждены идти на определенные компромиссы. Ведь кроме увлекательного сюжета и удобного геймплея, у игры должна быть отменная визуализация, которая полностью погрузит геймера в игровой процесс. Это достигается определенными «уловками» в сфере создания отражений, теней и реалистичного распределения света по игровой сцене.
Отражения
В большинстве игр с трассировкой лучей в настоящее время используется комбинация традиционных методов освещения, обычно называемых растеризацией, и рейтрейсинга на определенных поверхностях, таких как отражения от водной глади и металлоконструкций.
Для создания отражений, помимо стандартных полигонов игровой сцены, определенным ее частям присваивается свойство материала, с необходимым коэффициентом отражения. Встречаясь с такой поверхностью, условный фотон либо отражается под тем же углом (зеркальные поверхности), либо преломляется под заданным углом (другие поверхности). Причем, при использовании рейтрейсинга на матовых поверхностях, отражение сильно зависит от близости объекта к ней. Т. е., чем объект дальше от поверхности, тем более размытым он кажется.
Это важное свойство, которое большинство даже не замечает в реальной жизни, а в игровом процессе такая детализация существенно повышает качество картинки и ее восприятие.
Battlefield V — яркий представитель такого игрового контента. Пользователь во всей красе наблюдает отражения войск и техники на воде, отражение местности на плоскостях пролетающих самолетов, отражение вспышек от взрывов на поверхностях игрового мира.
Создание эффектов тени всегда вызывало у разработчиков кучу сложностей и нестыковок. Есть тени, которые являются просто проекциями объектов. Как правило, они имеют четко очерченные края. Есть более проработанные варианты, так называемые мягкие тени. Они имеют определенную линию перехода, отделяющую тень от полутени, но, к сожалению, в реальной жизни это так не работает.
При создании теней методом рейтрейсинга, виртуальные лучи, исходящие из источника света, при встрече с объектами, сами создадут необходимые области затенения. При этом учитывается не только интенсивность источника света, но и световые излучения, продуцируемые другими объектами. В итоге — наиболее соответствующий реальным условиям результат.
Наиболее интересно реализовать динамику и реализм теней на данный момент удалось разработчикам компьютерной игры Shadow of the Tomb Raider.
Освещенность
Если, что называется «по-честному», просчитывать всю освещенность сцены, то необходимо учитывать абсолютно все световые лучи присутствующие в ней. А это очень и очень ресурсоемкая задача!
Поэтому для трассировки лучей в играх, во-первых, используется определенное количество источников света, а во-вторых, количество итераций рейтрейсинга тоже строго ограничено. Этот трюк позволяет сделать картинку живой и реалистичной, но в то же время не перегружает графическую подсистему ПК.
Пока еще в редких играх используется полная трассировка лучей для просчета глобального освещения всей сцены. Это самый дорогой в вычислительном отношении способ. Для эффективной работы он нуждается в самой мощной из доступных в данный момент видеокарт. А вот результат вполне может разочаровать, поскольку топовая видеокарта справится с такой задачей в разрешении Full HD, хотя ей вполне по силам без использования рейтрейсинга выводить на экраны изображение 4К. Metro Exodus — пожалуй, единственная игрушка, использующая трассировку лучей для построения всей сцены, хотя в некоторых моментах ее реализация оставляет желать лучшего.
Аппаратная часть
Наиболее удачливой в коммерческом использовании технологии оказалась компания NVIDIA. Ее серия графических адаптеров GeForce RTX — безоговорочный лидер в работе с виртуальными фотонами. Ведь она была специально разработана для решения задач по трассировке лучей.
Компания AMD на данном этапе сохраняет завидное олимпийское спокойствие. Однако это затишье не должно расслаблять конкурентов. Скорее всего, в самом ближайшем будущем, игроманам будет презентована специализированная линейка видеоадаптеров на базе архитектуры RDNA 2, презентованной ранее.
Краткие итоги
С появлением трассировки лучей в игровом сегменте, в первую очередь реализация отражений стала значительно правдивей для пользователя и существенно проще для производителя контента. Во-вторых — появились довольно правдоподобные алгоритмы рассеивания отражений. В-третьих, улучшилось освещение сцен. Как бы не ограничивались и аппроксимировались расчеты освещенности сцены, все же созданные по технологии рейтрейсинга они более правдоподобны и наиболее приближены к реалиям. К тому же, тени созданные по этой технологии «умеют» окрашиваться в зависимости от расположенных поблизости источников света.
Кто хочет играть в игры с использованием рейтрейсинга?
Участь современного геймера достойна сожаления, он находится в заложниках многочисленных прихотей разработчиков и издателей компьютерных игр. Что сделают, в то он и будет играть, иного нет. Выбор есть, но очень часто он ограничен списком из нескольких одинаковых игр. В итоге, геймеры всё время чего-то ждут, причем, как правило, того, что постоянно откладывается. Разработчики стараются, что бы их игра удовлетворила как можно большее количество геймеров, в итоге получается такой потребительский «продукт», вызывающий среднее удовольствие у всех, но никто не найдёт в нём того, что именно он хотел.
Применительно к компьютерной графике, необходимо к разработчикам игр и издателям добавить и производителей видео ускорителей. У них свои вкусы, продиктованные естественным развитием технологии современных VPU. В рамках современной архитектуры легко повышать качество текстурирования и fillrate, вот они этим и занимаются из поколения в поколение, другого не знают. И все будут получать одинаковую картинку на своих мониторах, на ней будет только то, что удобно рисовать с помощью полигональных видео ускорителей. Но у разных людей бывают различные вкусы и пристрастия. Если вы возьмёте какую-нибудь трёхмерную игру с большим количеством настроек графического движка, то у различных пользователей даже на сходных конфигурациях компьютеров они будут выставлены по-разному. Кто-то установит большее разрешение экрана, согласившись с меньшей скоростью, кто-то наоборот. Некоторые включат улучшающую анизотропную фильтрацию текстур, другие — какой-нибудь сглаживающий супер-мульти-сэмплинг.
Например, давно, ещё во времена 3dfx, была дискуссия на тему 32 битного цвета в играх. В тот период времени ускорители 3dfx его не поддерживали, а RivaTNT поддерживала, но работала в режиме true-color достаточно медленно, особенно в больших разрешениях. И вот сторонники 3dfx говорили, что 32 битный цвет не нужен, тем более, такой медленный, а фанаты NVIDIA — наоборот. Кому-то всё равно было, кто-то устанавливал большее разрешение, но меньшую глубину цвета. Я вот, лично, предпочитал разрешение 640×480, но true color. Хотелось либо палитру из 256 цветов без билинейной фильтрации текстур и т.п., как в первой версии Quake, либо уж полностью плавный переход цвета. 256 цветов с моей точки зрения как-то хорошо сочетались с отсутствием билинейной фильтрации текстур, особенно, текстур стен. Можно представить, что это не грубая текстура, а просто стена состоит из маленьких мозаичных плит. А вот грубо размытая в 16-битном цвете текстура с градациями мне меньше нравилась.
Освещение
Но больше всего я ценю не текстурирование, и, даже, не геометрическую детализацию, а освещение. Чтобы картинка не выглядела совершенно статичной, освещённой постоянным мёртвым светом. Однако современные видео ускорители не приспособлены к изображению динамического освещения. Собственно, они вообще не ускоряют освещение сцены, имеется в виду, не ускоряют нахождение затенённых областей и т. п. Самые современные потребительские видеокарточки с грехом пополам могут только рассчитать интенсивность света в незатенённой точке с помощью коротких пиксельных шейдеров. Но что толку, если они не приспособлены для нахождения, собственно, самих теней. И уже бог знает сколько времени практически во всех трёхмерных играх используются заранее рассчитанные карты освещённости, так называемые lightmap’ы, которые нагоняют на меня тоску.
Эти lightmap вообще не имеют отношения к компьютерной графике, хотя они и создаются при помощи специальных программ, рассчитывающих модель распространения света, но их с тем же успехом или, даже, лучше может и художник заранее нарисовать для каждого помещения при создании игрового уровня.
Нынче в моду вошёл метод построения динамических теней с помощью теневых объёмов. Именно с помощью него рисуются в реальном времени тени в пресловутом Doom III. Главное достоинство этого метода состоит в том, что он необыкновенно жаден до fillrate ускорителя и ничего особо не требует, кроме как отрисовки треугольников, на рендеринг которых VPU и рассчитаны. Что происходит: затенённая объектом область пространства ограничивается двумерной поверхностью из треугольников. Получается содержащая всю темень коробка из треугольников, и эта поверхность рисуется, но на экран не отображается. При рисовании сравнивается глубина передней и задней стенок теневого объёма с глубиной уже нарисованных с использованием буфера глубины объектов. Если точка объекта лежит внутри теневого объёма, то она помечается как не освещенная. Да, нахождение контура теневого объёма для объекта, естественно, осуществляется при помощи CPU, но это относительно не сложно для не очень высоко полигональных моделей. Получается геометрический метод, при котором тень прямо-таки по сути рисуется на экран, как будто это делает художник-мультипликатор. Более подробно с этим и другими методами построения динамических теней можно в этой статье.
Поскольку теневой объём, как правило, гораздо больше самого объекта, и очень протяжённый и извилистый, то получается колоссальный расход мощности видеокарточки. Таким образом, можно было рисовать тени ещё на RivaTNT, но совсем не быстро. И вот можно сидеть и ждать у моря погоды, когда же fillrate возрастёт до приемлемого уровня. Вроде бы, уже окончательно определили эту дату.
Однако, этот метод очень частный, его невозможно обобщить для отображения вторичного освещения, для расчёта тени от частично прозрачного объекта, когда интенсивность тени изменяется в зависимости от пути света в среде. Для расчёта отражений и преломлений света метод тоже, естественно, непригоден. Метод плохо совместим с затенением прозрачных поверхностей, поскольку прозрачные объекты не оставляют след в z-буфере, либо они затирают глубину находящихся за ними объектов. Тогда непонятно, как затенять заслонённый объект, но видимый, поскольку его глубина заменена глубиной более близкой прозрачной поверхности. И метод трудно усовершенствовать для изображения мягких размытых теней. Получается очень специальный метод, и, когда он будет реализован, ещё бог знает сколько времени ничего нового не будет.
Игра с освещением
Эта статья является продолжением статьи «Критика полигональной технологии», где уже обсуждались недостатки современной технологии в первую очередь с точки зрения освещения и изменения сцены в real-time. А так же предлагался 3D-движок VirtualRay с продвинутым освещением, использующий метод обратной трассировки лучей для реалистичного расчёта освещения, и изображающий инопланетные миры, построенные из сфер.
С момента публикации той статьи ничего принципиально нового в полигональных движках не произошло. Последний писк моды, игры с cartoon shaders, как раз соответствует мультипликационному принципу отрисовки в полигональных движках, когда ускоритель подменяет собой кисть художника-мультипликатора. Любопытно, что в мультипликации, наоборот, всё чаще используют компьютер для реалистичного расчёта сцены, в том числе и с помощью метода трассировки лучей.
Однако с ростом мощности процессоров персональных компьютеров стало возможным на основе движка VirtualRay создать работающую трёхмерную игру с уникальным динамическим по пиксельным освещением и мягкими тенями. Причём, довольно быстро работающую даже в высоких разрешениях. Сейчас мы её и рассмотрим.
Так что AntiPlanet — так называется игра — переносит играющего совсем в другой мир, действительно на другую планету. Удивительным образом это замечательно сочетается с использованием сфер для моделирования сцены.
Летающий Демон, он нарисован с по пиксельным освещением и правильным само затенением модели.
Инопланетная биоформа. Статическое изображение не может передать динамическое освещение, тени и анимацию сцены. На самом деле эта штука шевелится.
Для игры необходим современный процессор не ниже Pentium III. Гораздо лучше, конечно, новый Pentium 4 или Athlon XP. Движок, как практически все программы, реализующие трассировку лучей, получает большой выигрыш от мультипроцессорности, в том числе, и от технологии Hyper-Threading. На самых новых процессорах с Hyper-Threading можно играть в высоком разрешении, ранее недоступном real-time ray tracing.
Скачать демо-версию игры, она же share-ware версия, можно здесь. Там же можно будет скачать Spherical_Editor — редактор для создания сцен и моделей для AntiPlanet.
Ускорение трассировки лучей
После всего вышесказанного возникают многие вопросы. Ну, хорошо, сцены из сфер, благодаря их геометрической форме, удобной для метода трассировки лучей, можно с успехом отображать. Но хочется, во-первых, тогда уж больше сфер, во-вторых, сферы с вырезами и сегменты сфер, чтобы можно было рисовать заострённые объекты. В-третьих — эллипсоиды, эллипсоиды ведь могут быть очень длинными веретенообразными или, наоборот, плоскими блиноподобными. Всё это может существенно обогатить и разнообразить геометрию сцен. И, конечно, хочется отражений и преломлений света в среде, в чем особенно проявляются преимущества рейтресинга.
Сейчас реализовать-то это можно, но будет быстро работать только в низком разрешении. Это всё равно как в сказке про скорняка, можно ли из одной овчины сделать семь шапок? Можно, конечно. Можно и больше.
Тогда, в свою очередь, возникает вопрос, если метод трассировки лучей демонстрирует интересные результаты на обычных универсальных CPU, то чего можно было бы достичь при аппаратном ускорении рейтресинга? В производство полигональных ускорителей вложены миллиарды долларов, и, тем не менее, можно наблюдать одно сплошное экстенсивное развитие, эксплуатацию возможностей новых технологических процессов.
Понятно, что в начале развития игровой потребительской компьютерной графики рейтресинг был совсем неподъёмным, слишком вычислительно сложным, и на персональных компьютерах для визуализации стали применять простые методы. В итоге для метода рисования треугольников с помощью z-буфера стали успешно создавать аппаратные ускорители, и развитие пошло в этом русле. Русло очевидным образом углублялось, так что свернуть из него было невозможно. Можно было только плыть по течению, надеясь, что река впадает в океан, а не в болото. Но понять заранее это невозможно, потому что вода течёт в сторону наименьшего сопротивления в локальной окрестности, и можно только надеяться, что повезло с выбранным направлением.
© Art-Render / Футуристическая вариация современного города. Такое освещение не скоро будет возможно в реал-тайм.
Давайте рассмотрим перспективы создания аппаратного ускорителя трассировки лучей уже с позиций сегодняшних технологий и веяний.
На самом деле, потребительский ускоритель метода трассировки лучей давно создан и везде продаётся, это обычный процессор, ничего лучше придумать пока что нельзя. Почему это так? Дело в том, что моделирование физически реалистичного освещения, а именно в существенном приближении к реализму и состоит достоинство трассировки лучей, очень сложная задача, требующая сложных ветвистых расчётов и операций со сложными структурами данных. Всё это делает невозможным создание простого эффективного ускорителя трассировки лучей.
Рисование треугольников с билинейной фильтрацией текстур гораздо лучше поддаётся аппаратному ускорению, поскольку там немного простых операций, вроде линейной интерполяции вершинных значений по поверхности треугольника и выборке элемента из текстуры. Кстати, все операции оптимизированы на аппаратном уровне с точки зрения взаимодействия с памятью, которая является очень сильным замедляющим фактором, поскольку скорость памяти растёт значительно медленнее скорости CPU и VPU.
Вот пример, ускорители не умеют осуществлять билинейную фильтрацию текстур из вещественных чисел, такие текстуры предлагается фильтровать в пиксельных шейдерах. А вычислительная производительность этих шейдеров не сильно, совсем не принципиально, отличается от вычислительной мощности современных CPU. Вот примерно такие расчёты: берём современный мощный VPU, 4 конвейера умножаем на 2 векторных операции за такт, умножаем на частоту порядка 400MHz получается 3200M векторных операций в секунду. Это, конечно, пиковая производительность. Примерно аналогичную пиковую вычислительную производительность демонстрируют современные CPU, Pentium 4 частотой 3200 MHz может выполнять при использовании SSE одну векторную операцию за такт, получается примерно то же самое количество векторных операций в секунду. VPU зато может быстро осуществлять выборку из текстур и интерполяцию по треугольнику. Но это для трассировки лучей не очень нужно.
Возвращаясь к использованию вещественных чисел хорошей точности, вот они и требуются для рейтресинга, а видео ускорители вычисления с ними не особенно ускоряют. Даже фильтрацию текстур.
Многие надеются, что развитие технологии программируемых шейдеров позволит эффективно выполнять сложные расчёты на VPU, станет возможной, в том числе, и реализация трассировки лучей на VPU. Но в пиксельных шейдерах нет даже ветвлений, когда они появятся, это будет уже принципиально полноценный процессор. Значит, производителям видео карточек придётся столкнуться с теми же трудностями, которые испытывают изготовители CPU, а ветвления это самая главная их боль. Но пусть даже трудности будут преодолены, возьмём современный VPU частотой 450 MHz с восьмью пиксельными конвейерами, он превратиться в набор из восьми малочастотных процессоров, чем такая стая Pentium II 450 лучше, чем один Pentium 4 3600? Будет несколько лучше с точки зрения задач графики, которые довольно хорошо распараллеливаются на несколько процессоров, из-за более лучшего взаимодействия с памятью, но не сильно. Поскольку процессорам, работающим на меньшей частоте, легче взаимодействовать с медленной памятью.
Тогда остаётся надеяться на повышение частоты VPU. Но, опять-таки, тогда придётся столкнуться с соответствующими трудностями эффективного повышения частоты. Для достижения высоких тактовых частот строится специальная архитектура CPU с длинным конвейером и короткими инструкциями, с «тонким тактом», чтобы на каждой ступени конвейера можно было успеть выполнить небольшую операцию. Иначе, даже чисто физически электрический сигнал не успеет дойти до всех нужных элементов. А архитектура современных VPU противоречит этой концепции «тонкого такта», у них такт очень «толстый», чего только там нет.
© Art-Render / Эта уютная столовая отрендерена при помощи аппаратного ускорителя трассировки лучей, созданного Advanced Rendering Technology. Он используется для ускорения рендеренга в графических трехмерных редакторах. Ускоритель представляет собой несколько малочастотных процессоров, интегрированных на одну слотовую карточку. Карточки тоже могут объединяться вместе. Процессоры умеют вычислять базовую для рейтресинга операцию пересечение луча с треугольником за один такт. Однако штука получается ценой в тысячи долларов. Хотя, конечно, истинная себестоимость неизвестна.
За счёт этого «толстого» такта VPU более удобны для графики, так как многие сложные инструкции, например, приближённый синус и косинус и другие, делаются ускорителем за такт. Однако, с точки зрения увеличения частоты, сейчас выгодно выполнять все вычисления в общем потоке инструкций. Например, в самом быстром современном процессоре Itanium2 вообще нет специальной инструкции вычисления обратного квадратного корня. Сам по себе он не умеет вычислять этот корень, калькуляция происходит программным путём на основе использования универсальных исполнительных устройств, выполняющих базовые операции сложения-умножения. Многие процессорные архитектуры, которые умели много чего исполнять аппаратно, давно исчезли.
Но в компьютерной графике это относительно удобно, так как можно иметь много низкочастотных параллельно работающих процессоров.
Рейтресинг и мультипроцессорность
Рейтресинг как раз относится к отлично распараллеливаемым задачам. Как правило, во сколько раз больше процессоров, во столько раз больше и производительность. Почему? Просто удобно разбивать экран на отдельные куски, и передавать обсчитывать лучи, соответствующие этим участкам, отдельным процессорам. Лучи обсчитываются независимо, функциям трассировки луча нет большой необходимости что-то передавать друг другу. Особенно, когда рассчитываются лучи, расположенные далеко друг от друга. Действует принцип локальности, заключающийся в том, что близкорасположенные лучи, соответствующие соседним точкам экрана и имеющие сходную судьбу, обсчитываются вместе. Таким образом, возникает идея в качестве ускорителя трассировки лучей использовать мультипроцессорную систему с большим количеством средних, по производительности, процессоров. Действительно, 10 процессоров Celeron 2000 MHz с точки зрения рейтресинга соответствуют процессору в 20 GHz. Такие процессоры ещё очень не скоро будут в персональных компьютерах, если вообще когда-нибудь будут. Малость кэша процессоров Celeron тут не играет никакой роли, поскольку из-за принципа локальности необходимые данные тоже локализуются. Так как соседние лучи имеют часто схожий путь по сцене и требуют одни и те же геометрические и текстурные данные. Кстати, в итоге получится не просто эквивалент 20 GHz, а даже лучше, поскольку, чем больше частота процессора, тем больше задержки на операции с медленной памятью. Например, главный цикл трассировки лучей в VirtualRay работает с практически одинаковой скоростью, что на Celeron 2400 MHz, что на Pentium 4 2400 MHz с в четыре раза большим объёмом кэша и более высокой частотой шины. Кстати, одна из целей введения технологии виртуальной многопроцессорности Hyper-Threading заключается в сокрытии издержек на доступ к памяти, поскольку пока один виртуальный процессор находиться в типичном состоянии ожидания памяти, другой может что-то считать и наоборот. Таким образом достигается более полная загрузка всех вычислительных блоков высокочастотного процессора.
Разбиение экрана на тайлы. Каждый процессор рисует свой участок экрана независимо.
Потоки данных в многопроцессорной системе при рендеренге методом трассировки лучей. Они идут практически в одном направлении.
Поскольку при трассировке лучей каждый процессор работает практически независимо, нет необходимости в сложных механизмах согласования содержимого локальной памяти и кэша различных процессоров, которые так осложняют создание мультипроцессорных систем.
Можно, например, просто один раз закачать в память каждого процессора информацию о сцене, а потом сообщать перед отрисовкой каждого кадра только положение наблюдателя и информацию об изменении сцены. Сравнительно легко можно организовать и кэширование необходимых данных, используемых текстур и т.п., когда они загружаются в локальную память по мере необходимости. Это чтение из общей глобальной памяти не обязано быть сверхбыстрым, поскольку будет происходить не так часто за время вывода одного кадра.
Независимость процессов и практическая одно-направленность потоков данных позволяет также ограничиться относительно простой неинтеллектуальной операционной системой.
Таким образом, «ускоритель рейтресинга» можно построить хоть сейчас, причём, в обозримом будущем, ничего лучше придумать будет нельзя.
Прикинем стоимость такого решения. Вообще, в IT индустрии ценообразование мало привязано к себестоимости производства продукта. Часто разработка устройства стоит сильно дороже его производства даже в массовых количествах, поэтому кусочек кремния за 25 уе продаётся за 250, и это ещё без учёта рыночных факторов. Но, всё равно, некие представления о стоимости просачиваются наружу.
Итак, необходимо взять десяток старых процессоров, таких, чтобы их ревизии на новом техпроцессе не требовали особого охлаждения, иначе десятки работающих вентиляторов поднимут наш ускоритель в небеса. Что-то типа холодных процессоров VIA, но попроизводительней, и не такие дорогие, как процессоры для ноутбуков. Какие-нибудь Duron 2000 MHz на 90 нм технологическом процессе. Может, он не будет сильно греться. Процессор дешев необыкновенно, так как у него сильно урезан кэш, но кэш нам и не нужен. Получается пара сотен у е. А остальное ещё дешевле. Процессоры можно разместить на карточках, вставляющихся во что-то наподобие PCI или AGP слотов, и добавить ещё к каждому процессору на карточку локальной памяти. Либо микросхемы RAM памяти, либо микросхему большого внешнего кэша на несколько мегабайт и работающего на низкой частоте. Получиться прямо сейчас эквивалент будущего настольного процессора на 20 GHz.
На самый крайний случай процессоры можно соединить сетью на 1 Gbit, такой интегрированный сетевой контроллер тоже будет дешев. Получится конечная стоимость в несколько сотен, вполне сравнимая со стоимостью новых видеоускорителей. И ничего изобретать не надо.
Итак, легко получить процессор будущего прямо сейчас, но хватит ли этого «20-гигагарцового» процессора для осуществления качественного рейтресинга достаточно сложных полигональных сцен в real-time? На примере VirtualRay понятно, что со сферами то всё проще.
Вопрос достаточно сложный, с одной стороны, если посмотреть на существующие редакторы вроде 3DMax или LightWave, использующие трассировку лучей для рендеренга, то достаточно сложные сцены рисуются минутами. То есть, их нужно ускорить в тысячи раз для достижения real-time. А у нас только десять процессоров. Но рендеринг в графических редакторах оптимизирован скорее не на скорость, а на универсальность, чтобы были воплощены все мыслимые и не мыслимые графические эффекты. Рисовать в реальном времени никто не собирался. Так что можно накинуть примерно раз десять за счёт оптимизации и некоторого упрощения. Всё равно получается более чем десятикратное превышение требований к производительности. Таким образом, вопрос остаётся открытым.
С другой стороны, производители видео карт всё время стараются с переменным успехом внедрить многочиповые решения, тоже объединить вместе несколько дешевых ускорителей. Правда, принципиально нового с точки зрения графики таким образом не достичь, но fillrate можно сделать колоссальный. Шейдерная производительность тоже соответственно возрастёт. Вопрос масштабируемости производительности такого решения относительно большого числа VPU заслуживает отдельного разговора, но пример существующих решений с несколькими чипами говорит, что в принципе можно добиться неплохих показателей.
К слову, а как ещё можно было бы использовать этот многопроцессорный «ускоритель рейтресинга»? Какие ещё потребительские задачи допускают удобное распараллеливание? Например, то же кодирование и воспроизведение видео файлов. Каждому процессору можно дать свой кусочек видео файла для кодирования. Производительность поднимется практически пропорционально количеству процессоров.
Вот за этим столом немецкие учёные из Saarland University разрабатывают архитектуру полигонального рейтресера. На их сайте вы сможете найти уйму занимательных картинок и видеороликов, например, отрендеренные при помощи метода трассировки лучей уровни из Quake III, с освещением и отражениями, но не найдёте ни одной работающей демо-версии. А так же увидите гору pdf-файлов с документацией. В ней, например, они всё высчитывали, за сколько тактов CPU при использовании оптимизации под SSE можно найти пересечение луча с треугольником. И приводили результаты для дуальных систем на основе Pentium III. Действительно, на сайте в то время можно было найти баннер «Sponsored by AMD & Intel». Как раз производители процессоров совсем не были уверены в дальнейшем пути развития. Intel продвигала дешевые дуальные системы, на семинарах для разработчиков говорилось, что в 2000 году будет начат переход на 64битный Itanium. Самое интересное, во всю производились слотовые процессоры. Достоинством слотового варианта была возможность интеграции большого дешевого внешнего кэша, и потенциально легкая интеграция многих процессоров на одну плату. Зато, есть трудности с охлаждением. Но потом удалось сделать пусть горячие, но высокочастотные процессоры, и от слотового варианта отказались.
Немецкие исследователи теперь занялись созданием потребительского ускорителя трассировки лучей. Они решили, что преимущества метода трассировки лучей окажутся решающими на высокополигональных сценах с десятками миллионов треугольников.
А здесь немецкие учёные отдыхали, играли в карты.
Заключение
В заключении можно отметить, что реалистичный рендеринг — очень непростая со всех сторон вычислительная задача. Наша реальность не хочет просто так отображаться при помощи компьютеров и переходить на экраны мониторов. Приходиться её туда практически вручную переносить.