Render.ru

Масштабирование анимированной модели

Почемучкин

Активный участник
Рейтинг
7
#1
Здравствуйте, жители форума Render.ru!
Подскажите, пожалуйста, как правильно отмасштабировать анимированную модель (например, уменьшить масштаб на 35%), а потом обнулить всю историю о трансформациях с помощью утилиты ResetXForm. Я пробовал применять эту утилиту на одну из моделей и получил следующее:
После применения утилиты масштаб меша возвращается к исходному (на видео я не стал уменьшать масштаб), а его местоположение изменяется. Почему? Насколько я понимаю, утилита ResetXForm должна была обнулить всю историю о трансформациях. Что я делаю не правильно и как это делается правильно? Еще читал в интернете, что ResrtXForm рекомендуют использовать в паре с модификатором XForm. Если так, то как их правильно использовать, чтобы меш не смещался?

Заранее благодарен за помощь.

PS: Достаточно недавно начал пользоваться 3ds max 2011 и многого пока еще не знаю.
 

Почемучкин

Активный участник
Рейтинг
7
#4

Почемучкин

Активный участник
Рейтинг
7
#5
Можно попробовать Rescale World Units в утилитах.
Спасибо за подсказку. Утилита весьма полезная конечно, но меня больше интересует работа с утилитой ResetXForm. Как ей правильно пользоваться (без смещения меша), чтобы обнулить информацию о трансформациях модели? Мне это нужно для того, чтобы импортировать модель в игру в виде модификации без ненужной информации о ее трансформациях (вращениях, масштабировании, перемещения и т.п.).
 

Тессеракт

Активный участник
Рейтинг
15
#6
В доте не смотрел модели, но обычно в компьютерных моделях есть root кость, которая и отвечает за трансформы меша. Может у нее и нужно сбрасывать трансформы?
 

Почемучкин

Активный участник
Рейтинг
7
#7
В доте не смотрел модели, но обычно в компьютерных моделях есть root кость, которая и отвечает за трансформы меша. Может у нее и нужно сбрасывать трансформы?
Да, кость root имеется. Через нее я и изменяю масштаб модели, но если потом использовать на меш или кость root утилиту ResetXForm, то происходит тоже самое, что и на видео.
Модель из доты 2 взята для примера. Подобная проблема проявляется и у некоторых моделей из других игр.

PS: Кстати, вот сама модель и анимация покоя. Может так будет проще помочь?
 

Тессеракт

Активный участник
Рейтинг
15
#8
А для каких целей сбрасывать трансформ на кости? Ну и пусть у нее будет скейл не правильный. Это на что-то влияет разве? Если я чего-то не понимаю и очень сильно нужно, то можно воспользоваться Skin Wrap'ом. (в теории, я не проверял)
 

Почемучкин

Активный участник
Рейтинг
7
#9
А для каких целей сбрасывать трансформ на кости? Ну и пусть у нее будет скейл не правильный. Это на что-то влияет разве? Если я чего-то не понимаю и очень сильно нужно, то можно воспользоваться Skin Wrap'ом. (в теории, я не проверял)
Просто я читал в интернете, что перед импортом модели из 3ds max рекомендуется сбрасывать всю информацию о трансформациях, поскольку уменьшение масштаба модели чисто визуальные, а реальные размеры остаются неизменными. Если импортировать модель в игру, то выглядеть она будет нормального размера, но движок будет считать ее реальные размеры, которые куда больше, что может приводить к некоторым проблемам. Например, снаряды будут попадать в модель, хотя визуально они должны были пролететь мимо.
Плюс я надеялся, что мне это поможет подгружать другие анимации без изменения масштаба. Сейчас если я подгружаю анимацию (например, ходьбы) на модель с уже уменьшенным масштабом, то ее масштаб вновь возвращается к исходному. Мне вновь приходится уменьшать масштаб, но вместе с этим уменьшаются и кости эффектов (необходимые для игры), из-за чего уменьшается масштаб проигрываемых на этой модели визуальных эффектов в игре.
 
Рейтинг
31
#10
Анимацию изначально надо делать в реальном размере. Сохиани анимацию в файл, сохрани скининг в файл. Потом сделай тот размер что тебе нужен у скелета и модели примени резетиксформ. Затем привяжи модельк скелету используя файл скина и назначь анимацию.
Теоретически должно работать...
 

Почемучкин

