Среда, 27.11.2024, 15:26

Приветствую Вас Гость | RSS

Меню
Разделы новостей
Мои статьи [1]
Уроки [9]
Оптимизация [8]
Опрос
АЛЬКОТА БУДЕТ ИГРАТЬ НА НАШИХ СЕРВЕРАХ?
Всего ответов: 215


Главная » Статьи » Оптимизация

О конфигах и скриптах
Многие слышали что с правильным "конфигом" игра начинает просто летать, и что "про" игроки играют только на своих компах, потому что там прописаны суперконфиги, и что если поставить "крутой конфиг", то даже "нубы" смогут влет выносить "папок" и так далее и тому подобное... Толпы начинающих игроков бросаются рыться в поисковиках, задавая фразы типа "конфиги для игры в dods". Знающие английский ищут "config dods", жаждущие скилла ищут "конфиги для снайпера dods", а самые продвинутые даже "dods консоль". Многие находят, некоторые даже ухитряются подлючить, но лишь единицы понимают что именно они делают. Результат как правило один - после всех поисков, выспрашиваний на форумах, возни с установкой - разочарованное "ыыы" и переустановка стима :)
Пожалуй, пришло время поговорить о конфигах и скриптах и прояснить эти вопросы. И для начала разберемся, что же это за чудодейственный конфиг и зачем же он нужен.

Конфиг

Начать с того, что сленговое слово "конфиг" имеет в обиходе довольно много значений, единственно правильное из которых конечно "конфигурационный файл", то есть файл, хранящий настройки игры. Как правило первое что делает человек в новой для себя игре - пытается найти все функции, разобраться с управлением и настроить его так как ему удобно. И вполне естественно, что он желал бы чтобы все настройки остались неизменными до следующей игры. При этом он совершенно не подозревает о том, что нажимая кнопку ОК и сохраняя настройки, он тем самым изменяет содержимое файла настроек "config.cfg", того самого мистического "конфига".


Окно настроек DoDS, закладка "клавиатура"

Сам файл расположен в папке игры "Day of Defeat Source" и является в действительности обычным тектовым файлом, который можно редактировать например во встроенном текстовом редакторе Windows - WordPad (NotePad - блокнот - для этого не годится, он не поддерживает расширенную кодировку).
Как правило его можно найти по следующему пути:
<Диск>:\Program Files\Steam\steamapps\<Имя>\day of defeat source\dod\cfg\config.cfg
Причем вместо "<Диск>" нужно подставить имя системного логического диска (как правило "C"), а вместо "<Имя>" - ник при регистрации в стиме (например "VasjaOfDeath"). Можно для уверенности проделать следующую операцию: в настройках игры поменять например значение клавиши "Использовать предмет" на клавишу ввода ("Enter"), затем выйти из игры, найти предполагаемый конфиг и открыть его с помощью WordPad. Среди прочего в списке обнаружится строка
bind "ENTER" "+use"
В данном случае bind - это консольная команда, привязывающая к клавише "Enter" игровую команду "+use".
Как правило все конфигурационные файлы состоят из таких вот наборов команд, исполняемых каждый раз при старте игры. Все команды построены по примерно одинаковому принципу:
команда параметр1 параметр2 .. параметрN
В нашем примере у команды два параметра, но их может быть и больше и меньше (а может и вообще не быть). Параметры разделены пробелом и как правило заключены в кавычки (этого зачастую можно и не делать, но для надежности кавычки лучше ставить всегда).

Консоль

Теперь поговорим об оболочке, в которой исполняются команды. Обычно вся работа движка Source скрыта от пользователей, как и в любой системе, но для продвинутых есть возможность прямого доступа к системе выполнения команд, а именно - командная консоль. По сути это просто дополнительное окно, в котором как в чате есть строка редактора и история сообщений (в данном случае системных). По умолчанию консоль не активирована, поэтому для начала нужно в настройках клавиатуры вызвать панель "Дополнительно" и поставить галочку напротив "Включить консоль разработки".


Активация консоли в настройках клавиатуры

