Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 18

Тема: Почему не стоит злоупотреблять изменением материалов (нюансы SetObjectMaterial)

  1. #1
    ex-Pawn developer Аватар для SHOROOP
    Регистрация
    28.05.2011
    Адрес
    St.Petersburg
    Возраст
    31
    Сообщений
    2,667
    Репутация: 306

    Звание: как роза среди колючек

    Почему не стоит злоупотреблять изменением материалов (нюансы SetObjectMaterial)

    Поскольку в настоящий момент обрели популярность работы с использованием функций замены текстур SetObjectMaterial(), считаю нужным расставить точки над i и оповестить о нескольких нюансах работы этой функции.

    Для начала - немного теоретической части для общего понимания механизма рендера движком моделей, и начнем с рендера SA без учета мультиплеера.
    Как многим известно, информация о моделях и их расположении подгружается движком из IDE (Item DEfinition file) и IPL (Item PLacement file) соответственно. Более того, масштабные модели имеют низкополигональную версию - LOD, который отрисовывается раньше основной модели и перестает отрисовываться при достижении нужного радиуса рендера.
    Соответственно, механика процесса такова:
    - игрок попал в зону отрисовки LOD: отрисовывается LOD.
    - игрок из зоны отрисовки LOD переходит в зону основного рендера: LOD выгружается из памяти и в рендере более не участвует до следующего вызова, рендерится основная модель.
    - игрок из зоны рендера основной модели переходит в зону рендера LOD: основная модель выгружается из памяти, рендерится LOD.
    - игрок выходит из зоны рендера LOD: LOD выгружается из памяти и в рендере не участвует.

    Созданные сервером объекты LOD не рендерят - серверу неоткуда брать информацию о нужном LOD. Поэтому схема упрощается:
    - игрок попал в зону основного рендера: рендерится основная модель.
    - игрок из зоны рендера основной модели выходит: основная модель выгружается из памяти (учитывая наличие стримера: оригинальная схема модели не выгружает, но жестко лимитирует их количество, выделяя память специально для них).

    Как можно заметить, без необходимости модель не занимает места в ОЗУ, тем самым экономя ресурсы.

    Основная проблема SetObjectMaterial (и производных, SetObjectMaterialText, к примеру) - она НЕ ВЫГРУЖАЕТ модель из ОЗУ. Схема рендера получается неполной:
    - игрок попал в зону основного рендера: рендерится основная модель.
    - игрок из зоны рендера основной модели выходит: основная модель НЕ ВЫГРУЖАЕТСЯ из памяти, загаживая стек.

    Стек не бесконечен. В случае SA максимально возможное количество используемой ОЗУ колеблется в районе 1.6ГБ. В случае переполнения стека движок пытается обратиться к участку памяти, доступа к которому у него нет, вследствие чего клиент падает с ошибкой. Чрезмерное использование SetObjectMaterial еще больше увеличивает шансы выхода за пределы стека.

    Посему один небольшой совет: используйте функцию только там, где это действительно необходимо.
    UPD: говорят, что к SA:MP 0.3.7 утечку памяти пофиксили.

    Disclaimer:
    - использование данного материала без явного разрешения автора запрещено;
    - использование данного материала без явного указания автора, даже при его явном согласии, запрещено.

    В пост призываются гуру для уточнения, прав ли я и если нет - то где именно.

  2. 7 пользователей сказали cпасибо SHOROOP за это полезное сообщение:

    Disinterpreter (17.10.2015), Fallen A. (17.10.2015), Mexanizm (17.10.2015), MYSTERYMAN (18.10.2015), SDraw (17.10.2015), Seregamil (17.10.2015), Фора (17.10.2015)

  3. #2
    Джентльмен лжец Аватар для Fallen A.
    Регистрация
    03.09.2011
    Адрес
    Минск, БССР
    Возраст
    29
    Сообщений
    2,409
    Репутация: 337

    Звание: как роза среди колючек
    Интересно бы узнать лимиты: сколько один такой вызов кушает памяти?

  4. 1 пользователь сказал cпасибо Fallen A. за это полезное сообщение:

    Privies (17.10.2015)

  5. #3
    ex-Pawn developer Аватар для SHOROOP
    Регистрация
    28.05.2011
    Адрес
    St.Petersburg
    Возраст
    31
    Сообщений
    2,667
    Репутация: 306

    Звание: как роза среди колючек
    Цитата Сообщение от Fallen A. Посмотреть сообщение
    Интересно бы узнать лимиты: сколько один такой вызов кушает памяти?
    В принципе, вотэтовсе будет падать в streaming_memory, по дебаг-инфе из F5 можно посмотреть с точностью до мегабайта.

  6. #4
    Джентльмен лжец Аватар для Fallen A.
    Регистрация
    03.09.2011
    Адрес
    Минск, БССР
    Возраст
    29
    Сообщений
    2,409
    Репутация: 337

    Звание: как роза среди колючек
    Цитата Сообщение от SHOROOP Посмотреть сообщение
    В принципе, вотэтовсе будет падать в streaming_memory, по дебаг-инфе из F5 можно посмотреть с точностью до мегабайта.
    Ну так если понимаешь, то в чей проблема?

  7. #5
    ex-Pawn developer Аватар для SHOROOP
    Регистрация
    28.05.2011
    Адрес
    St.Petersburg
    Возраст
    31
    Сообщений
    2,667
    Репутация: 306

    Звание: как роза среди колючек
    Цитата Сообщение от Fallen A. Посмотреть сообщение
    Ну так если понимаешь, то в чей проблема?
    Эмм, чавось?

  8. #6
    Перевыпроверенный Аватар для LINKINPARK
    Регистрация
    29.08.2011
    Сообщений
    1,732
    Репутация: 210

    Звание: - весьма и весьма положительная личность
    Цитата Сообщение от SHOROOP Посмотреть сообщение
    Эмм, чавось?
    Может имелось в ввиду чтобы это добавилось в первый пост
    админка 100 уровней(1-модер, 2 крутой модер, 3 главный модер, 4 пздц главный модер, 5 создатель модеров, 6 младший админ, 7 так себе админ, 8 админ, 9-злой одмин, 10 старший админ, 11 пздц какой админ, 12 главный админ, 13 пздец какой главный админ, 14 ну просто пиздец какой глаынй, 15 создатель скрипта, 16 создатель второго скрипта) - не помню кто ©
    [Начинающий скриптер]
    Сообщение от free1715
    Ну я вот как сделал слил все входы и выходы в пикапы которы были на сервере,и начало все норм работать,но не знаю все же таки как мне делать так что бы они не конфликтовали.И беда в том что если я удаляю полицейских а оставляю другие то оно меня кидало в бар в первом городе на улицу.

  9. #7
    Перевыпроверенный Аватар для LINKINPARK
    Регистрация
    29.08.2011
    Сообщений
    1,732
    Репутация: 210

    Звание: - весьма и весьма положительная личность
    Или.
    Ты же понимаешь то нет проблем если понимаешь какие проблемы?
    админка 100 уровней(1-модер, 2 крутой модер, 3 главный модер, 4 пздц главный модер, 5 создатель модеров, 6 младший админ, 7 так себе админ, 8 админ, 9-злой одмин, 10 старший админ, 11 пздц какой админ, 12 главный админ, 13 пздец какой главный админ, 14 ну просто пиздец какой глаынй, 15 создатель скрипта, 16 создатель второго скрипта) - не помню кто ©
    [Начинающий скриптер]
    Сообщение от free1715
    Ну я вот как сделал слил все входы и выходы в пикапы которы были на сервере,и начало все норм работать,но не знаю все же таки как мне делать так что бы они не конфликтовали.И беда в том что если я удаляю полицейских а оставляю другие то оно меня кидало в бар в первом городе на улицу.

  10. #8
    Джентльмен лжец Аватар для Fallen A.
    Регистрация
    03.09.2011
    Адрес
    Минск, БССР
    Возраст
    29
    Сообщений
    2,409
    Репутация: 337

    Звание: как роза среди колючек
    Цитата Сообщение от SHOROOP Посмотреть сообщение
    Эмм, чавось?
    Раз понимаешь как, то проведи тест и занеси данные в пост.

  11. #9
    dream bigger Аватар для spc.
    Регистрация
    26.04.2013
    Адрес
    Омск
    Возраст
    27
    Сообщений
    1,327
    Репутация: 137

    Звание: скоро придёт к известности
    до сих пор не выгружает? фиксанули же вроде как
    Skype: sp3ctrum_attack

  12. #10
    ex-Pawn developer Аватар для SHOROOP
    Регистрация
    28.05.2011
    Адрес
    St.Petersburg
    Возраст
    31
    Сообщений
    2,667
    Репутация: 306

    Звание: как роза среди колючек
    Цитата Сообщение от spc. Посмотреть сообщение
    до сих пор не выгружает? фиксанули же вроде как
    Не слышал, что фиксанули.

    Цитата Сообщение от Fallen A. Посмотреть сообщение
    Раз понимаешь как, то проведи тест и занеси данные в пост.
    Не вижу в этом смысла, разные объекты занимают разный объём памяти.

Страница 1 из 2 12 ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •