Quantcast
Channel: The 3ds Max Blog
Viewing all articles
Browse latest Browse all 73

Introducing Max Creation Graphs

$
0
0

Introducing Max Creation Graphs (MCG)

Now that 3ds Max 2016 has been officially announced I can finally come out of stealth mode and tell you why you haven't heard from me for over a year!

Eddie Perlberg had me locked me up in a basement along with Martin Coven and a team of talented developers and QA until we completed the #1 most request feature for 3ds Max.

The result of our effort is a new feature in 3ds Max 2016 called the Max Creation Graph editor (or MCG for short). This tool enables user to create modifiers, geometry, and utility plug-ins using a visual node-based workflow.

With MCG you can create a new plug-in for 3ds Max in minutes by simply wiring together parameter nodes, computation nodes, and output nodes. The resulting graph can then be saved in an XML file (.maxtool) or be packaged with any compounds (.maxcompound) it depends in a ZIP file (.mcg) which you can share easily with 3ds Max users.

https://www.youtube.com/watch?v=E2Pv2-zjHD4

Once an MCG tool is evaluated you will have one of the following:

  • New objects primitive in a the "Max Creation Graph" category in the creation panel
  • A new modifier in the modifier pull-down
  • A new MAXScript utility
  • A new MAXScript function

After evaluation two files are generated next to your .maxtool file

  • A MAXScript plugin wrapper (.ms)
  • A representation of the .NET function compiled from the graph (.txt)

MCG is not Softimage ICE

Despite the title of the original request on user feedback (which you might notice was first suggested by Martin Coven before we hired him, I'm sure he is glad to finally get his votes back) and the obvious similarities this is not an integration of Softimage ICE in 3ds Max. At the heart of MCG is a brand new visual programming language we developed on top of the .NET framework.

Some of you may also be familiar with another open-source visual language from Autodesk called Dynamo and see some similarities. Dynamo is very similar to MCG (it is easy to extend using .NET and supports some functional programming concepts) but at the core is an interpreter whereas MCG is compiled directly to .NET byte-code. This design choice made sense for Dynamo, because it was designed for parametric geometry construction, however the performance was not sufficient to enable us to create tools for 3ds Max users.

3ds Max users expect all parameters of geometry and modifiers to be able to be animated and to have the results updated in near real-time in the viewport (usually buildings don't dance, but they can in 3ds Max). Because of this requirement we had to develop a full compiler. I'll bore you with more details if you buy me a beer (or I accidentally start to blog while drinking).

A functional dataflow visual programming language

For the most part MCG is a traditional visual programming language. Nodes perform a transformation on data that flows through input connections and output the result to the output "value" connection.

One characteristic of MCG that is immediately apparent is the fact that there are "function" connection outputs. This enables computations to flow through a graph as data. In computer science we call these first-class functions.

When a node is connected from the "function" output, the entire left sub-graph is treated as a function, with unconnected inputs in the graph treated as function arguments. This is equivalent to the lambda abstraction operation. More on this in later tutorials.

In MCG we can not only pass functions as arguments to higher-order functions like "Map" or "Combine" we can also return functions from operators such as "Bind" which performs a partial application or "Compose" which performs function composition. We can also store functions in arrays. I'll go into more details on this in a future blog post. 

A few things to note about MCG: most data that flows through the graph (with a few exceptions such as "INode", "Cache", and "Random" objects) are immutable data structures. In other words MCG is nearly a pure functional programming language (like Haskell). An example of this is that when you send data into a "SetValue" node the array you get on the other side is a new array, and the original one remains unchanged. This was done so that multi-threaded evaluation (e.g. via "ParallelMap") could be done quickly and easily. I promise more information on multithreading in a later post.

The Future

We are a publicly traded company which implies certain legal obligations, so unfortunately I can never talk about the future as much as I would like. It always makes me a bit sad, because I spend a lot of time thinking about the future … more time than my boss would like. :-)

https://www.youtube.com/watch?v=tmudH_C97O4

At the very least I hope that I have proven to you that by going on to 3dsMaxFeedback.autodesk.com YOU are directly influencing the future. Yes, big requests might take four years to deliver on, and sometimes we can't tell you we are working on them (it is a very competitive business after all) but we are paying very close attention.

I never forget that without the support of our users there would be no 3ds Max, and I wouldn't have my dream job.

Sample MCG Tools

For some sample MCG tools made by our team see this blog postThere are also a number of 3rd party sample tools and videos posted on the MCG Facebook page.

On the Autodesk 3ds Max Learning Channel on YouTube you can find a tutorial series on Max Creation Graphs: 

https://www.youtube.com/watch?v=YBPVUvvMdD0&list=PLnKw1txyYzRl1IVsbSFwd-c9i9cz-rRJ1

For inspirstaion, here was the demo video made by Martin Coven: 

https://www.youtube.com/watch?v=3nsAlw_j4lQ

Acknowledgements

MCG would not have been possible without the hard work of a talented and passionate development team. The core team included Martin Coven as designer and instigator, myself as architect, along with Abdelhak Ouhlal, Attila Szabo, Clint Lewis, Rick Delesdernier, and Roman Woelker. Larry Minton and Tom Hudson also contributed at crucial points to help develop key functionality. Martin Ashton played an important role developing the initial prototype of MCG and I look forward to the tutorials he creates on his YouTube SDK and scripting learning channel.

Of course this is an effort that spanned the entire 3ds Max team. No feature is developed in isolation, it takes an entire team of people working together to deliver 3ds Max. The whole team has worked hard to create a release that I am truly proud of.

I personally want to thank Eddie Perlberg, Michael Russo, Kelcey Simpson, and Chris Young for believing that our team could deliver on such a bold and daring vision, and supporting us through the process.

I also want to thank all of the Beta members and 3dsMaxFeedback contributors for their invaluable feedback, support, and encouragement.

Final Words

For now I want to leave you with the same words that Eddie shared with me recently "This is just the beginning."


Viewing all articles
Browse latest Browse all 73

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>