После этого обычно c нажатием тильды (клавиша "~" или попросту "ё" ) открывается командная консоль. На некоторых клавиатурах с нестандартной раскладкой может потребоваться вмешательство в конфиг. На немецкой клавиатуре, например, тильда находится совсем в другом месте и вызывается сложной комбинацией клавиш. В этом случае необходимо прописать в конфиг команду
bind "\" "toggleconsole"
В сложных случаях можно все равно заставить консоль открыться вместе со стартом игры, дописав в ярлык DoDS к строке с путем к файлу "Steam.exe" параметр "-console". Выглядеть это будет примерно так:
<Диск>:\Program Files\Steam\Steam.exe -applaunch 300 -console
Кстати, начальная активация консоли возможна также командой
con_enable "1"
Добившись открытия консоли, попробуйте для начала ввести в командную строку уже известную команду bind - с нажатием первых же клавиш появляется меню подсказки (очень удобно если не помнишь в точности правильное написание).


Внешний вид командной консоли в DoDS

Введите до конца команду (вернем клавише ее исконное значение)
bind "e" "+use"
После выхода из игры, эта запись добавится в файл "config.cfg", но.. о, ужас! bind "ENTER" "+use" тоже все еще там! То есть теперь у нас есть две клавиши, ответственных за использование предметов. Конечно, никакой особой проблемы в этом нет и клавишу ввода можно легко "перебиндить" на что-либо другоеб удалить из конфига или "разбиндить" в консоли:
unbind "ENTER"
И нет проблем. Пример этот здесь был нужен только как предупреждение: движок игры пытается "запомнить" все, что так или иначе попадает в командную строку (другое дело, что не все он может запомнить, но об этом позже), поэтому перед началом серьезных экспериментов с конфигурационными файлами и консолью, стоит скопировать свой рабочий конфиг в отдельную папку, либо в ту же папку "cfg", но с другим именем, например "config.cfg.old". Конечно, достаточно удалить "кривой" файл и система создаст при старте новый, с настройками по умолчанию, но тогда придется заново возиться с выбором всех настроек. А так - переписал файл из старого и продолжай эксперименты.

Команды и переменные

Команда bind конечно чудо как хороша, но толку от нее для улучшения игровых параметров конечно - маловато будет, скажет нетерпеливый игрок. До поры до времени это конечно так, но ведь мы еще не добрались до скриптов... Хотя один полезный игровой аспект все же придумать можно:
bind "ENTER" "say sorry, i'm noob in this game!"
Очень полезно, особенно после того как завалишь одной гранатой двух-трех игроков своей команды :) ("say" выводит все послестоящее в общий чат игры, можно заменить на "say_team", чтобы написать в чат своей команды).

Но все же займемся более насущным, а именно: какие же команды заставляют игру "летать"? К ним относятся особый род команд, изменяющих содержимое системных переменных. Системные или по-другому, консольные переменные хранят глобальные настройки игры. Они всегда содержат только один параметр и этот параметр и становится значением переменной.

Переменные различают по специфическим приставкам, называемым префиксами, определяющими область применения команд. Наиболее распространенные системные переменные начинаются следующими префиксами:
cl_ - client - многопользовательский клиент
mat_ - material - материальная подсистема
net_ - networking - подключение к сети
phys_ - physics - физика
r_ - renderer - прорисовка видеоизображения
sv_ - server - настройки сервера

Хорошим примером использования консольных переменных может служить например очень полезная команда "cl_downloadfilter".
Если вы часто скитаетесь по малознакомым серверам, то наверняка сталкивались с проблемой закачки ненужных файлов, начиная с безобидных (то есть маловесящих) звуковых эффектов и заканчивая полновесными мегабайтными саундтреками. Втречаются сумасшедшие админы, пытающиеся подчас запихнуть на сервер целый хит-парад. И хуже всего то, что подключаясь на такие сервера ради любимой карты со стандартными настройками, приходится весь этот хлам качать, так что подключившись, поиграть уже и не успеваешь. Для борьбы с такого рода "спамом" можно прописать в конфиг следующую строку:
cl_downloadfilter "nosounds"
Эта команда блокирует закачку всех дополнительных звуков, что позволяет сэкономить кучу времени (к сожалению эта команда срабатывает не для всех серверов - люди, настраивающие сервера, знают о командах и переменных как правило намного больше чем пользователи).
Кроме того существует еще одна более радикальная версия:
cl_downloadfilter "none"
В этом случае не будут подгружаться вообще никакие файлы, в том числе правда и новые карты.
Чтобы вернуться к стандартному значению (разрешать загрузку файлов с сервера), пишем следующее:
cl_downloadfilter "all"

Однако тут же возникает вопрос: как сделать чтобы когда нужно ставился фильтр звуков, или даже полностью запрет на закачку, а когда не нужно чтобы можно было возвращаться к стандартным настройкам? Неужели каждый раз лазить в конфиг и при этом мучительно вспоминать как же там правильно пишется название параметра?
Можно конечно записать все три параметра в конфиг и деактивировать два из них, поставив перед каждой строкой символы комментария "//". Выглядеть это будет примерно так:
cl_downloadfilter "nosounds"
//cl_downloadfilter "none"
//cl_downloadfilter "all"
Этот вариант хорош только удобством редактирования, но игру нужно каждый раз запускатъ заново. Как динамическую альтернативу, при частой смене настроек, можно предложить использование консольной команды "exec". С ее помощью можно подгружать собственные конфигурационные файлы пользователя. Тогда в файле config.cfg остаются только закоментированные значения (чтобы не забыть), а действующие настройки выносятся в отдельные файлы.

Для блокирования загрузки звуков создадим к примеру текстовый файл "nosounds.txt", и пропишем в него уже знакомое:
cl_downloadfilter "nosounds"
После сохранения файла в извесную уже нам папку cfg (где лежит и конфиг), необходимо поменять его расширение, так чтобы он назывался "nosounds.cfg". Пользовательский миниконфиг готов. Аналогично создаем файл "sounds.cfg", в который заносим команду со значением по умолчанию "all". Теперь во время игры вызываем консоль и пишем:
exec nosounds
Все - фильтр включен. Чтобы снова разрешить загрузку выполняем
exec sounds
Конечно, создавать отдельные файлы для одной-единственной команды - это перебор, быстрее и проще выполнить ее напрямую из консоли, но на этом примере мы видим, что конфигов может быть и не один и что при необходимости настройки можно изменять прямо во время игры, одной командой.

Подведем итог. Итак, мы получили представление о том что такое конфиг, зачем нужна консоль и как задавать команды и переменные. Кстати говоря, полный список команд можно всегда найти на сайте сообщества разработчиков Valve. Справочник этот, правда, на английском и к большинству команд (а их там тысячи) даже и описания никакого нет, но великая правда состоит в том, что для эффективного вмешательства в настройки игры достаточно использовать не более 50 из них, а знать для повседневного использования нужно и того меньше - штук 10. Главный вопрос тут в том, чего именно хочется добиться или даже скорее, что нужно исправить?

Требования

Игры на движке Source в общем-то относительно малопрожорливы в отношении ресурсов, но все же создают трудности для стареньких компьютеров. Основная проблема конечно - скорость просчета изображения. Как и во всех трехмерных играх, она очень зависит от процессора и видеоускорителя (видеокарты). Напомним официально описанные требования к железу:
Рекомендовано: 2.4 GHz Processor, 512MB RAM DirectX 9 graphics card
Требования надо сказать вполне современные, несмотря на то, что игра вышла уже больше двух лет назад (сентябрь 2005го). А ведь развитие компьютерной техники идет согласно закона Мура, который гласит, что число транзисторов на микросхемах каждые два года удваивается. В реальных условиях (и не только российских), большинство домашних систем находятся где-то рядом с указанными характеристиками, чаще немного ниже. Двухядерность, к сожалению, ощутимого прироста не дает, поэтому по-прежнему приходится ориентироваться только на частоту.
Минимум:1.2 GHz Processor, 256MB RAM DirectX 7 graphics card
Следует заметить, что минимальные требования означают всего-навсего, что игра запустится и даже как-то будет работать. А что если видеопамяти не 256 а 128? И как быть с ноутбуками? У многих из них графика не особо наворочена, да и частота процессора пониже чем у десктопов... Кроме того, видеопамять является в данном случае вовсе не качественной, а признаковой характеристикой. Ничего не сказано ни о частоте самой памяти ни видеопроцессора, нет никаких указаний на требуемые размеры пиксельных шейдеров... В любом случае, систем только-только удовлетворяющих минимуму хватает, и их владельцам хочется играть пусть не так же, но хотя бы приближенно к уровню комфортности своих более везучих (или состоятельных) собратьев.

3D-видео

Прорисовка изображения является наиболее интенсивной задачей в трехмерных играх. Подробное описание технологии слишком обширно чтобы его здесь приводить, ограничимся основными этапами, которые позволят позднее получить представление о том, что происходит в подсистеме видео с изменением настроек.
Этап первый - моделирование. Здесь задействованы центральный процессор и оперативная память, изредка используются расчетные возможности видеоускорителя. Все объекты, будь то элементы местности, предметы или фигуры игроков, должны быть привязаны к системе координат и сориентированы в игровом пространстве, проверяется физика (столкновения игроков с предметами и между собой, влияние ветра на подвижные объекты вроде висящих проводов и тд). Все расчеты ведутся в векторном виде (каждый объект как набор ящиков - boxes), без учета перекрытия объектов. То есть если вы стоите и тупо пялитесь в стенку, за которой идет настоящая баталия, процессор все равно просчитывает все, что находится в "поле зрения" (и даже немного больше) как бы просвечивая рентгеном, почему - увидим дальше.
Второй этап - просчет непосредственной видимости объектов (vertex shading). Все векторные объекты обретают объем с помощью треугольников, образующих поверхность - их называют вершинами (от английского термина vertex - угол, вершина). При этом учитывается, видны ли вершины пользователю или перекрываются самим объектом. То есть вершины, расположенные сзади не прорисовываются, вершины, перекрытые частично, разбиваются на более мелкие и прорисовывается только часть из них. Этим занимается как правило видеокарта, если она этого "не умеет", то задача ложится на процессор.
Третий этап - наложение текстур и просчет освещения (rendering, pixel shading). Собственно здесь пиксели изображения и приобретают свой цвет. При этом происходит как бы "натягивание" материи текстур (часто - одновременно наложение нескольких) на каркасы объектов. Кроме того, на данном этапе учитывается глобальное и локальное освещение, влияющее в итоге на яркость каждого пикселя. Важным моментом является предварительный просчет "глубины" - пиксели, находящиеся ближе к зрителю "перекроют" пиксели в глубине. Возвращаясь к нашему примеру со стеной - здесь у нас будет большая экономия времени расчета, поскольку прорисовка "невидимых" пикселей не производится, но при этом мы видим к примеру отсветы вспышек выстрелов и дым пролетающих гранат базуки. "Прорисовывание" пока что происходит только в особой области памяти - фреймовом буфере. Наиболее сложный этап, практически всегда необходимо использование специфических свойств видеоускорителя. Некоторые операции может выполнять центральный процессор, но либо очень упрощенно, либо очень медленно.
Четвертый этап - наложение фильтров и эффектов (pixel shading). Здесь происходит пост-обработка изображения, на уже целиком сформированную картинку накладываются различные эффекты освещения (гамма-коррекция, слепящие блики) или эффекты связанные с геймплеем (размытие при контузии, эффект старого кино после смерти). Используется, аналогично предыдущему этапу, видеоускоритель либо - в редких случаях - процессор.



Что там за воротами (dod_harrington)? Этапы построения картинки: от векторных моделей к трехмерному изображению.

После этого происходит вывод изображения на монитор. Для тех кто осилил это описание еще раз замечу, что оно не претендует на полноту картины и дает лишь общее представление о работе, производимой компонентами компьютера для вывода одного-единственного кадра (фрейма) изображения в игре. Сколько таких кадров в секунду сможет отобразить компьютер - зависит как раз от возможностей компонентов и от требований к качеству прорисовки. Итак, первая важная характеристика, которую следует учитывать при оптимизации игры - fps.

FPS

"FPS" - сокращение от английского "Frames per Second" (фреймов в секунду), единица измерения пришедшая в компьютерную графику из кино- и видеотехники, означает скорость обновления картинки на экране. В кино стандартная частота 24 fps, PAL-видео использует частоту 25 fps (в чересстрочном режиме). Играбельной считается минимальная частота 30 fps, но тут уж чем больше тем лучше. Более-менее комфортно уже можно играть на fps в районе 50-70. При очень низкой частоте обновления, анимация становится дерганой, теряется плавность перемещений, что становится особенно заметно при резких разворотах и в насыщенных батальных сценах.
Кроме того, для стабильности восприятия очень важна не только скорость обновления кадров, но и стабильность этой скорости. Это связано со способностью нервной системы адаптироваться к внешним условиям - одни и те же события должны приблизительно одинаково отрабатываться, иначе не происходит закрепления реакции, а значит и обучения. Конечно речь тут идет не о небольших вариациях, а о значительном изменении значений. Как пример, средний игрок со стабильным фпс около 40 показывает как правило лучшие результаты, чем если бы у него был фпс на уровне 90, но с проседаниями до 50 (то есть почти вдвое). Во втором случае зачастую лучше сознательно ограничить верхний предел скажем до 60.

Узнать свои типичные значения можно включив в консоли отображение скорости обновления командой
cl_showfps "2"
Эта команда включает встроенный пользовательский "эфпээсометр". Параметр "1" включает отображение текущего значения, "2" включает показ минимального и максимального измеренного значений, а "0" - отключает. Полезной для начинающих также будет цветовая окраска надписи. Зеленый при этом сигнализирует, что фпс имеет высокое/нормальное значение, желтый - так себе, а красный, соответственно - неудовлетворительное.
Если максимальный и минимальный fps различаются более чем вдвое, можно для начала ограничить верхнее значение командой
fps_max "61"
Параметром служит как раз желаемое число + 1. По умолчанию, максимум стоит на для многих недостижимой планке в 300 fps.
Однако же если значение fps оказывается на не слишком хорошем уровне (красный цвет с желтыми проблесками на "эфпээсометре"), то с этим необходимо бороться.

Чем больше включено эффектов и чем меньше из них может просчитывать видеочип, тем большая нагрузка ложится на процессор, тем медленнее он "выдает" изображение. Принципиально центральный процессор способен справиться с любыми задачами просчета трехмерной графики, все что может видеопроцессор, может и он... Но делает он это в десятки раз медленнее. И дело тут не в том, что он слабее (а давайте выкинем CPU и поставим две видеокарты! :) ), а в том, что центральный процессор сконструирован как универсальное решающее устройство для выполнения последовательно исполняемых инструкций (изредка - в несколько потоков). А видеоускоритель потому и получил свое название, что основной его работой является ускорение параллельного выполнения однотипных вычислительных задач. Современные видеочипы исчисляют количество таких параллельных рабочих потоков ("конвейеров") сотнями, в старых же насчитывалось зачастую не больше десятка, да и набор функций был гораздо меньше. И тут мы подходим к следующему важному понятию - версии DirectX (хоть это и не совсем правильно с точки зрения английского произношения, по-русски чаще всего называют "директ-икс").

Но перед тем как колдовать над конфигом, следует убедиться, что исчерпаны возможности обычного меню настроек. Сначала стоит проверить как повлияет на скорость обновления картинки минимизация или выключение всех дополнительных настроек видео. Следующим шагом может стать снижение разрешения экрана. Конечно, играть с разрешением 800х600 - удовольствие несколько сомнительное, но иногда выбора не остается. Отдельная история с жидкокристаллическими мониторами: в силу технических особенностей их желательно использовать только с их "природным" разрешением, в противном случае картинка будет масштабироваться на самом мониторе, а редко какой из них справляется с этой задачей без заметного "размытия".

Если же все обычные средства исчерпаны, переходим к оптимизации конфига. Следует твердо уяснить, что волшебных настроек не бывает, повышение комфортности игры непременно ведет к понижению других характеристик, например качества звука или изображения. Поэтом большинство "безопасных" настроек, дает также и минимальный эффект. В какой-то мере "волшебными" можно считать следующие команды-переменные:
r_mmx "1"
r_sse "1"
r_sse2 "1"
r_3dnow "1"

Они активизируют так называемые "мультимедийные" наборы команд центрального процессора и соответственно обеспечивают некоторое ускорение стандартных 3D-функций. Заметного на глаз прироста скорости ожидать правда не приходится (тем более что вполне возможно, что они уже были включены автоматически), но как и последующие команды, они как минимум не помешают.
commentary "0"
//
commentary "1"
"0" отключает показ сопроводительного комментария (на тех картах, где он есть).
cl_dynamic_crosshair "0"
//cl_dynamic_crosshair "1"
"0" отключает динамически расширяющийся при стрельбе прицел, который все равно только сбивает с толку (можно также отключить и через меню).
На этом с волшебством, пожалуй, покончено. Займемся прозой жизни.

DirectX

Каждый игрок, пусть он хоть какой "чайник" в компьютерных технологиях, хоть краем уха да слышал что вот мол бывают видеокарты с DirectX8, а бывают 9, а то и все 10. Чем больше, тем лучше... Лучше то оно лучше, но чем? Не будем вдаваться в историю трехмерных игр и видеокарт, при желании все можно найти в поисковиках, остановимся сразу на главном. DirectX - это набор стандартных функций, необходимых для просчета трехмерного изображения. С развитием техники, набор этих функций расширялся и соответственно выходили новые версии DirectX. Насколько тот или другой видеочип поддерживает "железное" исполнение этих функций как раз и определяется номером версии DirectX (кроме того существует альтернативный стандарт OpenGL, но он не получил такого широкого распространения и в последние годы практически не поддерживается производителями игр).

