Два игрока, оставшиеся сегодня на рынке производительных видеокарт начинают осознавать ограничения рендеринга в реальном времени и пытаются сконцентрироваться на качестве рендеринга. Происходит существенное отклонение от предыдущего курса, когда все решало число кадров в секунду. Конечно, скорость в fps продолжает оставаться важным аспектом 3D игр, но производители карт уже задумались над вопросом: а не достаточно ли того, что есть, и не будет ли большее лишним? Если современное поколение производительных видеокарт позволяет играть в самые крутые игрушки с более чем 60 кадрами в секунду при разрешении 1600x1200x32, то кому нужно еще больше? При этом подумайте, что повышение производительности потребует реализации какого-то совершенно нового подхода к рендерингу, а также, возможно, использования новой технологии памяти.
Становятся еще более понятны причины такого смещения акцентов среди производителей видеочипов: частота кадров отходит на второй план, а на первое место ставятся качество и реализм.
И первым таким производителем, сделавшим ставку на улучшение изображения, а не на fps, стала nVidia с ее GeForce3. Безусловно, GeForce3 все же быстрее предыдущих продуктов, но разница в производительности между GeForce2 Ultra и GeForce3 не такая большая, как между TNT2 Ultra и GeForce DDR. Поэтому nVidia пришлось перейти от частоты кадров к качеству изображения, тем более выпуск DX8 и последующих высококлассных игр предоставляют прекрасную возможность для этого.
Технологии по улучшению качества изображения, которые были использованы в GeForce3, уже давно у всех на устах. Попиксельное затенение и сглаживание Quincunx предоставляют будущим играм возможность улучшить картинку без ущерба скорости. По всей видимости, с выпуском GeForce3 nVidia пытается доказать, что видеокарта - это нечто большее, чем просто максимальное количество кадров в секунду.
Спустя три месяца после официального выпуска GeForce3, мы попытаемся взглянуть на то, как ATi, основной конкурент nVidia, пытается улучшить качество изображения в своих будущих продуктах. Скорее всего, "чип следующего поколения" (нам кажется, что лучший кандидат на эту роль - Radeon II) будет использовать технологию, радикально меняющую качество изображения не только в новых, но и в уже существующих играх. Имя ей - TRUFORM.
Необходимая полезная информация
Для того, чтобы нам лучше понять роль технологии TRUFORM в трехмерных играх, давайте взглянем на процесс дизайна и рендеринга современных игр.
Игровые 3D сцены, персонажи и объекты формируются из полигонов, которые состоят из треугольников. Для примера, представьте себе пирамиду с квадратным основанием. Она создана из смежных треугольников и основания, в ней каждая сторона представляет собой один большой треугольник, а основание составлено из двух треугольников.
Пирамидка
Пример с пирамидой
Другие объекты создаются точно таким же способом - смежные треугольники создают вместе более сложные формы, что и показано ниже.
Лицо
Трехмерная модель лица
В примере с нашей пирамидой нужно использовать не меньше и не больше шести треугольников для создания формы. Меньшее количество треугольников не создадут требуемой формы, а большее количество никак не повлияет на вид. С другой стороны, в более сложных геометрических конструкциях разница между минимально требуемым и большим количеством полигонов уже явно заметна.
Для иллюстрации наших слов составим сферу из восьми смежных треугольников. Они создают некое подобие сферического объекта, который на самом деле состоит из двух пирамид, соединенных основаниями. Повышая число треугольников, или сегментов сферы, мы придаем объекту более реалистичный вид, так как в окружающем нас мире сфера может быть представлена только бесконечным количеством полигонов.
Четырёхсегментная сфера
Двенадцатисегментная сфера
Стосегментная сфера
Сфера из четырех сегментов.
Треугольники слишком велики для создания формы сферы 12-сегментная сфера.
Все еще видны грани, пятно света имеет неправильную форму 100-сегментная сфера.
Обратите внимание на реалистичный вид и правильное световое пятно.
Как вы можете легко заметить, повышение числа полигонов сферы улучшает реализм, преобразуя фигуру от двух соединенных основаниями пирамид до 100-сегментной, почти правильной сферы. Ещё большее увеличение сегментов сферы будет всё меньше и меньше сказываться на её внешнем виде. В конце концов, мы достигнем того порога, при котором разницу в сглаженности сферы не позволит заметить уже разрешение монитора.
Все сказанное выше относится не только к сферам, но и к более сложным структурам, например к персонажу в игре. Когда разработчики и художники совместно работают над созданием игровых персонажей, сцен и объектов, они должны постоянно учитывать, из какого количества треугольников (или полигонов) будет состоять сцена. Чем больше будет число полигонов в сцене, тем большую работу будет выполнять видеокарта по отрисовке, трансформации и освещению сцены. Увеличение числа полигонов требует повышения пропускной способности для передачи треугольников на графический чип и увеличение количества памяти для хранения всех этих треугольников. Добавьте к этому то, что графический чип может обрабатывать ограниченное число треугольников за такт. Мы ни раз упоминали про эту проблему. Шина AGP имеет ограниченную пропускную способность, также как и память на видеокарте. Помимо координат вершин треугольников по шине передаются ещё текстуры и другие данные. Ещё надо учитывать, что от центрального процессора мы ещё полностью не ушли, и увеличение числа треугольников в сцене потребует больших затрат ресурсов процессора на передачу координат вершин.
Художник должен соблюдать баланс между числом треугольников, описывающих сцену, и ее визуальным качеством. Однако еще раз отметим, что для идеально реалистичного представления сцены необходимо использовать бесконечное число треугольников, но это, разумеется, не представляется возможным. Игры должны выпускаться с учетом оборудования, на котором они будут работать. Причем для успешной продажи игра должна запускаться не только на самых мощных системах, а поэтому большинство игр значительно ограничивают количество используемых на сцене полигонов. Например, в Quake III Arena в среднем в сцене используется 10 000 полигонов. Конечно, художники прибегают к различным хитростям, экономя на одних моделях, чтобы получше прорисовать другие, более важные объекты.
Мы приходим к тому, что количество полигонов нужно увеличить для лучшего восприятия игры, но аппаратные средства сдерживают замыслы художников. И это даже не мощности графических чипов. Как известно, мощности в 50 000 000 треугольников в секунду хватит на обработку "голой" сцены из Quake III Arena без текстур и освещения с частотой 5000 кадров в секунду. И это даже не мощность центрального процессора, поскольку 1400 МГц Athlon, или 1700 МГц Pentium 4 будет хватать на обработку очень большого числа треугольников, но опять же в чистом виде - без текстур и освещения. А тем более, если учитывать современные тенденции к использованию SIMD инструкций для ускорения мультимедийных приложений. Дело всё в той же низкой скорости памяти и шины AGP.
Большая детализация с помощью кривых поверхностей
Один из способов был недавно реализован благодаря использованию кривых поверхностей. С помощью него уже была создана потрясающая компьютерная графика в таких фильмах, как "Игрушечная история 2" (Toy Story 2), "Жизнь жуков" (Bug's Life) и в ожидающемся "Последняя фантазия" (Final Fantasy). Возможность создания реалистичной графики обеспечивается тем, что построенные из двумерных линейных полигонов 3D изображения создают впечатление "блочности", которое отсутствует при прорисовке форм кривыми поверхностями третьего порядка.
Для того чтобы отрисованные в реальном времени сцены компьютерных игр выглядели подобно компьютерным фильмам, необходима поддержка кривых поверхностей со стороны видеокарты. Теоретически, художники могут нарисовать сцены и объекты из кривых поверхностей, хотя это и сложнее, но проблема заключается совсем не в этом, а в том, что их нужно будет отобразить на вашем домашнем компьютере.
Все графические карты, используемые в домашних компьютерах, разработаны с учетом прорисовки наборов полигонов, а не кривых поверхностей. Так как два этих формата несовместимы, то любая игра, основанная на кривых поверхностях, не будет работать на видеокарте с прорисовкой полигонов. Также верно и обратное: обычные полигональные игры не смогут использовать карты с прорисовкой кривых поверхностей, то есть с такой картой вы не сможете поиграть сейчас ни в одну игру.
Конечно, можно вернуться к истокам и обрабатывать кривые поверхности на программном уровне - с помощью центрального процессора. Такой способ был уже применён в нескольких играх, самая известная из которых называется то ли Outworld, то ли Outcast. Эта игра на момент своего выхода тормозила на самых современных домашних компьютерах, почему и не получила широкого распространения, хотя графика была просто потрясающей.
Вообще, кривые поверхности - технология послаще тайлового рендеринга. С помощью кривых поверхностей можно создавать сверхреалистичные объекты и просто огромные трёхмерные миры. Рендеринг кривых поверхностей помаленьку вводится в профессиональные графические карты, но совершить революцию и перейти с полигональных моделей на реалистичные воксельные поможет только чудо.
Решение проблемы нашли в ATi. Так как сейчас практически невозможно продавать потребительскую систему на основе рендеринга кривых поверхностей, то ATi решила использовать оба варианта: кривые поверхности и полигональные модели.
Решение от ATi: TRUFORM
Если не вдаваться в детали, то технология TRUFORM основана на получении полигональной информации из игры, внутреннем преобразовании треугольников в кривые поверхности и последующем создании новых треугольников, которые уже и будут отображаться на сцене. Но все это, конечно, не так просто. Для того чтобы дальнейшее чтение не показалось вам кошмаром, повторите уравнения с несколькими переменными и смахните пыль со старых тетрадок.
Преобразование простого линейного треугольника в поверхность третьего порядка и потом обратно в треугольник отнюдь не такая простая операция. Но именно такие вычисления реализует геометрический движок следующего поколения от ATi (читаем: Radeon II) с помощью технологии TRUEFORM.
Давайте разберемся, как все это работает. Треугольник представляется шестью "кусочками" информации при передаче на графический чип для отрисовки. Это три вершины треугольника и три нормали (перпендикуляра) к этим вершинам. С помощью полученной информации графическая карта создает треугольник (соединяя вершины) и накладывает освещение и тени с помощью нормалей (нормали показывают, как свет должен отражаться от треугольника). Технология TRUFORM делает все совсем по-другому.
Как только информация о треугольнике будет передана процессору (включая данные о вершинах и нормалях), TRUFORM начинает создавать N-патчи (N-Patches), которые формируют сетку N-патчей. Сетка N-патчей - это кривая поверхность, описанная полученной из линейных треугольников информацией. Для создания N-патча над каждой из сторон треугольника помещается две контрольные точки, таким образом, формируется шесть новых вершин (плюс центральная вершина). Две контрольные точки, прилегающие к одной вершине и принадлежащие разным сторонам, находятся на одной плоскости, перпендикулярной нормали. На рисунке ниже контрольная точка b210 принадлежит плоскости, перпендикулярной нормали N1 и находится над стороной P1P2. Контрольные точки размещаются на основе информации, полученной из нормалей.
Схема построения контрольных точек
Давайте попытаемся это объяснить с меньшим использованием математики. Так как нормаль к вершине описывает отражение света от поверхности около этой точки, то она описывает и характер поверхности. Способ отражения света от объекта указывает на его форму и очень эффективно подчеркивает кривизну поверхности. Например, если направить на сферу прямой свет, то он будет сильнее всего отражен в центре, и по мере удаления от центра яркость будет уменьшаться. Если мы увидим подобную картину отражения света, то по ней мы определим, что это сфера, и что она круглая.
Как только полигон будет преобразован в N-патч, создается кривая поверхность из плоских треугольников. В сумме используется 9 смежных треугольников, которые формируют поверхность, очень напоминающую настоящую. Треугольник преобразуется из двумерного вида с координатами x и y в трехмерное представление, с добавлением координаты z. Все это отчетливо видно на иллюстрации ниже.
Преобразование треугольника
Так как все это вычисляется T&L движком, то уменьшения производительности при создании новых поверхностей не происходит.
Как только поверхность превращена в кривую, она разделяется на мелкие треугольники с помощью процесса тесселяции (tesselation). Уровень тесселяции может задаваться как глобально в игре, так и индивидуально для каждого объекта. В последнем случае потребуется доработка игры. В результате этого, количество треугольников (полигонов) значительно увеличивается. Поверхность может разбиваться столько раз, сколько нужно, чем большее число разбиений произойдет (чем больше уровень тесселяции), тем выше будет качество изображения. Оно затем создается с помощью тесселированных из кривой поверхности треугольников благодаря технологии TRUFORM.
Тесселяция поверхности и объекта
Еще раз отметим: так как процесс тесселяции осуществляется T&L частью чипа ATi, то потери в производительности не происходит. Для всего процесса не нужно никакой дополнительной информации об оригинальном треугольнике, кроме той, что стандартно поступает в чип. Поэтому лишней нагрузки на шину памяти также не происходит.
Что же получается в результате использования TRUFORM? В итоге, мы получаем объект, который описывается большим количеством полигонов, чем на самом деле, что приводит к более сглаженным краям объекта, большему количеству деталей и к более реалистичному виду.
Механизм построения полигона
Освещение N-патчей
Как вы помните, N-патч определяется 10 точками, три из них являются вершинами начального треугольника, и семь получаются с помощью технологии TRUFORM. Эти точки являются вершинами отдельных треугольников, однако семь из них не имеют информации о своих нормалях.
Мы уже упоминали, что информация нормали используется затенением по методу Гуро для освещения объекта (сейчас чаще всего используется именно затенение Гуро). Так как три вершины подлинного треугольника отстоят друг от друга на некотором расстоянии, то затенение по Гуро приведет к смешению и очень нереалистичному освещению. Один из выходов состоит в использовании попиксельного затенения, или затенения по методу Фонга, когда расчет освещения производится для каждого пикселя треугольника. Однако использование N-патчей приводит к еще одному способу освещения, более точному по сравнению с методом Гуро.
Для достижения лучших эффектов освещения, TRUFORM создает новые нормали к середине сторон треугольников N-патча. Новая нормаль является полусуммой нормалей к обеим вершинам стороны и находится в плоскости, перпендикулярной стороне. Все это можно проиллюстрировать рисунком ниже.
Получение новой нормали
С помощью нормалей, проведенных к середине сторон, созданных после тесселяции треугольников, достигается более качественный уровень освещения. Только представьте себе: освещение новой поверхности рассчитывается отдельно для каждого маленького треугольника, и выглядит все это лучше чем в случае освещения подлинного большого треугольника. Картина очень напоминает реализацию затенения по Гуро для каждого маленького треугольника, по качеству близкую к уровню затенения Фонга.
Звучит немножко нелепо. Впрочем, нам ведь важен конечный результат, который действительно впечатляет. Персонажи, как видно ниже, выглядят как живые. Обратите внимание, насколько лучше они освещены.
Персонаж до тесселяции
Персонаж после тесселяции
Персонаж из Quake III Arena, обычный рендеринг Персонаж из Quake III Arena, рендеринг с использованием TRUFORM
Персонаж до тесселяции
Персонаж после тесселяции
Персонаж из Quake III Arena, обычный рендеринг Персонаж из Quake III Arena, рендеринг с использованием TRUFORM
Помните лицо в начале статьи? Давайте посмотрим, что же с ним произойдет после использования TRUFORM. Не правда ли, впечатляет, учитывая то, что лицо построено на основе одной и той же информации на обеих картинках.
Лицо до обработки
Лицо без TRUFORM
Лицо с TRUFORM
Лицо, обычный рендеринг Лицо, рендеринг с использованием TRUFORM
Технологию TRUFORM - в жизнь!
Стоит заметить, что технология TRUFORM ни в коей мере не считается исключительным изобретением ATi: она лишь является реализацией технологии N-патчей, включенной в состав Microsoft DirectX 8 и OpenGL. Технология создания N-патчей, как вы уже знаете, позволяет переходить к качественно новому визуальному миру.
С точки зрения программирования, реализация технологии TRUFORM в новой или существующей игре сводится к добавлению одной строчки кода, все остальное выполняется T&L частью чипа ATi. Так как информация о персонажах и сцене не зависит от факта использования TRUFORM, отпадает необходимость в создании новых персонажей или сцен.
Таким образом, применение технологии TRUFORM выглядит весьма привлекательно и не пройдет незамеченным. Так как TRUFORM использует уже существующую в игре информацию, польза от такой технологии будет ощутима во всех 3D играх, которые продаются в данный момент. Это означает, что все то, во что вы сейчас играете, будет лучше выглядеть на карте с технологией TRUFORM.
Сейчас пока что не совсем ясно, как технология TRUFORM будет применяться в существующих играх. Одни считают, что пользователь должен сам определять целесообразность использования TRUFORM, другие полагают, что эту возможность надо оставить на усмотрение разработчика. Если все пойдет так, как мы думаем, то следующее поколение карт ATi предоставит в драйверах возможность как включения TRUFORM, так и определения уровня тесселяции, то есть числа частей, на которые разбивается треугольник. Конечно, существует проблема, что использование TRUFORM на некоторых нежелательных полигонах может привести к появлению визуальных аномалий. Соответственно, если дать необходимые инструменты разработчику, то он может подкорректировать уровень TRUFORM для необходимых объектов. В то же время, возможность изменять настройки со стороны пользователя доставит немного удовольствия, тем более, если визуальные проблемы будут редко встречаться.
Проблемы в TRUFORM
Упоминая визуальные проблемы, ATi заявила, что они нашли способ избавиться от некоторых неприятностей, потенциально возникающих при использовании N-патчей. Так как края объектов сильно сглаживаются, то могли возникать дефекты там, где требуется максимальная четкость, например на пистолете на ремне героя. Для предотвращения такого дефекта, N-патчи не будут использоваться при стыковке плоскостей под углом 90 градусов, когда границы должны быть максимально четкими.
Но можно найти и другие проблемы. Первая - вместо плоского треугольника мы получаем уже выпуклый объект. Сразу подумаем о проблемах, когда из-под одной поверхности полезет другая, которая не должна была бы быть видна в нормальном состоянии.
Вторая проблема в том, что тесселяция значительно подчеркнёт любые геометрические неровности объекта. И там, где раньше грань имела небольшой наклон, теперь будет крутая впадина, или бугор. Это очень серьёзная проблема, от которой просто невозможно избавиться - она и есть в природе тесселяции.
До тесселяцииПосле тесселяции
Для сравнения я привожу две картинки модификации объекта из игры. Слева - до тесселяции, справа - после. И хоть правый объект и выглядит приятнее, посмотрите на артефакт на ступнях солдата. Эти маленькие впадины - результат тесселяции. Такая же картина на боку солдата.
Следующая проблема - размер текстур. Представьте себе, что полигон имеет определённый размер. И под его размер подобрана соответствующая текстура. Тесселяция делает плоский объект более выпуклым, увеличивая площадь его поверхности. То есть, теперь для наложения текстуры, её придётся растянуть. Это не столь важная проблема и я считаю, что ATi найдёт из неё выход.
И последняя, наверное, основная проблема. С помощью драйверов можно сгладить только всю игру целиком. Выбор что нужно сглаживать, а что - нет должны делать создатели игры. А так как тысячи игр уже существуют, патчи выйдут в лучшем случае для сотни, а то и для нескольких десятков. Тоже мне, велико дело - TRUFORM, чтобы под него патч писать. А почему не сглаживать игру целиком? Потому что в игре имеются объекты, которые изначально должны быть плоскими. Например, стены зданий, кое-какое оружие, или даже панель приборов, представляющая плоскую поверхность размером в один полигон с нанесённой текстурой. Такие объекты от сглаживания просто пострадают и заставят отключать TRUFORM в игре. Даже если включить тессяляцию в пропатченной игре для отдельных объектов, то существуют объекты, которые не нужно сглаживать полностью. Например, какой-нибудь кристалл, торчащий из скалы, или компакт-диск, ну или окно, в крайнем случае. То есть, возникнет необходимость выбирать пополигонально - что тесселировать, а что нет. А это настолько кропотливая работа, что патчить игры никто не станет.
Заключение
Тесселяция была известна давно. А идею тесселировать объекты при поступлении данных в чип видеокарты я обсуждал с товарищами ещё задолго до появления GeForce256. ATi замахнулась на репутацию компании, выпускающей видеокарты с наилучшим качеством. Как и любая другая технология, тесселяция требует очень грамотного подхода. Одно неверное движение - и про эту технологию в чипах ATi никто и не вспомнит, также как и не вспомнили про многие другие технологии, реализованные в других графических чипсетах. И именно поэтому я хочу посмотреть на TRUFORM не как на инструмент повышения популярности компании ATi и её продуктов, а как на ещё один шаг к созданию компьютерной графики в реальном времени с качеством Toy Story. Технология TRUFORM преобразует полигоны в N-патчи. Это шаг к преобразованию полигональной модели в модель, построенную из кривых. Возможно, уже скоро мы услышим о такой технологии, и это ознаменует совместимость двух принципиально разных методов построения 3Dобъектов. Возможно, этого и не произойдёт и мы до конца света будем лицезреть объекты, построенные из треугольников, пусть даже из миллионов треугольников.
Однако есть еще некоторые события, которые должны произойти перед выпуском TRUFORM. Во-первых, ATi необходимо будет обеспечить поддержку разработчиков. Если просто указать, что такая функция поддерживается DirectX 8 и OpenGL, то этого будет мало, так как тогда никто не будет программировать с учетом использования технологии TRUFORM, и ее преимущества будут довольно ограничены. Конечно, технология будет хорошо смотреться в играх, но гораздо приятнее будет увидеть игру, которая разрабатывалась с опорой на технологию TRUFORM. ATi убеждает нас, что разработчики с энтузиазмом встретят новейшую технологию. Но нам, скорее всего, придется еще подождать некоторое время, прежде чем мы сможем оценить ее применение в новых играх.
Впрочем, самое лучшее в технологии TRUFORM, это то, что ее использование никак не повлияет на производительность. Фактически, мы, наконец, предоставим движку T&L выполнять то, для чего он и был предназначен: трансформацию и освещение. Добавьте к этому визуальное улучшение качества, и почувствуйте как все это прекрасно. Хотя вычисления сложны, и технологию иногда трудно понять с первого раза, но вы должны уяснить, что TRUFORM предоставляет возможность улучшить качество изображения без ущерба производительности. А не это ли нам важно?
перевод с английского: Дмитрий Чеканов [3DNews]
06/06.2001
исправлено и дополнено: LIKE OFF
15/06.2001