Андрей Смирнов
Время чтения: ~16 мин.
Просмотров: 10

Основы оптимизации кода игр

Автор оригинала: Kyle Speaker

  • Перевод

a330d0de86110c5061065b1a22f3d253.png Многие начинающие инди-разработчики слишком поздно задумываются над оптимизацией кода. Она отдаётся на откуп движкам или фреймворкам или рассматривается как «сложная» техника, недоступная их пониманию. Однако существуют способы оптимизации, которые можно реализовать более простым способом, позволяющие коду работать эффективнее и на большем количестве систем. Давайте для начала рассмотрим самые основы оптимизации кода.

Оптимизация ради игроков и собственного психического здоровья

Довольно часто инди-разработчики имитируют методы оптимизации крупных компаний. Это не всегда плохо, но стремление к оптимизации игры уже после прохождения точки невозврата — хороший способ свести себя с ума. Умной тактикой отслеживания эффективности оптимизации будет сегментирование целевой аудитории и изучение характеристик её машин. Бенчмаркинг игры с учётом компьютеров и консолей потенциальных игроков поможет сохранить баланс между оптимизацией и собственным психическим здоровьем.

Основы оптимизации кода

На самом деле есть довольно малое количество оптимизаций, которые почти всегда можно использовать для повышения скорости игры. Большинство из них не привязано к конкретной платформе (некоторые движки и фреймворки учитывают их), поэтому ниже я покажу примеры на псевдокоде, чтобы вы знали, с чего начинать.

Минимизация влияния объектов за пределами экрана

Часто этим занимаются движки, а иногда даже сами GPU. Минимизация объёма вычислений для объектов за пределами экрана чрезвычайно важна. В собственной архитектуре лучше разделять объекты на два «слоя» — первый будет графическим представлением объекта, второй — данными и функциями (например, его местоположением). Когда объект находится за пределами экрана, нам больше не нужно тратить ресурсы на его рендеринг и достаточно заниматься его отслеживанием. Отслеживание с помощью переменных таких параметров, как позиция и состояние, значительно снижает потребности в ресурсах. В играх с большим количеством объектов или объектов с большими объёмами данных может оказаться полезным сделать ещё один шаг и создать отдельные процедуры обновления. Одна процедура будет выполнять обновление, когда объект находится на экране, другая — когда он за его пределами. Настроив такое разделение, мы сможем уберечь систему от необходимости выполнения множества анимаций, алгоритмов и других обновлений, которые необязательны, когда объект скрыт. Вот пример псевдокода класса объекта, использующего флаги и ограничения местоположения:

