Все статьи
Туториалы · 7 min read

Бюджеты производительности для арта окружений: числа прежде красоты

Как задать бюджет производительности для сцен окружения: доли кадрового времени по системам, потолки draw call'ов и памяти, метод измерения с тремя камерами, ритм ревью и порядок рычагов, которые тянуть, когда сцена выходит за бюджет.

Illustration of a performance gauge above stacked millisecond budget bars

Коротко: «оптимизировать в конце»: так проекты гибнут на сертификации. Бюджет производительности (потолки кадрового времени и памяти, согласованные до того, как контент построен) превращает оптимизацию из кризиса в рутинную проверку. Бюджетируйте миллисекунды, а не полигоны, делите кадр как пирог, измеряйте на трёх фиксированных камерах, делайте числа видимыми там, где идёт работа, и тяните рычаги в порядке рентабельности, когда сцена краснеет. Эта статья даёт всю систему, со стартовыми числами, которые можно адаптировать.

Лесистые гребни, тающие в дымке, слой за слоем Виста всегда работает как счёт: максимальная дальность отрисовки, каждая система на экране разом, каждое LOD-кольцо активно. Бюджетируйте под этот вид, и коридор позаботится о себе сам.

Бюджетируйте кадровое время, а не полигоны

Полигонные бюджеты давно устарели; современные GPU задыхаются на draw call'ах, овердро, тенях и пропускной способности памяти задолго до сырых треугольников. Бюджетируйте то, что реально измеряете: миллисекунды на систему, на вид.

Игра в 60 fps владеет 16,6 мс на кадр; при 30 fps — 33,3 мс. Это весь бюджет, делимый всем: геймплеем, физикой, ИИ, VFX, UI и окружением. Долю окружения обычно согласовывают с рендерингом и геймплеем, но она должна быть числом, согласованным и записанным, иначе всякая дискуссия о том, «слишком ли дорога» сцена, схлопывается в вкус и старшинство. Рядом с кадровым временем задайте потолки величинам, что его связывают:

  • draw call'ы на вид (связывают CPU задолго до насыщения GPU),
  • память текстур и мешей на зону стриминга (число, что решает, стримите вы или заикаетесь),
  • тенекидающие источники света в виду,
  • горячие точки овердро: растительность и VFX суть обычные подозреваемые.

Точные потолки зависят от платформы и движка; дисциплина иметь потолки переносится на каждый проект, который вы когда-либо выпустите. Число, в котором можно ошибиться, бьёт вайб, о котором можно лишь спорить.

Делите кадр как пирог, в миллисекундах

Дайте каждому отделу долю (геймплей, VFX, UI, окружение), затем поделите долю окружения снова: рельеф, растительность, пропы, вода. «Слишком ли дорог этот лес?» становится объективным вопросом.

Рабочее стартовое деление для тайтла в 60 fps, пересматриваемое по проекту: окружение всего 6–8 мс, из них рельеф ~1,5, растительность ~2–2,5, пропы и структуры ~1,5, вода и атмосфера ~1. Суть не в этих точных числах, а в том, что когда лес мерит 4 мс против доли в 2,5 мс, разговор становится «какой рычаг тянем» вместо «чья вина».

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

Измеряйте на трёх фиксированных камерах

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

Случайные пролёты дают случайные числа и нефальсифицируемые аргументы. Фиксированные камеры дают линии тренда: тот же вид, измеряемый еженедельно, показывает ровно, когда и где приземлилась регрессия и кого о ней спрашивать. Худшая виста заслуживает главную роль, потому что складывает всё разом: максимальную дальность отрисовки, каждое LOD-кольцо, рельеф, воду и небо одновременно. Карта, что держит бюджет на своей висте, держит его почти везде; коридоры вам льстят, а висты говорят правду.

Сохраните позиции камер в карте, чтобы каждый воспроизвёл точный кадр. «На моей машине под каким-то углом идёт нормально» — не данные; а «бюджетная камера 2 мерит 9,2 мс на минимальной спецификации, вверх с 7,8 на прошлой неделе» звучит как баг-репорт с подозреваемым.

Сделайте бюджет видимым там, где идёт работа

Бюджет в вики мёртв: он живёт как оверлеи статов во время дрессинга, проверка против потолков перед мержами контента и предупреждения, когда бейк выскочит за число инстансов.

