season 00 day002 stream components, Interfaces
Day 2, components and interface first for encapsulation of components.
- Isolation of components
- Few streams leading up to SIGGRAPH and first season will be after SIGGRAPH
- Encapsulation is one of the most important parts of object oriented programing and building interfaces.
- Components require figuring out how they fit together or connect to each other
- Public and Private concept
- Interface First – think of how the users will interact with the content and design based on that.
- Rig example: Wheel with spokes
- In and out for each component
- Contract or agreement for the component interface is that they will only connect from an Component Out to -> Component In
- Animators don’t use “Maya” as much as they use the “Rig”, the rig is their Software (the public part of the component).
- Component connections are a concern for the TD not the animators
- Private area of the component would be anything that a tool or script manages and you don’t want people aware or messing with it… space switching systems for example
Example but not a hard and fast rule
- control [animation transform icon nurbs curve ]
- guide [ something to change the build + attributes to change settings ]
- deform [joints, clusters]
- wheel_M_wheel_srt ( node type is joint)
Don’t over build a component interface so for example a Master World node (god node) just needs an output
Connections between Input and Output systems are done with direct connections vs. constraints. based loosely on the “contract” for our components as connections between them.
godNode_M_master_ctrl.worldMatrix-> decomposeMatrix-> godNode_M_cmpt |output|master_srt
… now we send godNode component output to wheel component input node
godNode_M_cmpt |output|master_srt -> wheel_M_cmpnt| input|localWorld_srt
now the wheel_M_cmpnt| input|localWorld_srt -> wheel_M_cmpnt| control |wheel_M_main_ctrl_srtBuffer
Rigging Dojo Note: This seems confusing at first but it simply creates a system of connections that is still based on the “contract” setup at the start that states each component will only connect to each other through OUTPUT and INPUT. In this way once you have a value coming into the components input then you can get that and send it to the animation control part of your component making sure the controls move together and stay zeroed.
When using decomposeMatrix or other nodes that sit between the two components they are or can be though of as underworld node.
This means here that they are not part of components (you can use Maya Name Space Editor ) but you can to assign a nameSpace like “underworld” to keep track of those connecting nodes between components.
Now the final pass will be to send out the “deform” connection from the component to the wheel geo.
wheel_M_cmpnt| control|wheel_M_main_ctrl_srtBuffer|wheel_M_main_ctrl.worldMatrix -> decomposeMatrix -> wheel_M_cmpnt|output|wheel_srt
Now we need to have the wheel control sending world transform from the component to a “joint” now in the system
wheel_M_main_ctrl.worldMatrix -> decomposeMatrix -> wheel_M_cmpnt| deform|wheel_M_wheel_srt (our deformation “Joint” )
Encourage the reusing our underworld decomposeMatrix node that is creating the component output and also sends over to the deformation part of our component.
Now our joint can direct connect to a transform node above the geometry or you could skin the mesh to the joint…etc…
Rigging Dojo Note: We hope the rough transcript outline and notes help new TDs dig into the great information and opportunity to learn from Raf.
Follow me on twitter for announcements and news
Follow the Streams live on Twitch
And keep up to date with news on the website