RU/GTA:SA Streaming Garbage Collection: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
(Created page with "The '''GTA:SA Streaming Garbage Collection system''' monitors the usage of game memory. It maintains the streaming memory limit for the entire game engine. Streaming memory is...")
 
No edit summary
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
The '''GTA:SA Streaming Garbage Collection system''' monitors the usage of game memory. It maintains the streaming memory limit for the entire game engine. Streaming memory is calculated by adding up the resource file chunk size of every loaded game resource. When the limit is reached, the system will attempt to free space by destroying resources from game instances. If this process fails, the game engine will hang (by design). This limit can be adjusted by setting the video memory setting in your MTA video settings.
Система '''GTA:SA Streaming Garbage Collection''' отслеживает использование игровой памяти. Она обеспечивает ограничение выделяемой на стриминг памяти для всего игрового движка. Память для стриминга рассчитывается сложением размера порции файла-ресурса каждого загруженного игрового ресурса. Когда лимит достигнут, система попытается высвободить место путем удаления ресурсов из экземпляров игры. Если эта процедура не удалась, игровой движок повиснет (умышленно). Этот лимит может быть отрегулирован настройкой опции видеопамяти в ваших настройках видео.


==Active Streaming Entities==
==Активные Потоковые Сущности==
[[File:chillahad_farclip.png|200px|thumb|right|Full potencial of GTA:SA streaming.]]
[[File:chillahad_farclip.png|200px|thumb|right|Полный потенциал GTA:SA стриминга.]]
Objects, buildings and dummies that have their RenderWare resources loaded are added into the '''active entity garbage collector'''. Once it runs, it will destroy the RenderWare objects of all registered entities that are '''out of sight''' and '''far away'''. If the model reference count has reached 0, the system will free the model resource. Natively, the engine can '''handle 1000 entities''' in its sorted container (CRenderChainInterface <streamingChainInfo>). If allocation of a container node fails, the requesting entity does destroy its RenderWare data. Hence, natively, only 1000 objects, buildings or dummies can be rendered at a time. The failure to allocate container nodes has often been seen at high draw distances (a.k.a. the '''blinking building bug''').
Объекты, здания и даммисы которые имеют свои загруженные RenderWare ресурсы, будут добавлены в '''активный сборщик мусора сущностей'''. Как только он заработает, он начнет удалять RenderWare объекты всех зарегистрированных сущностей, которые находятся '''вне поля зрения''' или '''далеко'''. Если количество ссылок на модель достигло нуля, система освободит ресурс модели. Изначально, движок может '''обрабатывать до 1000 сущностей''' в его отсортированном контейнере (CRenderChainInterface <streamingChainInfo>). Если выделение узла контейнера не удалось, запрашивающая сущность уничтожит свои RenderWare данные. Следовательно, изначально только 1000 объектов, зданий или даммисов могут быть отрисованы в одно время. Неспособность выделить узлы контейнера часто была заметна на дальних дистанциях отрисовки (также известна как '''blinking building bug''').


The MTA developer [[user:ccw|ccw]] is the person who first found the blinking building bug.
Разработчик MTA [[user:ccw|ccw]] это человек, который первый нашел blinking building bug.


===Node Allocation Methods===
===Методы Выделения Нодов===
There are multiple ways to allocate streaming nodes when they are not available anymore. Natively, the GTA:SA engine '''steals streaming nodes''' from the first entities it finds on the streaming garbage collection entity registry. This is why '''the world flickers wildly''' when it is out of available nodes.
Существуют разные пути для выделения потоковых нодов когда они больше недоступны. Изначально, движок GTA:SA '''берет потоковые ноды''' из первых сущностей которые он находит в регистре сборщика мусора потоковых сущностей. Именно поэтому '''мир дико мерцает''', когда он находится вне доступных нодов.


A better way is to '''garbage collect the world on demand'''. This way only entities that are out of sight will lose their RenderWare data. The performance of this method depends on the nature of the registered streaming GC entities as well as the amount of registered entities.
Лучший способ заключается в '''сборе мусора мира по востребованию'''. В этом случае только сущности, что находятся вне поля зрения потеряют свои RenderWare данные. Производительность этого метода зависит как от типа зарегистрированных потоковых GC сущностей, так и от количества зарегистрированных сущностей.


If memory and GPU performance is not of concern, the engine can '''allocate new nodes into the system''' so that more entities can have their RenderWare data allocated on the world. This results in '''theoretically infinite entities visible''' on the screen.
Если память и производительность GPU не вызывают беспокойства, движок может '''выделить новые ноды в систему''' чтобы больше сущеностей могли иметь свои RenderWare данные выделенные для мира. Это дает '''теоретически бесконечную видимость сущностей''' на экране.


While each method has its strong and weak points, the optimal way to stream the world is to '''switch between these methods at runtime'''. MTA:Eir will ship with a standard '''streaming_opt''' resource that will do this for you. The plan is that streaming nodes will be allocated depending on engine performance and demand.
Пока каждый метод имеет свои сильные и слабые стороны, оптимальным путем для стриминга мира будет '''переключение между этими методами во время работы'''. MTA:Eir поставляется со стандартным ресурсом '''streaming_opt''', который будет делать это за вас. Идея заключается в том, что потоковые узлы будут выделяться в зависимости от мощности движка и по востребованию.


==Implementation differences between MTA versions==
==Различия реализации между MTA версиями==
===MTA:BLUE===
===MTA:BLUE===
The draw distance bug has been decimated in MTA:BLUE. The maximum number of managed streaming entities has been increased to 2500 to compensate for large drawing distances. That increases the engine performance a lot, as more streaming memory can be allocated by game entities.
Баг с расстоянием отрисовки был исключен в MTA:BLUE. Максимальное количество управляемых потоковых сущностей было увеличено до 2500 для компенсации больших расстояний отрисовки. Это значительно повышает производительность движка, потому как может быть выделено большее количество памяти на игровые сущности.


===MTA:Eir===
===MTA:Eir===
In MTA:Eir, the drawing distance bug has been fixed, too. While the hardcoded maximum has been left at 1000 entities inside of the garbage collection system, when the limit has been reached, the system allocates new nodes into the sorted container. There is theoretically no limit to object, dummy and building streaming this way.
В MTA:Eir баг с расстоянием отрисовки был также исправлен. На данный момент жесткий максимум был оставлен на 1000 сущеностях внутри системы сбора мусора; и когда лимит будет достигнут, система выделит новые ноды в отсортированный контейнер. Здесь теоретически нет ограничений на стриминг объектов, даммисов и зданий по этому пути.
Для изменения поведения выделения потоковых нодов, через [[MTA:Eir/New_Scripting_Functions|скриптовые функции]] были добавлены многочисленные опции. Мерцание уже не баг, а возможность, которая может быть выключена. Используя скриптовые Lua функции можно получить количество выделенных нодов и свободных для выделения.


Multiple options have been added through scripting functions to change the streaming node allocation behavior. The flickering is no longer a bug, but a feature that can be disabled. Using [[MTA:Eir/New_Scripting_Functions|scripting functions]] Lua scripts can retrieve the amount of nodes allocated and free to be allocated.
==Ссылки==
 
* http://gtaforums.com/topic/573478-iiivcsa-project-2dfx - пионеры исправления расстояния отрисовки
==References==
* http://gtaforums.com/topic/573478-iiivcsa-project-2dfx - pioneers of draw distance fixing


[[en:GTA:SA_Streaming_Garbage_Collection]]
[[en:GTA:SA_Streaming_Garbage_Collection]]

Latest revision as of 11:35, 27 May 2014

Система 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 функции можно получить количество выделенных нодов и свободных для выделения.

Ссылки