TRUFORM™ FAQ

Игорь Лагунов (Buntar)

31.07.2001

 

 

Мы представляем вам FAQ по TRUFORM™, которое является переводом, взятым с сайта ATi Technologies. Не судите строго за возможные неточности. В дальнейшем мы постараемся дополнить его своими замечаниями и комментариями.

 

 

Что такое TRUFORM™?

TRUFORM™ - это технология, разработанная ATI, которая делает возможным создание поверхностей более высокого порядка через традиционные 3D API. В DirectX 8.0 эти поверхности работают через N-Patches. К OpenGL они обращаются как PN Triangles и доступны через расширение ATI_pn_triangles.
Подробности смотрите в TRUFORM White Paper

 

Существуют ли другие материалы по этой теме?

ATI недавно участвовала в написании материала по этой технологии вместе с исследователями из University of Florida и Microsoft. Этот материал (Curved PN Triangles) был представлен на ACM Symposium on Interactive 3D Graphics в Марте 2001.

 

Почему разработчикам желательно использовать TRUFORM™ в своих новых играх?

Когда игра использует TRUFORM™ для тесселяции геометрии, объекты имеют гладкие органические формы, улучшаются силуэты и освещение. Это особенно важно для персонажей, чьи блочные, неестественные формы так часто снижают реалистичность событий в игре. TRUFORM™ уникален в том, что передаваемые им данные и входные команды для API сходны как при использовании технологии, так и без нее. Это означает, что любые приложения, использующие TRUFORM™, обратно совместимы с чипами, которые не поддерживают поверхности более высокого порядка (т.e. все предыдущие поколения чипов). Модели требуют совсем небольшую дополнительную доработку, чтобы лучше выглядеть с использованием TRUFORM™. Это верно даже для уже законченной и выпущенной игры. Эта лёгкость интеграции была одной из фундаментальных задач при создании TRUFORM™.

 

Что нужно для того, чтобы начать использование TRUFORM™ в играх?

По времени, которое вам придется потратить на написание кода, TRUFORM™ одна из лучших функций, которые вы когда-либо интегрировали в ваш движок. Она разрабатывалась такой с самого начала. Три базовых шага к использованию TRUFORM™ в вашей игре:

  • Подготовка сцены (Art Preparation)
  • Создание/заполнение вершинного буфера (Vertex Buffer)
  • Рендеринг

Подготовка сцены включает создание базирующейся на треугольниках сцены, в которой все полигоны располагаются в нужных местах. Края (edges) тех моделей, которые должны иметь четкие края (hard edges), сделанные с помощью MAX'овских smoothing groups, например, вы должны заменить изогнутыми (crease) полигонами. ATi имеет программы: MAX previewer и sample exporter (с standalone viewer), с помощью которых вы можете видеть, как это будет выглядеть. Вы можете найти их на сайте ATI в разделе TRUFORM™ resources.

Создание и заполнение вершинного буфера включает создание координат и нормали для API (Direct3D или OpenGL). Это необходимо для TRUFORM™. После того, как контрольное значение Безье извлечено из координаты и нормали, информация ассоциируется с каждым полигоном. В случаях, когда вы расчитываете освещение в приложении, не используя для этого 3D API, вы не можете передавать нормали для API. Вы должны передавать нормали для API, когда используется TRUFORM™. Освещение, карты окружения (environment mapping) и т.д. на всех вершинах, включая сгенерированные в чипе TRUFORM™ тесселератором, должны рассчитываться аппаратно. В Direct3D вы будете использовать или гибкий вершинный формат (FVF), или потоковый декларатор (stream declarator) (первый параметр CreateVertexShader()) для заполнения вершинных буферов и вершинных потоков (vertex streams). Когда используется stream declarator, необходимо использовать подходящие знаки D3DVSDE_POSITION и D3DVSDE_NORMAL, когда определяется каждая компонента вашей вершины (координата и нормаль). Ваши вершинные структуры не должны изменяться; вы только должны определить, где находятся координаты и нормали. Ограничений на тип данных нет. Например, традиционно используется float triples (D3DVSDT_FLOAT3) для нормалей, но можно использовать D3DVSDT_SHORT4 - все будет работать нормально.

Рендеринг подразумевает включение TRUFORM™ и вывод ваших моделей. В Direct3D это означает, что пока вершинные буферы созданы с флагом D3DUSAGE_NPATCHES и вершинный буфер имеет координаты и нормали, вы можете выводить DrawPrimitive() с обычными входными данными и, устанавливая D3DRS_PATCHSEGMENTS контролировать степень тесселяции. Установка D3DRS_PATCHSEGMENTS в 1 означает выключение тесселяции, т.к. каждый треугольник имеет один сегмент по умолчанию. Установка D3DRS_PATCHSEGMENTS в 2 означает, что треугольник имеет два сегмента относительно оригинальной стороны (или одну новую вершину относительно оригинальной стороны), которые результируются в 4 треугольниках относительно оригинального. В OpenGL используется следующий код: glPNTrianglesiATIX (PN_TRIANGLES_TESSELATION_LEVEL_ATIX, tessLevel). В OpenGL степень тесселяции зависит от количества новых вершин, добавленных к стороне оригинального треугольника. По этой схеме level 0 означает no tessellation, level 1 устанавливает генерацию четырёх треугольников из оригинального и так далее. Также помните, что OpenGL также имеет явный gl{En|Dis} (PN_TRIANGLES_ATIX) для включения и выключения тесселяции.

Если ваши модели подготовлены для TRUFORM™ тесселяции, но до этого использовалась программная модель освещения или программный метод создания карт окружения, то это невозможно выразить в API с фиксированными функциями. В этом случае вы должны использовать аппаратный вершинный шейдер для освещения на всех вершинах после тесселяции. Это позволит использовать данные эффекты на всех вершинах, полученных от TRUFORM™ тесселератора. В DirectX 8.0 N-Patches были выставлены через D3DRS_PATCHSEGMENTS. Пока вы создаёте вершинный буфер, используя флаг D3DUSAGE_NPATCHES, и вершинный буфер имеет координаты и нормали, вы можете выводить DrawPrimitive() с обычными входными данными. По умолчанию вы будете видеть кубическую интерполяцию координат и линейную интерполяцию нормалей.

 

Могу ли я контролировать последовательность TRUFORM™ тесселяции?

TRUFORM™ поддерживает линейную или кубическую интерполяцию координат и линейную или квадратную интерполяцию нормалей. В DirectX 8.0 было тяжело связывать кубическую координату и линейные нормали. В DirectX 8.1 предусмотрен больший контроль над последовательностью интерполяции координат и нормалей у сгенерированных вершин. Новые команды D3DRS_POSITIONORDER и D3DRS_NORMALORDER контролируют последовательность интерполяции. Последовательность интерполяции вершин может быть установлена либо D3DORDER_LINEAR, либо D3DORDER_CUBIC. Последовательность интерполяции нормалей может быть установлена либо D3DORDER_LINEAR, либо D3DORDER_QUADRATIC. В OpenGL используется следующий код: glPNTrianglesiATIX (PN_TRIANGLES_POINT_MODE_ATIX, PN_TRIANGLES_POINT_MODE_{LINEAR|CUBIC}_ATIX).

 

Могу ли я использовать TRUFORM™ как расширение существующих LOD методов?

TRUFORM™ разработан для правильной работы с собственными LOD методами приложений. Мы считаем, что TRUFORM™ означает улучшение LOD моделей за пределы установленные приложением.

 

Как мне создать сцену для TRUFORM™?

TRUFORM™ требует только треугольник, ваш конвейер построения сцены нуждается в совсем небольшой модификации. Как написано выше, существует 3DS MAX plug-in, который позволит предпросматривать ваши сцены с TRUFORM™ тесселяцией прямо в MAX viewport, даже без закрытия утилиты.

 

Я слышал, что TRUFORM™ не совместим со skinning. Это правда?

Если быть точным, то "поверхности более высокого порядка (higher order surfaces) не совместимы с matrix palette skinning. Любой, кто пытается использовать higher order surfaces совместно с matrix palette skinning, создаёт огромную нагрузку на CPU, таким образом, сводя на нет все достоинства аппаратных higher-order surfaces. ATI TRUFORM™ выполняется полностью в кремнии. Поэтому matrix palette индекс не может быть интерполирован через полигон любым выразительным путём и индексировать в matrix palette новые сгенерированные вершины невозможно. Это делает higher-order surfaces и matrix palette skinning несовместимыми. Тем не менее возможно использовать традиционные 4 (или больше) matrix skinning с прямым скелетом. Минус этого в том, что модель должна быть разбита на фрагменты и рендерится в несколько вызовов API. На практике, тем не менее, такое разделение персонажа на куски сопровождается большим падением производительности, чем надеялись многие разработчики игр.

 

Как сильно использование TRUFORM™ влияет на производительность?

Чаще всего графический чип ограничен филлрейтом или пропускной способностью памяти. Это означает, что чип может переработать больше геометрии, чем вы предполагаете. Но системы памяти не могут полностью обеспечить геометрический процессор данными. Одной из важнейших задач при создании TRUFORM™ было лишить геометрический процессор ограничений, накладываемых пропускной способностью памяти. Таким образом, можно считать, что использование поверхностей высокого порядка - это форма геометрической компрессии. По сравнению с используемой сейчас низкополигональной геометрией, чип с аппаратным расчетом TRUFORM™ слабо загружает шину памяти, увеличивая детализацию геометрии с помощью TRUFORM™ тесселяции до vertex shading. Результат этого вы можете видеть в отсутствии влияния на производительность при использовании TRUFORM™ тесселяции, если вы не будете в первую очередь ограничены мощностью геометрического процессора.

 


 

 

 

Редакция:
Руслан Копытов (Rustan73)

Вёрстка:
Александр Ефимов (IdeaFix)

На главную страницу

Главная | Справочник | FAQ | Статьи | Загрузки | Контакты | Конференция

Логотипы, торговые марки и прочие зарегистрированные знаки принадлежат их правообладателям.
Copyright © 2001 - 2017, Radeon.ru Team.
Перепечатка материалов запрещена.

Рейтинг@Mail.ru Rambler's Top100