Разбираемся с timerefresh

Разбираемся с timerefreshЧто за странные комманды GL_SWAPINTERVAL 0? А может вы хотите увеличить fps? Ну тогда вам немного поможет очень грамотная статья Skib'а. Всем читать два часа
Все сказанное относится к Quake II!
Скорость с которой квака показывает вам картинку давно стала наиболее обсуждаемой темой среди начинающих квакеров. Количеством фпс-ов принято объяснять огромное количество вещей которые можно лицезреть на демках. Этим же количиством многие объясняют по чему они до сих пор еще не отцы. Развеять мифы и подвести под данную тему некоторую базу и призвана данная описаловка.
Приступим.
В кваке есть два метода измерения производительности видеосистемы. Первая из них это среднее количество кадров в секунду которое может вывести на экран ваша видеокарта. Как это не банально, но сделать с этим показателем можно очень не много, а именно менять разрешение экрана и размер видимой области (той на которую выводится изображение). Разумеется, чем ниже разрешение экрана и размер видимой части экрана которое вы используете, тем меньше видеокарте нужно обрабатывать информации и соответственно тем быстрее она будет работать. Но для владельцев 3D аксклераторов это правило не годится. Вот например как ведет себя видеокарточка ATI 3D RAGE PRO на компьютере П2-300 64 RAM при различных разрешениях и размерах видимой части экрана в режиме software.
Видимая область | Разрешение 512х384 | Разрешение 320х240 |
100% | 23,5 | 36,5 |
70% | 31,8 | 45,4 |
40% | 43,9 | 58,5 |
А вот какие результаты выдает квака при использовании карты TNT2 на компьютере П3-450 и 128 RAM
Видимая область | Разрешение 512х384 | Разрешение 320х240 |
100% | 76 | 79 |
70% | 72 | 76 |
40% | 75 | 77 |
Как видите при использовании 3D акселераторов изменение режимов уже практически не меняет количество фпс-ов из чего следует, что путь изменения разрешения и размеров экрана для их владельцев 3D не подходит.
Измерить количество кадров в секунду которое выдает ваш компьютер и его видеосистема достаточно просто. Для этого вы запускаете кваку (при этом желательно чтобы параллельно не было запущено кучи приложений типа ворда и фотошопа) и входите в консоль. В консоли вы пишете следуещее:
Viewsize 100 (размер видимой части экрана) |
Timedemo 1 (пропуск интервалов при показе демки) |
Demomap demo1.dm2 (запуск демки) |
Комментарии в скобочках разумеется не пишем. |
В результате вы увидите стандартную кваковскую рекламную демку которая будет прокручиваться с большой скоростью. По ее окончанию вы увидите в консоли результаты тестирования, где будет указано количество показанных фрэймов, время на это потраченное и что нам самое важное количество фпс-ов.
Что следует из того что вы прочитали выше? Влиять на количество фпс-ов какими либо кардинальными способами практически невозможно (для владельцев 3D). Выключение теней, следов от выстрелов, ухудшение качества текстур ведет лишь к незначительному повышению фпс-ов. То есть если ваша карта выдает 30fps, то бороться с этим можно только путем ее замены. Однако замечу что даже тем у кого есть 25-30 фпс-ов есть возможность выполнять разные вещи (это вас наверное и интересует вообще то).
Но вот вы счастливый обладатель нечто которое выдает 50-60fps на разрешении 650х480 и 100% размере экрана а выше все равно не прыгается. Вот тут на сцену выходит второй параметр - timerefresh. Этот параметр указывает на то сколько fps ваша видеокарта способна выдавать конкретно на том месте на котором вы стоите. Вроде бы и тот и другой параметр меряет одно и то же – количество раз с которым ваш компьютер прорисовывает картинку на экране монитора. Однако стоит заметить, что этот показатель очень сильно зависит от того места где вы находитесь на уровне (т.е. что именно прорисовывает видеокарта). В темном углу фпс-ы будут гораздо выше, чем на открытой площади. В случае применения команды timedemo вы получаете среднее значение для целой кучи разных мест как тех в которых ваша видеокарта выдает 200 как и тех в которых она выдает 30. По команде timerefresh вы узнаете количество фпс-ов которая ваша видеокарта способна выдать в неком конкретном месте.
Что бы посмотреть чему же равен этот параметр на вашем компе, то вам надо войти на сервер (или просто создать свой) и написать в консоли команду
timerefresh
После того как на экране ваш игрок повернется на 360 градусов, вы увидите результат. Именно от этого параметра и зависят все те чудеса которые делаются с его помощю. Замечу что вовсе не все трюки делаются только благодаря этому параметру. Но вот некоторые доступны для выполнения только благодаря ему. Вот например демочка на дм8 которую я специально записал. Те трюки которые вы там увидите не возможны без параметра timerefresh меньше 120 в тех местах где я их выполнял. Причем я несколько обрадую тех у кого не очень мощные видеокарты. Делал я эти трюки на видео карточке ATI 3D RAGE PRO при разрешении 512х480 и в software :). Ну а производительность этой карточки вы видели в таблице сверху. Правда сразу замечу что перед использованием трюков я уменшал размер видимой части экрана до 50% что бы получить заветную циферку по timerefreah равной 120, однако количество фпс-ов при этом было всего 25 (большего с нее в данном случае не выжать) Что из этого следует? А то, что для выполнения данных трюков не требуется фпс-ы, а требуется параметр timerefresh.
После того как я вас заинтриговал давайте разбиратся как сделать параметр timerefresh побольше. Как правило народ использует для повышения этого параметра огромные куски текста из чужих конфигов. В большинстве случаях народ задается целью получить параметр timerefresh побольше, даже не задумываясь о том что же именно они вставляют в свои конфиги. Например, абсолютно стандартная ситуация. Счастливый обадатель timerefresh под 250 бегает по уровню, потом уровень меняется на другой и… все его 250 превражаются в 60-70. Человек недоуменно чешет репу, после чего перезагружает кваку и все начинается сначала. Это забавно, но это единственный (для него) метод вернуть свои параметры обратно. Не один из более чем 500 людей которые ходят в игровой клуб (в котором я работаю) даже не предусмотрели возможности… Хм… отвлекся… давайте все по порядку.
Итак что же влияет на параметр timerefresh? Да практически все! Основное от чего он зависит это разрешение экрана и размер видимой части экрана. Следом идет качество текстур, освещение, спец эффекты. Также (что очень важно запомнить!) он сильно зависит от количества информации отображаемой на экране, т.е. в темном углу он будет гораздо больше чем на открытой площади. Большинство народа для увеличения timerefresh уродуют (другого слова нет) внешний вид кваки. Уменьшают качество текстур, размер видимой части , разрешение… И все равно им немного не хватает :). В чем же дело? А дело то на самом деле всего в одной команде:
GL_SWAPINTERVAL 0
Это команда задает значение паузы между показами кадров. По умолчанию оно равно 1. Если же выставить значение 0 после чего перезагрузить видеосистему (команда vid_restart) то заветный timerefresh вырастет почти в 2 раза! Однако только эта команда не даст вам выполнять те трюки, что вы могли посмотреть, для этого надо ее сочетание с командой:
CL_MAXFPS 560 (Ограничение количества кадров в секунду)
Значение по умолчанию равно 60, ставить же более 200 смысла в принципе не имеет, однако используется как правило значение 560 и именно его мы и будем использовать.
Итак, если вы поместите в свой конфиг вот такой набор строк
CL_MAXFPS 560 |
GL_SWAPINTERVAL 0 |
VID_RESTART |
То после того как вы вставили эти строки (желательно в самый конец конфига, после всех видеонастроек), запускаете сервер, грузите свой конфиг и получаете заветный (большой) timerefresh. Однако помните тех чудиков которых я упоминал чуть выше? Дело в том что GL_SWAPINTERVAL 0 “живет” только до тех пор пока не произошла перезагрузка видеосистемы, а она как раз происходит при смене уровня. Или же она произойдет, как только вы попробуете загрузить свой конфиг еще один раз. После такой перезагрузки попытки вновь ввести эти команды и рестартануть видеосистему не приведут к успеху, можете даже и не пытаться. Что же делать, не перезапускать же кваку каждый раз? Нет конечно, но для того чтобы все работало придется добавить вот такую строчку:
BIND F4 "SET GL_SWAPINTERVAL 1 ; WAIT ; SET GL_SWAPINTERVAL 0; VID_RESTART "
Как видите на клавишу F4 мы забили возврат стандартного значения, паузу, а потом снова установку в 0. Догадались уже наверное? Правильно, после того как произошла перезагрузка видеосистемы (не важно от чего) мы просто нажимаем клавишу и все становится на свои места.
Вот собственно на этом (а не на той куче команд прописаных обычно) и держится вся основа высоких показателей timerefresh-a. Его можно увеличить уменшая качество картинки всеми доступными вам способами, но это не принесет прироста более чем на 10% (на том же разрешении и размере экрана), хотя если вам очень хочется, то вперед. В общем граждане, перед вами открывается возможность позапрыгивать на кучу ящиков :).
P.S. Несколько сумбурно, но надеюсь что все понятно.
Комментарии читателей Оставить комментарий