РЕКЛАМА
ПОИСК И ЦЕНЫ
Поиск по сайту THG.ru


Поиск по ценам в Price.ru




ИНФОРМАЦИЯ
ПОЛЕЗНЫЕ ССЫЛКИ
Метод трассировки лучей против растеризации: новое поколение качества графики?

IDF 2009, день первый: Intel продвигает миниатюризацию

Rambler's Top100 Рейтинг@Mail.ru
bigmir)net TOP 100

ВИДЕОКАРТЫ

Рендеринг с помощью вокселей: новый уровень графики в играх?
Краткое содержание статьи: Недавно мы опубликовали статью, посвящённую методу трассировки лучей. И в нынешней статье мы продолжаем обзор технологий рендеринга, которые могут заменить или, по крайней мере, дополнить растеризацию треугольников, хорошо всем сегодня знакомую. Использование вокселей вместо традиционных треугольников даёт весьма любопытные преимущества по визуальному качеству в играх, хотя недостатки тоже есть. Станет ли эта технология основой будущего 3D-рендеринга в играх? Вполне возможно, ведь на её защиту встал знаменитый Джон Кармак. В нашей статье мы попытаемся доступно изложить современное состояние рендеринга с помощью вокселей.

Рендеринг с помощью вокселей: новый уровень графики в играх?


Редакция THG,  30 октября 2009


Введение

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

Если вы читали нашу предыдущую статью, то наверняка помните, что нас не очень убедила актуальность технологии трассировки лучей в реальном времени (это подтверждает последняя демонстрация Intel трассировки лучей на Larrabee в игре Enemy Territory, где частота кадров оказалась весьма посредственной). Это мнение, похоже, разделяет сегодня большинство разработчиков, включая такую знаменитость в игровом мире, как Джона Кармака (John Carmack). Вот, что он сказал нашим коллегам с сайта PC Perspective.

Введение

“Я понимаю метод трассировки лучей в его классическом смысле, то есть аналитическое пересечение лучей в традиционно описываемой геометрии, будь то сетки треугольников или примитивы более высокого порядка. И я вряд ли поставлю на то, что метод трассировки лучей заменит основные задачи рендеринга, пусть даже это продвигает Intel. У растеризации есть крупные преимущества с точки зрения производительности, да и многие аргументы сторонников трассировки лучей, касающиеся использования технологии отбраковки (culling), чтобы избежать работы с массивной геометрией, эти аргументы очень слабые, поскольку вы можете делать то же самое с очередями окклюзии и традиционными движками рендеринга на основе растеризации. Если сравнивать напрямую, то растеризация будет существенно более эффективным способом использования доступных транзисторов, независимо от их количества."

Как видим, Джон Кармак относится к трассировке лучей без всякого энтузиазма, но это совсем не связано с его консервативностью и желанием оставить технологию растеризации треугольников на веки вечные. Как стало известно примерно с год назад, у Джона Кармака есть своё мнение по поводу будущего рендеринга в реальном времени, и идея заключается в воксельном формировании лучей. Позднее мы получили презентацию Джона Олика (Jon Olick), да и утекло немало интересных деталей. Поэтому настало прекрасное время внимательно познакомиться с тем, что для нас готовит id Software.

Немного истории

Немного истории

Эксперименты Кармака с вокселями начались намного раньше прошлого года. Фактически, эта идея заинтересовала Джона ещё 10 лет назад. Между движками Quake/Quake II и игрой Quake III Кармак провёл несколько экспериментов с новыми технологиями рендеринга. Он дал своему исследованию кодовое название Trinity, при этом многие геймеры считали его будущим продуктом и новым поколением 3D-движков от id Software. Но, по сути, движок Quake III остался вполне традиционным, как сам Кармак написал в своём файле .plan в 1998 году.

"Теперь несколько замечаний по некоторым технологиям, исследованиям которых я занимался при подготовке движка Quake3/Trinity. С самого начала я потратил пару месяцев на очень масштабные открытые исследования, но, как получилось, ни одно из ранних исследований не повлияло на направление, которое я решил в итоге взять. Конечно, я очень много узнал, и это вероятно окупится когда-либо в будущем."

