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

SpherePush modifier

Тема в разделе "MAXScript", создана пользователем Chebu, 11 янв 2010.

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

    Chebu Знаток

    С нами с:
    23.10.2005
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    60
    Модификатор SpherePush:

    что делает: Модификатор "вытесняет" каждую вершину объекта, к которому применён, от опорных точек (pivot) заданных пользователем объектов с заданным радиусом. Воздействующими объектами могут служить любые объекты сцены, в примере это point_helper. Воздействующие объекты можно анимировать.

    зачем нужен: Писал для вторичных анимаций у персонажа (перекатывающийся кадык при глотании; раздутая щека, когда что-то находится во рту; анимация живота и т.д.).

    Видео на ютуб:


    как использовать:
    1)копируем код
    2)создаём новый файл, называем его spherePush.ms
    3)открываем файл spherePush.ms текстовым редактором. Например, блокнотом.
    4)вставляем скопированный код.
    5)файл кладём в 3dsmax_root\scripts\startup, где 3dsmax_root - дирректория, в которую у вас установлен 3DsMax
    6)перегружаем макс, если был запущен, модификатор SpherePush должен появиться в списке доступных.

    надеюсь, кому-нибудь пригодится

    Код:
    plugin simpleMod spherePush
    
    name:"spherePush"
    
    classID:#(0x329a4c0e, 0x652226e6)
    
    (     
        parameters main rollout:params
        (
            nodes type:#nodeTab tabSizeVariable:true
            radius type:#floatTab tabSizeVariable:true 
        
            an type:#integer animatable:true
            
            on nodes tabChanged ar1 ar2 ar3 do
            (
                if (ar1==#refDeleted) do (deleteItem nodes ar2)
            )
        )
        
        rollout params "Parameters" width:162 height:280
        (
            listbox lbx1 "nodes" pos:[8,5] width:144 height:8
            button btn2 "remove" pos:[81,137] width:51 height:25
            pickbutton btn3 "add" pos:[37,136] width:40 height:26
            spinner spn1 "selection radius" pos:[11,169] width:144 height:16 range:[0,10000,0]
            
            fn updateList = 
            (
                items = #()
                for n in nodes do append items n.name
                
                lbx1.items = items
            )
            
            fn updateListSelection = 
            (
                sel = lbx1.selection
                spn1.enabled = (sel != 0)
                if(sel != 0) do
                (
                    spn1.controller = radius[sel].controller
                    spn1.value = radius[sel]
                )
            )
            
            on params open do
            (
                updateList()
                updateListSelection()
            )
            
            on lbx1 selected sel do
            (
                updateListSelection()
            )
            
            on btn2 pressed do
            (
                if(lbx1.selection>0) do 
                (
                    deleteItem nodes lbx1.selection
                    updateList()
                    updateListSelection()
                )
            )
            on btn3 picked obj do
            (
                if( (findItem nodes obj) == 0) do
                (
                    append nodes obj
                    append radius 25
                    updateList()
                    updateListSelection()
                )
            )
            on spn1 changed val do
            (
                if (lbx1.selection != 0) do
                (
                    radius[lbx1.selection] = spn1.value
                )
            )
        )
        
        on map i p do
        (
            for nID = 1 to nodes.count do
            (
                vec = p-nodes[nID].pos 
                dist = length vec
                if(dist<radius[nID]) do p += ((radius[nID]-dist)*vec/dist)
            )
            
            p
        )
        
        on create do
        (
            an.controller = linear_float()
            at time 10000 
            (
                animate on
                (
                    an = 10000.0f
                )
            )
        )
    
    )
     
  2. Feodor

    Feodor Мастер

    С нами с:
    14.11.2002
    Сообщения:
    1.485
    Симпатии:
    62
    Баллы:
    367
    Спасибо, простенькая но иногда бывает очень необходимая вещь.
     
  3. kolts

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

    С нами с:
    05.02.2008
    Сообщения:
    448
    Симпатии:
    0
    Баллы:
    17
    А кто видел скрипт похожий на этот но чтоб можно было использовать любой объект, и чтоб деформировалось исходя из формы этого объекта, то есть деформатор для мышц, очень бесит что в максе его нет, сами мышцы сделать не проблема а вот деформатора нет
     
  4. Savin Denis vip

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

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Кто тебе такое сказал ?

    Стандартно для этого дела используется Skin Wrap, в Max8 на доп диске был отличный пример рига Maxine.

    CAT который будет включен уже в следующую версию макса:
    Мускулы+Клиджин(Видео),
    Другие видео примеры.

    Другие инструменты для работы с мускулатурой от внешних разработчиков:
    ACT
    Skin FX
    Di-O-Matic Hercules
     
  5. kolts

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

    С нами с:
    05.02.2008
    Сообщения:
    448
    Симпатии:
    0
    Баллы:
    17
    Я открывал макс и смотрел)) Хотелось бы деформацию как в skin fx
     
  6. kolts

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

    С нами с:
    05.02.2008
    Сообщения:
    448
    Симпатии:
    0
    Баллы:
    17
    Не представляю как потом деформировать меш катовскими мышцами
     
  7. Savin Denis vip

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

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

     
  8. Wats

    Wats Знаток

    С нами с:
    14.05.2007
    Сообщения:
    792
    Симпатии:
    2
    Баллы:
    32
    Скрипт безусловно полезный, вот только непойму чем вам Space Warp Displace не угодил? Им подобный эффект спокойно решается :rolleyes:
     
Модераторы: Savin Denis

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