Вот уже третью неделю идёт закрытый бета-тест StarCraft 2. Ясный хрен, что ключ мне не дали, тем не менее, те, кто следит за темой - в курсе, что есть методы поиграть в оффлайне, безо всяких ключей. Но пост собственно не об этом.
Пост о том, как я препарировал SC2 тулзой, которая идёт в поставке DirectX SDK - PIX. Этот вот PIX умело рассказывает нам о количестве и качестве разных вызовов DirectX. Вот поэтому я взял PIX, взял StarCraft 2 и какой-то реплей с игрой четверых счастливых обладателей ключа от беты. Для первой части - немного тупой статистики.
Сцена с окружением, без юнитов и зданий, просто природа, стены, ландшафт, деревья.
Число вызовов DrawIndexedPrimitive - ~900-1000.
Сцена с отстроенной теранской базой и некоторой кучкой юнитов ~1800-2000 вызовов, здоровый бой протоссы vs тераны ~2500 вызовов. Все абсолютно вызовы - TriangleList'ы, никаких Triangle Strips нет и в помине. Абсолютно на каждый вызов DIP идёт установка VertexDeclaration. Причём почти всегда одного и того же. Число треугольников в каждом вызове как правило мало. Много вызовов с небольшим числом треугольников (100-200), меньше средних (500-700), больших - мало (1500-2000 треугольников). На фрейм происходит очень много установок Render Targets - ~200 вызовов. Так же на фрейм приходится ~400 SetPixelShader и ~300 SetVertexShader.
Отдельного внимания заслуживает непонятки с отсечением невидимых объектов. Вышедшие из-за экрана и ушедшие через пару секунд в другую сторону ~25 протосовских юнитов не изменили число вызовов DIP, то есть, когда они были где-то за экраном, они всё равно отправлялись на отрисовку.
Первое впечатление - на бета-тестирование выкинули неоптимизированную игру. Будем следить за обновлениями.
Пока на этом всё, далее буду более детально разбирать конкретные вызовы и собирать более точную статистику, а так же выслеживать использование ресурсов.
Пост о том, как я препарировал SC2 тулзой, которая идёт в поставке DirectX SDK - PIX. Этот вот PIX умело рассказывает нам о количестве и качестве разных вызовов DirectX. Вот поэтому я взял PIX, взял StarCraft 2 и какой-то реплей с игрой четверых счастливых обладателей ключа от беты. Для первой части - немного тупой статистики.
Сцена с окружением, без юнитов и зданий, просто природа, стены, ландшафт, деревья.
Число вызовов DrawIndexedPrimitive - ~900-1000.
Сцена с отстроенной теранской базой и некоторой кучкой юнитов ~1800-2000 вызовов, здоровый бой протоссы vs тераны ~2500 вызовов. Все абсолютно вызовы - TriangleList'ы, никаких Triangle Strips нет и в помине. Абсолютно на каждый вызов DIP идёт установка VertexDeclaration. Причём почти всегда одного и того же. Число треугольников в каждом вызове как правило мало. Много вызовов с небольшим числом треугольников (100-200), меньше средних (500-700), больших - мало (1500-2000 треугольников). На фрейм происходит очень много установок Render Targets - ~200 вызовов. Так же на фрейм приходится ~400 SetPixelShader и ~300 SetVertexShader.
Отдельного внимания заслуживает непонятки с отсечением невидимых объектов. Вышедшие из-за экрана и ушедшие через пару секунд в другую сторону ~25 протосовских юнитов не изменили число вызовов DIP, то есть, когда они были где-то за экраном, они всё равно отправлялись на отрисовку.
Первое впечатление - на бета-тестирование выкинули неоптимизированную игру. Будем следить за обновлениями.
Пока на этом всё, далее буду более детально разбирать конкретные вызовы и собирать более точную статистику, а так же выслеживать использование ресурсов.
UPD: На дальнейшее препарирование меня не хватило, извиняйте, если кто хотел. (=
Спасибо, это интересно
ОтветитьУдалитьНадо поступить старым дедовским способом - натравить на него NVPerfHUD + к нему были примочки, позволяющие стартовать инструментирование без спец. ключиков на создание D3D-девайса. Я в свое время так несколько игр препарировал, когда занимался 3D графикой по работе. Особенно интересен режим пошагового построения сцены, много интересных BKM-ов можно накопать ))
ОтветитьУдалитьДело в том, что у меня кругом ATI, как там перфхуд взлетит, я не знаю. А так да, хорошо бы под перфхдом поглядеть.
ОтветитьУдалитьНа ATI не взлетит, ему нужны расширения для инструментирования от nvidia-вского драйвера.
ОтветитьУдалитьКстати, что касается кол-ва DIP-ов - в этом может быть виноват UI/HUD и прочий интерфейсный stuff, особенно если пользуются текстурными атласами.
По нашему опыту (AVGames, Звездный Легион) это сильно просаживало графику, одна отрисовка миникарты чего стоила :)