RU/GTA:SA Streaming Garbage Collection

From Multi Theft Auto: Wiki

Система GTA:SA Streaming Garbage Collection отслеживает использование игровой памяти. Она обеспечивает ограничение выделяемой на стриминг памяти для всего игрового движка. Память для стриминга рассчитывается сложением размера порции файла-ресурса каждого загруженного игрового ресурса. Когда лимит достигнут, система попытается высвободить место путем удаления ресурсов из экземпляров игры. Если эта процедура не удалась, игровой движок повиснет (умышленно). Этот лимит может быть отрегулирован настройкой опции видеопамяти в ваших настройках видео.

Активные Потоковые Сущности

Полный потенциал GTA:SA стриминга.

Объекты, здания и даммисы которые имеют свои загруженные RenderWare ресурсы, будут добавлены в активный сборщик мусора сущностей. Как только он заработает, он начнет удалять RenderWare объекты всех зарегистрированных сущностей, которые находятся вне поля зрения или далеко. Если количество ссылок на модель достигло нуля, система освободит ресурс модели. Изначально, движок может обрабатывать до 1000 сущностей в его отсортированном контейнере (CRenderChainInterface <streamingChainInfo>). Если выделение узла контейнера не удалось, запрашивающая сущность уничтожит свои RenderWare данные. Следовательно, изначально только 1000 объектов, зданий или даммисов могут быть отрисованы в одно время. Неспособность выделить узлы контейнера часто была заметна на дальних дистанциях отрисовки (также известна как blinking building bug).

Разработчик MTA ccw это человек, который первый нашел blinking building bug.

Методы Выделения Нодов

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

Лучший способ заключается в сборе мусора мира по востребованию. В этом случае только сущности, что находятся вне поля зрения потеряют свои RenderWare данные. Производительность этого метода зависит как от типа зарегистрированных потоковых GC сущностей, так и от количества зарегистрированных сущностей.

Если память и производительность GPU не вызывают беспокойства, движок может выделить новые ноды в систему чтобы больше сущеностей могли иметь свои RenderWare данные выделенные для мира. Это дает теоретически бесконечную видимость сущностей на экране.

Пока каждый метод имеет свои сильные и слабые стороны, оптимальным путем для стриминга мира будет переключение между этими методами во время работы. MTA:Eir поставляется со стандартным ресурсом streaming_opt, который будет делать это за вас. Идея заключается в том, что потоковые узлы будут выделяться в зависимости от мощности движка и по востребованию.

Различия реализации между MTA версиями

MTA:BLUE

Баг с расстоянием отрисовки был исключен в MTA:BLUE. Максимальное количество управляемых потоковых сущностей было увеличено до 2500 для компенсации больших расстояний отрисовки. Это значительно повышает производительность движка, потому как может быть выделено большее количество памяти на игровые сущности.

MTA:Eir

В MTA:Eir баг с расстоянием отрисовки был также исправлен. На данный момент жесткий максимум был оставлен на 1000 сущеностях внутри системы сбора мусора; и когда лимит будет достигнут, система выделит новые ноды в отсортированный контейнер. Здесь теоретически нет ограничений на стриминг объектов, даммисов и зданий по этому пути. Для изменения поведения выделения потоковых нодов, через скриптовые функции были добавлены многочисленные опции. Мерцание уже не баг, а возможность, которая может быть выключена. Используя скриптовые Lua функции можно получить количество выделенных нодов и свободных для выделения.

Ссылки