Flow Nodes: The Future of Programming?

Hello, I know there are a lot of code purists out there, and coding is fun. I think FlowNoding/FlowGraphing is my preference though since it’s coding minus syntax and language which equals something more closely resembling pure logic.

I’ve mentioned I’m a Crysis modder before and that Crytek uses FlowGraphs in their game. Now apparently it seems that XSI is using FlowGraphs/FlowNodes and are advertising it as a possible replacement to plugin coding and scripting with XSI from now on!

http://www.softimage.com/products/xsi/ice/default.aspx

I’ve also mentioned this already on another thread - that I think that blender could use flownodes as a replacement for python scripts in the future as well. Just wanted to maybe open up the discussion on it to see what the coders out there maybe thought about this development.

With Flownodes, even a layperson can make a script. Now maybe they will make flownodes for C++ and Assembly code :spin:

that… would kick ass. Because if you think about it. What better way for open source to make programs that others are able to customize for themselves other than flownodes. ESPECIALLY the very cool looking ICE version from XSI which is improved over Crytek’s current flowgraph technology (pun intended btw)

This would just rock if you ask me. I think that this should be placed on blender dev’s priority list. But not only that the entire open source community’s! I mean we love our Python it’s true, but flownodes would make “Coding for the People” closer to reality. Which I think is a very open source principle.

XSI is also fully embrassing Collada format! I mean, all this plus blender GE and Crystal Space getting pimped out makes for a pretty cool time in open source that I’m thankful for!

Um, ok, why don’t you go post your idea to the Python mailing list, or pop by a Python IRC room, and see what type of response you get to the idea of making code graphical. It’d be a noble task, don’t get me wrong, but I’d much rather have Devs working on improving the core functionality and adding speed/lexical power than adding something to just make it easier, especially when the current text-based way of coding is fine enough and has been since we came out of hole punching cards.

But back on topic, this has been suggested many times before. Features in Blender 2.5+ may make it closer to a reality, as well. It is possible right now via either C or Python (somebody would have to code Nodes as Python UI elements, though), but somebody has to put in the time, and with the power of Python as it is, this feature would likely be somewhat limiting in fact. I think the brunt of the development in scripting should not be put towards copying other Apps (which is really not at all in Blender style), but exposing more Blender features via the Python API and perhaps providing more examples in the docs about the features.

In a way, too, this has already been partially implemented. Since PyNodes (for Materials) can execute arbitrary blocks of code (they could edit geometry), you could jerry-rig a system out of them.

but exposing more Blender features via the Python API

One of the beauties of 2.5 is that every function will have a python call. Any new features automatically have a hook to the API :slight_smile:

With Flownodes, even a layperson can make a script. Now maybe they will make flownodes for C++ and Assembly code

Nodes are interesting for joining blocks of code together. They are not for basic bits of code though. For example: How, using nodes, would I iterate over a list?

By simply hard coding an “Iterate over list” node. At which point you could keep said node forever and apply it to whatever scripting objective that may arrive. Nodes are like Pokemon cards really, each node has it’s own name and abilities that you can put online and trade them with friends. That’s what rox so hard about them - You can have general nodes like the one you just mentioned, and you can have really really obscure ones too like a “Izzle-Lizer” node to convert any string it’s connected to into street slang.

In other words individual nodes are like coding Macros - they are like hotkeys really. instead of writing out 20 lines of code to perform an operation, you simply make a node.

And what XSI’s ICE is doing is it is allowing users to take those individual coding macros and then to group them up together on a second tier to make an uber macro !

I just brought it up because I’m not sure if coders in general are following this development. Noding is as profound as Collada if not more so. My experiences with them in CryEngine have been very positive.

Nodes are more effecient because they are dummy proof and therefore errors in syntax become non existent - and as I see it syntax, not critical thinking - has always been the most opaque obstacle for newbies - and nodes get rid of that obstacle - I see no downside to nodes, do any of you guys?

Please don’t tell me you’re serious. Have you seriously ever worked with things like linked lists, multidimensional arrays of pointers, classes even? Complex data structures or OOP class conventions or MVC frameworks would be a NIGHTMARE with nodes, and would be vastly more complex than plain old text programming.

Don’t get me wrong, node based systems have their uses, but NOT as a replacement for programming.

Syntax is rarely where bugs come from. And when they do they are generally easy to find. Most bugs come from logic errors, and nodes have nothing to offer in preventing logic errors.