Object NPC {     Int locationX, locationY; //текущая позиция объекта на 2d-плоскости  Function drawObject() { //функция отрисовки объекта, вызываемая в цикле обновления экрана }  //функция, проверяющая, находится ли объект в текущем вьюпорте Function pollObjectDraw(         array currentViewport[minX,minY,maxX,maxY]         ) {  //если он находится внутри вьюпорта, сообщаем, что его нужно отрисовывать If (this.within(currentViewport)) { Return true; } Else { Return false; } }  }

Хотя этот пример очень упрощён, он позволяет нам опрашивать объекты и определять их видимость перед отрисовкой, благодаря чему можно выполнять упрощённую функцию вместо выполнения полного вызова отрисовки. Чтобы отделить функции, не являющиеся графическими вызовами, может потребоваться создание дополнительного буфера — например, функция, в которую включено всё, что вскоре может увидеть игрок, а не только то, что он может видеть в текущий момент.

Независимость от обновления кадров

В движках и фреймворках обычно есть объекты, обновляемые в каждом кадре или «цикле» (tick). Это сильно нагружает процессор, и чтобы снизить нагрузку, мы должны по возможности избавиться от обновления в каждом кадре. Первое, что нужно отделить — это функции рендеринга. Такие вызовы обычно очень активно используют ресурсы, поэтому интеграция вызова, сообщающего нам, изменились ли визуальные свойства игрока, сильно снизить объём рендеринга. Можно сделать ещё один шаг и использовать для наших объектов временный экран. Отрисовывая объекты непосредственно во временный контейнер, мы можем гарантировать, что они будут отрисовываться только при необходимости. Аналогично упомянутой выше оптимизации, в начальной итерации нашего кода используется простой опрос:

Object NPC {     boolean hasChanged; //флаг имеет значение true, когда в объект внесены изменения  //функция, возвращающая флаг Function pollObjectChanged( return hasChanged(); } }

Теперь в каждом кадре вместо выполнения множества функций мы сначала убеждаемся, что это необходимо. Хотя эта реализация тоже очень проста, она может значительно повысить эффективность игры, особенно когда дело доходит до статичных предметов и медленно обновляемых объектов наподобие HUD. В своей игре вы можете зайти ещё дальше и разбить флаг на несколько более мелких компонентов для сегментирования функционала. Например, можно добавить отдельные флаги для изменения данных и графических изменений.

Непосредственные вычисления и поиск значений

Эта оптимизация применялась с самых первых дней игровой индустрии. Выбрав компромисс между вычислениями и поиском значений, можно значительно снизить время обработки. В истории гейминга хорошо известным примером такой оптимизации является хранение значений тригонометрических функций в таблицах, потому что в большинстве случаев эффективнее хранить большую таблицу и получать данные из неё, а не выполнять расчёты на лету, что увеличивает нагрузку на процессор. Сегодня нам редко приходится делать выбор между хранением результатов и выполнением алгоритма. Однако всё ещё встречаются ситуации, в которых такой выбор может снизить объём используемых ресурсов, что позволяет добавить в игру новые возможности, не перегружая при этом систему. Реализацию такой оптимизации можно начать с определения часто выполняемых в игре вычислений или частей вычислений: чем больше вычисления, тем лучше. Однократное выполнение повторяющихся частей алгоритма и сохранение их значений часто может сэкономить значительную долю вычислительных ресурсов. Даже выделение этих частей в отдельные игровые циклы помогает оптимизировать производительность. Например, во многих шутерах с видом сверху часто есть большие группы врагов, выполняющих одинаковые действия. Если в игре есть 20 врагов, каждый из которых движется по дуге, то вместо вычисления каждого движения отдельно, более эффективно будет сохранять результаты работы алгоритма. Благодаря этому их можно изменять на основании начальной позиции врага. Чтобы понять, будет ли этот метод полезен в вашей игре, попробуйте использовать бенчмарки для сравнения разницы ресурсов, используемых при вычислениях и хранении данных.

Использование времени простоя процессора

Это больше относится к использованию бездействующих ресурсов, но при правильной реализации для объектов и алгоритмов вы можете располагать задачи таким образом, чтобы повысить эффективность кода. Чтобы начать применять чувствительность к простою в собственном ПО, вам для начала нужно выделить те внутриигровые задачи, которые не критичны ко времени и могут вычисляться до того, как они станут нужны. В первую очередь стоит искать код с подобным функционалом в том, что относится к атмосфере игры. Погодные системы, не взаимодействующие с географией, фоновыми визуальными эффектами и фоновым звуком обычно можно отнести к вычислениям во время простоя. Кроме атмосферных вычислений, к области вычислений во время простоя относятся обязательные вычисления. Можно сделать более эффективными происходящие независимо от игрока вычисления искусственного интеллекта (потому что они или не учитывают игрока, или пока не взаимодействуют с игроком), а также вычисляемые движения, например скриптовые события. Создание системы, использующей режим простоя, не просто обеспечивает повышенную эффективность — её можно применять для масштабирования визуального качества. Например, на слабой машине игроку может быть доступен только базовый («ванильный») игровой процесс. Однако если система обнаруживает кадры, в которых почти не выполняется вычислений, то мы можем использовать их для добавления частиц, графических событий и других атмосферных штрихов, придающих игре больше пафоса. Для реализации такой возможности нужно использовать функционал, имеющийся в выбранном движке, фреймворке или языке, позволяющий определять, насколько сильно используется процессор. Задавайте в своём коде флаги, позволяющие с лёгкостью определить объём «лишних» вычислительных ресурсов и настраивайте подсистемы таким образом, чтобы они проверяли эти флаги и вели себя соответственно.

Сочетание оптимизаций

Объединив эти методы, можно сделать код гораздо более эффективным. Благодаря эффективности появляется возможность добавления новых функций, совместимости с бОльшим количеством систем и обеспечения качественного игрового процесса.

Благодаря этому руководству вы сможете добиться плавности при передвижению мыши, пропадут фризы и поднимется fps. Игра будет быстрее сворачиваться — разворачиваться. Отзывчивость станет лучше.

Оно также подойдет и для ноутбуков. Не стоит бояться переходить на Win10.

Главное правильно настроить )

В этом руководстве я не затрагиваю отключения слежки и телеметрии так как это ПОЛНАЯ ФИГНЯ.

При отключении выше сказанного я не увидел никаких улучшений в положительную сторону.

Руководство очень объемное.Необходимо все делать последовательно. Раздел за разделом. А еще лучше — на чистую систему.

Но по окончанию настройки — вы не пожалеете.

Для того чтобы fps был как можно выше — нужен хороший процессор.

На мой взгляд — минимум AMD FX 6300 + хорошее охлаждение (Башенный куллер) и видеокарта Nvidia GTX 660, хороший блок питания — и да — блок питания тоже косвено влияет на FPS, фризы, лаги.

На старой моей системе была точно такая же проблема — CEN9 — КАК Я ПОФИКСИЛ КОМП ? КАК СПРАВИТЬСЯ С ЛАГАМИ ?

Старая моя система была на материнке AM3, процессор AMD phenom ii x4 955 и видеокарта GTX 660.

С перехода со старого 500W блока на новый 650W у меня пропали просадки кадров и фризы.

Игра стала стабильной. Менялся только блок питания.

Нету никаких гарантий что вам поможет замена блока.

Но имейте ввиду — если у вас мощная система и есть просадки кадров ,лаги, фризы — возможно дело в блоке питания.

Все выводы сделаны из моего личного опыта.

В STEAM есть руководство с таким же названием — там будут ссылки на программы.

Введение

Для начала необходимо создать резервную копию системы

Это необходимо для отката системы если что-то пойдет не так.

Мой компьютер — свойства системы — защита системы

1550581699180375150.png

Выбираем диск С и нажимаем настроить — даем 1-2 % диска под востановление

1550581700146545801.png

Далее нажимаем на создать — создатся точка востановления

1550581701119381700.png

Удаляем временные файлы диска С для освобождения места под новые обновления.

Допустим вы обновляли Windows. Установщик весит обычно 15-20 Gb. И если у вас на диске С менее 15-20 GB Windows банально не видит следующую сборку из за нехватки места на диске. Удаляем старый установщик.

На сегодняшний день последняя сборка win10_17763.rs5_release.180914-1434

Пуск — параметры — система

Память устройста

155058213812139707.png

Диск C (на каком диске установлена Windows)

1550582159172786983.png

Временные файлы

155058218711941516.png

Выбираем все и нажимаем кнопку удалить

155058220315253132.png

Обновляем Windows до последней версии. Необходимо свободного места на диске не менее 20-25Gb – иначе Windows может не увидеть последнее обновление.

Пуск — параметры — система — обновление и безопасность — центр обновления windows — проверить наличие обновлений.

Если надо скачать windows — берем www.microsoft.com/ru-ru/software-download/windows10 — это последняя оффициальная сборка.

Нажимаем — скачать средство сейчас. Запускаем — создать установочный носитель — руский, x64 — ISO файл — выбираем куда скачать.

После скачиваем и запускаем UltraISO — файл — открыть — выбираем скачанную windows — вставляем флэшку (минимум 8GB) — самозагрузка — записать образ диска — форматируем флэшку — записать.

После перезагружаем и заходим в BIOS

Выбираем режим загрузки:

Если у вас диск (весь венчестер) формата mbr — выбираем загрузку bios — legacy, или legacy+uefi

Если у вас диск формата gpt — выбираем UEFI

В приоретете загрузки выбираем флэшку на первое место на 2 место выбираем ваш винчестер куда будете ставить windows.

После установки и запуска – активируем windows — активатор найдите в интернете

2) Настраиваем Windows

