3DSinghVFX / animation_nodes

Node-based visual scripting system designed for motion graphics in Blender.
Other
155 stars 16 forks source link

request and question about close packing node. #149

Closed Gerstmann-Bradley closed 4 years ago

Gerstmann-Bradley commented 4 years ago

Thanks for making this "close packing" node, it's very amazing, but I have some request and questions.

  1. a request is to change the default value of close packing nodes. this node sets the radius of the object. I think it's reasonable to make the radius starts at 1 instead of 0.1 currently. because I am essentially use my original model that has a scale of 1,1,1 as a reference for the effect (specifically the relaxation method). As the default value of radius is 0.1 now, I have to change that every time which turns to be a little annoying. I understand this maybe a very minor request, but I think it's reasonable. Many other nodes in AN also has an intention to keep the scale starting at 1,1,1, such as many modes of "distribute matrices node" (true, the spiral mode is an exception for its own reasons). I think keep consistency is important.

  2. I have an attached node tree. the margin is made extremely small, but the objects aren't allowed to get even closer even if I asked them to do so. It seems the "repulsion factor" turns to be the value that will help allow objects get even closer, but such a value is very abstract to me. example

I have provided an design example of C4D's push apart effector. it has options like "radius" (decides the size of protective bubble that prevent intersection), and "iterations" (determines the accuracy of its algorithm). PAE I suppose their functions are comparable to "margin" and "repulsion factors" respectively, but I am very confused with "margin" and "repulsion factor" and their relationship. Thus, basically my questions are the following, and they are somehow related to each other.

  1. Why taken the margin low doesn't help my objects get closer?
  2. What does repulsion factor really means with its value?
  3. How these two values actually interact with each others?

Thanks in advance for reading and answering the questions.

3DSinghVFX commented 4 years ago

Hi :) You're welcome, and thanks for the feedback.

1. a request is to change the default value of close packing nodes.
   this node sets the radius of the object. I think it's reasonable to ...

You are right, I'll change the default values for all methods.

2. I have an attached node tree. the margin is made extremely small,
    but the objects aren't allowed to get even closer even if I asked them to do so...

Here is the explanation for margin: Margin

  • Why taken the margin low doesn't help my objects get closer?

The reason for that is I have not implemented the attraction force. So, the margin will be effective when two points A, B has distance < radiusA + radiusB + margin.

  • What does the repulsion factor really means with its value?

The Repulsion Factor basically controls the magnitude of the repulsion force.

  • How these two values actually interact with each others?

They are independent of each other.

In your case, points/spheres are not coming close because they are already not overlapping, and there is no attraction force. So, to bring them close, just decrease the separation input points: screen

I have provided an design example of C4D's push apart effector. it has options like "radius" (decides the size of protective bubble that prevent intersection), and "iterations" (determines the accuracy of its algorithm).

Thanks, I'm aware of that.

The Relaxation Method is lack of some features:

  1. Attraction Force.
  2. Both forces together.
  3. Smooth separation or attraction*.
  4. Packing based on input weight*.

Feel free to give feedback :)

Gerstmann-Bradley commented 4 years ago

In your case, points/spheres are not coming close because they are already not overlapping, and there is no attraction force. So, to bring them close, just decrease the separation input points: screen

That's actually what I did, as you can see in my distribute matrices node the width is set very very low, but unfortunately it doesn't help. Objects will be repelled as I decrease the value, hence I was asking these questions. So I have taken another look to that and realize something interesting. I am not sure if I understand the situation well, so I will post the things I did here:

1. I generated a sphere, in Edit mode, I scaled the sphere by 0.5, so the sphere has a dimension of 1,1,1 meter (while the scale is 1,1,1 as well). It means my sphere is not default sphere! (If it's a default sphere, it will work well) 2. The radius will determine the size of my sphere, if I wish to keep all sphere with a dimension of 1,1,1 (meter), then the radius is kept 1. 3. Just Decrease the width (&/length) is not helping situation, the sphere will be repelled. A) In addition to a low enough width &/ length, decrease margin won't help. B) In addition to ~ , decrease the repulsion factor will help, but only if it becomes incredibly low like 0.005.

