Всем привет! Я хотел бы лучше разобраться, как уменьшать вес карты кроме использования WC3 Map Optimizer. Также я читал статью "Оптимизация импорта" от Vestan. Все это проделано мною. Оптимайзер сокращает размер карты на чертовы 1,5%.
Тогда вопрос: как была оптимизирована дота, если ее открытая версия весит в два раза больше, чем игровая?
Я бы хотел сократить размер хотя бы на 10%, иначе мало смысла во всей этой пляске с оптимайзером.

В первую очередь, нужно выборочно оценивать и уменьшать размер текстур и количество мипмапов. Например, есть текстура кровли, которая в игре занимает существенную часть видимого пространства в декорациях, которая в целом как-то влияет своим качеством на восприятие картинки, и есть текстура какого-нибудь топорика, который держит в своих руках один из юнитов, и толком не разглядеть мелкие детали топорика. Но зачастую бывает так, что текстура топорика имеет размер 256х256 px, а текстура кровли 64х64 px.
Другой пример с иконками и другими элементами интерфейса, где не требуется более двух самых крупных мипмапов, а остальные можно благополучно удалить, т.к. оин почти ни при каких условиях не будут изображены.
Во-вторую очередь, нужно оптимизировать анимации нестандартных моделей юнитов. У нас до сих пор многие ничего не знают об этом, хотя уже есть инструмент, который делает это автоматически. Вот только Wiedzmin, автор тулзы пока ее не опубликовал, а пора бы дать всем ее пощупать.
Кроме оптимизации анимаций, следует применять все остальные способы, реализованные в mdlvis - это просто галочки, которые почистят прочий мусор, ничего сложного.
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

ответ
Эмм что за ерунда, сократил код, убрав всё лишнее, но утечки все равно остаются, по 1.5 - 2 хэндла за каждое нанесение урона (тип хэндла не знаю как посмотреть). Когда триггер отключаешь, то всё нормально.
Сокращенный код
function SDMSCreateTextTag takes nothing returns nothing
    local unit u=GetTriggerUnit()
    local unit s=GetEventDamageSource()
    local integer i=GetConvertedPlayerId(GetOwningPlayer(u))
    local texttag tt=CreateTextTag()
    local real dmg=GetEventDamage()

    if ( dmg > 1.00 ) and ( dmg < 9999.00 ) then
        if GetPlayerId(GetOwningPlayer(u))==12 then
            call SetTextTagText(tt, "|cff9db9eb-"+I2S(R2I(dmg))+"|r", 0.023)
        else
            call SetTextTagText(tt, "|cffffa500-"+I2S(R2I(dmg))+"|r", 0.023)
        endif
        call SetTextTagPosUnit(tt, u, 0)
        call SetTextTagColor(tt, 255, 255, 255, 255) 
        call SetTextTagVelocity(tt, 0.05325*Cos(90 * bj_DEGTORAD), 0.05325*Sin(90 * bj_DEGTORAD))
        call SetTextTagPermanent(tt, false)
        call SetTextTagLifespan(tt, 1.0)
        call SetTextTagFadepoint(tt, 0.0)
    endif
    call PolledWait(2.0)

    call DestroyTextTag(tt)
    set u=null
    set s=null
    set i=0
    set dmg=0
    set tt=null
endfunction

function SDMSTriggerRegisterUnitDamaged takes nothing returns nothing
    call TriggerRegisterUnitEvent(udg_SDMStrigger,GetEnteringUnit(),EVENT_UNIT_DAMAGED)
endfunction

function theSDMSTriggerActions takes nothing returns nothing
    local trigger UnitEnter=CreateTrigger()

    call TriggerRegisterEnterRectSimple(UnitEnter, gg_rct_Arena)
    call TriggerAddAction(UnitEnter,function SDMSTriggerRegisterUnitDamaged)

    set UnitEnter=null
endfunction

function InitTrig_the_SDMS_Trigger takes nothing returns nothing
    local trigger tr=CreateTrigger()

    set udg_SDMStrigger=CreateTrigger()//Тут также меняется название глобальной переменной типа триггер.
    call TriggerAddAction(udg_SDMStrigger,function SDMSCreateTextTag)
    call TriggerRegisterTimerEventSingle(tr,0.0)
    call TriggerAddAction(tr,function theSDMSTriggerActions)

    set tr=null
endfunction
Wait вызывает утечки ((
Пришлось делать через таймер
ответ
ClotPh:
Кстати да, тоже интересно. Всегда просто удаляю второй. Я понимаю, что там скорее всего что-то несет информационную ценность, но оно бы тогда хотя бы настраивалось как-то в оптимизаторе, создавать его или не создавать и/или удалить после выполнения оптимизации, а то немного раздражает мусор руками чистить. Если такие настройки есть - подскажите плз.
Это скрип карты, для анализа на ошибки.
ответ
  1. Хорошая модель должна иметь минимальное необходимое количество полигонов. Что будет если заспавнить много юнитов можешь проверить и сам.
  1. 8 Мб - лимит для патчей до версии 1.26. В последнем патче карта может весить 100+ Мб. О скорости скачивания ничего не могу сказать.

32
Витжитайзер, слк оптимизатор. И карту неплохо бы в студию.
11
Можно провести работу над импортом, взять текстуры и ужать их качество вручную. Скачать весь импорт с карты, отсортировать по весу и смотреть что больше всего занимает и там уже копать.
20
quq_CCCP, спасибо, скоро доделаю и скину.

wetalq, согласен, можно с этим немного поработать, но сильно ужать не получается, мы уже пробовали, теряется качество.
11
Yury13, если выложить карту после защиты - можно будет глянуть и дать более конкретные ответы.
Я уже не помню по поводу сжатия качества текстур, но там разница вообще не заметна. Это же все таки варкрафт с фигурированием вида сверху. Когда упираемся в максимальный предел веса карты нужно чем то жертвовать.
20
В первую очередь, нужно выборочно оценивать и уменьшать размер текстур и количество мипмапов. Например, есть текстура кровли, которая в игре занимает существенную часть видимого пространства в декорациях, которая в целом как-то влияет своим качеством на восприятие картинки, и есть текстура какого-нибудь топорика, который держит в своих руках один из юнитов, и толком не разглядеть мелкие детали топорика. Но зачастую бывает так, что текстура топорика имеет размер 256х256 px, а текстура кровли 64х64 px.
Другой пример с иконками и другими элементами интерфейса, где не требуется более двух самых крупных мипмапов, а остальные можно благополучно удалить, т.к. оин почти ни при каких условиях не будут изображены.
Во-вторую очередь, нужно оптимизировать анимации нестандартных моделей юнитов. У нас до сих пор многие ничего не знают об этом, хотя уже есть инструмент, который делает это автоматически. Вот только Wiedzmin, автор тулзы пока ее не опубликовал, а пора бы дать всем ее пощупать.
Кроме оптимизации анимаций, следует применять все остальные способы, реализованные в mdlvis - это просто галочки, которые почистят прочий мусор, ничего сложного.
Принятый ответ
7
в открытой версии я могу сделать 180 мб но когда я карту сохраню ее размер будет 120 мб
25
JaBeN_Симфер:
Во-вторую очередь, нужно оптимизировать анимации нестандартных моделей юнитов. У нас до сих пор многие ничего не знают об этом, хотя уже есть инструмент, который делает это автоматически.
Кроме этого можно покопать анимации модели и вручную удалить лишние (к примеру Alternate версии или особые, ненужные).
Если в карте есть импортная музыка - обычно она много весит и как писали выше - оптимизировать через проги :)
Чтобы оставить комментарий, пожалуйста, войдите на сайт.