Код и математика · курс
Оптимизация
17 уроков · 5 глав
Почему игра тормозит и как это чинят: бюджет кадра, порядок поиска, профайлеры видеокарты и процессора, LOD и Nanite, компиляция шейдеров, тик, загрузка, сборка мусора и память, цена эффектов, анимации и звука, настройки качества и большой мир. Читать по порядку.
Курс ещё пишется. Готово уроков: 4 из 17.
Глава 1 · Бюджет кадра
1LOD, инстансинг и Nanite: как рисуют миллион травинокУрок · базаКак большая сцена остаётся в бюджете: две цены — треугольники и вызовы отрисовки; уровни детализации по размеру на экране, прыжки и дизеринг, HLOD и импостеры; почему мелкие треугольники дороги; инстансинг и данные копии; отсечение по пирамиде, дальности и перекрытию (Hi-Z); Nanite — кластеры, ошибка меньше пикселя и что он не любит.2Бюджет кадра на видеокартеУрок · глубжеПоследний урок курса: бюджет кадра в миллисекундах (16.7 мс при 60 к/с) и почему мерить в мс, а не в FPS; процессор и видеокарта работают одновременно, кадр задаёт самое медленное звено, опыт с разрешением; задержка ввода и очередь кадров; смета видеокарты по проходам из курса; почему трава, тени и прозрачность дорогие; видеопамять, стриминг текстур и её переполнение; как искать узкое место профилировщиком; чек-лист экономии для художника.
Глава 2 · Найти узкое место
3Оптимизация по шагам: измерить, найти, починитьскороПо шагам: выбрать целевую частоту кадров и железо, измерить, понять, кто узкое место — процессор, видеокарта, память или диск, — поправить одно и измерить снова.4Разобрать кадр по проходам: RenderDoc и профайлер UnrealскороПо шагам: снять кадр, пройти его от первого прохода до картинки на экране, найти, что рисуется зря и что съедает больше всего времени, и проверить догадку.5Профайлер: Unreal Insights по шагамскороПо шагам: записать трассу, найти долгий кадр, разобрать его по потокам и функциям, отличить нагрузку процессора от ожидания видеокарты и проверить поправку.
Глава 3 · Рывки и память
6Рывки при первом показе: компиляция шейдеровскороОткуда берутся рывки, когда впервые появляется новый эффект или материал: видеокарте нужно собрать программу под конкретную связку настроек. Варианты шейдеров, кэши, прогрев заранее и что может сделать художник.7Цена тика: что считать каждый кадрскороПочему тысяча акторов с пустым тиком тормозит: стоимость вызова каждый кадр, тик реже и по событию, группы и порядок тика и что переносить из тика в таймеры и события.8Загрузка без фризов: мягкие ссылки и подгрузка в фонескороПочему игра замирает при открытии меню или входе в новую зону: жёсткие ссылки тянут за собой весь граф ассетов. Мягкие ссылки, подгрузка в фоне, загрузочные экраны и как увидеть, что загружается.9Сборка мусора и рывкискороПочему раз в несколько секунд кадр подпрыгивает: сборщик мусора проходит по всем объектам. Как уменьшить его работу: меньше временных объектов, пулы, кластеры и настройки частоты.10Память игры: куда уходят гигабайтыскороИз чего складывается память игры: текстуры, модели, звук, анимации, объекты и код. Как посмотреть, кто сколько занимает, бюджеты под платформу и что будет, когда память кончится.
Глава 4 · Цена систем
11Цена эффекта: перерисовка, частицы и LODскороПочему один костёр может съесть кадр: прозрачные слои друг на друге, огромные частицы у камеры, тысячи процессорных частиц. Как измерить эффект, урезать его вдали и не потерять вид.12Цена анимации: кости, LOD и обновлениескороСколько стоит анимированный персонаж и почему сотня врагов тормозит: число костей и влияний, обновление реже вдали, упрощённые скелеты и анимация, запечённая в текстуру, для толп.13Цена звука: голоса, память и стримингскороСколько стоит звук: число одновременных голосов, память под звуки, подгрузка с диска, сжатие и что урезать, когда звуков слишком много.
Глава 5 · Большая игра
14Настройки качества: от слабого ПК до мощногоскороКак одна игра работает на разных компьютерах и консолях: группы настроек качества, что в них меняется, профили устройств, разрешение с апскейлом и что резать первым.15Открытый мир: как он грузится кускамиУрок · глубжеКак большой мир грузится вокруг игрока: сетка ячеек, дальность загрузки, упрощённые копии вдали, слои мира, большие координаты и что ломается на стыках кусков. World Partition в Unreal и как это решают другие движки.16Бюджет открытого мираШпаргалкаОдин экран чисел и проверок: размеры ландшафта, ячейки и дальности загрузки, плотность растительности, дальность отрисовки, что смотреть в профайлере и чек-лист перед тем, как расширять мир.17Грабли производительностискороЧастые причины тормозов: невидимые предметы с тенями, прозрачность во весь экран, тик у тысяч акторов, огромные текстуры на мелочах, подгрузка посреди боя. Симптом, причина, решение.