Оригинал материала: https://3dnews.ru/184777

ATI Physics. Часть вторая – тестируем своими руками

Стр.1 - Тестовый стенд. Предварительные замечания.

Предисловие

В июне месяце, во время тайваньской компьютерной выставки Computex, компания ATI демонстрировала фирменную систему расчета физики, использующую в качестве «физического ускорителя» видеокарту Radeon X1900XTX. Тогда мы рассмотрели базовую концепцию технологии ATI Physics и теоретические предпосылки для использования видеокарт в качестве ускорителя физических расчетов.

Основные выводы, которые были получены в ходе первого знакомства с ATI Physics, заключается в том, что в настоящее время акцент делается на введение двух эффектов – обнаружение столкновений объектов и расчет поведения множества мелких (точечных) частиц. Что касается производительности «физических ускорителей», то нам приходилось верить цифрам, озвученным представителями ATI.

Разумеется, с той поры не проходило желание пощупать «физику» от ATI своими руками. И вот, эта возможность нам была предоставлена, благодаря российскому представительству ATI и компании Depo, чьи компьютеры после подписания эксклюзивного соглашения с ATI оснащаются видеоадаптерами исключительно этого производителя.

В этот раз мы сможем «вживую» увидеть, как работает ATI Physics и оценим масштабируемость производительности видеоадаптеров, используемых в качестве ускорителей физических расчетов.

Тестовый стенд

Мы получили на тестирование системный блок топовой конфигурации. Из наиболее важных для нас компонент отметим - процессор Intel Core Duo Extreme X6800 @ 2,93 ГГц, 2 Гб оперативной памяти стандарта DDR2, а также два видеоадаптера Radeon X1900XTX. Первый видеоадаптер используется в качестве «обычной» видеокарты, которая отвечает за рендеринг и вывод изображения, а второй Radeon используется в качестве ускорителя физических расчетов. На фото ниже - Компьютер DEPO с запущенной 3D-демо от ATI.

 system.jpg

На предоставленной нам системе использовалась сугубо технологическая версия видео-драйверов. По словам представителей ATI это даже не бета-версия, а «альфа». Поэтому, чтобы не вносить путаницу, мы не будем приводить номер версии драйверов, поскольку свежие драйверы ATI Catalyst наверняка получат более высокий порядковый номер версии, и у кого-нибудь может возникнуть ощущение, что они будут «включать в себя» и поддержку ATI Physics, а это не обязательно так.

Мы позволили себе некоторую вольность в обращении с предоставленной на тестирование системой, а именно – после проведения первой серии тестов заменили «физический ускоритель» Radeon X1900XTX на Radeon X1600XT. Система без проблем распознала видеокарту и установила ее в качестве «ускорителя физики».

Предварительные замечания

Тестируемая система была нам предоставлена в полностью сконфигурированном виде, с уже предустановленными демо-сценами. Отсюда следует ряд определенных ограничений. Во-первых, получаемые результаты и оценки справедливы только в рамках рассматриваемой нами системы и необязательно будут совпадать с тем, что мы увидим, когда ATI Physics официально выйдет в свет. Во-вторых, не ждите объективного сравнения с конкурирующими технологиями расчета «физики», таких сравнений не будет, поскольку пока не существует тестовых приложений для демонстрации физических расчетов, способных запускаться на разных платформах.

Физические модели, положенные в основу каждого из рассматриваемых ниже тестов, нам неизвестны. То есть, мы не можем однозначно сказать, какими «физическими» параметрами наделены объекты, какие именно из физических законов учитываются при моделировании движения тел и частиц, а также с какой степенью приближения выполняются данные расчеты.

