Interface overhaul progress

posted by Chris - 5 years ago

I've been working on the new interface and I thought I'd share a screenshot of where it is so far, and perhaps get some feedback.

I've tried to give nodes an Xpresso-like feel without re-creating Xpresso. Also zooming both in and out is supported and much faster, wires are now anti-aliased (this came at the expense of the wire color fading between port colors), port labels are drawn directly on the nodes, and disconnected input ports are hollow.

77 Comments for “Interface overhaul progress”


  • Richard Squires

    Looks very nice indeed. What does the specular node do?

    • Author

      Chris

      The Specular node allows you to isolate specular highlights, kind of like the Lumas shader, except you can choose whether bump maps affect the output and you can choose which lights to use. Also the Specular node does not currently support Anisotropy or diffuse shading.

  • Robin

    Looks great. cmNode is getting better and better. Thanks a lot.

  • Gleb

    Looks great Chris! Keep it up!

  • Tangle Wire

    Chris, this plug-in is incredible! Thank you so much for this generous gift.
    The updated interface looks great. Can't wait to test it out.

    I'm already having great success with the latest release. It's quite responsive and a joy to work with.

    A couple suggestions I would love to see implemented:
    •using the middle mouse comands to scroll sideways/up and down. Currenly I can only zoom in and out. When you get a long tree it would be nice to side scroll.
    •ctrl dragging a selected node to make a copy. This is now a standard function in many C4D window panels. It would keep workflows consistent to use it in your node editor.
    •auto arange nodes to grid. I use it on the expresso editor.

    I've only had a couple hours using this plugin. I think it has limitless potential and is already awesome. Keep up the great work!

    • Author

      Chris

      Thanks! Excellent suggestions and added to my tracker. However I will have to give some thought to the ctrl+drag copy, since right now that selects ancestors of the selected node and I prefer that behavior. Perhaps I can come up with a compromise.

  • tom

    hey chris .. jeah man i like it !!!! good work !!! it gets better and better !!! what about a clickable big preview window to see the mat i m working on in a bigger scale .. its not very important but usefull here and there and i prefer round edges on the nodes themself but thats just the visual taste of mine .. i could also imagine a tab option for diff trees (tree setups) to quickly jump between them .. keep it man !!!!!!!

    • Author

      Chris

      Hi Tom, thank you for your feedback.

      A big preview had been suggested and it is on my issue tracker, but it is a relatively low priority at this time.

      I am also a fan of rounded node corners but I've hit some roadblocks. I'm trying to stick to native drawing functions to maintain as much speed as possible. There is a function for drawing bezier curves which I was hoping to use for rounded corners and circles, but they have proven to be quite unpredictable when using multiple segments. Plus they do not appear to close or fill in R14 but they do in R15. I could just be using the function incorrectly, however they work fine for the single segment wires. I am already doing a bit of custom antialiasing to draw the new ports so I may try to throw something in for rounded edges, but again, low priority.

  • tom

    hey chris .. since you re working on the interface i have some more ideas which could be usefull for the workflow ;-)

    - what about different shapes (or/and size) for the nodes .. so its more easy to overview the tree -- p.e. solids, textures, etc could be a retangle shape -- shader, etc. could be a circle shape -- output its not too important ( maybe just bright and yellow as it is already) and so on

    - a note node -- just for writing text and have a note (for teamwork situations)

    - a gamma node

    - a preview node -- kind of an output node (just with bigger preview window) to have a better and bigger preview of the things i am creating ( of course ic ould also just use the mat preview but it doesnt work with vray mats at the moment )

    - always (or switchable) show all in and out ports per node

    - drag n drop from the content browser or finder or explorer .. p.e. dragging in a texture would automaticly create a texture node

    - drag n drop materials from content browser including the tree for the material -- means it needs a safeable tree (maybe in the project folder or where ever) -- this could be helpfull with exchanging materials (with trees) in a team situation

    so thats it for now ..

    by the way : if you need help with something just post it .. me and i guess others too are glad to help out with some things if possible

    **** enjoy the weekend .. tom.

    • Author

      Chris

      1. I'm not crazy about differently shaped nodes. I'd prefer to keep them categorized by color. Perhaps I could add in an option to color the whole node rather than just the title section, which would increase visibility.

      2. I do like the stickynote nodes in Nuke, but the one thing that's really preventing it is that my nodes are not resizable. I might make them resizable in the future, but that is not planned. Each node does have a large "Notes" field, and I plan to add some visual indication to the nodes to indicate the presence of a note. I was thinking about adding a note icon or dot or something which when clicked would pop up a dialog with the note's text.

      3. Both the Grade and the Filter nodes have gamma adjustments.

      4. Maybe, but fixed node sizes might prevent that. I do want to do some kind of large preview eventually, but it probably will not be a node.

      5. I like that idea, an option to always show all ports has been added to my issue tracker. Currently this will only affect the Switch and Material nodes.

      6. Content browser support is being worked on. I'd also like to support dragging from the file system.

      7. Saving/loading trees is being worked on.

      Thanks Tom!

  • tom

    hey chris .. a question: isit possible to have a generate tree option? -- to read out any given material (c4d and of course vray) and generate the tree out of it .. that would be supercool ;) **** tom.

    • Author

      Chris

      cmNodes supports basic material exploding, but I think what you're referring to is taking a complex material and recursively recreating every shader/layer/etc as a node. Currently this is not possible, as it would require a node version of every shader out there. The thing to do would be to find a good way to wrap a shader in a node so that I could dynamically expose shader slots as input ports, then "deep" explosion would be possible. But I'm not there yet.

  • Author

    Chris

    Just a quick update: I've hit most of my initial goals for the interface revamp and I've spent the weekend working on Vray support. I'm sure many will be pleased that as of a few minutes ago I have a working VRayAdvancedMaterial node plus an exploder just like the standard material exploder.

    • tom

      hey chris .. f*** awesome news .. i cant wait man ! ;) and thanks for your reply !!!! .. let us know when we can test it ! .. what a happy monday morning .. greets from berlin **** tom.

  • Sam

    Hey Chris,
    Thanks....I've been searching for a node-based materials plugin for C4D for the past 5 years...every time I switch back and forth from C4D to Softimage in fact. I think the node system in Softimage is the model to follow. The new nodes system in Maya is based on it.

    Here are some suggestions:

    1. Node Grouping - select some nodes and add a context menu option to 'group selected' (which creates a tree within a tree with new, custom inputs / outputs)
    1.a. double click a node group to edit it's contents (which brings up a node-tree grid in a separate pop-up window or use breadcrumbs to navigate to higher levels)
    1.b. drag input ports to left edge to make visible input ports for the group (with custom labels)
    1.c. drag output ports to the right edge to make visible output ports for the group
    1.d. custom name for the node group
    1.e. ability to add node group to content browser presets

    2. An Animatable / scriptable "state machine" - similar to a switch but with a more friendly way of applying custom user data fields (something dedicated to it)

    3. a birds-eye viewport in one of the corners of the grid

    4. Unused input and output ports as colored circles and as dots when in use (same as xpresso ports)

    5. Dragging from an already connected port creates new wire instead of breaking current connection - ctrl drag to break all connections - ctrl-click directly on a wire to cut it

    6. add a simple pass-through node the is small and has one input and output port so we can better manage large trees

    7. add a paypal donate button to the site!

    • Author

      Chris

      Hi Sam, thanks for your feedback. I've got some features planned that overlap with your suggestions, so I'll go through those and we'll see what's left.

      1. I have a Tree node planned, which will allow loading whole trees into a node to create "compounds" or "groups".
      1.a. Breadcrumbs might be better suited to my interface, or perhaps a hierarchical tree view would work (it depends on where I end up with my tree manager).
      1.b./1.c. I'm planning something more along the lines of Nuke's "Input" and "Output" nodes to get data in and out of groups. It's the same end result, but will be easier for me to manage internally.
      1.d. The Tree node will probably take the tree's name when it's created, but you'll be able to rename it like any other node.
      1.e. Beyond simply saving and loading trees, content browser support is on my to-do list.

      2. Can you elaborate on this a little?

      3. Yes, this is a feature I love in Nuke/Fusion (even Photoshop). I've been thinking about this for a while but haven't added it to my tracker yet. I'll do that now.

      4. Already happening with the new interface.

      5. The first part about dragging from a connected output port is on my list. With the new interface you can now click and drag on the actual wires to disconnect. I like ctrl+click to cut, I'll add that to my tracker.

      6. I use Nuke's NoOp nodes very frequently. I'll add this to my tracker.

      7. I have one hidden around here somewhere.

    • Sam

      A state machine would take the values of all it's inputs into consideration and switch it's state (active input) depending on which conditions are met.

      This could be used for anything really but the basic premise is conditional output:
      In the nodes Attributes you would set the type of check to perform.
      Example 1:
      when object is selected (or other condition is met) use input A (our main material pipe)
      otherwise use input B (a proxy material pipe)

      Example 2:
      When value = 0 use input A
      When value = 1 use input B
      When value = 2 use input C

      Where the value above is driven by xPresso logic or by a custom User Data field attached to an object.
      Example 2 is very similar to the Switch node but I can't find a way to drive the state of the switch node from outside.
      In this example we could use this to drive a 2d texture animation (like cartoon facial expressions) and have an entire library of facial expressions and sub-expressions within a single tree. It would be easier to 'rig' this outside of the node and animate between states with a slider or other 'User Data' parameter setup...especially if we want to get nuts and have state machines attached to state machines.

      You can call them 'condition' nodes instead of 'state machines'

    • Author

      Chris

      That's funny, just the other day I was thinking about adding some logic nodes. If I build a condition/logic/state machine node I imagine it would take one input and use that to compare against some user defined parameters, and based on the result choose between the other input ports.
      The dragging from the node editor into Xpresso is a little broken (I'm fixing that as well). But you can still get the nodes into Xpresso using a couple of methods.

      1. With the node selected, drag the node icon in the Attributes Manager into the Xpresso editor.
      2. Assuming you have a userdata slider set up somewhere, right click the slider's label and choose XPressions->Set Driver, then in the Switch node properties, right click on the "which" label and choose XPressions->Set Driven(...).

  • Sam

    Also:
    1. Can you make the nodes snap to the grid at the top, middle instead of the node's center?
    2. When we double-click to expand a node, can it expand downward (leaving the top edge in place instead of expanding from the center?
    3. When nodes are expanded (down) it would be nice for the name to stay in place (above the thumbnail).

    • Author

      Chris

      1. I could potentially set up a preference to change the "anchor" position. I'll give this some thought... no promises though. If this does happen it would take care of your second point automatically.

      3. I completely understand this request but the idea of postage stamps below the ports just doesn't sit right with me. I'll have to try this out or mock something up to see how it feels.

    • Sam

      Oh I agree...I was referring to the node Name appearing below the thumbnail when expanded...feels like the name should be at the top followed by the thumbnail, then the ports

    • Sam

      Obviously I'm not looking at the nice image at the very top of this page...disregard...

  • Jay B.

    Chris,

    This is so awesome. Thank you.

    +1 for Octane Render support.

    • Author

      Chris

      Thanks Jay, your vote for Octane has been noted. I have an old Octane license around here somewhere... I wonder if it's still valid.

  • Han

    You are doing a great job, thank you very much.
    Here are some of my thoughts. What do you think about this?



    • Author

      Chris

      Hi Han,

      Your link got a little messed up so I went in and fixed it. I hope you don't mind.

      Thanks for your feedback!

      I think I prefer the postage stamps under the node title, but I have been kicking around the idea of variable postage stamp sizes, and full-width could definitely be an option.

      I am also planning a nuke style navigator with bookmarks.

      I kind of like the idea on on-node checkboxes for material channels, but this isn't likely considering that the VrayAdvanced node I am working on has 73 possible shader slots. Perhaps the thing to do would be to provide a mechanism for each node to display a custom context menu. I'll add this to my issue tracker.

      I also like the idea of a to-do node, but I'm curious about exactly what you're suggesting. Would it just be plain text? Or would the node properties have several text fields and it would display one per line? If it's plain text then I think the new note system will come in handy... with the new interface, if a node has a note attached a small square will appear in the top left corner of the node and when clicked it will pop up a dialog with the contents of the note.

  • stereoV

    that looks marvelous Chris !!! I like the new Features and Icons for a faster access- well done! How long do we have to keep waiting for it ;))
    please think about to integrate a Vrayforc4d workflow... ;)))))
    thx

    • Author

      Chris

      The next update will come after Vray nodes and the Tree Manager are ready. It's probably a couple of weeks out.

      I am currently working on a node for the Vray Advanced Material that works pretty much the same way as the standard Material node.

  • Gregor

    This plugin is really great!

    Can You think about implementing something like reflection node (like specular one) with ability to ignore bump?
    This way stuff like clear coating would be possible.

    • Author

      Chris

      I was thinking about doing reflection, diffuse, and shadow nodes, but as it is I got sidetracked with the specular node, so these others will have to wait at least until I have the tree manager done.

    • Gregor

      This is very good news!
      We all probably agree that material system in C4D needs some serious love.

      Thanks again and good luck!

    • Author

      Chris

      The tree manager seems to be working well so I built a reflection node.

    • Gregor

      That's great news Chris.

      Will it be based on native reflection algorithms, with blurriness or roughens of some sort?

    • Author

      Chris

      The reflection node does use native API functions for calculating reflection color, but as far as I can tell (someone please correct me if I'm mistaken) the API does not expose the blurriness attributes. It looks like I have to disperse reflection rays and calculate blurriness myself. I have been experimenting with this, but the best I have so far is quite grainy. I will probably leave out blurry effects until I have the time to dedicate to a complete and optimized implementation.

    • Gregor

      I imagine that API limitations can be frustrating, but maybe something good will come out of this.

      Native blurry reflections are slow as hell so maybe you will be able to pull something better out of it.
      I found some random paper on-line in this matter, but you probably know this stuff.

      http://cgg-journal.com/2002-1/01/paper.htm

      I'm quite positive that we will be using only luminance channel in native materials at some point thanks to you :)

    • Sam

      hmmm....
      seems like you could achieve similar results without the slow render time by chaining the following sequence together:
      New instance of bump channel with really fine noise shader with 'some' parameters exposed for tuning --> Calculate results of reflection with this bump channel first --> Blur --> Distort reflection if regular bump channel is active

      not sure what the api handle would be but perhaps "Dispersion" is a good place to start.

    • Author

      Chris

      Gregor, thank you for the link. I have been collecting a ton of info on this, plus I have a few books that cover glossy/blurry reflections in some detail. It seems that I just have to figure out a fast and efficient way to adaptively sample points to smooth out the reflection. It's just going to take a little dedicated development time to work out. My goal is to eventually provide a "blurriness" input port to let a shader define which areas of a surface should be blurry.

      Sam, I was experimenting with perturbing the normals slightly to achieve blurry reflections with a single reflection ray (similar to your fine noise suggestion) which actually worked out ok, but you had to max the AA to get it smooth and even then super bright samples were not being smoothed. And unfortunately the blur node won't work because it's only 2d, and even if it was 3d it would blur a surface uniformly.

    • sandidolsak

      as far as controlling the blurriness with a shader is concerned, it is quite simple to do in a tree format, all you need is a copy of the material with 100% blurriness, put that on the object besides the original material and you use a shader to drive the alpha of the "instance" material, thus controling where the blurriness is...

      without the tree system you had to make a copy of a material each time you changed something in the original.. annoying

    • Author

      Chris

      What you're describing would effectively fade between blurred and unblurred. But let's say you have a mix value of 50%. The result would look like a blurred surface evenly mixed with an unblurred surface. What I'm suggesting is something to drive the strength of the blur.

    • sandidolsak

      according to this thread it works well

      http://forums.cgsociety.org/showthread.php?f=47&t=1016440

      or did I misunderstand you

    • Author

      Chris

      I see. This will work for blending materials like Per suggests in that thread but not for blending the output of two nodes.

    • Author

      Chris

      The next update will include blurriness options in the reflection node including a "blurriness" port to allow a shader to control the amount of blurriness.

    • Author

      Chris

      Just for clarity, blurriness will be in the next update after 1.5.07.

    • Gregor

      It's very nice to hear that.
      How did you manage to get blurry reflections?
      Having multi reflections open new possibilities.
      Thanks again Chris!


      http://s17.postimg.org/x8yrrtwtb/Chrom_CM.jpg

      http://s29.postimg.org/h88daw21j/Multi_Reflection_S.jpg

    • Author

      Chris

      I ended up having to build my own diffuse sampling mechanism. The speed and quality seems pretty comparable to C4D's, however I haven't clocked it or collected any real metrics yet. I'll try to get an image or two posted soon.

    • Author

      Chris

      Your image just reminded me, I also fixed the reflection node so it will respect an object's "seen by reflection" setting.

    • Gregor

      We are waiting patiently.
      Considering that you disperse samples independently of C4D core, do you plan to implement anisotropy at some point?
      Just a thought.
      Personally I think that blurriness map alone brings us few steps closer to vray in terms of archviz.
      Lack of variation in reflections blurriness make things look like you know what...

    • Author

      Chris

      Yes, I would like to implement anisotropic reflections and illumination models eventually. There are some issues that I discovered today with larger blur sizes that need to be worked out first.

    • Gregor

      Good luck then on those issues.

    • Gregor

      Hi Chris.
      How's it going?
      I just saw this plugin for vray with interesting shading model that is new to me, maybe it will interest you.

      http://www.shlyaev.com/rnd/37-cpp-category/54-ggx

    • Author

      Chris

      It's going ok... work has ramped up so my time to work on cmNodes will be reduced pretty drastically for a while.

      Thank you for the link. I have the paper that Sergey refers to although I haven't read it yet. I really like his results.

  • Author

    Chris

    I've got a quick tree manager status update. Saving, loading, and renaming trees is working.

    Also copying and pasting nodes between documents while keeping shaders intact is working.

    • tom

      hey chris .. good news !!!!! i wish you a great monday morning !!!! keep it up and dont forget to rest as well ;) **** tom .

  • sandidolsak

    yea I know, was only mentioning that it is possible already to use a map to control blurriness, of course the workflow is bad, so having it as a texture input in a node is most welcome

    as are layered reflections (coating)

    thanks again for all your effort on this

    • sandidolsak

      ah this should be a reply to Gregors post...

  • Nucleus

    Hello.
    I was linked here from itsartmag.com.
    I was searching for a plugin like this one and just downloaded the newest cmNodes.
    Sadly I use Vray for the most of the time. But I cant create a Vray Advanced Material with the nodes.
    I tried to create a C4D Material and then converted in to a Vray Material. But the resulst a not quite the same.
    Although I want to use this Nodes to manipulate dircet the Vray Material.
    I hope the new version will support Vray Materials. Is there any informations about the release of the new version???
    Thank you for spending your time to create such an usefull plugin.

    • tom

      hey nucleus .. lokk at this: http://forum.vrayforc4d.com/threads/vray-1-8-dr-cmnodes.14167/#post-107409 there you find a vray setup ;) its a good start , but anyway chris is working on the vray mat nodes .. ;) !!!!! **** tom.

    • Author

      Chris

      As Tom stated I am actively working on Vray support. There is a Vray Advanced Material node coming with the next update, but Vray Shader support is still in progress. I will most likely put out an update with the Vray Advanced Material node very soon, and release incremental updates with more Vray stuff as its ready.

  • Dennis

    Great progress ! I like the new Interface overhaul. Nice. Is it possible to add "tags" also into the node system ?
    Currently i work with C4D R13. Do you think , you can do a R13 Version ...?

    • Author

      Chris

      Hey Dennis, do you mean tags like object tags?

      An R13 build has been requested a few times. If I do decide to support R13 it won't be until after the issues for the R14 version are all worked out.

    • Dennis

      Yap, i mean that object tags. Like the UVW-Tag or the Texture-Tag. Cause they have the information about
      the projection of the texture. Normaly i use the "projector"-channel inside the material to override the texture-tag data.
      So i thought maybe a "direct tag" inside the node-system could be more powerfull ? (only guessing that...)

      Yeah, that would really be great, if you can do a R13 Version ! ...after you fix the issues for the R14. :-)

    • Author

      Chris

      Building a tag system on top of the node system is not necessary, since nodes themselves can serve as modifiers (sometimes).

      I actually hit a problem while testing a new node last night. I was trying to make a normal map from a composite of 3d noises and since they were all set to texture space the normal map wasn't generating. I had to go into each noise and set the space to uv. So I thought it would be nice to have some kind of projector node to address this type of problem, which would also address your request.

    • Author

      Chris

      There will be a Projector node in the next update, very similar to the Projector shader.

    • Author

      Chris

      The R13 build is available here: http://www.cmstuff.com/article/1012/cmnodes+for+r13

  • tom

    SHARING MATS
    hey chris .. how does it work if i wanna share or copy these node based generated mats with others .. does every computer has to have it installed or is there some sort of bake into c4d mat option? **** tom

    • Author

      Chris

      Tom, in the next update you will be able to save trees out to a file for sharing. For now you would have to send the whole document.

      There is no bake option, the end user would need cmNodes installed. To bake to a C4D mat I would have to create a shader that corresponds to each node (well, most nodes... some can be re-created with stock shaders), and it would require the end user to install a plugin anyway. I haven't tested it, but you could probably use C4D's bake texture function to bake a node setup down to bitmaps.

    • tom

      hey chris .. good news!!! i think saving to a file is a supa solution! does this file iclude the textures? as an option maybe? or does it save the links aka pathes? **** thanks so much for your work chris!!!! * tom.

    • Author

      Chris

      No, textures are not bundled although this is worth looking in to. For now I would suggest running a "Save Project with Assets..." command to collect textures and convert to relative paths, and then saving out the tree.

    • tom

      yes .. i would have thought so! too ;) thanks anyway ****

  • peter

    Hey chris, very nice plugin, i tested cmnodes on mac the sss node doesn't work. the plugin does not have panning features usually like those in the top right corner of c4d 3d viewport and keybord shortcuts alt + middle mouse click and drag to pan the cmnodes view. Sss shader expects shaders or texture inputs and I think it woukd be nice to add those inputs slots in sss shader node. A cook terrance node would be nice to have. Here is a reference to all models of microfacet distribution easy to implement them as shaders shaders and then expose those shaders in cmnodes
    http://en.m.wikipedia.org/wiki/Specular_highlight

    Please do check.the sss node it is note working ,bumped into a snag while layering several sss node to create a layered skin shader. I do not know if it is mac only issue haven't tested it on windows yet but great plugin and hack into the c4d material system and seamless integration. Nice job.

    • Author

      Chris

      I have confirmed that the sss shader does not work in a node (win7). I also discovered that it works in a layer shader but not in fusion. I will try to find a workaround.

      The Specular and Diffuse nodes in the next update support only a simple phong model, but I am planning to extend that in a future update.

    • Author

      Chris

      I take it back, the SSS shader does work in fusion. I still don't have it working in a node yet.

  • Bepes

    Molto bello e sopratutto comodissimo continuate così!

    • Author

      Chris

      grazie Bepes

  • robin

    Hey nice stuff. I am using this plugin & i just love it.
    Just wondering when this new interface will be release. Waiting for this for a long time.
    Thanks

comments are closed for this article