Практическое тестирование видеокарт в 3ds max

Что тестируем


Предлагаемое Вашему вниманию тестирование вовсе не преследует своей целью всестороннее и углубленное исследование количественных показателей аппаратных технологий современных видеокарт. В данном случае Вашему вниманию предлагается сугубо прагматический подход к тестированию – попытаться выяснить, насколько эти технологии полезны в практической повседневной работе «трехмерщика» – человека, работающего c 3d постоянно. Проще говоря, меня не интересует, как работает видеокарта. Меня интересует, чем она может быть мне полезна в работе.
Отсюда вытекает вполне логичный вопрос – какие функции возлагают на видеокарту современные пакеты трехмерного моделирования и анимации? В принципе, можно выделить три основные области деятельности трехмерщика. Первая – создание анимации и спецэффектов для кино/телевидения. Второе – разработка статических не анимированных изображений (still) для использования в «плоском» двумерном дизайне (иллюстрации, реклама, полиграфия и т.п.). Третье – разработка игр и интерактивных проектов. Применение видеокарт в рамках первых двух задач ограничивается только разработкой трехмерных моделей и текстурированием. Все остальные расчеты, и, прежде всего – рендеринг, возлагаются на центральный процессор (на многопроцессорные системы, кластеры и rendering farms). Разработка игр кажется более интересной в плане открывающихся для использования возможностей видеокарт – это и тени, и прозрачность, и отражения, и несколько текстур на объект, и аппаратные шейдеры... Но. Существует очень большое НО. Использование для отображения в этих задачах соответствующих аппаратных функций видеокарт сегодня совершенно не востребовано пакетами трехмерного моделирования. Впрочем, есть CgFX, встроенный в 3ds max-Maya-Softimage, но это отдельная история. Рассматривать этот вопрос сейчас мы не будем по той простой причине, что шейдеры на этом языке аппаратно зависимы – могут выполняться только на видеокартах NVIDIA, соответственно и тестирование тогда бы пришлось ограничить только этими видеокартами, что неинтересно.
Так собственно, что же остается. Фактически, 3d-пакеты в лучшем случае используют только функцию ускорения отображения преобразования (трансформаций) моделей в своих видовых окнах – масштабирование видов, прокрутка видов, вращение видов. И это все. Значит, это и будем тестировать, то есть – скорость отображения трансформаций видов (viewports) видеокартами. Здесь и далее под трехмерными моделями подразумеваются полигонные модели, состоящие из вершин, ребер, граней. История с аппаратной поддержкой криволинейных объектов как nVIDIA, так и ATI настолько запутана, что возникают серьезные сомнения в их практической ценности и, как следствие, – в необходимости их тестирования. Может, как-нибудь потом...
Итак, формулируем задачу. Предлагаемое тестирование производительности видеокарт ставит своей целью измерение скорости трансформаций видов трехмерных сцен в видовых окнах пакетов трехмерного моделирования и анимации в двух различных режимах отображения – каркасном (wireframe) и с наложением одной текстуры на объект (поскольку отображение в видовых окнах большего количества текстур не поддерживается). Утешает то, что при разработке модели видовые трансформации являются очень важной составляющей производственного процесса.
За расчет трансформаций и пусть простейшей, но все же – освещенности, в старых видеокартах отвечал так называемый блок T&L (transform and lightning). В современных видеокартах такие расчеты стали задачей программируемых вершинных и пиксельных конвейеров видеокарт. Существенна ли эта разница? Ну... давайте посмотрим.

Где тестируем


А тестировать мы будем только в 3ds max. Почему? Во-первых, это чуть ли не единственный пакет, где аппаратное ускорение расчета трансформаций хоть как-то востребовано. И Maya, и LightWave, и Softimage используют для этой цели преимущественно центральный процессор и только OpenGL. Во-вторых, 3ds max – единственная программа, позволяющая выбрать, с каким API работать – OpenGL или DirectX. Это очень существенно, поскольку, как покажет дальнейшее тестирование, производительность видеокарт в разных API очень сильно отличается. Ну и, в-третьих, 3ds max – самый распространенный пакет моделирования. Впрочем, хочу восстановить справедливость в отношении Alias|Wavefront Maya. В последней, пятой ее версии появилась очень интересная возможность – «аппаратный» (цитата из руководства пользователя Maya) рендер трехмерных сцен. Пока имеется очень мало информации об этой возможности. Только то, что утверждают сами разработчики Maya – в этом режиме рендеринга изображение трехмерной сцены рассчитывается сугубо аппаратными средствами видеокарт. Хорошая тема для еще одного тестирования :).
Когда готовился этот материал, discreet начала продажи шестой версии 3ds max. Среди новых возможностей этого релиза есть прямой экспорт из файлов шейдеров DirectX 9 (.fx) в редактор материалов. То есть, в 3ds max 6 можно работать с аппаратными шейдерами как с обычными (или почти обычными) материалами. При этом, по-видимому, не будет иметь значения, какая видеокарта установлена в системе – в силу аппаратной независимости формата fx, шейдеры должны обрабатываться любой DX9-совместимой видеокартой. Таким образом, в шестой версии появилась возможность сравнения производительности отображения одних и тех же аппаратных шейдеров видеокартами от различных разработчиков, вне зависимости от того, как эти шейдеры были разработаны – при помощи nVIDIA CgFX, ATI Rendermonkey или как-либо еще. Если это предположение подтвердится, то в будущем тестирование видеокарт в 3ds max обязательно будет дополнено результатами сравнения производительности и качества отображения аппаратных шейдеров.

Как тестируем


Методика тестирования описана вот в этой статье, и всех интересующихся подробностями я переадресовываю к ней. Здесь же скажу только, что тестирование основано на использовании небольшой и очень простой по сути программы, написанной на скриптовом языке 3ds max. Скрипт имитирует в цикле три основных типа трансформаций в видовых окнах – вращение, прокрутку и масштабирование. Трехмерная модель может быть любая, важно только, чтобы она состояла из большого количества полигонов (100 тысяч и более), а цикл трансформаций – длинным (100 трансформаций и более). В принципе, можно просто «руками» крутить модель в окне и использовать программку, измеряющую fps (например, fraps). Но это ведь не научный метод, не правда ли? Несколько слов о корректности полученных результатов. К сожалению, программный механизм обработки трансформаций в видовом окне 3ds max почти не имеет поддержки аналогичными по назначению командами скриптового языка. Отсутствуют в max’е и какие-либо средства анимации трансформаций видов. Поэтому, речь может идти только об имитации механизма трансформаций, точнее – о воспроизведении алгоритма трансформаций имеющимися командами скриптового языка. Тем не менее, на основе результатов практических испытаний возьму на себя смелость утверждать, что результаты работы скрипта довольно точно соответствуют действительности.
Для этого тестирования используются две модели. Первая – сфера с одной текстурой, призвана обеспечить идеальные условия для выявления максимальной производительности видеокарты в 3ds max, поскольку трудно придумать что-либо проще сферы. Простая геометрия, упорядоченность цепочек треугольников, минимум отсечения и перекрывающихся полигонов...




Рис. 1 Сфера. Каркасный и текстурированный вид

В качестве второго тестового объекта была выбрана трехмерная модель автомобиля с довольно сложной геометрией, как максимально приближенный прототип реальных проектов, с которыми приходится иметь дело на практике. Хаос полигонов и масса взаимных перекрытий – вполне «клинический» случай. В видовых окнах 3ds max для «чистоты эксперимента» полностью отключалось отображение прозрачности для стекол (в значение none – «отключено»).




Рис. 2 Mercedes 600

Идея должна быть понятна – результаты тестирования должны показать спектр значений производительности – от максимальных для самого простого «идеального» случая до наиболее вероятных «реальных». Тестирование также проводилось в условиях освещения одним простым источником света типа «omni» – тестировать с большим количеством источников в видовом окне трехмерной сцены, на мой взгляд, непрактично. Зачем разрабатываемую каркасную полигонную модель освещать восемью источниками света в режиме отображения видового окна wireframe?

Результаты тестирования и их анализ


Тестовая система:

процессор Intel Pentium 2,4 ГГц (Northwood) c включенным HT и 800 МГц системной шиной;
материнская плата GA-8IPE1000MK (Intel 865PE);
1 Гб (2х512) 400 МГц DDR SDRAM;
Seagate Barracuda IV 80 Гб;
операционная система Windows XP Pro SP1.

В тестах использовались следующие версии драйверов видеокарт: детонатор wXP 45.23 для видеокарт nVIDIA и Catalist 3.8 для видеокарт ATI. Все установки драйверов выставлялись на максимальную производительность с отключением вертикальной синхронизации, анизотропной фильтрации и сглаживания.
Основное тестирование проводилось в 3ds max 5.1 с установленным SP 1, позволяющим видеокартам работать в API DerectX 9.


Сначала, для получения «чистой» производительности аппаратного (вершинного и пиксельного) конвейера видеокарт была использована тестовая программа Geometry Processing Speed. Эта тестовая программа работает с «железом» видеокарт «напрямую» в режиме командной строки и измеряет скорость расчетов геометрических трансформаций при различных моделях освещения неких трехмерных объектов в почти идеальных условиях – использование других подсистем видеокарты в этом тесте минимизировано. В тесте, если это допускает архитектура видеокарты, задействуются поочередно аппаратный T&L, вершинные и пиксельные шейдеры различных версий, эмулирующие T&L. Результаты выводятся как в fps, так и в количестве обрабатываемых полигонов в секунду – pps (poligon per second). Во всех тестах я брал максимальное значение pps. Сделано это с единственной целью – сравнить полученные практическим тестированием значения идеальной производительности аппаратного конвейера видеокарт с теми же значениями, заявленными разработчиками и с полученными результатами тестирования в 3ds max, тем более что идеология тестирования в 3ds max идентична.

Таблица 1. Результаты тестов аппаратного конвейера видеокарт. В правой колонке таблицы указаны значения производительности, заявленные разработчиком:


*При сравнении результатов этой таблицы следует иметь в виду, что для любого трехмерного объекта соотношение количества вершин/полигонов составляет от 1:1 (довольно редкий случай) до 1:2 (вполне обычный, статистически наиболее часто встречающийся случай).

Графическое представление результатов измеренной «чистой» производительности видеокарт приведенной в Таблице 1:


В общем – обычное дело: практическая и теоретическая производительность довольно существенно различаются. В целом, nVIDIA ближе к заявленным значениям, зато ATI – быстрее. Несколько удивляет превосходство 9600 PRO над 9800 и GeForce FX 5900.
Напомню, что Radeon 9800 имеет 4 геометрических конвейера, 8 – пиксельных, pixel fillrate – 2.6 Gpixels/sec; Radeon 9600 PRO – 2 геом. конвейера и 4 пиксельных, pixel fillrate – 1.6 Gpixels/sec.

Тесты в 3ds max

Тест 1: Трансформация видового окна со сферой в каркасном режиме (wireframe):


Графическое представление результатов Теста 1:


Анализ результатов:

Хочу подчеркнуть, что при расчете отображения в режиме wireframe задействованы в основном вершинные конвейеры видеокарт или аппаратный T&L, пиксельные конвейеры в этих расчетах участия почти не принимают.

  1. Картина динамики производительности видеокарт идентична предыдущему тесту – ATI Radeon 9600 при использовании API DirectX превосходит Radeon 9800 (как и GF FX 5900). Конечно, геометрические конвейеры и память Radeon 9600 работают на более высокой частоте, но это не проясняет ситуацию, поскольку их вдвое меньше, чем у Radeon 9800 (2 против 4).
  2. Просто режет глаза огромный разрыв производительности видеокарт ATI в DirectX и OpenGL.
  3. Карты ATI быстрее. Их производительность в OpenGL сопоставима с производительностью видеокарт nVIDIA, зато в DirectX они вне всякой конкуренции. Radeon 9200 не работает с DX9, поэтому результаты тестирования для этого API не приводятся. В OpenGL Radeon 9200 уступает GF FX 5200 почти вдвое.


