Сегодня 25 декабря 2024
18+
MWC 2018 2018 Computex IFA 2018
реклама
Видеокарты

Тестирование скорости системы в играх на движке Quake

⇣ Содержание
Stanislav Vasiliev
Kuzin Andrey

Предисловие

Движок Quake, созданный программистами iD Software достаточно давно, является даже на текущий момент достаточно ресурсоёмким, что в своё время при более слабых среднестатистических системах было ещё более актуально. Поэтому для замеров производительности каждой конкретной системы, в игру была включена возможность замера FPS (расшифровывается как Frames Per Second, или Кадров В Секунду) несколькими способами. В последствии, при создании движка Quake 2 эта система была сделана ещё более удобной и расширена некоторыми дополнительными возможностями. Так как в Quake впервые появилась такая вещь, как консоль, позволяющая вызывать практически любые комманды в любой момент времени, то и замеры производительности можно провести так же любым из двух возможных способов в любой момент нахождения в игре.

Способ первый - комманда timerefresh (пишется с одной r), кстати для того, чтобы вводить комманды в Quake, не надо набирать их до конца, к примеру для того, чтобы ввести эту команду, достаточно набоать timer и нажать TAB. Почему не time или не ti? Потому что тогда интеллектуальная система Quake подставит вместо refresh слово demo, и получится слово timedemo, которое, собственно, является второй коммандой измерения скорости.

Часть 1 - Синтаксисы комманд:

Комманды для Quake 1
  • "timerefresh" - введя слово просто без всяких параметров, получаем простой тест скорости в FPS на одном месте.
  • "timerefresh ]" - получено мной совершенно случайно, в следствие опечатки, при этом похоже изображение не выводится на экран, а вместо этого показывается сколько кадров максимум (на самом мощном акселераторе) мог бы выдать Ваш процессор, для сравнения в первом случае мой P2-450(464) показывал 155 FPS (Quake2, base1, сразу после начала), при втором - 195, что означает, что всё же пока узким местом явился акселератор. Хотя это мой вывод, и я нигде не видел никакой документации по этому вопросу (даже в полном списке комманд консоли Q)
  • "timedemo ???" , где ??? - название демонстрации, к примеру если это стандартная демка Q, запускаемая при запуске, то она имеет название от demo1 до demo3 (всего 3 демки), но так же можно подключить любую другую демку, создав в каталоге ID1 папку с именем DEMOS, и скачав туда файл с расширением DEM. После чего написать в консоли timedemo name, и демка будет играться.
Комманды для Quake 2:
  • "timerefresh" и "timerefresh ]"- совершенно идентично Quake 1.
  • "timedemo 1" (1 включает режим timedemo а 0 - отключает) - синтаксис этой комманды был совершенно переработан. Кстати надо рассказать о принципе действия этой комманды. Насколько я понимаю, в стандартной игре есть некий лимит скорости происходящих событий, и все события каким либо образом привязаны к таймеру, то есть, если проще говорить, игра отдельно обрабатывает движение, и отдельно вывод визуализации этого движения. Так например пехотинец всегда делает один шаг в одну секунду, при этом например шаг состоит из 60 фаз (это я про анимацию персонажа), то есть поскольку в игре всё не как в жизни, то персонажи анимируются следующим образом - берётся нога (всё буду обьяснять немного грубо, и не всегда совсем так, как это реализовано программистами, и если кому интересно как это сделано на самом деле, он может пойти на любой сервер типа www.planetquake.com и там ознакомиться с огромными текстами по принципам работы движка Q), после чего ей прописываются крайние положения (например стоит и висит в воздухе), а затем примерно делается ещё 58 кадров анимации (как ходит ступня, как сгибается колено, ну и т.д и т.п), в результате мы видим плавное движение этой самой анимированной ноги. Теперь о том, как работает графическая часть - игра сама считает время, за которое нога должна быть опущена, но её совершенно не волнует рассчёт геометрии этой ноги и вопрос увидите ли вы эту ногу или не увидите вообще. Она просто считает где должна быть нога. А визуализацией занимается отдельный блок, который как раз здорово зависит от скорости вашего процессора, акселератора, памяти и др. составляющих системы (кроме звуковой карты, для неё тоже сделан отдельный блок), и когда у Вас слишком медленный компьютер, который например показывает только 5 кадров в секунду, то соответственно вы и увидите только 5 из 60 позиций этой ноги. А по русски мы это называем тормозами. То есть всё дёргается, попасть никуда нельзя, ну и т.д. А если у вас 120 кадров в секунду ? Тогда Вы увидите каждый кадр анимации ноги 2 раза. И вот как раз на этом и основано действие комманды TIMEDEMO, она включает синхронизацию этих двух блоков, и каждый из кадров анимации показывается на экране всего 1 раз. Соответственно если FPS меньше AFPS (анимационных фрэймов в секунду), то игра будет идти медленнее, если же их больше, то быстрее. И при всём этом будет производиться конкретные замерения количества кадров в секунду каждую секунду, а в конце будет выдано среднее значение. Не кажется ли Вам, что мы ушли далеко от синтаксиса ? А вот мне кажется... (Кстати ещё раз напоминаю, всё вышесказанное - жуткая интерполяция реальных технологий игры, и поэтому просьба тем, кто хорошо понимает в принципе работы движка Q не посылать мне мануалей по этому самому движку, они у меня есть, я просто пытаюсь кое что доходчиво обьяснить тем, кто таких мануалей не читал, но тем не менее хочет хоть примерно понять как оно работает). Так вот значит... Синтаксис таков: timedemo 1 или timedemo 0, при этом 1 включает режим отвязки от времени, и 0 - выключает. Соответственно если надо протестировать - то пишем 1, если хотим поиграть - 0. При этом режим timedemo работает и в игре. Главное отличие от Q1 в этой ситуации только то, что играется не одна демка, а вся игра переключается в ускоренный режим. Но ведь нам надо получить скорость в конкретной демонстрашке? А вот для этого и служит такая комманда как
  • "demomap ???.!!!", где ??? - название основной части файла демонстрации (BASEQ2DEMOS для внешних демок), а !!! это расширение файла демонстрации. Для стандартных демонстраций оно DM2. Значит чтобы включить демонстрацию, надо набрать "demomap demo1.dm2" (опять напоминаю о том, что кавычки не нужны). После этого запускается демонстрация DEMO1 в ускоренном (замедленном) времени. Кстати для того, чтобы если у Вас _жутко_ медленный компьютер, Вам не приходилось смотреть на одну демку по пол года, сделана не полная рассинхронизация со временем. То есть если FPS большой, то всё будет идти слишком быстро, а вот если маленький, то всё будет идти как обычно, только опять таки с "тормозами". Но после просмотра демонстрации наступает ещё одна проблема: Quake 2 не только не выдаёт результатов, но ещё и запускает demo2 в том же темпе. Что делать? А делается так. Прописывается алиас на прокрутку демок с принудительным убиванием демосервера. Делается это следующим способом:
    alias d1 "demomap demo1.dm2;nextserver d2"
    alias d2 "killserver"
    после чего (или перед чем) вводите timedemo 1, и просто убираете консоль, запускается демка, отыгрывается, заканчивается и выдаёт снизу FPS. Выглядит так :