I have tried this with newest AN & blender 2.83. This issue should be replicable. (windows 10) I am not sure how should I interpret this phenomenon about why it happens. Maybe you can solve my question. Thanks a lot!

3DSinghVFX commented 4 years ago

In your case, points/spheres are not coming close because they are already not overlapping, and there is no attraction force. So, to bring them close, just decrease the separation input points: screen

That's actually what I did, as you can see in my distribute matrices node the width is set very very low, but unfortunately it doesn't help. Objects will be repelled as I decrease the value, hence I was asking these questions. So I have taken another look to that and realize something interesting. I am not sure if I understand the situation well, so I will post the things I did here:

Let me first explain the Radius and Margin: Radius is the radius of a protective bubble around a point (note the green Viewer node). ClosePackingNodeDemo1

Margin is the distance between two bubbles' surface that you want to maintain (note the green Viewer node). ClosePackingNodeDemo2

1. I generated a sphere, in Edit mode, I scaled the sphere by 0.5, so the sphere has a dimension of 1,1,1 meter (while the scale is 1,1,1 as well). It means my sphere is not default sphere! (If it's a default sphere, it will work well) 2. The radius will determine the size of my sphere, if I wish to keep all sphere with a dimension of 1,1,1 (meter), then the radius is kept 1.

In that case (when an object is edited), you can use only the locations from the Close Packing node, ClosePackingNodeDemo3

Or input the exact radius of the object into the Close Packing node (then use Margin if required). ClosePackingNodeDemo4

3. Just Decrease the width (&/length) is not helping situation, the sphere will be repelled. A) In addition to a low enough width &/ length, decrease margin won't help. B) In addition to ~ , decrease the repulsion factor will help, but only if it becomes incredibly low like 0.005.

I have tried this with newest AN & blender 2.83. This issue should be replicable. (windows 10) I am not sure how should I interpret this phenomenon about why it happens. Maybe you can solve my question. Thanks a lot!

This is happening because of scale != radius or in other words node does not know the exact radius of the object. I'll try to fix that.

If you still have any confusion/queries/suggestion please let me know. Blend Files: ClosePackingDemoFiles.zip

Gerstmann-Bradley commented 4 years ago

If you still have any confusion/queries/suggestion please let me know. Blend Files: ClosePackingDemoFiles.zip

OMG, thanks for such detailed answers. My whole point is just to report that and request some other changes, I think as long as you are aware of this issue and has intention to fix them then it may be fine. Thanks a lot!

Just some proposals that may or may not related to this issue:

  1. In terms of your previous addition of error max and iteration, it's good to add them, but many times people may not use that often, even now without them the close packing node already works kind of nice. My suggestion is to hide these socket by default. Examples are "mesh object input" node, in which you have lots of socket that doesn't show up by default when called. The purpose doing that is to keep the functionality, while it also makes the UI simpler and cleaner for the user.

  2. (still thinking; may added later or not)

Gerstmann-Bradley commented 4 years ago
  1. I think the issue is that the "radius of protective bubbles" and "scale of the matrix" should not be considered the same thing.

A) One thing I am thinking is not to use "close packing" node to "set scale on purpose". The matrix should be generated with a default scale "1,1,1", just as most modes in "distribute matrices" node. Sure, dynamic radius node will retain the ability to "change the scales" of matrices, but I think they are two different things for distinctive purposes. Because "changing scale" is to avoid intersection, but "setting scale on purpose" seems redundant/unnecessary to "close packing" node. Also one reference that can be mentioned, is that C4D's "push apart effector" only sets the protective bubble, and is not used to set scale of objects. The scale of objects will retain a default value of 1,1,1, Or you have to change it elsewhere.

B) Moreover, I come up another question: doesn't "protective bubble" (I mean the "radius" here should have nothing to do with the scale) and "margin" concept overlaps at some point? If I want to keep the object 200 meters away, either I set two objects's bubble with radius of 100 m, or their margin be 100 m.

At the end, I think just keep "margin" is sufficient enough for the function of avoiding intersection. While the default matrices will be generated with a default scale of 1,1,1, and it's not necessary to have the node to set the scale. The scale should only be changed according to the algorithm of "dynamic radius" mode, but it shall be done in the background, and has nothing to do with the users (including me).

Above are Just my personal opinions. Thanks for reading and your patience.

3DSinghVFX commented 4 years ago
1. In terms of your previous addition of error max and iteration, it's good to add them, but many times people may not use that often, even now without them the close packing node already works kind of nice. **My suggestion is to hide these socket by default**. Examples are "mesh object input" node, in which you have lots of socket that doesn't show up by default when called.
   The purpose of doing that is to keep the functionality, while it also makes the UI simpler and cleaner for the user.

I have have made those changes, will be added in upcoming updates: Screenshot from 2020-06-18 11-13-56

A) One thing I am thinking is not to use "close packing" node to "set scale on purpose". The matrix should be generated with a default scale "1,1,1", just as most modes in "distribute matrices" node. Sure, dynamic radius node will retain the ability to "change the scales" of matrices, but I think they are two different things for distinctive purposes. Because "changing scale" is to avoid intersection, but "setting scale on purpose" seems redundant/unnecessary to "close packing" node. Also one reference that can be mentioned, is that C4D's "push apart effector" only sets the protective bubble, and is not used to set scale of objects. The scale of objects will retain a default value of 1,1,1, Or you have to change it elsewhere.

I'm testing new Object Radius input, by default, it set to 1. It will allow the user to define the object radius or radii. This can solve the problem of radius for all methods. Also an option can be added sth like Use Radius as Scale in Relaxation method.

B) Moreover, I come up another question: doesn't "protective bubble" (I mean the "radius" here should have nothing to do with the scale) and "margin" concept overlaps at some point? If I want to keep the object 200 meters away, either I set two objects's bubble with radius of 100 m, or their margin be 100 m.

At the end, I think just keep "margin" is sufficient enough for the function of avoiding intersection. While the default matrices will be generated with a default scale of 1,1,1, and it's not necessary to have the node to set the scale. The scale should only be changed according to the algorithm of "dynamic radius" mode, but it shall be done in the background, and has nothing to do with the users (including me).

Margin is handy when we supply the exact radius (radii) of the object.

You're welcome :)

Gerstmann-Bradley commented 4 years ago

Thanks, I am looking forward to the update. and will report back if I have thoughts/complaints. close for now.

3DSinghVFX commented 4 years ago

Thanks, I am looking forward to the update. and will report back if I have thoughts/complaints. close for now.

Okay.

3DSinghVFX commented 4 years ago

Hi :) Here is the final version of Close Packing node: Screenshot from 2020-06-23 16-01-23 ClosePackingNodeDemo5

Gerstmann-Bradley commented 4 years ago

Hi, sorry to respond late. I just checked newest version in EN. They looks nice to me, and the hidden inputs are exactly what I was expecting. Thanks a lot! Also thanks to add vector and radii output! I think they are really helpful. The only suggestions will probably be to keep at least "vector" unhidden. because it maybe useful very often instead of other hidden options. For example frequently I thought to use it to drive "point distance falloff" (this node isn't vectorized unfortunately), and thus I will need a vector output right away. Just my personal opinion.

Again, thanks a lot, if I find any practical issues during actual usage, I will get back to you.

3DSinghVFX commented 4 years ago

You're welcome. Thanks for your feedback.

The only suggestions will probably be to keep at least "vector" unhidden. because it maybe useful very often instead of other hidden options. For example frequently I thought to use it to drive "point distance falloff" (this node isn't vectorized unfortunately), and thus I will need a vector output right away. Just my personal opinion.

That change will be nice.