@Fish - a single node can be as basic as “Hello World” or as sophisticated as to encompass entire programs. This is what I was talking about with XSI ICE 's what I call Uber Macro nodes structure. You can use C++ in addition to 500 indivudual nodes in order together and then reconcile those things together in order to form one simple super node.

Nodes of the tomorrow will not be like the nodes that you are referencing. Nodes will be entire programs. Entire series of programs linked together. It’s like I said, when you think of Pokemon there are some monsters than can hit you with a headbutt. Then there are some monsters that can cast magic spells like things. The same with nodes, you’re speaking in terms of simple physical attacks, but pretty soon nodes will be doing some marvelous things. Teams of programmers will work together to make these uber nodes so they can share them and use them as they see fit. Perfecting nodes over periods of time and maintaining them and increasing their capabilities as needed.

As far as syntax is concerned, as I said, for beginners syntax is generally the most demanding thing.

Right now there are so many blender users for instance, or Paint.NET users who go to forums and beg the resident coders to make a plugin or a script and they wait for months and the coders have a life and you know how that can go.

Nodes can bring coding to the masses. Just think of what that could do for open source. For instance if there was an Iterate over List node that some benevolent coding wizards could make - just think of how awesome that would be for people who have no idea how to do it in text form.

What you would need is something like the Pynode, load a script and the node loads, this way you only download the text and you can make whatever change you wish.

Programming is… well, describing the steps to the solution of a problem in a logical (and one hopes, readable) manner. You have to divide the problem methodically down to the point where you’re left with smaller sub-problems that your language, visual or written, can deal with.

Now, learning the limitations of those tools (i.e., your nodes or language) will always require some study, but learning the strategies to divide and conquer is what usually takes the most time, and for good reasons: we have to study cases and patterns, understand scenarios, learn proper workmanship, learn how the experts do it…

At any rate, I remain unconvinced that any system will render programming learning-curve-less (and, as a consequence, massified). I could be just as massively wrong though.

Overall , the XSI ICE demo is not that impressive. I have seen that kind of work available for years. If they really wanted to impress me, they should have completed at least one of the scenes as a final render.

I read somewhere else this could be like node based particles.

To do this in Blender one can start by coding a particle mode button for the nodes window in addition to the Material and Compositing modes, then coding the nodes in and finally create a use nodes button for the particle system.

Thats how things are SCRIPTED in Unreal Engine 3, its a node based system called Kismet. It’s nothing new, I’ve seen a lot of programs that do things his way.

If you think this is the future of programming answer this:

Someone has to program those nodes, how will that happen if its going to be the future of programming? Making something graphical is a HUGE task for the programmer. Someones ease is 10x times someone else’s pain when it comes to this kind of stuff.

Yeah, but that 20 lines of code it would have taken to complete that operation will turn into a bigger code file just for the node.

ICE isn’t meant to replace actually programming plugins, shaders, etc…its meant to make it easier for a production to custom build tools with preset operators, functions, etc… I wouldn’t disregard the concept. Especially since Blender doesn’t have anything close available. In fact I’d love to see something similar happen in Blender. I’ve been hoping to see OOPS expand in a similar fashion. I’d love to be able to have modifiers be accessible. For example insert a mirror modifier into OOPS and then drag a noodle to nodes on any number of models. Or custom operators that could drive motion (ie. rotation, etc.)
I will agree this is nothing new. I’ve seen this in Maya, Truespace, etc. Though the big advantage over other setups is how fast it is. Its completely multithreaded through and in each node. Watch the video with rigid body dynamics, ICE dynamics and particle dynamics all running on a quad core system while the user is recording. That is pretty.
I think the best solution for something like this in blender is to open up everything via python as seems to be planned for 2.50. And give OOPS more flexibility within this framework.