Для того, чтобы вы имели представление о сложности расчета «физики», приведем несколько примеров. Объекты реального мира имеют определенную массу, плотность, упругость, сложную форму. Из физических законов можно привести - закон всемирного тяготения, законы сохранения энергии и импульса. Объекты сложной формы и обладающие массой, имеют центр масс (или центр тяжести), который может не совпадать с геометрическим центром объекта. А это приходится учитывать, поскольку даже при прямолинейном движении центра масс объекта (центра тяжести), объект может вращаться. Другая сложность расчета поведения объектов сложной формы состоит в том, что при соударении необходимо знать «границу» объекта. В простейшем случае расчет соударений проводится для графических примитивов типа сферы или параллелепипеда, в который включен объект. Попытка привести в соответствие графический вид и физическую форму объекта приводит к возрастанию сложности модели объекта. Как видите, попытка смоделировать «реальное» поведение объекта в физическом мире кардинально отличается от задачи «движение бесконечно малой невесомой точки в вакууме». Теоретически, зная все параметры всех объектов и их начальные скорости/ускорения, можно рассчитать положение, скорости и ускорения всех объектов в любой момент времени. Но для этого потребуется решить систему дифференциальных уравнений, количество которых пропорционально числу объектов. Для выполнения подобной задачи требуется неимоверное количество вычислительных ресурсов. Поэтому обычно прибегают к тем или иным упрощениям.

Очевидно, что возрастание сложности модели позволит получить очень реалистичную картинку, но потребует больших вычислительных ресурсов. Нахождение разумного компромисса между реалистичностью и производительностью – задача сама по себе довольно нетривиальная. Следует также учитывать, что увеличение количества объектов в сцене накладывает дополнительную нагрузку на основной видеоадаптер, который занимается финальным рендерингом, даже если расчетом «физики» занимается специализированный вычислитель.

Мы не будем гадать, какие именно упрощения были использованы в той или иной демо-сцене, использованной в тестах. Скажем лишь, что по нашим наблюдениям, все использованные объекты имеют массу, абсолютно гладкие (отсутствует сила трения) и твердые (то есть не деформируются). Это имеет значение при расчете движения объектов после соударения. Объекты находятся в поле тяготения, то есть, запущенные под углом к горизонту - движутся по параболе. Границы объектов, по которым производится расчет столкновений, довольно близко совпадают с видимой формой объекта.

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

Из десятка имеющихся тестов мы выбрали 3 синтетических теста и 2 «игровых». Такой выбор обусловлен тем, что синтетические тесты показывают стабильные средние результаты от запуска к запуску. Это позволяет провести количественные оценки полученных результатов с относительно малой погрешностью и сравнить результаты для двух видеоадаптеров, играющих роль «физического ускорителя». Тесты, эмулирующие игровое окружение, позволяют получить представление о новшествах, которые возможно появятся в будущих играх с поддержкой «физики».

Все тесты проводились в разрешении 1280x1024 точек, полноэкранное сглаживание и анизотропная фильтрация отключались (NO AA/AF).

Стр.2 - Тест №1 - Падающие камни.

Тест №1. Падающие камни.

Демо-сцена выглядит в виде «склона горы» на которую непрерывным поток сыплются камни. Поверхность «горы» является относительно простой полигональной поверхностью с «желобами» и «кочками». «Камни» представляют собой вытянутые эллипсоиды, состоящие из малого числа полигонов. Регулируемый параметр – число «камней», которое равно 10 000, 15 000 или 20 000 штук.

Один взгляд лучше, чем сто слов. Предлагаем вашему вниманию видеоролик rocks10k.avi (6,42 Мб, 640x480, DivX). К сожалению, получить изображение высокого качества не удалось, поскольку видео записывалось с экрана монитора. Ролик состоит из условно трех частей. Сначала «физика» ускоряется на GPU, затем тест переключается на использование CPU в качестве ускорителя «физики», и наконец переключение к исходному состоянию. Вы можете оценить как достоверность реализации «физики», так и разницу в производительности между GPU и CPU.

 rocks-zoomed.jpg

«Камни» на «склоне горы» крупным планом. Как легко заметить, присутствует 3 вида камней, отличающихся размерами и цветом, которые расположились в складках «горного» рельефа.

Расчет «физики» в данном тесте сводится к обнаружению столкновений между «камнями» и моделированию их движения согласно физическим законам. На скриншоте ниже показан вариант теста с количеством камней, равным 15 000 штук.

 rocks-15k.jpg

