JacquesLucke / animation_nodes

Node based visual scripting system designed for motion graphics in Blender.
Other
2.28k stars 342 forks source link

Proposals: Usability and Quality of Life Improvements #1771

Closed dapa5900 closed 3 years ago

dapa5900 commented 3 years ago

Hi @OmarEmaraDev

Having now worked on a couple of projects I have to say I'm really impressed with what you can achieve with Animation Nodes, so first of all thank you a lot for developing this amazing piece of software!

However I do have also a couple proposals for some usability/quality of life improvements that I would like to collect here:

  1. Set the "Auto Execution" by default to these values. This is the first thing that you literally do every-time you create a new node tree.

autoExecution

  1. Automatically create and enable manual triggers for location, euler and scale whenever you add an Object Controller Falloff or an Object Transforms Input. It would be nice as well to automatically create manual triggers for Object Attribute Inputs. Like the first point I think this is something that will speed up things and also helps newbies to AN to not get frustrated because stuff is not updating in case they don't know about manual triggers yet.
  2. When you need to use values from a node at multiple places in the node tree it can get really messy when wiring these up and it's also hard to read which wires connect which nodes if they get distributed widely. It would therefor be great to have some kind of wireless instance node that is referencing the original node and that you can freely position multiple times anywhere you want without a wire connection to the parent node. Design-wise this could look like a viewer node but with an output socket (basically showing the value that it is storing) and it should of course automatically update when the parent gets updated and maybe also inherit the parents node color so that you can easily identify from a far which nodes belong together (potentially the instances/children nodes need to be a bit less saturated than the parent to distinguish them from another still).
  3. Instancing whole collections should be as easy as in Geometry nodes, meaning please add this mode directly to the instancer node with the options to either instance the whole collection as one object or all objects separately, including a seed value for the object picking.
  4. The ID Keys system is great and gives you a lot of power. However it's a bit sad that you always need to separate an object into it's loose parts if you want to animate these parts separately with AN. Of course you then have more control where exactly to have the anchor points etc. but for a lot of use cases it would be way more convenient if you could just keep the original object as a whole and AN would fracture it internally; meaning identify all loose parts, place the individual origins to the center of the geometry and access all the different matrices. This proposal is probably more complex than the ones before and would therefor maybe need a separate ticket for some kind of "Fracture Node" feature. Let me know, if this would be feasible at all then I can as well open a separate ticket for this.

These are the things that came up to my mind now, maybe I will have more proposals in the future. All of them are of course nice to have so if there should be technical concerns or limitations that I'm not aware of it's also not a problem. Please let me know, if you need more input from me ... :-)

Thanks!

OmarEmaraDev commented 3 years ago

@dapa5900 Glad to see you found Animation Nodes useful. :)

  1. I was just working on this in #1769. You should drop a comment there.
  2. In case you didn't know, there is an operator in the Advanced Node Settings that creates triggers automatically as you are suggesting. If you mean completely automatically, I am not sure how this might work. When should this automatic trigger creation happen? When the user sets the socket value to a new object?
  3. Seems like you are looking for a more coherent version of the Data Interface node. I am not sure if this is a good idea to be honest. Connections do not just provide data, they also define execution schedule/flow/order.
  4. Collections as instancer types sounds resonable.
  5. So something like a per-vertex ID keys?
dapa5900 commented 3 years ago

@OmarEmaraDev

  1. Ah cool! Yeah I guess this would be the best solution as it will then probably also cover all the things that usually would need a manual trigger (as in point 2). That's still WIP, right? What do you think when this will be available?
  2. No, I didn't know about this feature but I just tried it and it's already very helpful. Thanks for the tip. But as just said, this point should be obsolet anyways when the Scene change will be the default then :-)
  3. Understood. It would basically be necessary to trigger the child nodes at the same time as the parents so from a flow point of view it would be the same but without the wire connection. Maybe as a reference here are two examples from Fusion how this overall feature could work:

Instance Copy: In Fusion you can copy and paste an instance of any node so whatever you change on either one of the nodes will also be reflected on the other instances. As you can see from the example below this works in both directions (parent to child and child to parent). You can also de-instance properties manually in case you would like to have some things connected across multiple nodes and some things not. This a a cool concept by itself and could be a feature for AN as well for all of the nodes. Of course this doesn't solve the wire problem in case the node needs some data input as you still would need to connect the previous nodes directly into the instance. But it could already help with Input nodes for example (like using instances of one float input on multiple places in the tree).

https://user-images.githubusercontent.com/75205162/128212137-92ceef98-fda8-456b-b625-796ee5fea03b.mp4

Wireless Link: This one is basically fully copying that status up until this point of the flow what has been defined as a source. So in the example we have an image that gets defocused afterwards. By dragging the defocus node into the source field of the wireless link we get the same result in both nodes and would have also the option here to go further from this status now as the wireless link also has it's own output.