Активный участник
Рейтинг
7
#11
Анимацию изначально надо делать в реальном размере. Сохиани анимацию в файл, сохрани скининг в файл. Потом сделай тот размер что тебе нужен у скелета и модели примени резетиксформ. Затем привяжи модельк скелету используя файл скина и назначь анимацию.
Теоретически должно работать...
Так у меня по сути так оно и есть изначально. Модель со скелетом в одном FBX файле, а каждая анимация в отдельном FBX файле. Сейчас загрузил модель со скелетом, уменьшил масштаб, применил ResetXForm и... произошло то же, что и на видео. Я так и не пойму, как правильно пользоваться этой утилитой.
 

GoodMan

Мастер
Рейтинг
251
#12
Я думаю что ресетить трансформации на анимированном объекте это не очень правильно, а ещё более неправильно делать это на скалированных костях. Но утверждать не буду - не специалист :)

Накатал небольшой скриптик который по идее должен обходить проблему. Т.е. он изменяет маштаб заскиненных объектов до модификатора skin, но не уверен что это решит проблему.

Код:
sliderTime = 0f

sel_ = for i in $ collect i
obj_arr = #()

-- Make snapshotrs of the objects:
for i in sel_ do
(
    append obj_arr (snapshot i)  
)

-- Add "morpher" modifier before "skin" modifier and insert snapshooted mesh into it.
setCommandPanelTaskMode #modify
for i = 1 to sel_.count do
(
    select sel_[i]
    addModifier sel_[i] (morpher()) before:1
    WM3_MC_BuildFromNode sel_[i].morpher 1 obj_arr[i]
    WM3_MC_SetValue sel_[i].morpher 1 100.0
    sel_[i].skin.alwaysDeform = false
    sel_[i].skin.alwaysDeform = true
    maxOps.CollapseNodeTo sel_[i] 2 off
)

-- Delete temprorary data
for i in obj_arr do
(
    delete i
)
Для работы выделить объекты для изменения маштаба. Скрипт запустить через MaxScript->New Script: вставить в окно текст скрипта и Tools->Evaluate all
 
Рейтинг
31
#13
Яж написал, сохрани скин в файл. Затем отскалируй скелет и геометрию. На геометрию ресетхформ и колапс. На костях ресет скейл через утилиту bones tools. Потом опять скинишь геометрию используя сохраненые данные. Волшебства не будет, руами придется поработать много.
 

Почемучкин

Активный участник
Рейтинг
7
#14
Накатал небольшой скриптик который по идее должен обходить проблему. Т.е. он изменяет маштаб заскиненных объектов до модификатора skin, но не уверен что это решит проблему.
Я что-то не пойму, что именно делает ваш скрипт? Это своего рода замена утилиты RestXForm или что? Его применять до масштабирования или уже после? Выделять нужно кости (например, root кость) или меш?

PS: А вы скрипты на заказ не пишите?

Яж написал, сохрани скин в файл. Затем отскалируй скелет и геометрию. На геометрию ресетхформ и колапс. На костях ресет скейл через утилиту bones tools. Потом опять скинишь геометрию используя сохраненые данные. Волшебства не будет, руами придется поработать много.
Простите, просто я не все понимаю из сказанного. Как я уже писал, я недавно начал осваивать 3ds max и многого просто не знаю. На днях почитаю о сохранении скина в файл и использовании утилиты bones tools. Спасибо вам за помощь.
 
Последнее редактирование:

GoodMan

Мастер
Рейтинг
251
#15
Я что-то не пойму, что именно делает ваш скрипт? Это своего рода замена утилиты RestXForm или что? Его применять до масштабирования или уже после? Выделять нужно кости (например, root кость) или меш?

PS: А вы скрипты на заказ не пишите?

Простите, просто я не все понимаю из сказанного. Как я уже писал, я недавно начал осваивать 3ds max и многого просто не знаю. На днях почитаю о сохранении скина в файл и использовании утилиты bones tools. Спасибо вам за помощь.
Скрипт применять на том-же этапе (судя по видео), где собирались применять ResetXForm.
Т.е. импортировали модель, затем импортировали анимацию - потом выделили объекты (не кости) и применили скрипт.

P.S. Скрипты на заказ не пишу, скорее балуюсь по мере необходимости. :)
P.P.S. Думаю способ, предложенный "Andrey _Belskiy" будет более правильный с технической точки зрения ;)
 
Сверху