Привет всем. Я пишу скрипт для экспорта в свой формат для игры. Скрипт работает правильно. Напрягает его медленная работа - 100к полигонов экспортируется за 8(!) минут. Причем если сделать Reset XForm для всех объектов, то тот же экспорт происходит за несколько секунд.
Почему это происходит я не знаю, но хочу предложить сделать так:
Берём первый объект -> копируем его -> назначаем созданной копии Xform -> экспортируем -> удаляем копию, и переходим к следующему.
Ну или копируем все объекты, назначаем им XForm, экспортируем, и затем удаляем их.
А по другому я пока не придумал 🙂
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.
Возможно обнуление координат вам нужно по каким то техническим причинам, но скорость работы скрипта не может ускориться из-за добавления операций, а напротив замедлится. Причина медленной работы в незавершённости. Нужно создать роллоут, все функции вынести в начало скрипта, перед роллоутом. Как то так: http://pastebin.com/YHs3ysb5
Полигонов - 118477
Вертс - 129395
323 меша в сцене. +анимация
Сохраняло ~20 секунд
P.S. Но и тупо добавив "костыль" в виде END (не спортивно), как написал постом выше, сохраняет сцену за то же время. (но правильно - создать роллоут)
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
Степанов Дмитрий
Вот код
http://pastebin.com/XNdWU3rd
Отсюда следует вопрос: почему без Reset XForm экспорт идет непозволительно долго? И как обойти этот баг\фичу\и т.д. ?
Владислав Бодюл
Берём первый объект -> копируем его -> назначаем созданной копии Xform -> экспортируем -> удаляем копию, и переходим к следующему.
Ну или копируем все объекты, назначаем им XForm, экспортируем, и затем удаляем их.
А по другому я пока не придумал 🙂
Фигли
...................
..............
undo on
EnableSceneRedraw
)
end -- Или print "ку-ку))"
🙂 .
Степанов Дмитрий
Это
Меняем на это
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.
Фигли
http://pastebin.com/YHs3ysb5
Полигонов - 118477
Вертс - 129395
323 меша в сцене. +анимация
Сохраняло ~20 секунд
P.S. Но и тупо добавив "костыль" в виде END (не спортивно), как написал постом выше, сохраняет сцену за то же время. (но правильно - создать роллоут)