Некоторые из его экспериментов подразумевали отображение воксельных октадеревьев. Вот что сказал сам Кармак после выпуска Quake III.

"Я сделал два этих воксельных движка ещё в самом начале Quake III и довёл их до того момента, когда я уже думал, что практически могу реализовать их программно, но получилось бы довольно низкое разрешение, и по сравнению с тем, что можно было сделать на данной скорости с аппаратными полигонами, это себя в данном случае не оправдывало. Но я провёл анализ, какие сценарии доступа к памяти будут реализовываться; вы можете создать движок воксельного отображения лучей аппаратно на существенно меньшем "железе", чем мы на самом деле используем сегодня для всех движков растеризации треугольников, и во многих случаях я подозреваю, что визуальное качество будет намного более привлекательным."

Немного истории

Эта цитата была взята из интервью сайту FiringSquad начала 2000 года - почти 10 лет тому назад. Вполне понятно, что идея воксельного движка крутится в голове у Джона Кармака уже довольно долгое время.

Конечно, нельзя говорить о вокселях, не упоминая Outcast. Игра, которая вышла ещё более 10 лет тому назад, в июле 1999 года, повлияла на целое поколение игр из-за многих качеств, но также и из-за очень необычного 3D-движка в те времена, когда 3D-видеокарты стали уже обязательной составляющей игровых ПК.

Outcast использовала полностью программный движок рендеринга, поэтому была очень требовательна к ресурсам. Чтобы играть на максимальном разрешении (впечатляющее 512x384), вам требовался топовый процессор, но не 3D-видеокарта. Интенсивное использование ресурсов было не единственной причиной, почему стоит выделить движок этой игры. Он использовал воксели, то есть рендеринг был действительно уникальным.

Немного истории

Но нужно оценивать перспективу - даже если игра использовала (как и другие игры от Novalogic) рендеринг на основе вокселей, она на самом деле применяла весьма упрощённую форму, которая использовалась для ландшафта. Все объекты и персонажи были стандартными полигональными моделями. Для ландшафта использовалась карта высот, то есть для каждой точки окружения была возможна только одна высота, а это не позволяло реализовывать сложные структуры, например, своды и арки.

Это ограничение было не таким критичным, поскольку такие структуры весьма редко встречаются в природе из-за ограничений физики. В любом случае, отображение ландшафта было очень простым и выполнялось столбец за столбцом. Для каждого столбца хранилось максимальное значение Y (в Y-буфере). Пиксели рассматриваемого столбца начинали заполняться с нижней части экрана только если их Y-значение было больше, чем хранящееся в Y-буфере. Этот способ рендеринга очень легко и эффективно позволял удалить невидимые части сцены.

Немного истории

Теперь, после небольшого экскурса в прошлое, настало время посмотреть, что будут значить для нас воксели в будущем.

Технологии

Перед тем, как мы перейдём к деталям алгоритма, следует определить некоторые термины, такие как воксели, октадеревья и прокладка лучей.

Технологии

Если пиксель (pixel) является составным термином из слов "картина" и "элемент" (picture, element), то воксель является слиянием слов "объём" и "пиксель" (volume, pixel). Таким образом, воксель является базовым элементом объёма. Чтобы легче себе его представить, вспомните кирпичики конструктора Lego, в который вы играли ребёнком (или до сих пор играете, если у вас есть дети). Вы можете собрать практически всё, что угодно, используя набор простых кирпичиков. Воксели начинаются с такого же принципа: объём приближённо выражается набором кубических блоков. Это означает, что у нас есть представление объёма, в то время как сетка из треугольников представляет только пустой каркас - или поверхность, окружающую объём.

Воксели нередко использовались в играх, но их традиционная сфера применения - медицина. Эти примитивы прекрасно подходят для реконструкции объёма из последовательности поперечных срезов, которые получаются, например, после работы МРТ (томографа).