Художники охотно попадают в бюджеты, когда обратная связь мгновенна, и злятся на них, когда те приходят баг-тикетом через три месяца после выпуска работы. Инструментальная сторона тут важна тихо, но решительно: когда scatter и блендинг запекают в нативные примитивы движка (обычные инстансированные меши и foliage, как делает Numivo), ваш существующий профайлер говорит о них неприкрашенную правду, без плагинного рантайма, мутящего числа, и каждый стандартный рычаг (дистанции отсечения, LOD'ы, число инстансов) применяется без изменений. Бюджет, что можно измерить лишь через чёрный ящик, довольно быстро перестанет внушать доверие.

Ритм ревью, который приживается

Еженедельные снимки трёх бюджетных камер (пять минут), автоматизированная проверка потолков на мержах контента и ежемесячный ревью самих потолков: бюджеты суть оценки, и честный пересмотр бьёт молчаливое нарушение.

  • Еженедельно: скриньте три камеры с включёнными статами; логируйте кадровое время и память в общую таблицу. Тренды появляются за месяц, а скачок указывает на работу конкретной недели.
  • На мерже: автоматизированная проверка сравнивает сцену с потолками. Красные числа открывают разговор, а не сломанный билд: цель в том, чтобы дать осознание, не бюрократию, а жёсткая блокировка учит людей обманывать проверку.
  • Ежемесячно: пересмотрите сами доли. Реальность в середине проекта всегда отличается от препродакшн-догадок; открытая правка бюджета держит его достоверным. Бюджет, что все тихо игнорируют, хуже никакого, потому что учит команду, что потолки — театр.

Когда числа краснеют

Тяните рычаги в порядке рентабельности: дистанции отсечения и настройки теней сначала (минуты, огромные выигрыши), затем LOD'ы и импосторы, затем число инстансов, и лишь последним сам арт.

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

Дорогая ошибка — прыгать сразу к «удали половину деревьев». Плотность — самый видимый рычаг и обычно не самый дешёвый: виста, перебравшая на 2 мс, обычно возвращается зелёной от одной лишь настройки дистанции теней и отсечения, обе невидимы игрокам. Удаление контента остаётся крайним средством именно потому, что это единственный рычаг, что игроки могут видеть; каждая ступень над ним на лестнице бесплатна с точки зрения арта. Идите вниз по лестнице, и сохраните вид, отыгрывая миллисекунды; идите снизу вверх, и сделаете игру уродливее, прежде чем попробуете бесплатные выигрыши.

Полевые цифры, которые стоит украсть

  • Кадр в 60 fps: 16,6 мс; окружения обычно выторговывают 6–8 мс
  • Рабочее подделение окружения: рельеф 1,5 / растительность 2–2,5 / пропы 1,5 / вода и атмосфера 1 (мс)
  • Бюджетных камер на карту: 3 (виста, бой, интерьер), сохранены в карте
  • Стоимость еженедельного замера: ~5 минут; ценность: линии тренда вместо споров
  • Порядок рычагов при красном: отсечение → тени → LOD'ы → инстансы → арт

Мини-FAQ

Кому принадлежит бюджет окружения? Одному названному человеку (обычно тех-артисту) принадлежит измерение; потолки во владении совместно с рендерингом. Бюджеты без владельца за месяц вырождаются в фольклор, потому что «все ответственны» значит, никто не мерит.

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

Нужно ли всё это для маленького инди-проекта? Масштабируйте вниз, не прочь. Одна бюджетная камера, один потолок (кадровое время на вашей минимальной машине), проверяемый еженедельно. Пятиминутная привычка спасает последний месяц независимо от размера команды, потому что режим сбоя всегда один и тот же: стоимость обнаруживают, когда её уже дорого чинить.

А память против кадрового времени? Это разные бюджеты с разными режимами сбоя: кадровое время роняет FPS, память роняет стриминг в заикания или крэши. Бюджетируйте оба; на консоли память часто более жёсткий потолок, и именно она проваливает сертификацию, а не просто плохо ощущается.

Бюджет не ограничивает мастерство; это причина, по которой красивая сцена всё ещё выглядит красиво в 60 fps на железе, которым игроки на деле владеют. Команды, что относятся к производительности как к общему дизайн-ограничению, выпускают игры красивее команд, что относятся к ней как к финальному боссу.