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

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

Тема в разделе "Общие вопросы", создана пользователем Почемучкин, 5 авг 2016.

Модераторы: Артер
  1. Почемучкин

    Почемучкин Пользователь сайта

    С нами с:
    05.08.2016
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    2
    Здравствуйте, жители форума Render.ru!
    Подскажите, пожалуйста, как правильно отмасштабировать анимированную модель (например, уменьшить масштаб на 35%), а потом обнулить всю историю о трансформациях с помощью утилиты ResetXForm. Я пробовал применять эту утилиту на одну из моделей и получил следующее:

    После применения утилиты масштаб меша возвращается к исходному (на видео я не стал уменьшать масштаб), а его местоположение изменяется. Почему? Насколько я понимаю, утилита ResetXForm должна была обнулить всю историю о трансформациях. Что я делаю не правильно и как это делается правильно? Еще читал в интернете, что ResrtXForm рекомендуют использовать в паре с модификатором XForm. Если так, то как их правильно использовать, чтобы меш не смещался?

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

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

    Андрей Шаймарданов Знаток

    С нами с:
    25.07.2011
    Сообщения:
    637
    Симпатии:
    250
    Баллы:
    56
    Если попробовать не масштабировать, а проанимировать модификатор FFD 2x2x2 ?
     
  3. Anton Chernov

    Anton Chernov Активный участник

    С нами с:
    16.04.2012
    Сообщения:
    104
    Симпатии:
    19
    Баллы:
    14
    Можно попробовать Rescale World Units в утилитах.
     
    Почемучкин нравится это.
  4. Почемучкин

    Почемучкин Пользователь сайта

    С нами с:
    05.08.2016
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    2
    Честно, я не особо понимаю, как мне поможет модификатор свободной деформации. Можете объяснить более развернуто?
     
  5. Почемучкин

    Почемучкин Пользователь сайта

    С нами с:
    05.08.2016
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    2
    Спасибо за подсказку. Утилита весьма полезная конечно, но меня больше интересует работа с утилитой ResetXForm. Как ей правильно пользоваться (без смещения меша), чтобы обнулить информацию о трансформациях модели? Мне это нужно для того, чтобы импортировать модель в игру в виде модификации без ненужной информации о ее трансформациях (вращениях, масштабировании, перемещения и т.п.).
     
  6. Тессеракт

    Тессеракт Активный участник

    С нами с:
    07.10.2011
    Сообщения:
    125
    Симпатии:
    20
    Баллы:
    15
    В доте не смотрел модели, но обычно в компьютерных моделях есть root кость, которая и отвечает за трансформы меша. Может у нее и нужно сбрасывать трансформы?
     
  7. Почемучкин

    Почемучкин Пользователь сайта

    С нами с:
    05.08.2016
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    2
    Да, кость root имеется. Через нее я и изменяю масштаб модели, но если потом использовать на меш или кость root утилиту ResetXForm, то происходит тоже самое, что и на видео.
    Модель из доты 2 взята для примера. Подобная проблема проявляется и у некоторых моделей из других игр.

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

    Тессеракт Активный участник

    С нами с:
    07.10.2011
    Сообщения:
    125
    Симпатии:
    20
    Баллы:
    15
    А для каких целей сбрасывать трансформ на кости? Ну и пусть у нее будет скейл не правильный. Это на что-то влияет разве? Если я чего-то не понимаю и очень сильно нужно, то можно воспользоваться Skin Wrap'ом. (в теории, я не проверял)
     
  9. Почемучкин

    Почемучкин Пользователь сайта

    С нами с:
    05.08.2016
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    2
    Просто я читал в интернете, что перед импортом модели из 3ds max рекомендуется сбрасывать всю информацию о трансформациях, поскольку уменьшение масштаба модели чисто визуальные, а реальные размеры остаются неизменными. Если импортировать модель в игру, то выглядеть она будет нормального размера, но движок будет считать ее реальные размеры, которые куда больше, что может приводить к некоторым проблемам. Например, снаряды будут попадать в модель, хотя визуально они должны были пролететь мимо.
    Плюс я надеялся, что мне это поможет подгружать другие анимации без изменения масштаба. Сейчас если я подгружаю анимацию (например, ходьбы) на модель с уже уменьшенным масштабом, то ее масштаб вновь возвращается к исходному. Мне вновь приходится уменьшать масштаб, но вместе с этим уменьшаются и кости эффектов (необходимые для игры), из-за чего уменьшается масштаб проигрываемых на этой модели визуальных эффектов в игре.
     
  10. Андрей Бельский

    Андрей Бельский Активный участник

    С нами с:
    20.12.2001
    Сообщения:
    404
    Симпатии:
    22
    Баллы:
    18
    Анимацию изначально надо делать в реальном размере. Сохиани анимацию в файл, сохрани скининг в файл. Потом сделай тот размер что тебе нужен у скелета и модели примени резетиксформ. Затем привяжи модельк скелету используя файл скина и назначь анимацию.
    Теоретически должно работать...
     
  11. Почемучкин

    Почемучкин Пользователь сайта

    С нами с:
    05.08.2016
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    2
    Так у меня по сути так оно и есть изначально. Модель со скелетом в одном FBX файле, а каждая анимация в отдельном FBX файле. Сейчас загрузил модель со скелетом, уменьшил масштаб, применил ResetXForm и... произошло то же, что и на видео. Я так и не пойму, как правильно пользоваться этой утилитой.
     
  12. GoodMan

    GoodMan Мастер

    С нами с:
    20.04.2005
    Сообщения:
    2.792
    Симпатии:
    9
    Баллы:
    254
    Я думаю что ресетить трансформации на анимированном объекте это не очень правильно, а ещё более неправильно делать это на скалированных костях. Но утверждать не буду - не специалист :)

    Накатал небольшой скриптик который по идее должен обходить проблему. Т.е. он изменяет маштаб заскиненных объектов до модификатора 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
     
    Почемучкин нравится это.
  13. Андрей Бельский

    Андрей Бельский Активный участник

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

    Почемучкин Пользователь сайта

    С нами с:
    05.08.2016
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    2
    Я что-то не пойму, что именно делает ваш скрипт? Это своего рода замена утилиты RestXForm или что? Его применять до масштабирования или уже после? Выделять нужно кости (например, root кость) или меш?

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

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

    GoodMan Мастер

    С нами с:
    20.04.2005
    Сообщения:
    2.792
    Симпатии:
    9
    Баллы:
    254
    Скрипт применять на том-же этапе (судя по видео), где собирались применять ResetXForm.
    Т.е. импортировали модель, затем импортировали анимацию - потом выделили объекты (не кости) и применили скрипт.

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

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