Впрочем, отображение объёма через воксели - подход всё же не идеальный. Реальный мир не состоит из совокупности маленьких кубиков, поэтому невозможно получить точное представление большинства объёмов с помощью вокселей. На следующей картинке вы видите как раз такой неудачный случай с очень грубым приближённым моделированием тора (если вы не знаете, что такое тор, то представьте обычный бублик) через воксели.

Технологии

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

Давайте посчитаем: простой массив из 1024 вокселей в каждом направлении занимает 1024 x 1024 x 1024 * 4 (красный, зелёный, синий и альфа-прозрачность) значений, что соответствует целым 4 Гбайт памяти. И это далеко не самое высокое разрешение. Поэтому воксели таким примитивным способом использовать нельзя. К счастью, есть решение, позволяющее ограничить этот недостаток: октадеревья или деревья с восемью ветвями.

Октадеревья

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

Если взять структуру дерева файловой системы, то можно выделить корень на жёстком диске, в котором будет присутствовать несколько дочерних ветвей в виде папок, которые в свою очередь могут содержать свои дочерние ветви (вложенные папки) и так далее, пока вы не доберётесь до листьев (самих файлов). По этому примеру вы наверняка догадаетесь об одном из преимуществ использования деревьев: добраться до части организованного дерева бывает намного быстрее, чем если ветви расположены как попало.

Узлы дерева могут иметь разное число ветвей. Например, если ветвей у узла максимум две, то мы говорим о бинарном дереве, а число ветвей от нуля до четырёх даёт квадрадерево (дерево квадрантов), наконец, дерево с числом ветвей от нуля до восьми является октадеревом.

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

Октадеревья

Перед вами приближённое отображение круга на координатной сетке с разрешением 12 x 12. Приближение очень грубое из-за низкого разрешения, но, как можно видеть, большая часть ячеек пустует, поэтому они бесполезны. Если мы будем использовать октадерево, то уже получим следующее приближение.

Октадеревья

Строить октадерево довольно просто. Нужно начать с базовой картинки, после чего поделить её на два в обоих направлениях, что даст четыре квадранта. Если квадрант пуст или полностью заполнен, то алгоритм для него прекращается. Если квадрант заполнен частично, то он разделяется на два в обоих направлениях и так далее. Алгоритм завершается, когда все квадранты однородны (то есть полностью заполнены или полностью пустые), либо когда достигнута определённая глубина (на примере выше мы остановились на дереве с глубиной четыре, что дало деление на 16 в каждом направлении). Как можно видеть, даже в нашем простом примере конечный результат оказался намного ближе к оригинальному кругу, при этом мы использовали меньше данных (97 узлов или ячеек против 122 у обычной координатной сетки). А октадерево переносит этот принцип на три измерения.

Октадеревья

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

Впрочем, это только маленький недостаток по сравнению со многими другими преимуществами октадеревьев. Чтобы получить хорошее представление о других важных преимуществах октадеревьев, сначала нужно описать способ, с помощью которого происходит визуализация структуры данных. Существует несколько способов отображения вокселей, но техникой, которую выбрала id Software, является прокладка лучей (ray casting). Ниже мы приводим её описание.

Прокладка лучей (ray casting)

Подобно трассировке лучей (ray tracing), прокладка лучей основывается на проведении луча от каждого пикселя картинки. Но отличие в следующем: как только будет найдено пересечение, то алгоритм на этом завершается, вторичных лучей не прокладывается.

Следовательно, прокладка лучей выполняется быстрее трассировки лучей, поскольку, как мы уже показали в предыдущей статье, данные вторичные лучи как раз и приводят к проблемам с доступом к памяти. Более того, вам не нужно создавать дополнительные структуры данных, чтобы ускорить вычисления, связанные с пересечениями. Октадерево является одновременно и данными (геометрия и текстуры), и структурой ускорения.

Преимущества воксельных октадеревьев

