Very cool! Managed to set up a lovely hot air balloon rig with my students, thankyou! The link to Daniel Franco's Curve to joints MAYA vid (with the details of how to get the script to load) goes to Bob's vid, thought I'd mention.
Hey Amedeo. Bit of a noob question, but my curve stays as a straight line when I manipulate it, after the joints are created. I can't seem to get it to bend as yours does at 3.50. Thanks.
i was too lazy as well, and look at what chatgpt did to your Python snippet to connect multiply divide to joints. no need to type in the script editor, just drop down options, Very smart 😀😀😀 thank you very much for the tutorial import maya.cmds as cmds import maya.mel as mel driven_attributes = ['translateX', 'translateY', 'translateZ', 'rotateX', 'rotateY', 'rotateZ', 'scaleX', 'scaleY', 'scaleZ'] output_options = ['outputX', 'outputY', 'outputZ'] def get_multiply_divide_nodes(): multiply_divide_nodes = cmds.ls(type='multiplyDivide') return multiply_divide_nodes def populate_driving_nodes_menu(): multiply_divide_nodes = get_multiply_divide_nodes() cmds.optionMenu(driving_node_menu, edit=True, deleteAllItems=True) for node in multiply_divide_nodes: cmds.menuItem(parent=driving_node_menu, label=node) def refresh_ui(*args): global driving_node_menu populate_driving_nodes_menu() cmds.optionMenu(driving_node_menu, edit=True, select=1) # Set the default selection to the first item def connect_attributes(dummy=None): global driving_node_menu, driving_attr_menu, driven_attr_menu driving_node = cmds.optionMenu(driving_node_menu, q=True, value=True) driving_attr = cmds.optionMenu(driving_attr_menu, q=True, value=True) driven_attr = cmds.optionMenu(driven_attr_menu, q=True, value=True)
sel = cmds.ls(sl=True) for each in sel: cmds.connectAttr(driving_node + '.' + driving_attr, each + '.' + driven_attr) def create_ui_window(): if cmds.window("attributeConnectionWindow", exists=True): cmds.deleteUI("attributeConnectionWindow", window=True) cmds.window("attributeConnectionWindow", title="Attribute Connection", widthHeight=(400, 150)) cmds.columnLayout(adjustableColumn=True)
global driving_node_menu, driven_attr_menu, driving_attr_menu cmds.rowColumnLayout(numberOfColumns=2, columnWidth=[(1, 100), (2, 300)])
When a rigger says they're lazy, it actually means they're an expert.
daaaaaaaang this is good
I love how you explain what the nodes do as well, it finally makes more sense to me
Thanks, I am really glad you have found the explanation clear!
Fantastic walkthrough, thank you
Very cool! Managed to set up a lovely hot air balloon rig with my students, thankyou! The link to Daniel Franco's Curve to joints MAYA vid (with the details of how to get the script to load) goes to Bob's vid, thought I'd mention.
Thanks dude!
Thanks for this tutorial!!!!!!!🤠
🕶🕶🕶🕶🕶🕶🕶
very good tutorial, thanks
Thanks for taking the time to let me know you liked it!
How to bake this animation to joints that i can export it for game later? I tried usual way but, my skinned mesh gets unbind in the process.
Hey Amedeo. Bit of a noob question, but my curve stays as a straight line when I manipulate it, after the joints are created. I can't seem to get it to bend as yours does at 3.50. Thanks.
I got it, all good :)
Hi David, sorry, I am just now coming out of a super busy time.
How did you get this to work? Struggling to figure it out now
@@ashleyknehans4442 Sorry, it was a while ago now and I've switched to Blender. Best of luck.
i was too lazy as well, and look at what chatgpt did to your Python snippet to connect multiply divide to joints. no need to type in the script editor, just drop down options, Very smart 😀😀😀 thank you very much for the tutorial
import maya.cmds as cmds
import maya.mel as mel
driven_attributes = ['translateX', 'translateY', 'translateZ', 'rotateX', 'rotateY', 'rotateZ', 'scaleX', 'scaleY', 'scaleZ']
output_options = ['outputX', 'outputY', 'outputZ']
def get_multiply_divide_nodes():
multiply_divide_nodes = cmds.ls(type='multiplyDivide')
return multiply_divide_nodes
def populate_driving_nodes_menu():
multiply_divide_nodes = get_multiply_divide_nodes()
cmds.optionMenu(driving_node_menu, edit=True, deleteAllItems=True)
for node in multiply_divide_nodes:
cmds.menuItem(parent=driving_node_menu, label=node)
def refresh_ui(*args):
global driving_node_menu
populate_driving_nodes_menu()
cmds.optionMenu(driving_node_menu, edit=True, select=1) # Set the default selection to the first item
def connect_attributes(dummy=None):
global driving_node_menu, driving_attr_menu, driven_attr_menu
driving_node = cmds.optionMenu(driving_node_menu, q=True, value=True)
driving_attr = cmds.optionMenu(driving_attr_menu, q=True, value=True)
driven_attr = cmds.optionMenu(driven_attr_menu, q=True, value=True)
sel = cmds.ls(sl=True)
for each in sel:
cmds.connectAttr(driving_node + '.' + driving_attr, each + '.' + driven_attr)
def create_ui_window():
if cmds.window("attributeConnectionWindow", exists=True):
cmds.deleteUI("attributeConnectionWindow", window=True)
cmds.window("attributeConnectionWindow", title="Attribute Connection", widthHeight=(400, 150))
cmds.columnLayout(adjustableColumn=True)
global driving_node_menu, driven_attr_menu, driving_attr_menu
cmds.rowColumnLayout(numberOfColumns=2, columnWidth=[(1, 100), (2, 300)])
cmds.text(label="Driving Node", align="right")
driving_node_menu = cmds.optionMenu(width=280, annotation="Select Multiply Divide Node")
populate_driving_nodes_menu()
cmds.text(label="Driving Attribute", align="right")
driving_attr_menu = cmds.optionMenu(width=280, annotation="Select Driving Attribute")
for option in output_options:
cmds.menuItem(label=option)
cmds.text(label="Driven Attribute", align="right")
driven_attr_menu = cmds.optionMenu(width=280)
for attr in driven_attributes:
cmds.menuItem(label=attr)
cmds.setParent("..")
cmds.button(label="Connect Attributes", command=connect_attributes)
cmds.button(label="Refresh", command=refresh_ui)
cmds.setParent("..")
cmds.showWindow("attributeConnectionWindow")
# Run the UI creation function
create_ui_window()