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

CS + MAXScript = ?

Тема в разделе "MAXScript", создана пользователем Nail, 26 июн 2003.

Модераторы: Savin Denis
  1. Nail

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

    С нами с:
    04.10.2001
    Сообщения:
    45
    Симпатии:
    0
    Баллы:
    5
    Есть ли возможность MAXScript'ом управлять инструментами Character Studio?
    В частности загружать bip файлы.
     
  2. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
  3. Nail

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

    С нами с:
    04.10.2001
    Сообщения:
    45
    Симпатии:
    0
    Баллы:
    5
    А поподробнее можно?
    Интересует именно возможность загрузки bip-файла в CS через MAXScript.
     
  4. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    подробней жмеш F11 потом F1
    пишеш "Biped Load and Save" в Index
     
  5. Nail

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

    С нами с:
    04.10.2001
    Сообщения:
    45
    Симпатии:
    0
    Баллы:
    5
    Благодарю, нашел.

    Теперь интересует как вытащить длину анимации из bip'а?
    Она нужна для того чтоб можно было отрезать лишние кадры в сцене так, чтоб количество кадров в сцене = количество кадров в анимации bip'а.

    Nail.

    PS В хелпе нашел только как установить количество кадров в сцене:

    animationRange=interval 0 x

    где X = № последнего кадра.
     
  6. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Эта функция должна помочь:

    getTimeRange <controller> [ #selOnly ] [ #allKeys ] [ #children ]

    Returns a time Interval value specifying the range of time covered by keys in the controller. The optional symbolic arguments specify options:

    #selOnly: return the time range covered by the currently selected keys (in the track view)

    #allKeys (default): the time range for all keys in the controller

    #children: descends into sub-controllers and returns the total time interval covering all keys in all sub-controllers
     
  7. Nail

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

    С нами с:
    04.10.2001
    Сообщения:
    45
    Симпатии:
    0
    Баллы:
    5
    Спасибо.
    Нельзя ли указать, что не так:

    Имеем сцену с бипедом с интервалом таймлайна 0 100(по умолчанию).
    У анимации бипеда интервал 0 48.
    Объект 'bip01 Head' имеет ключи анимации в кадрах с 0 до 48.

    Выделив 'bip01 Head' на команды

    getTimeRange $'bip01 Head'.controller #selOnly
    или
    getTimeRange $'bip01 Head'.transform.controller #selOnly

    расчитывал получить значение: interval 0 48

    выдало же:

    (interval -1.34218e+007f -1.34218e+007f)

    Если не так, тогда как?
     
  8. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Должен добратся до ключей
    чтото вроде:
    c = $'bip01 Head'.transform.controller.pos.controller.X_Position.controller
    getTimeRange c
     
  9. Nail

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

    С нами с:
    04.10.2001
    Сообщения:
    45
    Симпатии:
    0
    Баллы:
    5
    Не, это не то.
    Начиная с pos и дальше это лишнее и не обрабатывается.

    Перерыв хелп так и не нашел как правильно.

    Исходя из примера в конце раздела Controller Time Functions
    (
    b=box height:10
    at time 5 animate on b.height=50
    at time 10 animate on b.height=100
    bhc=b.height.controller
    bhk=bhc.keys
    supportstimeoperations bhc
    deletetime bhc 4 5
    bhk
    deletetime bhc 4 5 #incLeft
    bhk
    deletetime bhc 1 4 #noslide
    bhk
    at time 5 animate on b.height=50
    deletetime bhc (interval 5 8) #incLeft
    bhk
    at time 10 animate on b.height=150
    for k in bhk do format "%:%\n" k.time k.value
    reversetime bhc 5 15 #incLeft #incRight
    for k in bhk do format "%:%\n" k.time k.value
    insertTime bhc 12 5
    bhk
    getTimeRange bhc
    )

    , должно было работать то, что я и раньше писал:

    getTimeRange $'bip01 Head'.controller

    ну или

    bo = $'bip01 Head'
    bc = bo.transform.controller
    getTimeRange bc

    но не работает, черт его дери!
    Точнее работает, но не так как хотелось бы.

    Указанный пример я прогнал, он работает - команда getTimeRange bhc выдает
    (interval 0f 20f).

    Чтож, попытаюсь разобраться, что же в этом примере такого есть, что он нормально работает.
    Или может дело в специфичности Бипеда, и то что работает с кубиком с бипедом не пашет?...
     
  10. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Дело все в том что у бипеда свой навороченный контроллер
    который не дает доступ к внутреним контролерам
    так что подобратся к ключам нет возможности

    можно пойти другим путем - слить ключи в новый временный контроллер:

    bip = $.controller
    b=bezier_position()
    biped.createPosSubAnims bip b true
    getTimeRange b #children

    НО Работать будет только in character studio 4 !!!!
     
  11. Nail

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

    С нами с:
    04.10.2001
    Сообщения:
    45
    Симпатии:
    0
    Баллы:
    5
    Запустил код, открыл Track View, нашел добавленный контроллер bezier_position, но он пустой - без ключей.
    Все ключи выше по дереву - в .transform.horizontal, но к ним, похоже, доступа нет.

    Попробую поискать в хелпе по ключам что нить, поскольку добавив в bezier_position вручную ключи я смог получить с них интервал анимации через

    с = $'Bip01.controller.Biped_SubAnim.controller.BipPositionList.controller.Bezier_Position.controller
    getTimeRange с #children
     
  12. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Ладно в максе без изврата никак ;)

    fn bipGetTime bip (

    bip = bip.transform.controller
    vertCont = bip.vertical.controller
    i = 1
    k

    while on do
    (
    try k = biped.getKey vertCont i
    catch exit
    i + = 1
    )
    ftime = k.time
    format "Time\t%\n" ftime
    (ftime)
    )

    -- Example:
    -- ==================
    bipGetTime $Bip01
     
  13. Nail

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

    С нами с:
    04.10.2001
    Сообщения:
    45
    Симпатии:
    0
    Баллы:
    5
    Огромнейшее спасибо!

    Особенно за терпение :)
    Ну и за функцию - сам бы не дошел, поскольку от программерства далеко.

    Все получилось, правда пришлось разобраться что к чему, и привести функцию к рабочему состоянию.

    Вот что получилось в итоге:

    -- Load .bip & Range Animation v1.03

    fn bipGetTime bip =
    (
    bipVertCont = bip.transform.controller.vertical.controller
    i = 1
    while true do
    (
    try k = biped.getKey bipVertCont i
    catch exit
    i += 1
    )
    ftime = k.time
    ftime
    )

    if $Bip01 == undefined then
    (
    messageBox "No Biped in scene or Biped root name no 'Bip01' !" title: "Error"
    )
    else
    (
    if (getFiles "c:\\test.bip").count == 0 then
    (
    messageBox "Not found Bip File !" title: "Error"
    )
    else
    (
    biped.LoadBipFile $Bip01.controller "c:\\test.bip"
    lastFrame = bipGetTime $Bip01
    animationRange = interval 0f lastFrame
    )
    )

    --


    Еще раз спасибо за помощь.
    Удачи!
    Nail.
     
  14. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    зря K перед циклом убралл могут проблемы возникнуть
     
  15. Nail

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

    С нами с:
    04.10.2001
    Сообщения:
    45
    Симпатии:
    0
    Баллы:
    5
    Будут проблемы - верну :)
    А вообще я погонял скрип при разных условиях, в том числе и сразу после загрузки МАКСа. Кстати, совсем дилетантский вопрос (что-то не нашел в хелпе) - как переменные сбросить без перезапуска МАКСа?).

    В общем - работает отлично.
    Я так понял К перед циклом нужна была для инициализации, но, похоже, в МАХСкрипт можно инициализировать переменную сразу при ее использовании.
     
  16. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    смотря что ты под этим понимаеш
    var = undefined
    .......
    gc()


    >Я так понял К перед циклом нужна была для инициализации, но, похоже, в МАХСкрипт можно инициализировать переменную сразу при ее использовании.

    Я предупредил если начнет глючит потом хрен найдеш
     
Модераторы: Savin Denis

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