1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Медленная работа скрипта

Тема в разделе "MAXScript", создана пользователем Степанов Дмитрий, 2 июн 2014.

Модераторы: Savin Denis
  1. Степанов Дмитрий

    Степанов Дмитрий Пользователь сайта

    С нами с:
    02.06.2014
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    2
    Привет всем. Я пишу скрипт для экспорта в свой формат для игры. Скрипт работает правильно. Напрягает его медленная работа - 100к полигонов экспортируется за 8(!) минут. Причем если сделать Reset XForm для всех объектов, то тот же экспорт происходит за несколько секунд.

    Вот код

    http://pastebin.com/XNdWU3rd

    Отсюда следует вопрос: почему без Reset XForm экспорт идет непозволительно долго? И как обойти этот баг\фичу\и т.д. ?
     
  2. Владислав Бодюл

    Владислав Бодюл Активный участник

    С нами с:
    08.03.2011
    Сообщения:
    44
    Симпатии:
    2
    Баллы:
    12
    Почему это происходит я не знаю, но хочу предложить сделать так:
    Берём первый объект -> копируем его -> назначаем созданной копии Xform -> экспортируем -> удаляем копию, и переходим к следующему.
    Ну или копируем все объекты, назначаем им XForm, экспортируем, и затем удаляем их.
    А по другому я пока не придумал :)
     
  3. Фигли

    Фигли Пользователь сайта

    С нами с:
    20.01.2012
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    2
    Добавьте в конце, после всех закрытых скобок:
    ...................
    ..............
    undo on
    EnableSceneRedraw
    )
    end -- Или print "ку-ку))"
    :) .
     
  4. Степанов Дмитрий

    Степанов Дмитрий Пользователь сайта

    С нами с:
    02.06.2014
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    2
    Вот поторопился я как обычно. Не доглядел

    Это
    Код:
    local mesh = currentObject.mesh
    Меняем на это
    Код:
    in coordsys world
    (
          local oldPos = currentObject.position
          local oldRot = currentObject.rotation
          local oldScl = currentObject.scale
     
          currentObject.position = [ 0, 0, 0 ]
          currentObject.rotation = eulerToQuat ( eulerAngles 0 0 0 )
          currentObject.scale = [ 1, 1, 1 ]
     
          local mesh = snapShot ( currentObject )
     
          currentObject.scale = oldScl
          currentObject.rotation = oldRot
          currentObject.position = oldPos
    )
    Вуаля - экспорт за несколько секунд.

    Что делаем: переносим объект в "нулевое" положение ( позиция 0,0,0 вращение 0,0,0 масштаб 1,1,1 ). Делаем "снимок" - получаем голые данные о полигонах - именно голые - без преобразований наложенных на объект. Возвращаем все как было, но только в обратном порядке - иначе неправильно перемножатся матрицы в максе и позиция новая не будет равна исходной.

    Именно из-за преобразований тормозят getVert и подобные функции. А Reset XForm выпиливает преобразования так же как и snapShot.
     
  5. Фигли

    Фигли Пользователь сайта

    С нами с:
    20.01.2012
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    2
    Возможно обнуление координат вам нужно по каким то техническим причинам, но скорость работы скрипта не может ускориться из-за добавления операций, а напротив замедлится. Причина медленной работы в незавершённости. Нужно создать роллоут, все функции вынести в начало скрипта, перед роллоутом. Как то так:
    http://pastebin.com/YHs3ysb5
    Полигонов - 118477
    Вертс - 129395
    323 меша в сцене. +анимация
    Сохраняло ~20 секунд
    P.S. Но и тупо добавив "костыль" в виде END (не спортивно), как написал постом выше, сохраняет сцену за то же время. (но правильно - создать роллоут)
     
Модераторы: Savin Denis

Поделиться этой страницей