Тест 2: Трансформация видового окна со сферой с отображением текстур (smooth& highlight):


Графическое представление результатов Теста 2:


Анализ:

  1. Теперь ATI Radeon 9800 быстрее 9600 PRO в DirectX. Но, как известно, в режиме расчета отображения с наложением текстур на объект главную роль играют пиксельные конвейеры. Так что в данном случае мы видим производительность другой подсистемы видеокарт – пиксельных конвейеров.
  2. ATI по-прежнему существенно опережает nVIDIA в DirectX, зато в OpenGL явный провал.
  3. Видеокарты GeForce демонстрируют более высокие и стабильные результаты в OpenGL, чем Radeon’ы.


Тест 3: Трансформация видового окна с автомобилем в каркасном режиме (wireframe):


Графическое представление результатов Теста 3:


Анализ:

  1. Тесты с реальной моделью несколько изменили общую картину. Режим OpenGL теперь стал производительнее DirectX для GeForce, но не для видеокарт ATI, хотя и для них разрыв с DirectX уменьшился.
  2. «Странное» относительное поведение вершинных конвейеров в 9800 и 9600 PRO в DirectX имеет место и здесь. Правда, 9600 уже не превосходит 9800.
  3. В OpenGL FX 5600, FX 5600LE, Radeon 9600 PRO и Radeon 9800 почти сравнялись по производительности, а лидирует GeForce 5900.


Тест 4: Трансформация видового окна с автомобилем с отображением текстур (smooth&highlight):


Графическое представление результатов Теста 4:


Анализ:

  1. GeForce FX 5900 в OpenGL снова быстрее всех
  2. Radeon’ам нет равных в DirectX

Общие выводы


  1. Видеокарты ATI Radeon существенно и безоговорочно превосходят по производительности в DirectX всех ближайших конкурентов. В OpenGL лидируют GeForce FX, хотя иногда их отрыв минимален.
  2. Очень существенна разница производительности видеокарт ATI Radeon в DirectX и OpenGL. Впрочем, мы ведь тестируем игровые видеокарты, и если считать DirectX «игровым» API, то картина вполне логична. Поскольку 3ds max позволяет выбирать с каким API работать, вывод совершенно ясен – при работе в этом пакете наибольшую выгоду можно извлечь из Radeon+DirectX. Связка 3ds max–DirectX9–Radeon 9600 PRO вообще вне конкуренции. 13 миллионов прямоугольников в секунду в тестах с реальной каркасной моделью и 12 миллионов для той же модели с текстурами – что можно этому противопоставить? Существует и еще один аргумент «за» – как уже говорилось в начале этой статьи, шестая версия «макса» будет напрямую работать с аппаратными шейдерами в формате DirectX. Перспективы очевидны.
  3. Для тех, кто работает только в OpenGL, видеокарты GeForce выглядят предпочтительнее Radeon’ов.
  4. КПД использования производительности видеокарт в 3ds max.
    В общем, появилась мысль сопоставить измеренную «чистую» производительность видеокарт (Тест 1) и их максимальную производительность в 3ds max (Тест 4) и представить результаты графически. КПД вычисляется как отношение максимальной производительности Теста 4 (без разницы, в DirectX или OpenGL) к «идеальной» производительности, умноженное на 100%.





Как говорится, комментарии излишни, разве что про паровоз вспомнить (КПД< 5%)...
В заключение хочу сказать, что в свете проявившейся в последнее время у разработчиков тенденции «затачивать» драйвера видеокарт под различные тестовые пакеты, официально заявляю: буду только рад, если они оптимизируют производительность видеокарт и под эти тесты :).