3DCenter.ru

Здравствуйте, гость ( Вход | Регистрация )

79 страниц V  « < 75 76 77 78 79 >  
Reply to this topicStart new topic
> Я только начинаю изучать Maxscript
Al_PRO
сообщение 06/08/2016, 15:35
Сообщение #1141


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 11
Регистрация: 24/07/2016
Пользователь №: 116 598



фух.. наконецто закончил .. Прикрепленное изображение
Go to the top of the page
 
+Quote Post
IOG
сообщение 06/08/2016, 17:27
Сообщение #1142


Уважаемый
Иконка группы

Группа: Участник
Сообщений: 845
Регистрация: 05/12/2004
Из: Минск
Пользователь №: 8 716



Jahman, Спасибо - будем разбираться!)

Сообщение отредактировал IOG - 06/08/2016, 17:27
Go to the top of the page
 
+Quote Post
Jahman
сообщение 06/08/2016, 18:02
Сообщение #1143


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 171
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



QUOTE (Al_PRO @ 06/08/2016, 15:35) *
фух.. наконецто закончил

эт в 2017 такой UI или самодельный?
Go to the top of the page
 
+Quote Post
Al_PRO
сообщение 11/08/2016, 08:22
Сообщение #1144


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 11
Регистрация: 24/07/2016
Пользователь №: 116 598



Цитата(Jahman @ 06/08/2016, 18:02) *
Цитата(Al_PRO @ 06/08/2016, 15:35) *
фух.. наконецто закончил

эт в 2017 такой UI или самодельный?


это DotNet UI в любом максе с поддержкой DotNet
Go to the top of the page
 
+Quote Post
Maketer
сообщение 23/08/2016, 17:06
Сообщение #1145


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 20
Регистрация: 21/12/2013
Пользователь №: 98 131



Привет всем, кто может посмотреть код, скрипта, смысл в том, чтобы выравнивать модификаторы свободно повернутого объекта, к которому применен резет икс форм, по 2 точкам. До вчерашнего дня работал с небольшим изъяном - модификатор становился не по центру объекта после выравнивания. Пытался вчера это исправить, однако сделал хуже и в итоге выравнивает на какой-то странный угол. Старый код применил обратно, однако не помогает ничего.
Код
macroscript AlignModifier
    category: "Maketer"
(
    if selection.count == 1 then
        undo on (
                points4pos = #([0,0,0],[0,0,0],[0,0,0],[0,0,0])
                Node01 = selection[1]
                                
                local origCoordSys = getRefCoordSys()
                toolMode.coordsys #world
                local pos01 = undefined
                local pos02 = undefined
                local pos03 = undefined
                local pos04 = undefined
            
                local curSnapMode = snapMode.active
                local curSnapType = snapMode.type
                snapMode.active = true
                snapMode.type = #3D
                
                pos01 = pickPoint snap:#3d
                if classof pos01 == point3 do
                (
                    points4pos[1] = pos01
                    pos02 = pickPoint snap:#3d rubberBand:pos01
                )
                if classof pos02 == point3 do
                (
                    points4pos[2] = pos02
                    pos03 = [0,0,0]
                    pos04 = [10,0,0]
                    
                )
                    
                snapMode.active = curSnapMode
                try(snapMode.type = curSnapType)catch()    
                if classof pos01 == point3 and classof pos02 == point3 do
                (
                    points4pos[3] = pos03
                    points4pos[4] = pos04
                    
                    local p1 = normalize (pos01 - pos02)
                    local p2 = normalize (pos04 - pos03)
                    local angleRot = acos (dot p1 p2)
                    local dum=dummy pos: [0,0,0]
                    rotate dum (eulerangles 0 0 -angleRot)
                    matrixMod=dum.transform                
                    setModContextTM Node01 Node01.modifiers[1] matrixMod
                    delete dum
                    max views redraw
                    subobjectlevel=1
                    subobjectlevel=0
                                                    
                )
                
        )
            else    messagebox "Select only one object!" title:"Invalid Selection!"
)
Go to the top of the page
 
+Quote Post
Ded_
сообщение 26/08/2016, 14:22
Сообщение #1146


Бывалый
Иконка группы

Группа: Пользователи
Сообщений: 106
Регистрация: 04/05/2006
Из: Ryazan
Пользователь №: 30 816



Добрый день.

