Invasion & H2O
Слышала, ты увлекаешься идеальными прохождениями? Может, проверим, как у нас с таймингом? Я тут пытаюсь доли секунды срезать, но мозг постоянно придирается к каждой задержке. У тебя, кажется, для этого есть склонность. Пообмениваемся опытом?
Да, принимаемся за дело. Начни с того, чтобы установить логгер времени кадров, например, FRAPS или встроенную консоль, и запусти базовый тест. Проверь, нет ли скачков, превышающих целевое время в миллисекундах. Если ты выходишь за 1.2 миллисекунды от целевого значения в 60 кадров в секунду, то это уже 16.6 миллисекунд, то есть ты уже превышаешь лимит. Самое главное – определить, в чём причина: проблема в загрузке текстур, в шейдерах или в процессоре? Как только определишь, подкрути только этот параметр: уменьши разрешение текстур, упрости шейдеры или перенеси сложную логику на следующий кадр. Ещё следи за очередью событий; иногда даже небольшая задержка ввода может всё испортить. Если нужна максимальная производительность, убери ограничение частоты кадров; иногда разблокированный FPS даёт более стабильную производительность. Скажи, какой движок используешь, и тогда мы сможем точно определить, что нужно настраивать. Сделаем всё идеально.
Отлично, ты в правильном направлении – сначала логи, потом избавляйся от лишнего. Только помни, кадр, который пропустил – это как камешек в зеркально гладком озере, портит картинку, а не скорость. Скажи, какой движок используешь, и подстроим его быстрее, чем рябь на воде.
Понял, у меня Unity 2021.6 на неплохом компьютере с монитором 120 герц. Стремимся к 8 миллисекунд задержки – готов копаться в профилировщике. Начнём с графика времени кадра, посмотрим, где эти провалы. Сейчас вытащу свой скрипт, который записывает микро-таймеры, будем его подправлять. Готов покорять новые вершины?
Смотри, вытащи график, подсвети скачки, потом выясни, что заставляет время отрисовки превышать 8 миллисекунд. Начни с отключения всех фоновых процессов, зафиксируй частоту кадров на 120 Гц, и посмотри, останутся ли скачки. Если останутся, проверь загрузку текстур и сложность шейдеров. И, кстати, если кофе слишком крепкий, а дождь слишком сильный, настроение у Воды, может, подкидывает нам сюрприз – ерунда, просто суеверие, не наука. Расскажи, что увидишь в профайлере.
Я график посмотрел, красные пики больше 8 миллисекунд выделил. Когда фоновые задачи отключены и частота 120 герц ограничена, пики остаются на уровне 10–12 миллисекунд, так что это не шумы системы. Основная проблема – загрузка текстуры на 47 кадре: стримится текстура объёмом 8 гигабайт, да ещё и шейдерная сложность материала персонажа добавляет 3 миллисекунды к нагрузке на видеокарту. Если запечь текстуру вдвое меньше и заменить шейдер на более простой, пик падает до 7,5 миллисекунд. Это оптимально. Давай проверим это изменение дальше.
Замечательный выбор с этой полуфабрикатной рендер-сцены. Эти текстуры в 8 ГБ — как десятиминутный водопад, когда пытаешься поймать миллисекундные пики. Убери этот шейдер, добейся тех самых 7.5 миллисекунд — золотая середина, и увидишь, как фракция выровняется. Если все равно будут сбои, возможно, видеокарта сегодня… капризная, как вода в чайнике. Продолжай логировать, оптимизируй, и давай посмотрим, как эта красота разлетится на осколки.
Зафиксируем эту текстуру, замени шадер на облегчённую версию и снова запусти логирование. Если снова увидим задержку в 1 миллисекунду, попробуй отключить нормал-мап для этого материала – эти мелкие неровности сильно нагружают затенение. И следи за промахами кэша процессора; если главный поток тянет слишком много объектов, раздели вызовы отрисовки. Будем повторять, пока каждый кадр не будет под 8 миллисекунд – никаких артефактов, только чистое отражение. Готова к следующему запуску?
Замкнула половину ресурсов, поменяла шейдер – пора снова к логгеру. Если этот 1-миллисекундный сбой всё ещё вылезает, значит, используем нормал-мап. А если кэш процессора начнёт глючить, нужно разбить эти вызовы отрисовки. Настроение воды стабилизировалось, так что поддержим отражения безупречными. Запускай.