ICE isn’t meant to replace actually programming plugins, shaders, etc…its meant to make it easier for a production to custom build tools with preset operators, functions, etc
I agree fully.
i think having nodes replace programing is not the right approach. I think it would be baetter to have a mix. there would still be the base application (blender for example) but you (a layman) could write “plugins” or custom applications with the east to understand node interface. also you could have custom nodes were you could link to whole other node stuctures or basic script (ever heard of gamemakers code? almost no complex syntax and command that mean exatly what they are

if '"life"+"amo"=7'
{x=55, y=64} 
else 
{print"haha sucker"}

another nice thing about the gamemaker code window is as you start typing it shows all the possible commands below so you know what the correct commands are. I think a combination of that and some node based programing would make it alot easyer for a layman non programer to create plugins for the program. and if such an approach became more popular among open sorce programs then for each program you could download a cofoguation file for you node programming program (i know that sound stupid) so you could create plugins for any program that was compatible with your node programing program. (i hope that made sense):rolleyes:

this would be a very good way to write expressions.

this is similar to a html wysiwyg editor.

Lightwave uses such a visual approach to create expressions
and it writes the code in the background.

claas

Right. Any day now, COBOL will bring programming to the masses. It’s the future of programming, for sure.

Well guys, ICE is really much much bigger than what is shown. RIght now it affect deformations and particles, but with a simple environment variable you can unlock untested features :wink:

Anyway, the beauty of ICE is how much low level those nodes could go. Even create an array and interate through it. Conditions, raytracing, quaternion conversion or matrix calculations to name a few. Let’s say, the wonderful modifiers being written now in GSoC, can be created as an ICE network and would be multithreaded from the start. I’ve seen the envelope operator being redone with ICE nodes and perform 6 times faster on an 8 core machine. Or a muscle system with jiggles and collision perform at an amazing speed.That’s insane to me!

It opens up a lot of possibilities for me. But also think about the community side of things. A lot of compounds (network of nodes) will pop up in the internet doing all sort of crazy things and ready to be used by artists.

It’s really a big step forward for XSI since it now has started to have the power of Houdini, with the easy of use of its workflow.

-Gian

Yes I agree with (much of) this too. This part is borderline undeniable.

But I was looking at it a step beyond that. Think about it. The manner in which the human mind works is imagery based. Schema.

      The reason I bring this up is because of my personal experience with nodes. It is just such a wonderful thing. Have you guys experienced Crytek's flowgraphs for yourselves? If you haven't then I think you should before you tell me or anyone else that noding will not take a more dominant position amongst coders in the future.

ICE seems to be an advancement over even Crytek’s nodes, however they may not feel as powerful seeing as a node here and a node there inside of Crytek can have the capability to turn space-time itself inside out (within the virtual game world).

Perhaps it is that experience of being able to alter the laws of reality inside of a virtual game enviornment as advanced as Crysis that helped to open my eyes to exactly what we’re dealing with. Perhaps your experience with nodes has simply been with modifying a material’s properties or camera lens angles during rendering. Or altering particles or mesh characteristics. Back when that was my only experience I didnt’ think that nodes were all that wonderful. I thought they were kind of clumbsy and weird and I didn’t feel compelled to give them much thought or respect.

But my experience with Crysis modding changed all that.

It’s like riding in a convertable and then finally finding the button that let’s the top down. I’ve seen MapZone and other node based programs but Crytek’s is what really opened my eyes to the POWER.

I don’t think you’ve seen their nodes? They’re pretty hot.

http://img1.hugeup.com/f/07082008/dd9a69b.png

Isn’t it beautiful. :smiley:

and there is more…

http://img1.hugeup.com/t/07082008/e74af6c.jpg

Now I just wonder why can’t those Crysis - specific nodes be replaced with something C++ contextual and as someone mentioned here before, then translated into pure code thus eleviating the node-overhead.

Look at the Time Delay node + the Logic: Any node. Those 2 nodes alone are incredibly powerful. Really really versatile. And there is more than 50 more I think. Many more.

You see in this pic the Time Delay node + Logic:Any combine to make a simple loop. With ICE, you could simple merge them together and make the 2 nodes into one!

1 Time Delay + 1 Logic Any = 1 Loop:Any Node! that’s powerful!

Look, I’m just trying to say I love them (nodes) :o

I don’t think I’m alone either. I just wanted to see what you guys thought about it.

I wonder if something could be done using python like in ShaderMan: http://code.google.com/p/shaderman/

I actually got to talk with this fellow briefly at last year’s siggraph. He gave a demo of what he was working on and how this same ShaderMan can be used to write code in python, bash, RenderMan shading language – and that other’s could be built in - like a compositor (using ImageMagick, I imagine) – using this nodal interface.

I brought this up in another thread and don’t see it already mentioned here. ShaderMan is written in python. It can be used to write python as well as other languages. Maybe it’s a good starting point?

It still looks very ugly to me. Like Poser’s material room. For me, it is actually more work to hook up and manage nodes than to write code. The problem with blender is that the documentation is always lagging behind the current feature set. So unless you are the programmer that invented the new feature, most people can not use it.

I actually see lots of usefull things that are never integrated into blender. Can I beg for a 3 sample anti-alias? How come plumiblenders has it and it’s not in the official release? What about that wonderful ocean modifier release? How come all those external plugins are not integrated. And the list goes on.