Давно здесь писал про скрипт для имитации костей скручивания у скелета игрового рига.
Сегодня понадобилось восстановить, что что я тогда делал.
Посмотрел на свой скрипт, понят, что я наворотил кучу лишнего. Как упростить, не создавать пустышку и прочих лишних действий?
У меня есть, вот это:

Есть 3 куба, красный (как бы - плечо), желтый верх - плеча, зеленый - (предплечье)локоть.
Красный является родителем в иерархии для желтого и зеленого одинаково.
Надо что бы кость скручивания (желтый) вращалась синхронно с "анимированным братом (зеленый)", только по локальной оси z повторяя повороты с меньшим коэффициентом на определенное значение (например 33 % или *0,33).
Мне это скрипт нужен для эксперимента, и вычисления реалистичного скручивания меша, тот который используется в игровом движке (достать настройки контроллеров игрового рига из игры нельзя). Из игры взята анимация скелета, но анимация не для всех костей, только для основных. В игре свои настройки для контроллеров вращения дополнительных костей, которые я пытаюсь понять, методом пробы и сравнения искажения меша в окне редактора и в "окне" игры.
В общем хочу применить к этим дополнительным костям контроллеры вращения, менять или процентное соотношение или коэффициент от вращения анимированного "брата".
мой код:
CODE
--пример
a1=Box pos: [0.000000,0.000000,0.000000]; a1.wirecolor = color 0 255 0 -- Char_*_Forearm
b1=Box pos: [0.000000,0.000000,35.000000]; b1.wirecolor = color 255 255 0 -- *_ArmRoll
c1=Box pos: [0.000000,0.000000,65.000000]; c1.wirecolor = color 255 0 0 -- Char_*_UpperArm
b1.pivot =c1.pivot
d1=Dummy pos: a1.pivot

prc = d1.rotation.controller = rotation_List()
prc[1].rotation.controller.Euler_XYZ.controller.Z_Rotation.controller = On_Off ()
prc[2].controller = Orientation_Constraint()
prc[2].controller.appendTarget a1 100
prc[2].controller.relative = off
prc[2].controller.local_world = 1
d1.rotation.controller.weight[1] = 100
d1.rotation.controller.weight[2] = 30
prc = b1.rotation.controller = rotation_List()
prc[1].rotation.controller = Euler_XYZ () --резерв
prc[2].controller = lookAt_Constraint lookAt_Vector_Length:60
prc[2].controller.appendTarget a1 100
prc[2].controller.relative = off
prc[2].controller.target_axis = 2
prc[2].controller.target_axisFlip = on
prc[2].controller.upnode_world = off
prc[2].controller.pickUpNode = d1
prc[2].controller.StoUP_axis = 1
prc[2].controller.upnode_axis = 1
b1.rotation.controller.weight[1] = 100 --резерв
b1.rotation.controller.weight[2] = 100

select a1


Сообщение отредактировал Ded_ - 26/08/2016, 14:34
Go to the top of the page
 
+Quote Post
Ded_
сообщение 26/08/2016, 21:05
Сообщение #1147


Бывалый
Иконка группы

Группа: Пользователи
Сообщений: 106
Регистрация: 04/05/2006
Из: Ryazan
Пользователь №: 30 816



Цитата(Ded_ @ 26/08/2016, 15:22) *
...

...


Посмотрел на форумах как в Майя просто записать для такой кости скручивания скрипт, всего одна строчка. Невероятно просто :
CODE
L_Shoulder_Twist.rotateX=L_Arm.rotateX*-0.3; <- скручивание левого плеча

Как эту строчку написать для 3d Max? У меня не получается, знак умножить в таком выражении Макс не понимает, как Майка :
CODE
$L_Shoulder_Twist.rotation.controller.X_Rotation.controller=$L_Arm.rotation.controller.X_Rotation.controller*0.3
Go to the top of the page
 
+Quote Post
Jahman
сообщение 27/08/2016, 01:44
Сообщение #1148


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 171
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



с анимацией не сталкивался, но может поможет

CODE
delete objects

b1 = box height:50 pos:[0,0,0]
b2 = box height:50 pos:[0,0,55]

c1 = b1.rotation.controller = Rotation_List()
c1.available.controller     = Bezier_Rotation()

c2 = b2.rotation.controller = Rotation_List()
c2.available.controller     = Rotation_Script()
c2[2].script = "dependsOn $box001;
                local zz = $box001.rotation.controller[1].z_rotation;
                $box002.rotation.controller[1].z_rotation = -0.3 * zz;
                $box002.rotation.controller[1].value"
-- c2.setactive 2
Go to the top of the page
 
+Quote Post
Ded_
сообщение 27/08/2016, 04:32
Сообщение #1149


Бывалый
Иконка группы

Группа: Пользователи
Сообщений: 106
Регистрация: 04/05/2006
Из: Ryazan
Пользователь №: 30 816



Цитата(Jahman @ 27/08/2016, 02:44) *
с анимацией не сталкивался, но может поможет

Код
delete objects

b1 = box height:50 pos:[0,0,0]
b2 = box height:50 pos:[0,0,55]

c1 = b1.rotation.controller = Rotation_List()
c1.available.controller     = Bezier_Rotation()

c2 = b2.rotation.controller = Rotation_List()
c2.available.controller     = Rotation_Script()
c2[2].script = "dependsOn $box001;
                local zz = $box001.rotation.controller[1].z_rotation;
                $box002.rotation.controller[1].z_rotation = -0.3 * zz;
                $box002.rotation.controller[1].value"
-- c2.setactive 2

Спасибо. Этот код работает!
Этот код очень сложный для меня, я бы не за что не допёр. Максимум что я понял, это как добавить строки для других осей:
CODE
c1 = b1.rotation.controller = Rotation_List()
c1.available.controller = Bezier_Rotation()


c2 = b2.rotation.controller = Rotation_List()
c2.available.controller = Rotation_Script()
c2[2].script = "dependsOn $box001;
local zz = b1.rotation.controller[1].z_rotation;
b2.rotation.controller[1].z_rotation = 0.3 * zz;
local xx = b1.rotation.controller[1].x_rotation;
b2.rotation.controller[1].x_rotation = 1.0 * xx;
local yy = b1.rotation.controller[1].y_rotation;
b2.rotation.controller[1].y_rotation = 1.0 * yy;
$box002.rotation.controller[1].value"
-- c2.setactive 2

А в Maya неужели правда так просто, вместо этого кода написать всего: b2.rotateX=b1.rotateX*-0.3; ?
Я не когда не устанавливал Maya, теперь даже захотелось.

Сообщение отредактировал Ded_ - 27/08/2016, 04:34
Go to the top of the page
 
+Quote Post
Jahman
сообщение 27/08/2016, 10:05
Сообщение #1150


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 171
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



есть замечательный ресурс где можно поискать решение, сильно более живой нежели 3дцентр в плане скриптинга и вообще.

без даммика не получается вращать в локальной системе координат
CODE
delete objects

b1 = box pos:[0,0,0] height:50
b2 = box pos:[0,0,60] height:50
dm = dummy pos:[0,0,55]
b2.parent = dm

b2.rotation.controller.z_rotation.controller = float_list()
b2.rotation.controller.z_rotation.controller.available.controller = bezier_float()
b2.rotation.controller.z_rotation.controller.setName 2 "Wired"

