Тестирование скорости системы в играх на движке 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. Выглядит
так :
Как видно из скрина, было проиграно 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.
|