Для этого в пуске запускаем Microsoft Store

Параметры — Игры — Меню игры и все отключаем

В пункте игровой режим — оставляем включенным

Устанавливаем NetFraemwork 3.5 и DirectPlay из программы и компоненты.

DirectPlay — сетевой программный интерфейс (API), обеспечивающий обслуживание на транспортном и сеансовом уровне.

Панель управления — Программы и компоненты — Включение и отключение компонентов Windows — и включаем NetFraemwork 3.5 и Legacy Components — DirectPlay (в старых сборках вместо Legacy Components — Компоненты прежних версий)

Установка DirectX и Mem reduct

DirectX — Этот автономный набор пакет с официального сайта. В стандартной windows отсутствуют многие компоненты от 9-11версии, которые необходимы играм и некоторым приложениям. «Доустановить» их надо только через автономный пакет (веб-установщик тут не поможет). Доустанавливать надо после каждого изменения номера сборки.

DirectX который устанавливается вместе с игрой — имеет не полный пакет.

mem reduct] — небольшое приложение для освобождения страниц памяти системы. Дает возможность освободить системный кэш, модифицированные и простаивающие страницы памяти. Ввобщем — лишняя переустановка не навредит.

Отключаем анимацию и увеличиваем файл подкачки

Заходим в свойства компьютера.