https://user-images.githubusercontent.com/75205162/128212185-45643780-25d3-495f-b403-10f731a89bde.mp4

4.Cool. Should I add a new ticket for this?

  1. I don't know..., maybe haha ;) If a "per-vertex ID key" means that loos parts keep there shape then yes. I just saw that something similar or more or less the same has been proposed here already a while ago: #1578 You suggested there a separate node that breaks the object as solution which I like. Also before I wrote, that the origin of each piece should be at the center of geometry. I think, if this is possible, it would be great as well to have an option to procedurally set different individual origins based on on the bounding boxes of each piece (eg "Z Top" in case you would like to rotate the individual pieces around this point).

Thank you!

OmarEmaraDev commented 3 years ago

@dapa5900

  1. The feature is mostly done. I just don't want to merge it in this version. I will wait until we release v2.2 then merge it for v2.3.
  2. Good.
  3. It is nice to see that in practice in other software. But I am not completely sure how they handle all cases. Suppose there are two execution units (Two unconnected networks in the node tree), one of them exports the wireless link A and imports wireless link B, the other exports A and imports B. In this case, we essentially have a dead lock. How does Fusion handle that?
  4. Yes, feel free to move this into its own ticket.
  5. I feel like there is an XY problem here. Maybe a practical example would be good here.
3DSinghVFX commented 3 years ago

@OmarEmaraDev

3. It is nice to see that in practice in other software. But I am not completely sure how they handle all cases. Suppose there are two execution units (Two unconnected networks in the node tree), one of them exports the wireless link A and imports wireless link B, the other exports A and imports B. In this case, we essentially have a dead lock. How does Fusion handle that?

Omar, if we share the pointer of the parent node (or its socket) in the instance node then I think it may be possible, isn't it? or a similar concept can be added like we have for group/loop node.

OmarEmaraDev commented 3 years ago

@3DSinghVFX Sure, it should be possible. But you are trying to implicitly connect to execution units, introducing lots of complications on the way, like the ones I just mentioned.

3DSinghVFX commented 3 years ago

@3DSinghVFX Sure, it should be possible. But you are trying to implicitly connect to execution units, introducing lots of complications on the way, like the ones I just mentioned.

Okay. In case of two execution units problem, I think we can limit this to only one or single node-tree.

dapa5900 commented 3 years ago

@OmarEmaraDev

  1. Ok, cool. When is the release of these versions? Is there a roadmap that I can follow somewhere, also regarding planned features etc.?
  2. done ;)
  3. I'm not sure I understand the scenario but I guess worst cause would be that you just get an error like right now, when a loop is not working and you get this red frame around the AN node editor... As for the Instance Copy version think of it as two or multiple nodes where the values are connected via drivers instead of wires.
  4. will do right away
  5. So basically like in these tutorials but without the need to manually separate the objects into its loose parts: https://www.youtube.com/watch?v=TYkPvFLDBNI https://www.youtube.com/watch?v=s4wcSW-e_Pg&t=53s

Cinema4D also has this as an object, please see here the manual for reference: https://help.maxon.net/c4d/en-us/#html/OMOGRAPH_FRACTURE.html?TocPath=MoGraph%257CAdditional%2520Objects%257CFracture%2520Object%257C_____0

Strangely enough I can't find any tutorial really showcasing how this works and I myself don't have access to C4D anymore. Only this videos shows the basic workflow: https://youtu.be/6w3nxsR7de8?t=103

What this guy is presenting is already possible with prepare and/or separate polygons to transform individual polygons. Unfortunately he doesn't show the workflow how it would work if the object would consist of multiple parts (like 3 spheres for example) because if you would select "Explode Segments & Connect" these three parts would be treated as separate objects basically and could be transformed individually (while still only being one object in the outliner).

Hope this helps?

Thanks!

dapa5900 commented 3 years ago

@OmarEmaraDev

I just found a tutorial that is showing how this works: https://youtu.be/vUPPpxCqP7I

You can't see it in the video but the bike is actually only one object.

This video is also showing the workflow how this object is working with multiple already existing objects and their respective transforms in a scene. So basically if you group all objects under this object is similar to how in AN you would manually set id keys for the initial transforms in order to be able to manipulate the matrices of these objects via matrix offsets and falloffs etc. So maybe having a node similar to this object could also simplify the transformation id key workflow a bit. You could for example feed a list of objects into this node and it extracts the current matrices of each object automatically and exposes these for further processing...

OmarEmaraDev commented 3 years ago

@dapa5900 I get what you want to do. It seems the first step would be to get #1578 done regardless.

The release is done, we are just writing documentation and release notes. Hopefully this should be done in a week. We don't really organize things in a road map. We do a release every year, aligning with an LTS release, everything that goes in that period will be in the release.

stale[bot] commented 3 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.