c1 = b1[#transform][#rotation][3]
c2 = b2[#transform][#rotation][#Z_Rotation][#wired]

paramWire.connect c1 c2 "Z_Rotation * -0.3"



Сообщение отредактировал Jahman - 27/08/2016, 10:29
Go to the top of the page
 
+Quote Post
Ded_
сообщение 27/08/2016, 13:51
Сообщение #1151


Бывалый
Иконка группы

Группа: Пользователи
Сообщений: 106
Регистрация: 04/05/2006
Из: Ryazan
Пользователь №: 30 816



Цитата(Jahman @ 27/08/2016, 11:05) *
есть замечательный ресурс где можно поискать решение, сильно более живой нежели 3дцентр в плане скриптинга и вообще.

без даммика не получается вращать в локальной системе координат
Код
delete objects

b1 = box pos:[0,0,0] height:50
b2 = box pos:[0,0,60] height:50
dm = dummy pos:[0,0,55]
b2.parent = dm

b2.rotation.controller.z_rotation.controller = float_list()
b2.rotation.controller.z_rotation.controller.available.controller = bezier_float()
b2.rotation.controller.z_rotation.controller.setName 2 "Wired"

c1 = b1[#transform][#rotation][3]
c2 = b2[#transform][#rotation][#Z_Rotation][#wired]

paramWire.connect c1 c2 "Z_Rotation * -0.3"

Класс!
Но тут я уже не знаю куда приписывать строчки для оставшихся осей, как в первом твоем скрипте.
Дело в том что в игре, кость скручивания плеча (b2) не является потомком самого плеча (b1), у обеих костей общий предок - ключица, поэтому надо для других осей тоже задавать коэффициент только близкий к единице или равный ей.
---
В общем это в теории, а в сцене с костями, применить к ним эти скрипты нельзя вообще, если только не строить свой дубликат скелета полностью.
Я подготовил сцену в вложении (для 3ds max 2011 и выше) с этим игровым скелетом. Сделал локатор для удобства вращения плеча и имитации анимации.
Переменные для сцены:
b1 = $Char_L_UpperArm
b2 = $L_ArmRoll
dm = $Dummy001

Если не трудно посмотри пожалуйста твой скрипт в этой сцене и повращай плечевой локатор.
Хочется, что бы у кости Twist плеча (b2) были настройки вращения (которые буду потом подбирать коэффициентом) по отношению к b1, например такие:
X_Rotation * 0.3"
Y_Rotation * 1.0"
Z_Rotation * 1.0"

Сообщение отредактировал Ded_ - 27/08/2016, 14:05
Прикрепленные изображения
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  Scenes_MAX.zip ( 196,33 килобайт ) Кол-во скачиваний: 25
 
Go to the top of the page
 
+Quote Post
Jahman
сообщение 27/08/2016, 15:18
Сообщение #1152


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 171
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



в ротейшн контроллер x_rotation объекта L_ArmRoll ставим float_script()
в скрипте забираем значение вращения с $Char_L_UpperArm
Только фигня какая-то у меня выходит. То ли надо в какой-то другой системе координат значение получать то ли хз.
Эт лучше у знающих уточнить, я увы профан в анимации.

CODE
dependson $Char_L_UpperArm;
degtorad((DependsOn_0.rotation.controller.value as eulerangles).x * 0.3)



аналогично и для других осей вращения L_ArmRoll


Сообщение отредактировал Jahman - 27/08/2016, 15:19
Go to the top of the page
 
+Quote Post
Ded_
сообщение 30/08/2016, 11:10
Сообщение #1153


Бывалый
Иконка группы

Группа: Пользователи
Сообщений: 106
Регистрация: 04/05/2006
Из: Ryazan
Пользователь №: 30 816



Цитата(Jahman @ 27/08/2016, 16:18) *
в ротейшн контроллер x_rotation объекта L_ArmRoll ставим float_script()
в скрипте забираем значение вращения с $Char_L_UpperArm
Только фигня какая-то у меня выходит. То ли надо в какой-то другой системе координат значение получать то ли хз.
Эт лучше у знающих уточнить, я увы профан в анимации.

Код
dependson $Char_L_UpperArm;
degtorad((DependsOn_0.rotation.controller.value as eulerangles).x * 0.3)



аналогично и для других осей вращения L_ArmRoll


Спасибо!
Цитата(Jahman @ 27/08/2016, 16:18) *
Только фигня какая-то у меня выходит. То ли надо в какой-то другой системе координат значение получать то ли хз.

Сегодня обратил внимание, что реальная локальная ось не туда смотрит, как она просто в вьюпорте показана. Если объекту на вращение назначить мишень (плечо- Char_L_UpperArm) и выбрать локальную ориентацию, то ось меняется координатно, почти перпендикулярно по оси Z становится та ось которой надо придать орможение. Это мне тоже пока не понятно. Вот видео, выбора этого объекта:
https://www.dropbox.com/s/ht2v8acemzxg2pz/2...-49-15.mp4?dl=0
Я что и загоняюсь, пытаясь вычислить настройки контроллера. Любопытства ради. То что он понятен только создателям игры и никто его не выдернул из игры, это факт.
Я спрашивал у тех, кто сделал программу для модинга GTA4-GTA5 (OpenIV) У них даже в самой программе в окне просмотра анимации, видно, что нет анимации у некоторых суставов. Мне один из разработчиков этой программы ответил, что мы раньше бились над этими контролерами, но так и не поняли как они работаю и тупо прилинковали кости к анимированным, для более менее адекватного искажения меша, в последующих версиях проги, а в начале вообще без них "выпустили". Вот например видео, с тогда еще новой функцией, просмотра анимации игры - https://youtu.be/vHZP9gwol20
Думаю его вычислить можно. Если заморочиться именно этим, подбором разных значений. Или еще добавление в список, контроллера Look например...
Буду вычислять.

Сообщение отредактировал Ded_ - 30/08/2016, 11:14
Go to the top of the page
 
+Quote Post
Ded_
сообщение 31/08/2016, 18:11
Сообщение #1154


Бывалый
Иконка группы

Группа: Пользователи
Сообщений: 106
Регистрация: 04/05/2006
Из: Ryazan
Пользователь №: 30 816



Цитата(Jahman @ 27/08/2016, 16:18) *
в ротейшн контроллер x_rotation объекта L_ArmRoll ставим float_script()
в скрипте забираем значение вращения с $Char_L_UpperArm
Только фигня какая-то у меня выходит. То ли надо в какой-то другой системе координат значение получать то ли хз.
Эт лучше у знающих уточнить, я увы профан в анимации.

Код
dependson $Char_L_UpperArm;
degtorad((DependsOn_0.rotation.controller.value as eulerangles).x * 0.3)



аналогично и для других осей вращения L_ArmRoll


Еще раз спасибо)
Не мог понять почему так , пока не решил проверить на правом плече, там все по другому. Импортировал сегодня другой mehs от другой модельки. И там все нормально, скрип работает.
В вложении другая сцена с другим мешем с примененными контроллерами (скрипт).
Прикрепленные файлы
Прикрепленный файл  scene_ok.zip ( 284,46 килобайт ) Кол-во скачиваний: 27
 
Go to the top of the page
 
+Quote Post
Ded_
сообщение 01/09/2016, 20:49
Сообщение #1155


Бывалый
Иконка группы

Группа: Пользователи
Сообщений: 106
Регистрация: 04/05/2006
Из: Ryazan
Пользователь №: 30 816



С помощью Jahman, у меня начало получаться подбирать настройки для костей скручивания игрового рига.

Скриптом проще подбирать настройки, в сто раз быстрее.
Подобрал для двух пар суставов плеча, осталось подобрать настройки для других (запястье, щиколотка, ключица)
Скрипт переделал под себя, толком не понимаю для чего нужны какие команды и поэтому вылетает куча предупреждений, но скрипт работает! (Видео)
Исправьте пожалуйста в скрипте то, что вызывает эти предупреждения.
CODE

a1 = $L_ArmRoll.rotation.controller.X_Rotation.controller = float_script ()

a1.script = "dependson $Char_L_UpperArm;
degtorad((DependsOn_0.rotation.controller.value as eulerangles).x * 0.3)"

a2 = $L_ArmRoll.rotation.controller.Y_Rotation.controller = float_script ()

a2.script = "dependson $Char_L_UpperArm;
degtorad((DependsOn_0.rotation.controller.value as eulerangles).y * 1.0)"

a3 = $L_ArmRoll.rotation.controller.Z_Rotation.controller = float_script ()

a3.script = "dependson $Char_L_UpperArm;
degtorad((DependsOn_0.rotation.controller.value as eulerangles).z * 0.9)"

a4 = $R_ArmRoll.rotation.controller.X_Rotation.controller = float_script ()

a4.script = "dependson $Char_R_UpperArm;
degtorad((DependsOn_0.rotation.controller.value as eulerangles).x * 0.3)"

a5 = $R_ArmRoll.rotation.controller.Y_Rotation.controller = float_script ()

a5.script = "dependson $Char_R_UpperArm;
degtorad((DependsOn_0.rotation.controller.value as eulerangles).y * 1.0)"

a6 = $R_ArmRoll.rotation.controller.Z_Rotation.controller = float_script ()

a6.script = "dependson $Char_R_UpperArm;
degtorad((DependsOn_0.rotation.controller.value as eulerangles).z * 0.9)"

В вложении сцена с этой анимацией (из видео) без применения скрита для плечевых суставов.


Прикрепленные файлы
Прикрепленный файл  Scene_anim.zip ( 577,67 килобайт ) Кол-во скачиваний: 19
 
Go to the top of the page
 
+Quote Post
Bots
сообщение Системное сообщение






79 страниц V  « < 75 76 77 78 79 >
Reply to this topicStart new topic

1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 24/09/2017 - 07:50