I started learning Blender 3 months ago. Every time I booted up Blender, I learned something new. Everytime I see anything about Blender, I am amazed. Everytime I think of Blender, I am still surprised that this thing is FREE. Holy Shit!
That is excellent logic, keep it coming, people will benefit hugely from this and all your knowledge, thank you so much on behalf of all blender users, it is people like yourself which is why blender is fast becoming a tool of choice :O) such support is necessary :O)
@@Erindale Absolutely its so Blender, and so exciting to be part of the community and see people flourishing with it, and generally just doing so much more than just the standard industry stuff! what a time to be using blender! :O) Thank you Again!
First time I've seen a practical example of a driver that didn't scare me. What a cool video. I'm gonna try and see if I can get this technique to work with my current scene inspired by your G-scatter video earlier. It's been a month now and I've got a massive scene with grass, flowers, alien trees, particles and so on. For the first time I've gotten to a place where I've had to begin looking at optimizing my scene. This video might come in really handy actually! Love your stuff Erindale!
This is amazing! :), Blender has an option that works when enabled on the simplify panel, and then going to the object properties, but is only for Cycles and works only while rendering not on the viewport
Great tutorial! I've been trying to get this effect to work for a while and realised I forgot to fill in the bottom face of the frustum. Just wanted to leave this comment in case other people were having the same problem (:
Great tutorial, thanks! I am still new to Blender and that's probably why I run into 2 issues. When I parent the frustum to the camera the frustum moves under the camera in the outliner preventing me from adding it to a collection. I fixed this by duplicating the frustum and transform constrain it to the original frustum then using this copy in a collection as a brush. But then I don't get weight paint to show up. I wonder if this is a 2.93 LTE version issue or because I set the brush on a duplicate of the frustum. I rebuilt it about 5 times to no avail.
How could I simulate wind with this? I replaced my "hair" particle grass, and it used only a wind and turbulence objects to make a satisfying wavy movement without even having to bake. Would it be hard to simulate it with these geo nodes? Thanks.
@@Erindale Your brain is like a Bentley Continental. It just purrs along at 200mph. Mine? Like an old Ford Fiesta. Takes ages to reach 50 mph and then blows a gasket. Dg
You can either plug through from the group input and set the attribute on the modifier, or you can use the Named Attribute nodes. I have some videos called Geometry Nodes 101 that covers this process
Thanks! You should just be able to set it up as normal and add the attribute to your geo nodes graph as I do in this video. If you have an existing mask that you want to use as well for the density then just multiply them together to get them both into one
@@Erindale Thank you so much! I can't believe how quickly you responded (let alone responded at all). You've really gone above and beyond, I will certainly be recommending you to my graphics team at work. Cheers!
If you use an Attribute Vector Math node set to distance and calculate the distance between the position attribute and the camera location (use an Object Info node set to relative). Then if you use an Attribute math node on the result attribute from the distance, set it to divide by a float and that float is your falloff distance, and then use an Attribute Colour ramp to give you the manual control you want on how it grows up/down around the camera.
For Eevee it should make some difference. The way cycles handles instances means it should be pretty similar however some people simply won't have the ram required to calculate 20M+ instances for realistically dense foliage. For them, culling can open a door to that sort of work
You can have it change density or switch between meshes based on camera distance. If you check out my toolkit video you'll see my nodes doing that. You still need to supply the LODs yourself though
Nice but when I animate the camera with keyframes, the weight paint accumulates along the camera path during animation, thus slowly ruining the benefit of camera culling effect. Did I miss something ?
Think some of these nodes have been renamed. Really would like to get this working but don't know what they've changed the names to. Great tutorial up until that point!!
Ah yeah geometry nodes was completely redesigned for Blender 3.0. You’ll now use something like distribute points on faces to create points and use the Named Attribute node with the vertex group name for the density. And then instance on points node to instance your collection of whatever objects you’re using
here's what i did (blender 4.2) group input - distribute points on surface: the density (or density factor if poisson disk is used) is linked to a Named Attribute node: if the surface paint was set to "weight" and the vertex group mapping was auto done as in the video, typing in "dp" should auto complete to our needed attribute *keep in mind, if you use poisson disk and your computer is slow you should probably set the Density Max to 1.0 or less to avoid crashing when testing stuff out DP on Faces then connects its points to the points of Instance on Points node. For this node you can add a new mesh primitive cube to test and connect its mesh to the instance. Though Collection info or Object info of an existing object in the scene should work as well. Instance on points now connects to a Join geometry node which is also connected to the Group input's default geometry link and fed to Group output. As other commenters mention, make sure your ground plane's modifiers have dynamic paint on top and geonodes on bottom.
I was wondering... is it possible to control the level of a decimate modifier with a varible to reduce poligon count based on the camera distance? instead of the replacing three or more collections of different levels of decimated geo?
When we get a decimate node then yeah for sure! But the collapse algorithm is actually really heavy so it's best to have multiple actual objects and switch between them
could you make a tutorial on the "Mix attribute"? I really dont get how it works and it might be necessary for this case because i already have a weight affecting the density of my grass, i would need to mix both the path weight and the culling paint, cheers
To join masks the best way is either add or multiply. If you want where either is true use add, if you want where they're both true at the same time (like this case) then multiply. Just attribute math set to multiply on your culling and path attributes and it should work! You're right about the mix though that makes sense to do a whole tutorial on for sure!
@@Erindale thanks for the quick answer, i asked for some help at OpenVFX discord and i was doing a mistake, but it is a little bit confusing how it work so a tutorial would def help people with the same doubt i had
Theres something that keeps messing with trying to duplicate this, The models i'm using are meshes of trees and they all have the right size, but in the plane they're gigantic. How can i be able to use a collection to be able to apply this? is there a way to solve this issue of models being huge? Edit: Fixed it by using hair particles instead of geometry.
This is just in time, nature after all this time when people were and are close at their homes will be quite strong media trend, with old particle system 2000 instances was awful experience, with geo nodes I can finaly render some grass at my R9 390 at the dark side I can't make toast on it any more. Definitely will try it out thank you.
That was just the first person camera mode he mentioned earlier, Shift and "tilde/apostrophe" key (left of the 1 key on qwerty) activates it in any viewport mode, escape key to exit.
Hi great tuto it helps me a lot ! but I have a probleme. in a new file this is work very well. but in a huge file for a project "the red paint" doesn't follow the frustum. it only updates when I change any parameters do you have any idea why ?
This is absolutely briljant! Not what I was looking for, but.... maybe... Can you think of a way to output camera transformed quads and tris into a textformat? Than that would be what I was looking for:) I want to do an analysis on it and do a 2d illustrated shape-language transfer and then feed it back to the render engine somehow. I´ll figure it out, used to do it in C, how hard can python be? ANswered my own question it seems.. Beer/Malt is doing something very similiar it seems.
This is great. I already had a weight map controlling density/scale and I muddled a solution using attribute subtract on both weight maps with the second operand being inverted, with the result being placed in a third vertex group. This resulting group was used in the point distribute node. Also there is a great tutorial by Gleb Alexandrov on camera culling where the vertex group generated in the dynamic paint modifier can be used to hide geometry by simply adding a mask modifier with vertex group assigned. Unfortunately in this case the mask mod changes the distribution of instances but is useful for high poly models in a scene. Perhaps someone can put out a vid on this as I cannot. Thanks
It worked fine until I tried to render, and then the geometry node objects weren't visible in the render. They're visible when the Dynamic Paint is turned off though... What could I have done wrong?
@@Erindale The updating of the Dynamic Paint has strangely never been a problem for me; it updates automatically even when the viewport animation isn't playing. Figured out what my problem was. I am using a Multires modifier, so the amount of objects were fewer with the render settings than with the viewport. So few in fact, none were visible. Turned out I needed to increase the density to somehow compensate for the higher resolution mesh. Thanks for your suggestion!
I had a problem where my instances weren't spawning on the dynamic paint and it was because my geometry nodes modifier was above the dynamic paint in the stack. Just in case anyone else runs into this problem: move the dynamic paint above the geo nodes modifier!
Hey @Erindale Since the new field system has arrived and the node system is more accessible, would you now explain the math behind the Camera culling node? Please? I made one using the raycast node, but I think the masking method is way faster than shooting out rays and checking if it gets hit or not. I tried to do think about something using Geogebra 😂 but to no avail. I literally can't think of any way to do it with my peanut sized brain (High School 🧠) Btw, I love watching your videos. Thanks! ☺️☺️
I have a better solution to this, that is entirely GN and works without any hassle or trouble. First I made a node-group to generate camera-plane, which uses some simple math that I've since forgotten. Then I do a RayCast from every point on the mesh to the camera plane. If it hits the camera plane, good! If not, it's culled. Then I do a second raycast to the occlusion collection to see if something else is already in front of it - if so, it's culled! It's really simple and easy to use once it's all set up. BONUS: mine also can partially cull based on distance, so that e.g. grass can use the cull value to get smaller or less dense based on distance.
Getting all the way to the end of this just to realize blender removed the "density attribute" section on the distribute points and i have literally no idea how to do the same with the new versions of blender. Absolutely ending it all rn.
I would distribute and instance things and then use a delete geometry node set to instances and use the mask there to delete instances outside the view
@ cool as hell you’re still replying to this. I eventually found out there is a “named attribute” node which does the same thing as the old density attribute and your system works just as well using that. Thanks!
Just double check that things are being instanced consistently as the points change. You might find the changing indices cause different objects to be instanced. If that is a problem then you’ll have to use the delete method instead
An extra point that I missed, to get Dynamic Paint to update you need to be playing the timeline!
Is there a way I could decrease density with distance from camera?
The ''Brush Size'' value driver in the geometry editor also not working when not playing the timeline! :)
Dear Erindale . It is my mistake. I forget to close the surface of the Brush
seems like this is no longer true in 2.93.2 also the "dissolve" setting is not required either it seems
Oh no way! That's good news!
I started learning Blender 3 months ago. Every time I booted up Blender, I learned something new. Everytime I see anything about Blender, I am amazed. Everytime I think of Blender, I am still surprised that this thing is FREE. Holy Shit!
Damn! I am always amazed to witness your mastery of everything Blender and this tut is, again, no exception! Thank you so much for sharing!
Thanks, Yanik! I hope it's useful!
Woohoo Dynamic Paint to the rescue! Great 👍🏼
I always forget it as a tool but it really can be used to great effect with Geo Nodes!
That is excellent logic, keep it coming, people will benefit hugely from this and all your knowledge, thank you so much on behalf of all blender users, it is people like yourself which is why blender is fast becoming a tool of choice :O) such support is necessary :O)
Thanks so much! There are some really exciting developments coming our way that I'm really looking forward to sharing!
@@Erindale Absolutely its so Blender, and so exciting to be part of the community and see people flourishing with it, and generally just doing so much more than just the standard industry stuff! what a time to be using blender! :O) Thank you Again!
wow.. just wow.. this is gonna save a lot of render time
Man your voice triggers something special in me. Something very peaceful
I’m really glad to hear that! Hopefully it can help reduce some of the anxiety of using nodes for some people
Method is lifesaver and fixing problems are genius, thank you!
Thanks!
You are the Nodes Guru !!
Thanks so much, Nicola!
First time I've seen a practical example of a driver that didn't scare me. What a cool video. I'm gonna try and see if I can get this technique to work with my current scene inspired by your G-scatter video earlier. It's been a month now and I've got a massive scene with grass, flowers, alien trees, particles and so on. For the first time I've gotten to a place where I've had to begin looking at optimizing my scene. This video might come in really handy actually! Love your stuff Erindale!
Sounds ace! Be sure to share some renders when you're done with it!
This should be a feature for Blender.
This is amazing! :), Blender has an option that works when enabled on the simplify panel, and then going to the object properties, but is only for Cycles and works only while rendering not on the viewport
very useful , specailly for big forest scenes etc when u are panning around ! gj
Thanks! Glad it's useful!
Uou, thank you so much ! I would never remember to do that
Great tutorial! I've been trying to get this effect to work for a while and realised I forgot to fill in the bottom face of the frustum. Just wanted to leave this comment in case other people were having the same problem (:
Thank you! Been wanting to learn this for so long!
You're very welcome!
Thank you! 🤟🏻
I've been looking for a solution like this for a looooong time !!
Thanks, thanks, thanks!
No worries! Glad it's useful!
Mind-Blowing, thank you.
Excellent. Thanks for this.
this is just amaziiiing
Thank you!
man this channel is a gem thank you so much!
Thank YOU
Wow! That’s so useful. Thanks for sharing!!
Thanks Min
Nice!
Great tutorial, thanks! I am still new to Blender and that's probably why I run into 2 issues. When I parent the frustum to the camera the frustum moves under the camera in the outliner preventing me from adding it to a collection. I fixed this by duplicating the frustum and transform constrain it to the original frustum then using this copy in a collection as a brush. But then I don't get weight paint to show up. I wonder if this is a 2.93 LTE version issue or because I set the brush on a duplicate of the frustum. I rebuilt it about 5 times to no avail.
To stop parent hierachies from changing things in the outliner you can turn off the Object Children filter in the outliner filters.
@@Erindale Thanks. That did the trick. I can see weight painting now.
Thank you @Alex Furer for bringing that up and thanks @Erindale for the solution. Now it works :)
mashah allah, such a master u are..💝
Thanks bud!
Я с блендером с 2011 года. И только что узнал что при нажатии клавиши С можно продолжить edge slide. Фантастика. Спасибо большое))
So useful! C works with the Knife tool as well to snap to axis 🤯
amazing tutorial. many thanks!
Great trick. Just maybe just specify that you have to play the animation to have the live effect of the dynamic paint or I didn't do what it should
Yes you're right, just need to be playing the animation for dynamic paint to update
Fascinating! Thank you for these videos!
Thanks! Glad they're useful!
Awesome, thanks !
How could I simulate wind with this? I replaced my "hair" particle grass, and it used only a wind and turbulence objects to make a satisfying wavy movement without even having to bake. Would it be hard to simulate it with these geo nodes? Thanks.
With geo nodes you won't be able to use the simulation data 👍 physics solvers aren't implemented in geo nodes yet
thanks a lot!!
Brilliant! Just brilliant! What else can I say? Oh yes! THANK YOU! Dg
Haha thanks Dg!
@@Erindale Your brain is like a Bentley Continental. It just purrs along at 200mph. Mine? Like an old Ford Fiesta. Takes ages to reach 50 mph and then blows a gasket. Dg
Thank you
Lifesaver❤
Oh man. G g C is so useful!
is there a way to use this in the viewport without a renderer camera object? I need this feature for the default blender camera, not just for renders.
There is not no. You can lock camera to view though if you jump into the camera view and press N and you'll find it on the View tab.
how to select density attributes in latest version?
You can either plug through from the group input and set the attribute on the modifier, or you can use the Named Attribute nodes. I have some videos called Geometry Nodes 101 that covers this process
excellent, thanks
Wonderful tutorial! I am so glad I found your channel! Does anyone have any tips on how I might apply something like this to an existing blend?
Thanks! You should just be able to set it up as normal and add the attribute to your geo nodes graph as I do in this video. If you have an existing mask that you want to use as well for the density then just multiply them together to get them both into one
@@Erindale Thank you so much! I can't believe how quickly you responded (let alone responded at all). You've really gone above and beyond, I will certainly be recommending you to my graphics team at work. Cheers!
Anyone know a way to scale these instances into view? So things appear to grow while moving the camera about?
If you use an Attribute Vector Math node set to distance and calculate the distance between the position attribute and the camera location (use an Object Info node set to relative). Then if you use an Attribute math node on the result attribute from the distance, set it to divide by a float and that float is your falloff distance, and then use an Attribute Colour ramp to give you the manual control you want on how it grows up/down around the camera.
@@Erindale appreciate your solution!
This tutorial is soooo nice, but I don't get why I have to move the canvas to every move of the camera to update the weight, any idea why?
Are you playing the timeline? Everything should update properly if the timeline is playing
Does that make a big improvement on rendertime (on both renderer obviously) ?
For Eevee it should make some difference. The way cycles handles instances means it should be pretty similar however some people simply won't have the ram required to calculate 20M+ instances for realistically dense foliage. For them, culling can open a door to that sort of work
Thank you!
Awesome!
Thanks!
is there a way to make LOD too?
You can have it change density or switch between meshes based on camera distance. If you check out my toolkit video you'll see my nodes doing that. You still need to supply the LODs yourself though
Nice but when I animate the camera with keyframes, the weight paint accumulates along the camera path during animation, thus slowly ruining the benefit of camera culling effect. Did I miss something ?
Hm I wonder if you have the dissolve settings turned down so it doesn't hang around longer than 1 frame
@@Erindale Yes that was it. Thanks a lot
For some reason I can't get the weight paint to be made by the Frustum ... Any tips to troubleshoot it?
You need to be playing the timeline to make it update so that might be something you can try?
@@Erindale Oooh ... That explains it, thank you very much!
Why dont you have 10Mil subs ?
Your channel is fantastic!
Thanks so much! Very kind of you! I'm a bit anxious of growing too much because I really value being able to interact with my audience!
@@Erindale ey you deserve it and don't worry too much about interacting with everyone, you just be you, your audience will stay happy.
Think some of these nodes have been renamed. Really would like to get this working but don't know what they've changed the names to. Great tutorial up until that point!!
Ah yeah geometry nodes was completely redesigned for Blender 3.0. You’ll now use something like distribute points on faces to create points and use the Named Attribute node with the vertex group name for the density. And then instance on points node to instance your collection of whatever objects you’re using
here's what i did (blender 4.2)
group input - distribute points on surface: the density (or density factor if poisson disk is used) is linked to a Named Attribute node: if the surface paint was set to "weight" and the vertex group mapping was auto done as in the video, typing in "dp" should auto complete to our needed attribute
*keep in mind, if you use poisson disk and your computer is slow you should probably set the Density Max to 1.0 or less to avoid crashing when testing stuff out
DP on Faces then connects its points to the points of Instance on Points node. For this node you can add a new mesh primitive cube to test and connect its mesh to the instance. Though Collection info or Object info of an existing object in the scene should work as well. Instance on points now connects to a Join geometry node which is also connected to the Group input's default geometry link and fed to Group output.
As other commenters mention, make sure your ground plane's modifiers have dynamic paint on top and geonodes on bottom.
great stuff!
Thanks Stefan!
I was wondering...
is it possible to control the level of a decimate modifier with a varible to reduce poligon count based on the camera distance?
instead of the replacing three or more collections of different levels of decimated geo?
When we get a decimate node then yeah for sure! But the collapse algorithm is actually really heavy so it's best to have multiple actual objects and switch between them
it does seem like the thing that would be part of the render... similar to micro displacment.
Thx for the awesome inspiration!
1. version: ruclips.net/video/0fjCQSPVgNg/видео.html
2. version: ruclips.net/video/uVB6yJWBoOo/видео.html
great thanks
could you make a tutorial on the "Mix attribute"? I really dont get how it works and it might be necessary for this case because i already have a weight affecting the density of my grass, i would need to mix both the path weight and the culling paint, cheers
To join masks the best way is either add or multiply. If you want where either is true use add, if you want where they're both true at the same time (like this case) then multiply. Just attribute math set to multiply on your culling and path attributes and it should work! You're right about the mix though that makes sense to do a whole tutorial on for sure!
@@Erindale thanks for the quick answer, i asked for some help at OpenVFX discord and i was doing a mistake, but it is a little bit confusing how it work so a tutorial would def help people with the same doubt i had
Theres something that keeps messing with trying to duplicate this, The models i'm using are meshes of trees and they all have the right size, but in the plane they're gigantic. How can i be able to use a collection to be able to apply this? is there a way to solve this issue of models being huge?
Edit: Fixed it by using hair particles instead of geometry.
Sounds like you've scaled up the plane and you've not applied your transforms. Or equally you've a down the trees and not applied. (Ctrl+A, Scale)
This is just in time, nature after all this time when people were and are close at their homes will be quite strong media trend, with old particle system 2000 instances was awful experience, with geo nodes I can finaly render some grass at my R9 390 at the dark side I can't make toast on it any more. Definitely will try it out thank you.
Hope it works for you!
how can you still move the camera while in weight paint mode?
That was just the first person camera mode he mentioned earlier, Shift and "tilde/apostrophe" key (left of the 1 key on qwerty) activates it in any viewport mode, escape key to exit.
this is just epic xD
Is there a way to use this with particle systems (used for grass, plants, trees etc), rather than point instances?
Yes, you can just use the weight to control the density setting in the particle system.
@@Erindale Great, thank you!
Very nice done - thank you- i like to see more ;)
Thanks so much! More coming!
Hi great tuto it helps me a lot ! but I have a probleme. in a new file this is work very well. but in a huge file for a project "the red paint" doesn't follow the frustum. it only updates when I change any parameters do you have any idea why ?
Are you playing the timeline? It will only update during frame changes
@@Erindale no it's very strange.
It's like everything is working fine but the red does not follow the movements of my camera
the object im using for rendering can be hidden in a rendered image how do i hide it and make the geometry node work??
Turning off the render visibility won't impact how geometry nodes or dynamic paint is able to use it
thanks for this
Thanks for watching
This is absolutely briljant! Not what I was looking for, but.... maybe... Can you think of a way to output camera transformed quads and tris into a textformat? Than that would be what I was looking for:) I want to do an analysis on it and do a 2d illustrated shape-language transfer and then feed it back to the render engine somehow. I´ll figure it out, used to do it in C, how hard can python be?
ANswered my own question it seems.. Beer/Malt is doing something very similiar it seems.
I'm glad you found a way through! Definitely a little over my head 😅
Ah, now that’s one fine looking culling system.
WHY DOESN’T MINE LOOK LIKE THAT?!
where the point distribute in blender 3.0 ?
It's called distributes points on faces
This is great. I already had a weight map controlling density/scale and I muddled a solution using attribute subtract on both weight maps with the second operand being inverted, with the result being placed in a third vertex group. This resulting group was used in the point distribute node. Also there is a great tutorial by Gleb Alexandrov on camera culling where the vertex group generated in the dynamic paint modifier can be used to hide geometry by simply adding a mask modifier with vertex group assigned. Unfortunately in this case the mask mod changes the distribution of instances but is useful for high poly models in a scene. Perhaps someone can put out a vid on this as I cannot. Thanks
Nice.
Thanks!
It worked fine until I tried to render, and then the geometry node objects weren't visible in the render. They're visible when the Dynamic Paint is turned off though... What could I have done wrong?
Hm maybe something with how the dynamic paint is updating at render 🤔
Does it work if you render an animation?
@@Erindale The updating of the Dynamic Paint has strangely never been a problem for me; it updates automatically even when the viewport animation isn't playing.
Figured out what my problem was. I am using a Multires modifier, so the amount of objects were fewer with the render settings than with the viewport. So few in fact, none were visible. Turned out I needed to increase the density to somehow compensate for the higher resolution mesh.
Thanks for your suggestion!
I had a problem where my instances weren't spawning on the dynamic paint and it was because my geometry nodes modifier was above the dynamic paint in the stack. Just in case anyone else runs into this problem: move the dynamic paint above the geo nodes modifier!
WOW!!
Hey @Erindale
Since the new field system has arrived and the node system is more accessible, would you now explain the math behind the Camera culling node? Please?
I made one using the raycast node, but I think the masking method is way faster than shooting out rays and checking if it gets hit or not.
I tried to do think about something using Geogebra 😂 but to no avail.
I literally can't think of any way to do it with my peanut sized brain (High School 🧠)
Btw, I love watching your videos. Thanks! ☺️☺️
I have a better solution to this, that is entirely GN and works without any hassle or trouble.
First I made a node-group to generate camera-plane, which uses some simple math that I've since forgotten. Then I do a RayCast from every point on the mesh to the camera plane. If it hits the camera plane, good! If not, it's culled. Then I do a second raycast to the occlusion collection to see if something else is already in front of it - if so, it's culled! It's really simple and easy to use once it's all set up.
BONUS: mine also can partially cull based on distance, so that e.g. grass can use the cull value to get smaller or less dense based on distance.
I'm trying to make one using math... so confusing 😭😭😭😭
Good luck! There are a few different methods but they should be faster than Dynamic Paint!
@@Erindale using dot products 😭😭😭
just top
Thank you!
ea sports:)
It's in the game
This looks like how Minecraft render chunks
More or less the same! For raster engines like Minecraft or Eevee, it really helps to only display what's in view so as to keep memory use down
Getting all the way to the end of this just to realize blender removed the "density attribute" section on the distribute points and i have literally no idea how to do the same with the new versions of blender. Absolutely ending it all rn.
I would distribute and instance things and then use a delete geometry node set to instances and use the mask there to delete instances outside the view
@ cool as hell you’re still replying to this. I eventually found out there is a “named attribute” node which does the same thing as the old density attribute and your system works just as well using that. Thanks!
Just double check that things are being instanced consistently as the points change. You might find the changing indices cause different objects to be instanced. If that is a problem then you’ll have to use the delete method instead
Please do something original with your profile picture, I literally thought I was looking at CG Matter
Yeah I had mine first though so Tom can change his 😅
Frustum not Frustrum haha
I know 😭 I spell it right, I just can't say it
e
eeeee