Как видно из скриншота, скорость обновления сцены равна 50-ти кадрам/с.

Мы предполагаем, что FPS ограничивается производительностью «ускорителя физики», а не графики. Косвенным подтверждением этому служит то, что скорость обновления сцены не изменялась при изменении угла обзора сцены таким образом, что в кадре оставался минимум объектов (снижалась нагрузка на видеоадаптер рендеринга).

Как уже говорилось, тест позволяет менять количество камней в сцене, а также использовать для расчетов «физики» как выделенный видеоадаптер (GPU), так и центральный процессор (CPU). Мы получили значения FPS для всех возможных случаев, соответственно - 10 000, 15 000 и 20 000 камней в сцене, как рассчитанные на GPU, так и на CPU. К этим результатам мы также добавили значения, полученные при расчете «физики» на видеокарте Radeon X1600XT, которая заменила X1900XTX в качестве «ускорителя физики». Все вместе это отображено на графике ниже.

 rocks.gif

Проанализируем полученные результаты.

Первое, что хотелось бы отметить – при замене одного «физического ускорителя» на другой, значения FPS для линии «CPU» не изменились. А это значит, что «физика» считается на CPU честно. Ведь при расчете «физики» на центральном процессоре никакие ускорители не используются и результаты меняться и не должны.

Второе. Как легко вывести из графика, «физический ускоритель» Radeon X1600XT отстает от Radeon X1900XTX на величину всего лишь от 30% до 38%. Хороший результат, если учитывать сравнительную стоимость этих «ускорителей». С другой стороны, Radeon X1600XT способен показать играбельный FPS только при 10 000 объектов в кадре, тогда как Radeon X1900XTX уверенно чувствует себя и при обработке 15 000 объектов. Впрочем, применительно к данному тесту об «играбельности» можно говорить с большой натяжкой. За «камушками» в данном тесте мы можем только наблюдать, а «сыграть» в них пока не получится.

Третий момент, на который следует обратить внимание – нелинейность падения производительности с ростом числа объектов. При изменении количества объектов от 10 000 к 15 000, падение производительности составляет не 1,5 раза, а от 1,6 до 1,75 раз. При переходе 10 000 -> 20 000 объектов, падение производительности составляет от 2,2 до 2,8 раз. Почему так происходит? Одной из причин может быть то, что с ростом числа объектов увеличивается количество взаимных столкновений камней (вероятность столкновения повышается с ростом числа объектов в одном и том же объеме), поэтому приходится чаще пересчитывать новые траектории движения, ну и детектировать сами столкновения. Простая арифметика для оценки подобных вещей малоприменима, а для получения более-менее точных оценок надо знать принцип расчета, применяемый «ускорителем». Но, как уже отмечалось в примечаниях, мы не будем строить подобные догадки, а примем полученные результаты как они есть.

Что касается сравнения результатов «ускорения физики» на CPU и GPU, то разница – в разы. Мы не знаем, оптимизирована ли «демка» под двухъядерные процессоры, каким является Intel Core Duo X6800, в любом случае, превосходство видеокарт в качестве специализированного ускорителя впечатляет (даже если результаты линии СPU умножить на два).

Вывод

Видеокарты в качестве «ускорителей физики» способны с хорошей скоростью обсчитывать совместное движение 10 000 относительно несложных объектов (не путайте с количеством полигонов).

Много это или мало? Для типичной игровой сцены – очень много. Ведь в большинстве игр количество предметов окружающей обстановки, с которыми игрок может взаимодействовать, редко превышает сотню, не говоря уже о тысяче. Да и детальный просчет траектории движения нужен далеко не для всех них. Конечно, не все объекты так просты как эти «камешки», но запас по производительности изрядный, так что есть из чего выбирать – огромное количество простых объектов, среднее количество – сложных, или смесь этих случаев.

Идем дальше.

Стр.3 - Тест №2 - Поддон. Тест №3. Шахматные фигуры.

Тест №2. Поддон.

Демо-сцена выглядит в виде поддона с неровным дном, в котором находятся предметы нескольких разных типов. Это конусы с основанием, похожие на фигуры временной дорожной разметки, кости и черепа, а также обрубки деревьев.(Ужас! Это не демо-сцена, а просто какой-то «взрыв у придорожного кафе»).

Кстати, обратите внимание, демка построена на движке Havok FX.

 skittles.jpg

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

Как видите, второй тест имеет много общего с первым тестом – неровная поверхность дна/склона, большое количество мелких объектов, объекты разных видов. Но есть и существенные отличия - все объекты имеют довольно сложную форму, при этом границы объектов, по которым проводится обнаружение столкновений, очень близко совпадают с видимыми границами объектов. Типы объектов существенно сложнее, чем в первом тесте, видимо поэтому количество объектов заметно меньше - 1505 штук.

Возможности теста позволяют привести объекты в движение, при этом они закручиваются вокруг синей стрелочки (чей кончик виден в середине кучи). Саму стрелку, являющейся «центром вращения тайфуна» также можно двигать в пределах поддона, тем самым усложняя задачу для физического ускорителя. Что касается скорости, то разброс значений FPS при движении объектов конечно больше, хотя «на глаз» среднее значение примерно одинаково со значением в «покое». Встроенные возможности по вычислению среднего FPS в тесте отсутствуют, поэтому мы решили излишне не усложнять задачу и сняли результаты в состоянии «покоя». Вот что получилось в итоге:

«физический» ускоритель Radeon X1900XTX – 80 FPS
«физический» ускоритель Radeon X1600XT – 60 FPS
«физический» ускоритель CPU Core Duo X6800 – 12 FPS

Как видите, несмотря на существенные отличия от первого теста, соотношения скорости, показываемые разными ускорителями «физики», очень похожи на те, что мы видели в первом тесте.

Вывод

Для отображения с нормальной скоростью сцены со значительно усложненными объектами приходится уменьшать их количество. В нашем случае – на порядок. Тем не менее, даже полторы тысячи «реальных физических» объектов – это очень много для любой современной игры.

Тест №3. Шахматные фигуры.

Демо-сцена в этом тесте на первый взгляд проста – стол с шахматной доской и фигурами на ней. Что интересно, при запуске теста начальное число объектов, по сведениям из строки состояния, равно 66 штук. Из них 64 – шахматные фигуры, которые стоят на каждой клетке доски, а две оставшиеся – стол и книга.

 chess1.jpg

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

 chess2.jpg

Интересное начинается дальше. По нажатию кнопки можно высыпать на стол порцию фигур. Количество объектов в сцене при этом, естественно, увеличивается, а значение FPS – падает. Поскольку «порции» фигур сравнительно небольшие, по 640 штук, можно построить подробный график зависимости FPS от числа фигур в сцене. Что мы и сделали.

 chess.gif

При минимальном количестве объектов значения FPS для обоих радеонов равны. Скорее всего, производительность упирается в возможности основного видеоускорителя, или же ограничивается другими факторами (например – частотой взаимодействия основного и «физического» ускорителей, но это лишь догадки). А вот CPU неплохо показывает себя в начале теста. Впрочем, первая же порция шахматных фигурок быстро расставляет все по местам. Скорости CPU уже недостаточно, чтобы показать минимально приемлемые 30 кадров/сек. Radeon X1600XT тоже теряет в скорости практически вдвое, но затем производительность падает уже не так сильно. Вообще, данный тест создает более серьезную нагрузку на «физические» ускорители, и оказывается довольно «тяжелым» даже X1900XTX.

Вывод

По прикидкам получается, что даже такой мощный центральный процессор как Core Duo X6800 способен просчитывать «физику» с нормальной скоростью лишь для около 500 объектов. Хотя в абсолютном выражении это очень прилично для типичной игры, данная оценка является скорее верхней границей возможностей современных CPU по обработке «физики», ведь вычислительная мощность большинства десктопных процессоров гораздо ниже.

Для видеокарт в роли ускорителей «физики» типичное значение объектов, которое они могут просчитать с нормальной скоростью, по прежнему остается на уровне примерно 1000-1500 шт.

Стр.4 - Игровые тесты. Заключение.

Тест №4. «Повелитель мусора»

Да простят меня сотрудники и фанаты ATI за такую вольность в интерпретации названия этого теста. На самом деле он называется Dockland, то есть – «территория дока».

 garbage1.jpg

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

 garbage2.jpg

После чего становится похожим на пирамиду или елочку и полностью скрывается под притянутым мусором. На этом скриншоте вы его уже не видите.

Если говорить серьезно, то эта демка тоже построена на движке Havok FX и гораздо больше напоминает игровую сцену, чем рассмотренные нами ранее «синтетические» тесты. Человечек может свободно передвигаться по территории дока как в любой обычной игре с видом от третьего лица. «Сбор мусора» и его разбрасывание происходит по нажатию «горячей клавиши». Интересная особенность данного теста – возможность включения «ветра» (который с моря дул, видимо). В отсутствии «мусорщика» под воздействием ветра разбросанные объекты неспешно дрейфуют. Если же к делу подключается мусорщик, то объекты собираются вокруг него как и прежде, но траектории движения уже учитывают влияние ветра.

Впрочем, что объяснять, лучше посмотрите видеоролик – garbage.avi (11 Мб, 640х480, DivX).

Собственно, осталось привести цифры, которые показывают наши «ускорители»:

«физический» ускоритель Radeon X1900XTX – 55 FPS
«физический» ускоритель Radeon X1600XT – 40 FPS
«физический» ускоритель CPU Core Duo X6800 – 8 FPS

Вывод

Как и прежде, соотношение сил примерно сохраняется. Что касается большого количества объектов, присутствия внешних сил в виде «ветра» и одновременно высоких значений FPS, то это может как объясняться примитивностью объектов (цилиндр, параллелепипед), так и использованными алгоритмами расчета траекторий и столкновений. Впрочем, данные упрощения не спасают CPU в любом случае.

Тест №5. Реальный дым как множество точечных объектов.

Ну и наконец последний тест. Суть теста в демонстрации расчета «физики» для системы точечных частиц. Главное свойство таких частиц – бесконечная малая масса и пренебрежимо малые размеры. То есть, расчет «физики» сводится к чистой кинематике движения идеальной точки (траекторий), а столкновениями между частицами можно пренебречь.

 smoke.jpg

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

В данном тесте выполняется расчет для 2020 частиц. Даже из скриншота видно, что дым выглядит очень натурально. Но никакой скриншот не может передать всю красоту в ее динамичности. Чего стоят отдельные клубы (даже скорее – «клубки») пара, отрывающиеся от главного столба, когда наш герой рассекает поток своим торсом. Или закручивающийся вихрь пара, когда фигура человечка вращается стоя посередине решетки.

Лучше взгляните на видеоролик – smoke.avi (13,5 Мб, 640х480б DivX)

При съемке ролика мы специально переключали режим между обычным отображением и каркасным, чтобы показать, что дым сделан честно. «Каркас» частицы есть сама частица, поэтому вид клубящегося пара никак не должен изменяться.

Что касается цифр, то вот они:

«физический» ускоритель Radeon X1900XTX – 100 FPS
«физический» ускоритель Radeon X1600XT – 80 FPS
«физический» ускоритель CPU Core Duo X6800 – значение отстутсвует.

Вывод

Реализация «честного» пара, дыма, тумана, способна поднять визуализацию игр на новый качественный уровень. Снятие с ускорителя «физики» такой части нагрузки, как детектирование столкновений, позволяет с высокой скоростью производить расчеты системы мелких частиц и, по всей видимости, показанные 2000 частиц далеко не предел.

Заключение

Знакомство с живыми тестами оставляет самое приятное впечатление и просто заставляет мечтать о тех временах, когда мы наконец увидим настоящую «физику» в играх.

Современные видеокарты ATI даже среднего класса вполне способны взять на себя роль «физического» ускорителя и демонстрируют приличную скорость при работе с впечатляющим числом объектов, подчиняющимся «реальным» законам физики.

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



Оригинал материала: https://3dnews.ru/184777