Quakescr1.jpg (45976 bytes)

Как видно из скрина, было проиграно 689 фрэймов анимации за 8 секунд и это получилось потому, что было около 86 fps в среднем.

Кстати по поводу комманды timerefresh в Quake 1 (и иногда в Quake 2) - на некоторых 3D карточках, почему то, при попытке сделать timedemo режим OpenGL переключается в Software, а значит больше 1-2 fps в результате через пару минут (пока крутится этот таймерефреш) Вы не получите. Я встречал такие проблемы раньше на Riva128, теперь вроде бы их исправили, а теперь встречаю на RivaTNT.

Quake 3 Arena Test 2

В вышедшей новой версии Quake 3 Arena код timedemo поправлен и работает как надо. Для тестирования необходимо вызвать консоль нажатием тильды (~ - прямо под Esc) и набрать "timedemo 1" после этого если нужно протестировать производительность в Q3Test1 то набрать "demo q3testdemo1", если нужно протестировать Q3Test2 то набрать "demo q3testdemo2". Игра прокрутит 1 раз демонстрацию и вывалится в меню. После этого надо вызвать консоль и записать результат FPS. Затем сменить разрешения и/или разрядность и снова запустить тест по новой.

Следующая страница →
 
⇣ Содержание
Если Вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.
Вечерний 3DNews
Каждый будний вечер мы рассылаем сводку новостей без белиберды и рекламы. Две минуты на чтение — и вы в курсе главных событий.

window-new
Soft
Hard
Тренды 🔥
Apple хочет самостоятельно защищать свои интересы в антимонопольном расследовании против Google 2 ч.
Гладко было на бумаге: забагованное ПО AMD не позволяет раскрыть потенциал ускорителей Instinct MI300X 8 ч.
Netflix подал в суд на Broadcom, заявив, что VMware нарушает его патенты в области виртуализации 8 ч.
На Nintendo Switch выйдет подражатель Black Myth: Wukong, который позиционируется как «одна из важнейших игр» для консоли 9 ч.
Датамайнеры нашли в файлах Marvel Rivals следы лутбоксов — NetEase прокомментировала ситуацию 11 ч.
Надёжный инсайдер раскрыл, когда в Game Pass добавят Call of Duty: World at War и Singularity 12 ч.
Лавкрафтианские ужасы на море: Epic Games Store устроил раздачу рыболовного хоррора Dredge, но не для российских игроков 13 ч.
VK запустила инициативу OpenVK для публикации ПО с открытым кодом 14 ч.
CD Projekt Red объяснила, почему оставила мужскую версию Ви за бортом кроссовера Fortnite и Cyberpunk 2077 15 ч.
Открытое ПО превратилось в многомиллиардную индустрию 16 ч.