155058276718268039.png

Увеличиваем файл подкачки.

У кого 16Gb ОЗУ — можете не ставить файл подкачки.

Для сравнения попробуйте поставить подкачку, а потом убрать и сравнить производительность.

1550582794112622151.png

Выставляем высокую производительность системе.

Панель управления — Электропитание

Настраиваем мышь в Windows

Убираем акселерацию- убираем галку с пункта «Включить повышеную точность установки указателя»

Выставляем чуствительность 6/11 (так ставят большинство киберспортсменов)

1550582850152184901.png

7<index>

Каждый пользователь хоть раз в жизни играл в различные игры. Рано или поздно любимые новинки начинают ужасно тормозить, и картинка портит все удовольствие. Система очень медленная, много ненужных файлов и программ, которые мешают нормальной работе. Играть очень хочется, но системные требования продолжают лишь расти. Рассмотрим, как же с этим справиться, чтобы немного улучшить производительность компьютера, какие способы существуют для ускорения и оптимизации работы Windows 10.

Оптимизация Windows 10 для игр: способы ускорения операционной системы

Какой бы новой операционной системой ни была Windows, она все ещё требует доработок. ОС приносит удобства для пользователей, постоянные обновления, но в некоторых случаях хочется повысить производительность своего компьютера. Очень много владельцев старых ПК, или не самых новых комплектующих, а поиграть в игры получая удовольствие от быстрой картинки всегда в радость. Да и ждать пока устанавливаются игры не хочется.

Рекомендуем ознакомиться

Проводить оптимизацию для Windows 10 довольно сложно, ведь существует много способов для очистки, много файлов и программ которые лишь заполняют место на диске, тормозят систему и, конечно же, игры. Прежде чем удалять какие-либо программы, файлы или службы обязательно проверьте в интернете, что именно можно очищать.

Как ускорить установку игры на Windows 10

  1. Щёлкаем правой кнопкой мыши по пуску и выбираем пункт «Диспетчер задач».
    Переход в «Диспетчер задач»
  2. Открывается список процессов на вашем компьютере в данный момент.
    Переходим
  3. Рассмотрим на примере игру Grand Theft Auto 5, которая сейчас устанавливается на компьютер. Чтобы загрузка ускорилась нужно перейти на вкладку «Подробности», и отыскать в списке «setup.exe» игры, которая сейчас у вас загружается.
    Ищем
  4. Нажимаем правой кнопкой мыши по «setup.exe». Далее, щёлкаем «Задать приоритет». Изначально у вас будет режим «Обычный». Переключите его на «Высокий».
    Выбираем команду «Задать приоритет»
  5. Для второго файла игры делаем то же самое.
    Ставим «Высокий приоритет»
  6. Если возникает ошибка «Операция не может быть завершена. Отказано в доступе» при выборе режима «Высокий», то переходим во вкладку «Процессы» и ставим галочку на «отображать процессы всех пользователей».
    Выбрать «Отображать процессы всех пользователей
  7. Загрузка вашей игры ускорится, поэтому лучше не открывать лишних программ или приложений для её скорейшего окончания.

Увеличение производительности компьютера в играх

Требования к играм с годами все растут, а иногда нет возможности приобрести дорогие комплектующие, или вовсе их постоянно менять. Становиться очень грустно, когда любимая игра начинает тормозить. Разберём, как именно можно улучшить производительность вашей системы и компьютера.

Первый способ

  1. Нажимаем правой кнопкой мыши по «Этот компьютер», и выбираем в списке пункт «Свойства».
    Переходим к свойствам компьютера
  2. Далее, нужно подождать пока откроется следующее окно и с правой стороны найти пункт «Дополнительные параметры системы».
    Выбираем «Дополнительные параметры системы»
  3. Сразу же открывается вкладка «Дополнительно». На ней можно увидеть сбоку пункт «Параметры». На него мы и нажимаем.
    Переход к «Параметры»
  4. Здесь открывается большой список эффектов, которые сейчас включены в вашей системе. Это различная анимация в меню «Пуск», гладкое прокручивание списков, даже тени отбрасываемые значками на вашем рабочем столе. Эти особые эффекты включают в себя множество анимации, теней, отображения, прозрачности меню, сглаживания. Чтобы улучшить производительность нужно нажать на «Обеспечить наилучшее быстродействие». Тогда автоматически снимутся все галочки с особых эффектов.
    Особые эффекты

