И первым таким производителем, сделавшим ставку на улучшение изображения, а не на fps, стала nVidia с ее GeForce3. Безусловно, GeForce3 все же быстрее предыдущих продуктов, но разница в производительности между GeForce2 Ultra и GeForce3 не такая большая, как между TNT2 Ultra и GeForce DDR. Поэтому nVidia пришлось перейти от частоты кадров к качеству изображения, тем более выпуск DX8 и последующих высококлассных игр предоставляют прекрасную возможность для этого.
Технологии по улучшению качества изображения, которые были использованы в GeForce3, уже давно у всех на устах. Попиксельное затенение и сглаживание Quincunx предоставляют будущим играм возможность улучшить картинку без ущерба скорости.
По всей видимости, с выпуском GeForce3 nVidia пытается доказать, что видеокарта это нечто большее, чем просто максимальное количество кадров в секунду.
Спустя три месяца после официального выпуска GeForce3, мы попытаемся взглянуть на то, как ATi пытается улучшить качество изображения в своих будущих продуктах. Скорее всего, "чип следующего поколения" (нам кажется, что лучший кандидат на эту роль - Radeon II) будет использовать технологию, радикально меняющую качество изображения не только в новых, но и в уже существующих играх. Имя ей - TRUFORM.
Необходимая полезная информация
Для того, чтобы нам лучше понять роль технологии TRUFORM в трехмерных играх, давайте взглянем на процесс дизайна и рендеринга современных игр.
Игровые 3D сцены, персонажи и объекты формируются из полигонов, которые состоят из треугольников. Для примера, представьте себе пирамиду с квадратным основанием. Она создана из смежных треугольников и основания, в ней каждая сторона представляет собой один большой треугольник, а основание составлено из четырех треугольников.
Другие объекты создаются точно таким же способом, смежные треугольники создают вместе более сложные формы, что и показано ниже.
В примере с нашей пирамидой нужно использовать не меньше и не больше восьми треугольников для создания формы. Меньшее количество треугольников не создадут требуемой формы, а большее количество никак не повлияет на вид. С другой стороны, в более сложных геометрических конструкциях разница между минимально требуемым и большим количеством полигонов уже явно заметна.
Для иллюстрации наших слов составим сферу из восьми смежных треугольников. Они создают некое подобие сферического объекта, который на самом деле состоит из двух пирамид, соединенных основаниями. Повышая число треугольников, или сегментов сферы, мы придаем объекту более реалистичный вид, так как в окружающем нас мире сфера может быть представлена только бесконечным количеством полигонов.
Сфера из четырех сегментов. Треугольники слишком велики для создания формы сферы |
12-сегментная сфера. Все еще видны грани, пятно света имеет неправильную форму |
100-сегментная сфера. Обратите внимание на реалистичный вид и правильное световое пятно. |
Как вы можете легко заметить, повышение числа полигонов сферы улучшает реализм, преобразуя фигуру от двух соединенных основаниями пирамид до 100-сегментной, почти правильной сферы.
Все сказанное выше относится не только к сферам, но и к более сложным структурам, например к персонажу в игре. Когда разработчики и художники совместно работают над созданием игровых персонажей, сцен и объектов, они должны постоянно учитывать, из какого количества треугольников (или полигонов) будет состоять сцена. Чем больше будет число полигонов на сцене, тем большую работу будет выполнять видеокарта по отрисовке, трансформации и освещению сцены. Увеличенное число полигонов требует повышенной пропускной способности для передачи треугольников на графический чип и увеличенное количество памяти для хранения всех этих треугольников. Добавьте к этому тот факт, что графический чип может обрабатывать ограниченное число треугольников за такт.
Художник должен соблюдать баланс между числом треугольников, описывающих сцену, и ее визуальным качеством. Однако еще раз отметим, что для идеально реалистичного представления сцены необходимо использовать бесконечное число треугольников, однако это не представляется возможным. Игры должны выпускаться с учетом оборудования, на котором они будут работать. Причем для успешной продажи игра должна запускаться не только на самых мощных системах, поэтому большинство игр значительно ограничивают количество используемых на сцене полигонов. Например, в Quake III Arena в среднем в сцене используется 10 000 полигонов.
Мы приходим к тому, что количество полигонов нужно бы увеличить для лучшего восприятия игры, но аппаратные границы сдерживают замыслы художников. Если мы все же постараемся улучшить качество игры, то логичным решением будет увеличение количества полигонов (или треугольников). Однако существуют и другие способы.
Большая детализация с помощью кривых поверхностей
Один из способов был недавно реализован благодаря использованию кривых поверхностей. С помощью него уже была создана потрясающая компьютерная графика в таких фильмах, как "Игрушечная история 2" (Toy Story 2), "Жизнь жуков" (Bug's Life) и в ожидающемся "Последняя фантазия" (Final Fantasy). Возможность создания реалистичной графики обеспечивается тем, что построенные из двумерных линейных полигонов 3D изображения создают впечатление "блочности", которое отсутствует при прорисовке форм кривыми поверхностями третьего порядка.
Для того чтобы отрисованные в реальном времени сцены компьютерных игр выглядели подобно компьютерным фильмам, необходима поддержка кривых поверхностей со стороны видеокарты. Теоретически, художники могут нарисовать сцены и объекты из кривых поверхностей, но проблема заключается совсем не в этом, а в том, что их нужно будет отобразить на вашем домашнем компьютере.
Все графические карты, используемые в домашних компьютерах, разработаны с учетом прорисовки наборов полигонов, а не кривых поверхностей. Так как два этих формата несовместимы, то любая игра, основанная на кривых поверхностях, не будет работать на видеокарте с прорисовкой полигонов. Также верно и обратное: обычные полигональные игры не смогут использовать карты с прорисовкой кривых поверхностей, то есть с такой картой вы не сможете поиграть сейчас ни в одну игру.
Решение проблемы нашли в 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 ни в коей мере не считается исключительным изобретением ATi: она лишь является реализацией технологии N-патчей, включенной в состав Microsoft DirectX 8 и OpenGL. Технология создания N-патчей, как вы уже знаете, позволяет переходить к качественно новому визуальному миру.
С точки зрения программирования, реализация технологии TRUFORM в новой или существующей игре сводится к добавлению одной строчки кода, все остальное выполняется T&L частью чипа ATi. Так как информация о персонажах и сцене не зависит от факта использования TRUFORM, отпадает необходимость в создании новых персонажей или сцен.
Таким образом, применение технологии TRUFORM выглядит весьма привлекательно и не пройдет незамеченным. Так как TRUFORM использует уже существующую в игре информацию, польза от такой технологии будет ощутима во всех 3D играх, которые продаются в данный момент. Это означает, что все то, во что вы сейчас играете, будет лучше выглядеть на карте с технологией TRUFORM.
Сейчас пока что не совсем ясно, как технология TRUFORM будет применяться в существующих играх. Одни считают, что пользователь должен сам определять целесообразность использования TRUFORM, другие полагают, что эту возможность надо оставить на усмотрение разработчика. Если все пойдет так, как мы думаем, то следующее поколение карт ATi предоставит в драйверах возможность как включения TRUFORM, так и определения уровня тесселяции, то есть числа частей, на которые разбивается треугольник. Конечно, существует проблема, что использование TRUFORM на некоторых нежелательных полигонах может привести к появлению визуальных аномалий. Соответственно, если дать необходимые инструменты разработчику, то он может подкорректировать уровень TRUFORM для необходимых объектов. В то же время, возможность изменять настройки со стороны пользователя доставит немного удовольствия, тем более, если визуальные проблемы будут редко встречаться.
Упоминая визуальные проблемы, ATi заявила, что они нашли способ избавиться от некоторых неприятностей, потенциально возникающих при использовании N-патчей. Так как края объектов сильно сглаживаются, то могли возникать дефекты там, где требуется максимальная четкость, например на пистолете на ремне героя. Для предотвращения такого дефекта, N-патчи не будут использоваться при стыковке плоскостей под углом 90 градусов, когда границы должны быть максимально четкими.
Заключение
Итак, технология ATi TRUFORM несет потенциал улучшения качества изображения в будущих и уже существующих играх без ущерба производительности. Похоже на чудо? Будем надеяться, что так оно и будет.
Однако есть еще некоторые события, которые должны произойти перед выпуском TRUFORM. Во-первых, ATi необходимо будет обеспечить поддержку разработчиков. Если просто указать, что такая функция поддерживается DirectX 8 и OpenGL, то этого будет мало, так как тогда никто не будет программировать с учетом использования технологии TRUFORM, и ее преимущества будут довольно ограничены. Конечно, технология будет хорошо смотреться в играх, но гораздо приятнее будет увидеть игру, которая разрабатывалась с опорой на технологию TRUFORM. ATi убеждает нас, что разработчики с энтузиазмом встретят новейшую технологию. Но нам, скорее всего, придется еще подождать некоторое время, прежде чем мы сможем оценить ее применение в новых играх.
Во-вторых, обратимся к использованию технологии в старых играх. Либо разработчик игры должен выпустить патч для правильного использования технологии (помните, что это всего лишь одна строчка в коде), либо в драйверах должны появиться соответствующие настройки. Скорее всего, нам будет предоставлено последнее, и пользователи смогут сами контролировать использование TRUFORM. Как мы полагаем, многие с этим согласятся.
Остается надеяться, что ATi даст нам такую возможность, и что проблемы визуализации объектов с использованием TRUFORM окажутся не столь заметными.
Впрочем, самое лучшее в технологии TRUFORM, это то, что ее использование никак не повлияет на производительность. Фактически, мы, наконец, предоставим движку T&L выполнять то, для чего он и был предназначен: трансформацию и освещение. Добавьте к этому визуальное улучшение качества, и почувствуйте как все это прекрасно. Хотя вычисления сложны, и технологию иногда трудно понять с первого раза, но вы должны уяснить, что TRUFORM предоставляет возможность улучшить качество изображения без ущерба производительности. А не это ли нам важно?
Дополнение
Flash inc. Alex Raider
mailto:flashinc@mail.ru
--------------------------------------------------
Дмитрий,
Я много лет интересуюсь и работаю с программированием 3d графики. Уже довольно давно и с усмешкой отслеживаю все последние "передовые" технологии фирм ATI, Nvidia и проч. тому подобных комерческих фирм. В действительности, это все реклама, коммерция. Никаких передовых технологий у этих фирм нет, и вы это хорошо понимаете.
Все то что сейчас, в 2001 году кое-как появляется на видеочипах PC, давно работает в компьютерах Silicon Graphics и даже в видео-консолях, которые на годы опережают PC. Другое дело, что по этому поводу поднимается невероятный шум! Не секрет, что ATI из-за неверной политики отстала от бывшей 3dfx и Nvidia. И теперь пытается хоть как-то наверстать упущеное. Совершенно смешно наблюдать как простейшая геометрическая интерполяция вершинной сетки превращается в Ati truform!
Интерполяция освещенности по методу гуро дает неверный результат, потому что сам способ неверный, следует интерполировать нормаль к поверхности, а не значения освещенности. Также известно, что увеличивая полигонизацию поверхности, можно добиться результатов сходных с освещением по фонгу, поскольку тогда из-за увеличивающегося числа треугольников для поверхности происходит перерасчет нормалей и как следствие, более верный результат. Доведя разбивку поверхности до 1 полигон/пиксел мы получим заливку фонга.
Ati следовало бы надеть очки и вылечить свою близорукость, многие Demo с 94 года программно используют самый настоящий фонг, а не гуро. Хитро, с ограничениями, но фонг. Семь лет уже используется освещение по фонгу. Так что, вероятно, мы еще услышим много
"новых" технологий под самыми экзотическими названиями. :)
Теперь про "улучшение качества картинки". Консоль Nintendo64 выпуска 1996 года (еще три года разработки) обеспечивает феноменальное качество картинки. На первый взгляд, это разрешение 800x600 или около того. АБСОЛЮТНО не заметно никаких артефактов алиасинга текстур, граней итп. И совершенно уж шокирует то, что на самом-то деле, мы видим... 320x240 пикселей. Вот так-то. Феноменально? Неправда ли?
Это результат трилинейной мипмэп-интерполяции текстур (интерполяция не только между текстурой, но и между мипмэп-текстурами), это антиалиасинг ребер полигонов, это полноэкранный антиалиасинг (интерполяция) всего кадра, когда 320x240 растягивается в разрешение NTSC или PAL. Это гуро-освещение, восемь источников цвета и мульти-текстурирование. Это векторный процессор производительностью 0,5GFlop.... Это 1995 год.. :)
Поэтому, нужно отделять зерна от плевел и трезво смотреть на все новомодные технологии. Кстати, я совсем недавно узнал - а вы в курсе, что NVidia образована из нескольких бывших инженеров Silicon Graphics ?
Под конец, в статье странное допущение - "Для примера, представьте себе пирамиду с квадратным основанием" ... "В примере с нашей пирамидой нужно использовать не меньше и не больше восьми треугольников для создания формы. Меньшее количество треугольников не создадут требуемой формы, а большее количество никак не повлияет на вид"
Но пирамиду с квадратным основанием можно составить из 6 треугольников. Достаточно квадрат лежащий в основании составить из двух треугольников.