Blender 3.3 LTS: Making and Using a 'Distribute Points In Mesh' Node
HTML-код
- Опубликовано: 22 авг 2022
- --- READ THIS BEFORE COMMENTING ---
Before you tell me that this not a good method for distributing points, please understand that I know that and until a better method is built in, this is an ok workaround. You don't have to write me a novel about poisson distribution in the comments!
--- OK BACK TO YOUR REGULARLY SCHEDULED DESCRIPTION ---
In this video we will make a reusable "distribute points in mesh" node that fills a mesh with points, not just on its surface. Then we will use those points to create a topiary effect.
*Ways to Support this Channel*
Channel Source Files at Patreon: / johnnymatthews
Free Assets at Gumroad: johnnygizmo.gumroad.com/
---------------------------------------------------------
Affiliate Links for Channel Sponsor XP-PEN
Artist 13.3 Pro - Tablet Display - amzn.to/3EvI6hT
Artist 15.6 Pro - Tablet Display - amzn.to/3Ox9v7U
XP-PEN Meow Meow Drawing Glove - amzn.to/3U3XiZk (THIS IS SUPER CUTE!) Кино
For Blender 3.4+. The Transfer Attribute node is gone and replaced by 3 other nodes (Sample Nearest Surface, Sample Nearest Index and Sample Nearest). I got this tutorial to work by simply replacing the Transfer Attribute node with the Sample Nearest Surface node without any other changes. Thanks for another awesome tutorial, Johnny!
Thank you very much, my man. Appreciate that! I was looking for that quite a time!
Hero!
thanks a lot man
johnny with the absolute banger tutorials, thanks for it, i got an opportunity to help my 3d modelling teacher to teach a lot of other students, and am looking to get better at geonodes so that one day we can teach more people to make awesome stuff
That is awesome!
Thank you so much for this informative tutorial. The ability to determine if a point is inside or outside of another mesh is vital to many further operations such as determining which points to delete or to displace. You have shown us how to do it, although I do feel it should be a basic output (Boolean "Is Inside?") from the Geometry Proximity node and/or the Raycast node.
For modern versions use "Mesh to volume" > "Volume to points" > "Instances on points" > "Join geometry".
You are amazing! Every time I need some help you have put a video out that saves me! Your work is incredible! Hope you are doing well!
A really great explaination, especially the bit about delete geometry selection was godly. Helped me a lot with something similar.
That’s great to hear! I’m glad to have helped 😀
You explain things so calm and well
I have 7 kids, I have to be as calm as possible!
most underrated blender youtuber. Thanks for everything you do.
Aww shucks, I appreciate that!
Awesome high-quality great-info channel! Subscribed!
I really like how you broke down the steps on this video, specially regarding the normal find orientation.
I’m glad it was helpful! It was a fun one.
exactly what i was looking for, no more no less, perfect
thank you soooo much for sharing your skills with us. very educative tutorial!
You’re welcome! Glad it was helpful!
It's like it was made for meeeeee! 😉 Love this and will be using it in my current diorama project. Guess I'll just have to watch it again.
Lol, I'm not sure I've got great replay value.
@@JohnnyMatthews You think I learn this stuff with just a single watching!? In this case, I watched on my phone while doing cardio at the gym. Now I have to go back and actually follow (& copy) you on my laptop.
One thing about this is I'm a big fan of being able to pull instances from a collection... for example, different leaves. Between this video and your circular array video, I *might* just be able to figure it out. We'll see.
I really like that you kept the error and pointed it out... you know, just to make you look human and not so God Like! :D Terrific tutorial BTW
The amount of screwups I edit out of my raw footage is embarrassing.
Thanks! Awesome Tutorial!👏
You’re welcome!
You're a wizard Harry!
Ha!
really great video. i am currently using this in my own project...
but is there a way to generate a gradient parameter where it goes from core of the object to it's edge....
i want to uss it to make leaves bigger inside the bush...
I hope that someone has already told you you're one of the Blender wizards.. Love your content..
Ah thanks. I don’t always feel that way, especially when I watch other peoples content, but I appreciate the kind words and support ☺️
Thank you!
this was perfect thank you so much
You’re welcome! Glad it helped!
Thanks a lot man, you saved my time 🤣
Glad to help!
dang ! the transfer attribute node changed in 3.5... but wow ! great tutorial, thanks 😀!
I looked up online and you can substitute the "Transfer Attribute" node for a "Sample Nearest Surface" node. Hope this helps.
Excellent video!
How would we go about removing all nodes and only placing nodes that are in the bottom 5% along the x axis?
Currently I have set up: position-> separate xyz -> less than or equal .05 for x ->delete geometry which recieves the point generation data. For some reason it is not working and has random points well into the mesh
You might be better off doing it earlier in the process? Take the bounding box X vector and set the max value to something like max-range*0.05? Or min+range*0.05.
Great tutorial as always, thank you! Is there a way to connect those points and transform them to edges to feed the shortest path node?
That’s coming in another video! Both methods will be hackish, but for the time being will work.
One way I've seen is to create two 3D grids, rotate one 90 degrees, then join them together with merge by distance.
Now you have a grid connected by edges that you can use the node group in this video to cut to shape.
Without these videos I would have zero clue what to do with all the new nodes, great stuff. I don't understand though how transfer attribute worked in this case.
It seemed to me like you compared face normals and face positions but for some reason what ended up deleting were points and not faces. The attribute workflow is extremely abstract to me..
Well I'm getting the normal from the nearest face which is a vector. Then creating a second vector between the point in question and the closest point on the closest face. So now I have 2 vectors that are related to that point. Then that dot product is specifically related to that point in question. It's tricky and very hackish :)
Cooooool!
😁
ok I read your comment but this is bs. I would parse all faces and use random barycentric coordinates or something. your method is incredibly inefficient
thx for sharing. I learned a lot
Wow!😃
😁
Thanks johnny,
any idea how we can have a stable density per m3 ?
Yup, I’ll make a video.
Very insightful, thanks. Curious, wouldn't the "Distribute Points on Faces" node shortcut most of this process? I'm playing with it now and not having great results, which is how I came to find this clip, but I'm assuming that aside from my own ignorance this node should conceivably, um, distribute points onto faces, no?
Unless you get full coverage the insides will not have anything filling it, giving empty space.
@@JohnnyMatthews Ahh, good point!
Thx
You’re welcome!
in 3.4 i cant find transfer atribute node - with what to repleace it? It automatically changed to "Sample nearest surface" and it works...
And more important question, how to make, instance not to overlap??? I distribute balls, and i dont want them to overlap, bacause it looks wired... HEEEELLLPPPP !!!!
Hey Johny thanks! What kind of Computer do you use? I’ve noticed you have cycles so quickly updated in viewport. Can you share with us what to buy for smooth work in cycles ?)
That’s mainly an RTX 2070S doing the heavy lifting.
@@JohnnyMatthews thanks you !
Is there a way to just test if the A-B vector is negative? If so then the dot product with the Normal vector would not be necessary.
Great tutorial!
But we still need the normal as a point of reference. Lets say your face point is (0,0,0) and you have 2 points (-1,-1,-1) and (1,1,1): the differences will be (-1,-1,-1) and (1,1,1) respectively. But you still have no information about which way the face is pointing. So you can't compare.
@@JohnnyMatthews Thanks for explaining that Johnny!
I was very curious about your idea of distributing points in a mesh, because that was always a great challenge for me too. Sadly you came up with the same idea and solution that I had some time ago... And that's not good, because that is not how a 'Distribute Points In Mesh' Node seriously should work. Please let me explain why:
The "Point Count" value in your parameter is not the point count that you actually get, because you're removing every point outside the mesh. It should behave like the original "Distribute Points on Faces" node in which you can define a reliable density (and indirectly also the point count). It would also be nice to have a "Poisson Disk" mode which tells every point to have a certain distance to each other.. but I can't imagine how to do that in geonodes..
But I don't want to discourage you! You're greate and tutorials are always an awesome source of ideas!
Well yes, this is using the tools at hand until a proper node is written in c++. With the speed of the points node, this is a workable stopgap measure.
It will be nice if they implement a node to distribute points on volume...problem solved in seconds.
It's on the developer radar for sure. It's just not on the front burner at the moment. If a community developer stepped up and coded it, it would get done. However it's not exactly a simple programming task and the core devs are busting their tails on many other tools (see the new hair system for example!)
Yes, but initial random distribution is not nice.
It is better to combine surface poisson disk distrubution and pyramid-grid distribution inside. Also there is no reason to delete geometry.
We can just instance on points inside with selection.
Obviously, but until someone codes that as a built in node, this is a decent workaround.
I have one question, is there a way to distribute points and make them stick to the surface or volume without appearing and dissappearing when the mesh is displaced?