Второй способ

  1. Первое, что нужно сделать, это прописать в строке команду «msconfig», и нажать «Enter».
    Прописываем команду «msconfig»
  2. Переходим во вкладку «Автозагрузка» и видим те приложения, работающие в данный момент в фоновом режиме. Просто щёлкаем правой кнопкой мыши по любой программе и выбираем «Отключить». Теперь эти приложения не будут запусткаться при загрузке вашей операционной системы, а также не увеличит скорость компьютера.
    Выключаем приложения
  3. После этого лучше перезагрузить компьютер.

Третий способ

  1. Прописываем в строке «Панель управления» для быстрого её нахождения. Щёлкаем по ней.
    Ищем «Панель управления»
  2. Далее, в открывшемся окне видим список всех компонентов, где нам нужно найти «Программы и компоненты».
    Переходим к «Программы и компоненты»
  3. Здесь открывается список ваших установленных программ. Просмотрите внимательно каждую программу. Некоторые из них могут быть вредоносными, засоряют ваш компьютер, а также занимают много места.
    Удаление ненужных программ
  4. Чтобы удалить приложение нажмите по нему правой кнопкой мыши и выберете «Удалить». Удаление многих программ позволит системе быть более быстродейственной, и снять большую нагрузку.
    Выбираем «Удалить»

Оптимизация пинга, FPS в онлайн-играх

Первый способ

Этот способ отлично поможет повысить пинг, а также количество кадров в секунду.

  1. Первым делом нужно ввести в командной строке «Электропитание».
    Вводим «Электропитание»
  2. Здесь мы видим настройки электропитания вашего компьютера. Нам нужно переключить со сбалансированной на высокую производительность.
    Нажимаем «Высокая производительность»
  3. Готово. Теперь перезагрузите компьютер.

Второй способ

Теперь можно очистить раздел самой системы.

  1. Заходим в «Этот компьютер» и нажимаем по нему правой кнопкой мыши. Переходим в «Свойства».
    Переходим в «Свойства»
  2. Здесь переходим во вкладку «Общие» и нажимаем «Очистка диска».
    Проводим очистку диска
  3. Ставим спокойно везде галочки, ведь очистка диска уберёт только временные файлы.
    Выбираем файлы для удаления

Программы для оптимизации работы Виндовс

  1. Advanced System Optimizer — программа платная, но оптимизирует компьютер на высоком уровне.
    Программа с помощью которой можно почистить компьютер

    Она очищает систему от временных файлов, различного мусора, или ошибочных файлов. В программе можно удалить файлы, которые вы уже не используете, запустить обновление драйверов. Если вы случайно удалили или потеряли программу, файлы, Advanced System Optimizer поможет отыскать их. Утилита способна провести и дефрагментацию диска. Что касается оптимизации системы для игр, то в программе нужно перейти во вкладку «Оптимизация Windows», а дальше «Оптимизация для игр». После этого мастер поможет вам с настройками.

    Выбираем «Оптимизация для игр»
  2. Game Buster — программа, созданная специально для улучшения производительности в играх. Большим плюсом в ней является работоспособность во всех версиях операционной системы Windows. Отлично диагностирует компьютер и ищет уязвимости, и исправляет их. Программа ускоряет игры, а также их загрузку. В ней можно даже делать запись видео вашей игры.
    Ускоряет игры
  3. Game Gain является ещё одной бесплатной программой для улучшения производительности компьютера. Очень проста в использовании, для оптимизации системы, и выявления уязвимостей. Достаточно нажать на кнопку «Optimise now» и подождать минуту пока программа все просканирует и очистит ПК.
    Оптимизация компьютера

Видео: как добиться большего FPS в играх на Windows 10

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

</index>Используемые источники:

  • https://habr.com/post/358176/
  • https://pikabu.ru/story/polnaya_nastroyka_i_optimizatsiya_windows_10_dlya_igryi_csgo__chast_1_6517701
  • https://dadaviz.ru/optimizatsiya-windows-10-dlya-igr/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации