Оптимизация модов в Assetto Corsa

· 467 words · 3 minute read

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

Такова цена оптимизации, поэтому никто её и не делает и фпс на 80% модов местами просаживается.

Текстуры 🔗

Формат 🔗

Правило номер 1: текстуры только в DDS. PNG или JPG можно использовать во время разработки, но даже одна не-DDS текстура приведёт к микрофризам, поэтому перед релизом нужно всё пережать в DDS.

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

При пережатии оригинальых текстур перед релизом, всегда нужно использовать формат BC7. Этот более новый формат не поддерживается в ksEditor, но поддерживается в игре с CSP и в шоуруме.

Желательно не использовать для новых текстур старые форматы BC1, BC3, BC5. От этих текстур будут фиолетово-зелёные артефакты, как на большинстве “COMP READY” shitmod’ов, продающихся на Vosan.

Разрешение 🔗

Второй момент - разрешение текстур. Одна-две 4K текстуры на мод - допустимо по современным меркам. Но по оригинальным рекомендациям от Кунос, большниство текстур должны быть 128, 256, 512 и в редких случаях 1K.

Часто люди не понимают какая огромная разница в разрешении текстур. 2K текстура не в 2 раза больше, чем 1К текстура, а в 4. Поскольку разрешение тут берётся у каждой стороны квадрата, то и рост размера текстуры у нас в квадрате.

Оптимизация любой текстуры из 4К в 2К сэкономит расход VRAM на эту текстуру в 4 раза. 4K в 1K - уже в 16 раз. Любую возможность пожать текстуру на шаг в разрешении нужно использовать.

Объекты 🔗

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

Материалы 🔗

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

Деревья и 2D трава 🔗

Деревья, хоть 3D, хоть 2D, должны использовать оптизимацию KSTREE_GROUP_X_Y.

Не верить жопомеру 🔗

Чтобы не гадать, можно нужно посмотреть нагрузку, и особенно метрику DIP в приложении Render Stats. В оптимизированных треках от Кунос цифра DIP не переходит границу в 1000.

В ksEditor, Ctrl+D покажет количество Draw Calls.