Теперь давайте рассмотрим преимущества воксельного октадерева в рендеринге. Основное преимущество этой структуры данных в том, что она обеспечивает весьма элегантный путь решения проблемы уровня детализации (level of detail, LoD) текстур, а также и геометрии - всё это по одному простому алгоритму. Причина кроется в том, что, как мы уже упоминали выше, каждый узел октадерева содержит цветовую информацию, так что мы можем обойтись без 2D-текстур в их традиционном понимании. Или, если быть более точным, октадерево содержит как текстурную информацию, так и геометрическую.

Преимущества воксельных октадеревьев

Следовательно, проблема уровня детализации, которую приходилось совершенно по-разному решать для геометрии и для текстур, теперь сводится к одной простой системе: решению проблемы уровня детализации для октадерева. А это можно сделать очень просто, по принципу, несколько напоминающему mip-уровни текстурирования. Цель создания mip-уровней заключается в сохранении размера текселей (элементы текстуры) максимально близко к размеру пикселей экрана. Для этого текстура просчитывается и сохраняется в нескольких разрешениях, а графический процессор выбирает тот или иной mip-уровень в зависимости от размера текстуры на экране.

Что-то подобное можно сделать и с воксельными октадеревьями, когда уровень детализации будет выбираться автоматически. Если размер вокселя меньше размера пикселя, то прохождение дерева на этом заканчивается. Всё что требуется - сохранить среднее от информации, содержащейся в дочерних ветвях каждого узла, и мы получаем очень простой способ решения проблемы уровня детализации. Этот механизм идеально подходит для потоковых систем визуализации, несколько напоминающих ту, что id Software уже использовала для MegaTextures. В видеопамяти хранятся только те части октадерева, которые нужны, некоторые части располагаются в основной оперативной памяти, чтобы ускорить последующий доступ. Но большая часть октадерева просто находится на хранилище.

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

Преимущества воксельных октадеревьев

Также следует отметить, что существуют другие возможные способы решения упомянутых проблем, например, использование систем с виртуальными текстурами, подобных MegaTextures, или других технологий (например, sparse virtual textures), которые будут встроены в самые крупные 3D-движки (CryEngine 3, idTech 5 и т.д.) в следующем году. Проблему геометрии решать сложнее, но и здесь готовятся несколько возможных решений. Самое простое из них включает предварительный расчёт нескольких версий сетки треугольников в разных разрешениях, после чего выбирается вариант, наилучшим образом соответствующий расстоянию от сетки до камеры. Это простое решение реализовать легко, однако оно приводит к появлению существенного количества визуальных артефактов при переходе с одного уровня детализации на другой.

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

Преимущества воксельных октадеревьев

Преимущества воксельных октадеревьев

Преимущества воксельных октадеревьев

Преимущества воксельных октадеревьев

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

Ещё один способ решения проблемы (о котором мы очень много слышим после появления видеокарт с поддержкой DirectX 11) заключается в тесселяции примитивов высокого порядка (патчей), возможно вместе с картами смещения (displacement mapping). Появление данной технологии уже давно случилось на бумаге (да, вспомним Parhelia), но практических результатов пока не было. Возможно, это как раз тот случай, когда мы получим практическое воплощение.

Преимущества воксельных октадеревьев

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

Потенциальные ограничения вокселей

Но хотя эта техника и привлекательная, у неё есть свои недостатки. Основная проблема выходит из того, что строить октадеревья очень накладно по вычислениям, то есть нереалистично рассчитывать на модификацию структуры данных в реальном времени. Этот недостаток приводит к тому, что использовать воксельные октадеревья для динамической геометрии довольно сложно. Предложение Id Software для обхода этой проблемы заключается в использовании октадеревьев только для статической геометрии, когда все динамические элементы сцены будут отображаться через старую добрую растеризацию треугольников.

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

