Render.ru

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

Степанов Дмитрий

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

Вот код

http://pastebin.com/XNdWU3rd

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

Владислав Бодюл

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

Фигли

Пользователь сайта
Рейтинг
2
#3
Добавьте в конце, после всех закрытых скобок:
...................
..............
undo on
EnableSceneRedraw
)
end -- Или print "ку-ку))"
:) .
 

Степанов Дмитрий

Пользователь сайта
Рейтинг
2
#4
Вот поторопился я как обычно. Не доглядел

Это
Код:
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.
 

Фигли

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