Короткий обзор версий DirectX и поддерживающих их видеокарт:
DirectX6 - истинный динозавр, встречается едва ли. Видеокарты на Nvidia TNT2 и Matrox G400.
DirectX7 - версия с минимумом необходимых DoDS функций. Типичные видеокарты - с чипами Nvidia GeForce 256, Nvidia GeForce 2, Nvidia GeForce 2/4MX, ATI Radeon 7000й серии.
DirectX8 - основательно расширен набор функций для работы со светом (тени, отражения, блики). Видеокарты Nvidia GeForce3,GeForce4 Ti и ранние GeForce FX 5000й серии.
DirectX8.1 - более стабильная чем предшествующая версия, добавлены некоторые функции динамических теней. Видеокарты на Nvidia GeForce FX 5700-5900 и серии ATI Radeon 8500, ATI Radeon 9000-9200.
DirectX9 - наиболее продвинутая из стабильных версий, добавлены функции просчета сложных эффектов освещения, продвинутые алгоритмы текстурирования, в том числе и псевдообъемного, улучшена прорисовка воды. Видеокарты на Nvidia GeForce 6600-6800, GeForce 7000й серии, ATI RADEON 9500-9800, X300-X800.
DirectX10/10.1 (не поддерживается графическим движком Source) - последняя версия, упор сделан на увеличение детализации и реалистичности анимированных изображений, доступна только для Windows Vista и видеокарт нового поколения: ATI Radeon HD2000й серии и выше, Nvidia GeForce 8000й серии и выше.

К чести разработчиков надо заметить, что они попытались оптимизировать параметры видео при установке игры - рекомендованные настройки графики, с учетом имеющегося оборудования и драйверов DirectX, будут помечены звездочкой (*). Однако же, если видеокарта поддерживает скажем только функции директ-икс 8, игра не будет автоматически отключать недоступные возможности, а возложит просчет недостающих эффектов на центральный процессор (так называемый программный уровень директ-икс). Как результат - подтормаживания в игре.

Если у вас видеокарта с директ-икс поколения 8 или даже 7, очень полезно задать в конфиге соответствующее ограничение:
mat_dxlevel "81"
//mat_dxlevel "80"
//mat_dxlevel "70"

Параметром, как можно догадаться, служит необходимая версия, умноженная на 10, по умолчанию -"90" (есть также версия "95" для самых последних вариантов DirectX9). Альтернативой может стать добавление соответствующей опции в строку запуска:
<Диск>:\Program Files\Steam\Steam.exe -applaunch 300 -dxlevel 81
Еще один вариант - активировать поддержку OpenGL, в движке Source она есть но только как часть строки запуска:
<Диск>:\Program Files\Steam\Steam.exe -applaunch 300 -gl
Как правило именно эти настройки дают самый ощутимый прирост fps, зачатую возможна также комбинация обоих команд с положительным эффектом.

Для владельцев директ-икс 9 снижение версии как правило особого смысла не имеет. Оправдаться это может только в том случае, если видеокарта поддерживает DirectX9 только номинально, на бумаге, а в действительности с вычислениями расширенных функций лучше справляется достаточно быстрый процессор. В противном случае (поскольку драйвера DirectX в операционной системе как правило версии 9c) процессор будет перегружен, и конечный результат может оказаться прямо противоположным - появятся лаги.


Опасное сочетание - аппаратный и программный уровень должны по возможности совпадать.

Какого-то положительного результата скорее всего можно добиться переустановкой драйверов DirectX на более старые, но предпочтительнее просто воспользоваться командами, упрощающими работу подсистеме видео, речь о которых и пойдет далее.

7. Освещение и текстуры

Как мы уже видели ранее, максимальная загрузка видеокарты происходит при работе со светом и текстурами, можно попробовать эту работу облегчить. Сразу хочу предупредить, что каждая из этих настроек сама по себе не настолько увеличивает fps, насколько ухудшается изображение. В самом худшем случае вы будете иметь изображение а-ля DoD 1.3 (для тех кто может быть не знает - на движке HL1).


Фрагменты изображения на dod_salerno, слева - обычные настройки, справа - после "тотальной" оптимизации. Зубчатые канты, размытые текстуры, пропавшие деколы - не всегда оправданно.

Наиболее впечатляющие эффекты освещения в DoDS, и вообще на движке Source, связаны с HDR. HDR (High Dynamic Range) означает рендеринг в широком динамическом диапазоне. Привычной моделью описания изображения является RGB, когда все цвета представлены в виде суммы основных цветов: красного, зеленого и синего, с разной интенсивностью в виде возможных целочисленных значений от 0 до 255 для каждого, то есть 8 бит на цвет (LDR - Low Dynamic Range). HDR использует значения интенсивности и цвета в реальных физических величинах, выраженных не целыми числами, а числами с плавающей точкой с большой точностью (16 или 32 бита). С помощью HDR, введенного с DirectX9, производится например динамическое изменение контраста, цветового баланса и яркости (эффект зрачка), отображаются такие эффекты постобработки изображения как glare, motion blur, lens flare, bloom и подобные им.

Эффекты HDR видны только на тех картах, где включена их поддержка, что может привести к проседанию fps на слабых машинах на картах от Valve и многих "турнирных" картах. Отключить HDR можно либо в меню, либо прописав в конфиге:
mat_hdr_enabled "0"
mat_hdr_level "0"
или оставить только наиболее заметный эффект bloom:
mat_hdr_enabled "1"
mat_hdr_level "1"
//
mat_hdr_level "2"
Блум - это эффект очень яркого света, проявляющийся в виде свечения вокруг ярких поверхностей, после применения bloom фильтра такие поверхности не просто получают дополнительную яркость, свет от них (ореол) частично воздействует и на более темные области, соседствующие с яркими поверхностями в кадре. Этот эффект также присутствует и в режиме LDR, хотя и в гораздо меньшей степени. Его можно выключить командой:
mat_bloom "0"
//mat_bloom "1"


Фрагменты изображения на dod_anzio с HDR (слева) и без (справа).
Хорошо заметно действие эффекта блум - карта выглядит очень "солнечной" .

Бампмэппинг (bumpmapping) - это техника симуляции неровностей (или моделирования микрорельефа, как больше нравится) на плоской поверхности без больших вычислительных затрат и изменения геометрии. Бликовая (specular) составляющая освещения проявляется в бликах отражения лучей света от поверхности. Используется как правило вместе с бампмэппингом. Эффект красивый, но в принципе без него можно обойтись. Поддерживается начиная с DirectX8, отключение как правило дает некоторую разгрузку ЦПУ.

Отключаем бампмэппинг:
mat_bumpmap "0"
mat_fastnobump "1"
mat_specular "0"
mat_fastspecular "1"
//mat_bumpmap "1"
//mat_fastnobump "0"
//mat_specular "1"
//mat_fastspecular "0"



Слева - сцена с эффектом Specular Bump Mapping, справа - бампмэппинг отключен (HDR включен в обоих случаях).

Очень приличную нагрузку обеспечивает графической подсистеме расчет динамических теней. Часто отключение теней, отбрасываемых объектами и моделями приносит хорошие плоды. К тому же, отключение динамических теней не слишком сказывается на качестве картинки:
r_shadows "0"
r_shadowrendertotexture "0"
//r_shadows "1"
//r_shadowrendertotexture "1"



Фрагменты изображения на карте dod_donner с динамическими тенями (слева) и без (справа). Эффекты HDR отключены. Наличие теней на картах без яркого освещения малозаметно и при этом их расчет занимает приличную долю в прорисовке картинки.

Несколько менее эффективно действует отключение динамического освещения (отсветы от объектов):
r_dynamic "0"
//r_dynamic "1"
и отключение отсветов от выстрелов (но не самих вспышек):
cl_muzzleflash_dlight_1st "0"
cl_muzzleflash_dlight_3rd "0"
muzzleflash_light "0"
//cl_muzzleflash_dlight_1st "1"
//cl_muzzleflash_dlight_3rd "1"
//muzzleflash_light "1"

Команды работы с текстурами:
mat_mipmaptextures "0"
//mat_mipmaptextures "1"

- отключает механизм компенсации качества текстур на удалении от поверхностей.
mat_picmip "2"
//mat_picmip "1"
//mat_picmip "0"

- понижение качества текстур, сильно ухудшающая картинку мера. Параметр "2" переключает качество отображения текстур на низкое (работает также через меню игры), "1" - на среднее, "0" - высшее. Низкое качество оправдывает себя как правило только на видеокартах с маленьким объемом памяти (128, или даже скорее 64 Мб).
Для экономии видеопамяти лучше применять компрессию текстур - тогда они не так искажаются и при этом занимают меньший объем:
mat_compressedtextures "1"
//mat_compressedtextures "0"

Объекты и физика

Одним из способов ускорения работы процессора, является уменьшение количества просчетов при начальном моделировании мира, например минимизацией количества видимых объектов. Конечно, игроков, простенки и столбы отключать смысла нет, но различные мелкие предметы, создающие колорит, можно убрать.
Тут наиболее мощным средством является команда:
r_renderoverlayfragment "0"
//r_renderoverlayfragment "1"
Она убирает наложенные текстуры - большинство надписей и плакатов на стенах, но к сожалению и песок на брусчатке и другие симпатичные вещи.


Фрагменты изображения на карте dod_argentan (Эффекты HDR отключены). Как говорится, найдите 10 отличий... Если отсутствие плакатов на стенах вряд ли способно сильно расстроить, то исчезновение шпал вместе с насыпью уже заставит кое-кого задуматься.

Еще один очень популярный шаг (хотя и не так уж часто оправданный) - удаление деколов. Decal (англ. "наклейка") - временная текстура, наносимая на поверхности для увеличения интерактивности действий игрока. Примеры деколов: пятна крови на одежде и стенах, спрэй и т.д. Деколы могут быть отключены разными путями:
r_drawmodeldecals "0"
//r_drawmodeldecals "1"
- отключает деколы на моделях игроков;
r_decals "0"
//r_decals "200"//"2048"
- определяет временной отрезок, на время которого деколы будут видны, чем меньше число, тем меньше временной промежуток;
r_cleardecals "1"
//r_cleardecals "0"
- своего рода ластик, очищающий деколы.


Фрагменты изображения на карте dod_donner с деколами (слева) и после выполнения команд r_drawmodeldecals "0" и r_decals "0" (справа). Эффекты HDR отключены.

Еще парочка из той же серии:
r_drawdetailprops "0"
//r_drawdetailprops "1"

- отключает детальную прорисовку мелких структур на поверхностях объектов;
r_drawflecks "0"
//r_drawflecks "1"

- отключает прорисовку мелких осколков и пыли вокруг точки вхождения пули.

Иногда полезно использовать специальные команды, использующие возможности видеокарты:
mat_bufferprimitives "1"
//mat_bufferprimitives "0"

- включает кэширование стандартных форм - так называемых примитивов - для экономии времени на их просчет, полезно для слабых видеочипов, снабженных достаточным количеством видеопамяти;
r_fastzreject "1"
//r_fastzreject "0"

- включает ускоренный алгоритм просчета перспективы (z-buffer), приносит плоды только если поддерживается видеоускорителем на аппаратном уровне.

Config-file

Число возможностей, позволяющих с теми или иными ухищрениями "раскочегарить свой старый ящик" стремится к бесконечности, так что все их тут описать просто не представляется возможным. В любом случае, целью этой статьи и не являлось скрупулезное исследование каждой команды, с подсчетом числа возможно добавленных с ее помощью ноль целых икс десятых фпс. Главное тут - понять принцип и возможности настроек в игре, попробовать "ручками" действие команд. Как нет абсолютно одинаковых людей, так не может быть и идеального конфига, подходящего всем. Самые действенные в большинстве случаев команды здесь были перечислены. Все остальное - это мелочи (в смысле повышения производительности), их полезность каждый определяет для себя сам.
За основу можно взять вот этот fps-config, по умолчанию максимально раскачивающий ваш фпс (но увы не скилл :) ), с русскими комментариями к каждой команде. Для подключения файла необходимо скопировать файл в папку "cfg" и прописать в autoexec.cfg:
exec "fps_ironrats.cfg"
Внимание: параметры по умолчанию предназначены для очень слабых машин с DirectX9, для других запуск конфига без предварительного редактирования настоятельно не рекомендуется!

Важно не увлекаться, и не забывать о том, что лучше иметь не слишком высокий, но зато стабильный фпс, и что оптимальной считается частота обновления кадров равная частоте обновления экрана монитора (в игре - как правило 60÷75 Гц), а приращения fps более 100 вообще не приносят никакой ощутимой пользы. Да и игра с непомерно урезанной графикой доставляет гораздо меньше того самого удовольствия, ради которого она собственно и была приобретена.

Несколько замечаний по методике проверки fps. Все измерения следует производить в одинаковых условиях, то есть на одном и том же сервере, на одной и той же карте, с одним и тем же количеством игроков и так далее. Идеальный вариант - создать игру локально, респауниться за одну и ту же команду и один и тот же класс и пробегать одним и тем же маршрутом (попеременно узкими кор

Источник: http://ironrats.clan.su/publ/3-1-0-47
Категория: Оптимизация | Добавил: Фантомыч (13.05.2008) | Автор: sok
Просмотров: 5485
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]


Вход
Поиск
Друзья
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

1939-1945