Ещё одна проблема кроется в том, что нам что-то нужно делать с потоковой системой. Как мы уже говорили, данная технология рендеринга хорошо подходит для постепенного увеличения уровня детализации по мере приближения к объекту, когда система будет в фоне вызывать данные из октадерева. Из-за способа организации данных это можно сделать плавно. Но что произойдёт, когда мы телепортируемся в другую часть мира? Геометрия будет уникальна, и потоковая система будет поставлена "на колени". Поэтому можно ожидать вывода некоторого времени очень простой геометрии, с постепенным улучшением детализации. Либо дизайнерам игры придётся как-то обходить этот недостаток, избегая упомянутых ситуаций.

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

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

Потенциальные ограничения вокселей

Последняя проблема: несмотря на преимущества структуры данных октадерева, память, требующаяся для хранения целого мира в форме вокселей, просто огромна. Как вы уже видели, это не влияет на ресурсы, необходимые для текущего выполнения. Но, с другой стороны, чтобы создавать, хранить и передавать пользователям подобные структуры данных id Software предстоит сделать немало серьёзной работы по технологиям сжатия. Джо Олик (Jon Olick) сказал пару предложений на эту тему - похоже, он доволен уровнем сжатия, которого удалось достичь.

Заключение

3D-рендеринг в реальном времени сегодня находится в весьма любопытной стадии эволюции. С появлением GPU, обеспечивающих всё более и более высокую степень программируемости, вновь становятся актуальными многие подходы, которые раньше имели сомнительную ценность. Они должны помочь разработчикам решить имеющиеся проблемы.

Заключение

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

Один из таких вопросов, способный оказать решающее значение на будущее технологии, касается инструментов редактирования, с которыми будут работать художники. Олик сказал, что он ожидает эволюцию системы, которая сегодня используется для MegaTextures; она позволяет художнику использовать буферы, чтобы добавлять детали к текстуре. Подобная система, которая заменяет модификацию карт нормалей, должна изменить геометрию с данной технологией. Но на данный момент всё находится ещё на этапе концепций, да и красивые демонстрации - это далеко ещё не самый сложный этап. Нужно представить технологию в виде законченного продукта, достаточно стабильного и эффективного.

Впрочем, всё равно очень интересно видеть модель, анимированную с несколькими миллионами полигонов (семь миллионов в начальной модели, сделанной с помощью ZBrush) с частотой кадров 60 fps на текущем поколении видеокарт. Эти предварительные результаты звучат очень обещающе, если вы подумаете о графических процессорах, которые будут доступны в то время, когда технология выйдет на рынок. Учитывая время разработки современных игр, а также и то, что id Software не планирует выпустить Rage до следующего года, нам, вероятно, придётся подождать три или четыре года, прежде чем игры с данным способом рендеринга появятся на прилавках магазинов.




Свежие статьи
RSS
Лучшие смартфоны 2018 года: выбор THG.ru HP Tango X: обзор беспроводного струйного принтера Лучшая материнская плата: текущий анализ рынка Пять лучших игровых беспроводных роутеров Мини-обзор PlayStation Classic: хотелось бы большего
Лучшие смартфоны 2018 года Обзор HP Tango X Лучшая материнская плата Пять лучших игровых роутеров Мини-обзор PlayStation Classic
РЕКЛАМА
РЕКОМЕНДУЕМ ПРОЧЕСТЬ!

История мейнфреймов: от Harvard Mark I до System z10 EC
Верите вы или нет, но были времена, когда компьютеры занимали целые комнаты. Сегодня вы работаете за небольшим персональным компьютером, но когда-то о таком можно было только мечтать. Предлагаем окунуться в историю и познакомиться с самыми знаковыми мейнфреймами за последние десятилетия.

Пятнадцать процессоров Intel x86, вошедших в историю
Компания Intel выпустила за годы существования немало процессоров x86, начиная с эпохи расцвета ПК, но не все из них оставили незабываемый след в истории. В нашей первой статье цикла мы рассмотрим пятнадцать наиболее любопытных и памятных процессоров Intel, от 8086 до Core 2 Duo.

ССЫЛКИ
Реклама от YouDo
По ссылке установка w7на w-xp: лучшие цены.
Доставка еды в Сходне, подробнее на YouDo.
Услуги специалиста: ремонт устройство подачи пара утюгов braun - лучшие цены тут.