Developing a Global Node Editor in Maya


    Today, I'm excited to share insights from a personal project I pursued during my free time. Despite my enthusiasm and effort, it ultimately did not yield the outcomes I had hoped for, leading me to discontinue the endeavour. The project's ambitious goal was to create a scene node editor within Autodesk Maya, offering navigation and interaction akin to the node-based workflow found in Houdini. This concept aimed to blend Houdini's intuitive node-based interface with Maya's robust capabilities, hoping to enhance the scene management experience. (character model created by François Boquet, character rig by Santiago Calle)


Examining the node editor in Houdini, one can't help but appreciate its logical structure and the straightforward methodology it offers for navigating through scenes. Houdini's node-based approach allows for structured and intuitive scene traversal. In contrast, while Maya also incorporates a node editor, its functionality and design significantly differ. Maya's node editor, despite being robust, follows a distinct paradigm that doesn't quite mirror the organized, singular approach found in Houdini's node interface.

In Maya's node editor, the process of visualizing dependencies involves selecting a node and then clicking the 'show connections' button. This action reveals all the dependencies for the selected node. However, this can get complicated due to the presence of some nodes that are hidden by default, such as auxiliary nodes. An important aspect of Maya’s node editor is its left-to-right data flow. This orientation, particularly beneficial for managing numerous connections and handling nodes with long socket names, aligns connections from the left to the right side. 

In contrast, Houdini employs a different approach where data primarily flows from top to bottom, except in VOPs and Shader graphs, where it adopts the more common left-to-right flow. Personally, as someone with a background in FX and compositing, I find the top-to-bottom approach more intuitive. Keeping this preference in mind, I embarked on an endeavour to implement a similar top-to-bottom data flow in Maya's node editor.


New global node editor for Maya

The initial concept behind my project was to develop a global node editor for Maya, akin to the one in Houdini. This editor aimed to enable users to traverse and edit dependencies throughout the entire scene more clearly and efficiently. Now, let’s delve into the specifics of my node editor and explore its features and design. 


In my version of the global node editor for Maya, I successfully implemented a graphical view that prominently displays top-level nodes as primary entry points. From these nodes, users can navigate deeper into the hierarchical structure of a scene. This navigation is facilitated by intuitive hotkeys: pressing 'I' allows users to delve deeper into the hierarchy from the selected node, while 'O' enables them to step back out to a higher level. This system of in-depth traversal is designed to enhance the efficiency and clarity of navigating complex scene structures.


At the top of the editor, there's a convenient navigation bar that displays the current node you are working on. This feature ensures users always have a clear understanding of their location within the node hierarchy. Additionally, I endeavoured to emulate the aesthetic of Houdini's node editor by customizing CSS styles. This effort extended to enabling the creation of connections directly from one socket to another, mimicking the intuitive connection-making process found in Houdini. The aim was to blend Maya's powerful functionality with the user-friendly interface of Houdini's node system.


Unresolved Challenges

While developing this editor, I encountered two primary issues that became the root of various other challenges, and I could not devise a viable solution within a reasonable timeframe.

  1. Connection Setup in Top-to-Bottom Flow: The first significant hurdle pertains to configuring connections within a top-to-bottom node flow. In Maya, it's not uncommon to have over ten connections extending from a single node, each with lengthy socket input names. The challenge here is how to efficiently arrange all these sockets on one node in a top-to-bottom flow. Unlike the left-to-right data flow in Maya, where each socket neatly aligns beneath the previous one, allowing for numerous connections without spatial constraints, the top-to-bottom approach requires a different organisational strategy. Each socket, along with its name, must fit within the node's width, which complicates the layout when dealing with multiple connections.


  2. Challenges with Maya's Architecture. The primary reason behind the discontinuation of this project lies in the intricacies of Maya's architecture. Maya's node structure is not inherently designed for managing an entire scene in a node-based manner. Each node can have numerous connections and often links to additional or helper nodes that store extra data. This complexity makes it exceedingly difficult to recursively map all dependencies in a clear and understandable format. As a result, the node graph becomes overly complicated, diminishing its practicality. This challenge likely influenced Autodesk's decision to design the Maya node editor to show only connected nodes, a more manageable approach given Maya's architectural constraints.


Conclusion

    Although the node editor project is currently on hold and seemingly on the wrong path, I don't consider the time spent on it wasted. The development process involved extensive research into QT, QTGraphicalItems, and graphical views, enhancing my understanding of node interfaces and QT internals. Despite the challenges, working on this project was an enriching and enjoyable experience. For those interested, the source code is available, albeit unfinished and without comprehensive documentation or comments.

11 Dec 2022
Switch Theme