kodra
APEX's "graphs editing graphs" nature gives me the same vide: code as data, little to no type safety, passing strings around, passing dict as parameters around, extra layer of indirectness...
Again, that would be a problem if you consider Apex as a programming language, which it is not.
Apex have a lot problem linked to UX indeed, debugging it is kind of a nightmare, the requirement to execute apex in a deferred state definitely don't help.
as a programmer with experience, I've seen worse, and I can get around, I know it not gonna be the case of everybody else.
but I like to see the potential in thing rather than how they are right now, apex is a new system, it haven't had time to show it's proof, and I definitely don't people wanting to use it today.
I expect sidefx to be perfectly aware of it, and I would bet anything that the main focus for h20.5 will be on better user experience with Apex.
there is a few 'hidden' debugging tool that tell that it possible to get all the state of an apex graph as it being worked on, so I have no doubt we'll be able to see in realtime what an apex graph do as you build it (and if they don't, I'll do it myself).
now I wanna compare apex to something else, to show you that in reality, it not more different than something that have been used for at least 20 year.
apex as it core is nothing but an engine that can run node and pass through data between each.
Forget the notion of code as data, forget the notion of apex being stored as geometry, data is data, it don't matter how it stored, and it don't matter how it saved
an apex graph could be a yaml file, a json file, or a binary file so it trully don't matter that right now, it stored as geometry, data IS data and have no meaning by itself.
what give meaning to data is how you interpret it. when you want to run an apex graph, you first run the data (that is currently an houdini geometry) and translate it into an apex graph and then you pass that graph to the apex engine. you could write an json to apex translate (assuming there an api for that)
how you build data also don't matter, right now, sidefx present apex as being capable of writting apex graph, that one way of writting data, there is an infinite way you could write apex data :
use python to make an apex graph
use vex to write an apex graph
use an apex graph to wriet an apex graph
use javascript to write an apex graph
use an AI to write an apex graph
go on indefinitely.
Apex do not care how you build the data, it an engine to run node and pass data around.
how you use apex, and how apex work is 2 very different thing.
you can run an apex graph using python, you can run an apex graph using the invoke apex graph sop node, you could in theory run apex graph in C++. it an engine, it don't care where and why it run, it sole purpose it to run a graph that we gave it , with input data and output data.
apex wouldn't be capable of any interaction with the viewport by itself, it the tool that sidefx made for the animation state, the rigscript component, and whatever else they made that make apex run as a rigging and animation tool.
alone, apex is just an Input-Output machine
represented as code that what apex is (simplified, apex also have partial evaluation capability to run only a subpart of the graph):
graph = loadDataIntoGraph([json, yaml, binary, hou.Geometry, Whatever]); input = {string: "hi"}; result = runapex(graph, input);
that all, that really all there is to apex being apex, what give the context of rigging to apex is all the code around that little function.
where I'm going with that ?
lets go to maya for a bit.
Have you ever opened the node editor in maya ? what do you see ? node, node with connection, that all you see, there nothing else, it just a bunch of node with a bunch of connection, similar to apex, maya core is the dependancy graph, maya is also a input-output engine.
the key difference in maya dependancy graph vs apex is that maya build every tool they have around the dependancy graph, every one of them :
you want to create a bone, it add node to the dependancy graph, you want to create constraint : it add node to the dependancy graph, and you go one for every tool that exist , maya tool are just a dependancy graph builder.
apex could replace the maya depandancy graph and it would work the same way, how you use the engine is what matter.
disclaimed : I know that apex and the dependancy graph are slightly different, as it more of a plug to plug compilation more than a node to node like apex, which is why in maya node can connect into themselve, but that beside the point.
so, apex having virtually the same capability as maya, all of what maya can do, apex can do it too.
that why apex is a framework, and it don't matter how you use it, it the tool around apex that define how apex will be used.
and Apex is NOT A PROGRAMMING LANGUAGE it not vex, it not vop.