Scene Optimizer
Content:
*General information*Description of core functions
*Description of other important functions
*Important conditions for correct operation
*How to Append
*Innovations that can be included in the product in future:
General information
My first built "Main" is needed for automatic optimization of large and complex scenes (for example, forests, mountains, or fields with flowers / grasses or anything else) by removing objects / polygons that are out of the camera's field of view, cutting down on the detail of instances (both automatic and replacing with ready-made low-poly models) - that is, the LOD system, you can also remove parts of the earth that are out of the camera's field of view, and so on but to cut their detailing and also due to the fact that a large number of polygons are saved, I added the ability to do micro displacement. And all this is very finely tuned, and in general there are about 77 settings in one assembly. I'm also working on a future update that will add some more useful settings, a geometry visualizer to track its changes, and most importantly, introduce Occlusion culling technology that will allow you to delete parts of objects hidden behind other objects.In general, it has 4 variants of geometric nodes :
"Main" - support for one object as an instance (for example, to create a forest).
"Collection instance" - almost same as "Main" but supports collections , allowing you to use multiple objects as instances.
"LODs for single objects" works for individual objects (for houses, cars, statues, etc.) (and not support instances) - allows you to configure everything separately for each object.
"LODs for single objects(Global)" is the same as the third one but allows you to configure everything at once for a group of objects (if you need a large number of objects to have the same settings and so that you don’t have to configure everything separately for hundreds or thousands of objects) .
"Main" - support for one object as an instance (for example, to create a forest).
"Collection instance" - almost same as "Main" but supports collections , allowing you to use multiple objects as instances.
"LODs for single objects" works for individual objects (for houses, cars, statues, etc.) (and not support instances) - allows you to configure everything separately for each object.
"LODs for single objects(Global)" is the same as the third one but allows you to configure everything at once for a group of objects (if you need a large number of objects to have the same settings and so that you don’t have to configure everything separately for hundreds or thousands of objects) .
My build allows you to speed up the viewport with a large number of objects / instances, and most importantly, it speeds up rendering many times over depending on the complexity of the scene, and the more complex the scene, the more efficient my build is (of course, within reasonable limits). On average, it is possible to achieve 10 times acceleration. (acceleration results are always different and vary depending on different parameters, the largest increase of which I could achieve is 20 times, the smallest 20%, but this is only in EEVEE, in Cycles, unfortunately, the efficiency is negligible from for how Cycles itself works).
For example, in the CG Geek tutorial on creating a forest, the author manually draws weights so that trees are only where they fall into the camera's field of view to optimize scene and speed up render. But firstly, it is inconvenient, secondly, it does not allow you to rotate the camera, but only move it forward, and my assembly allows you to automate this process and automatically remove trees (or any other instances) if they are not in the camera's field of view - and this is the least that can be done with the help of my assembly.
Description of core functions
Frustrum culling - removes instances that are out of view of the camera.Ground culling - removes polygons of the base (such as soil or mountains) that are out of the camera's field of view.
LODs - an optimization method in which the detail of instances decreases as they move away from the camera, thereby reducing the load on the PC with almost no loss in image quality.
Ground LODs - an optimization method in which the detail of individual sections of the base decreases as you move away from the camera and, due to competent control over the number of polygons, allows you to use micro displacement.
Displacement - allows you to give the base more detail due to micro shifts of polygons, but at the same time it is very expensive because it requires a huge number of polygons to work correctly, but giving in return a beautiful, and most importantly, a real displacement effect unlike normal maps. To ease the load on the PC, I strongly recommend using it in conjunction with Ground culling and Ground LODs.
!!!All these optimization methods already exist in game engines, I just recreated them with the tools of the blender itself in geometry nodes so that they could be used here and allowed 3D artists to automatically optimize their work!!!Description of other important functions
!!! I will not write descriptions of functions with obvious functionality or if the name of the function fully describes it, but I will list them anyway so as not to create confusion, and also if they are duplicated, then I will write it like this (1-5) !!!
Main:
General settings:
Camera - select active camera
Base material - select material of base
<Ground culling
Frustrum culling
Enable LODs
show Instances
Ground LOD
Displacement - > - enable the corresponding functions
Instance object - select object you want to scatter
Instance Density - adjusts the number/density of instances
Density multiplicator - if you want instances to appear not everywhere but only in the places you need, then go to Edit mode, select the polygons on which instances should appear, create a Vertx group and assign them to this group, then in the "Density multiplicator" setting, click on the box between its name and value, and then a special field will appear where you can select attributes, in the list that appears, select the Vertex group that you previously created and then instances will appear only on the polygons you selected
Instance settings: basic settings for scattering , they are needed so that even when using one object as instances, you can make it look natural
Offset - needed in the case when some instances are deleted despite the fact that they are in the camera's field of view. This happens that their origin is outside the camera's field of view. The first thing that could be done is to simply increase the "Focal Lenght effector" and it will work, but due to the fact that it expands the angle of the culling field, unnecessary instances begin to be rendered and the greater the distance, the more there are. Offet avoids this and sort of shifts the culling field back in relation to the camera, which does not increase the angle and thereby minimizes the number of instances that do not need to be rendered.
Offset - needed in the case when some instances are deleted despite the fact that they are in the camera's field of view. This happens that their origin is outside the camera's field of view. The first thing that could be done is to simply increase the "Focal Lenght effector" and it will work, but due to the fact that it expands the angle of the culling field, unnecessary instances begin to be rendered and the greater the distance, the more there are. Offet avoids this and sort of shifts the culling field back in relation to the camera, which does not increase the angle and thereby minimizes the number of instances that do not need to be rendered.
Rotation Min -
Rotation Max -
Rotation seed -
Scale settings:
Uniform scale -
Uniform Min -
Uniform Max -
Uniform Seed -
Non uniform Min -
Non uniform Max -
Non uniform Seed -
Camera settings:
Auto settings:
Width - camera resolution X (for example if your resolution is 1920x1080 you should write 1920)
Hight - camera resolution Y (for example if your resolution is 1920x1080 you should write 1080)
Focal Lenght effector - change to compensate for the effect of focal length
Manually settings: if for some reasons auto setting not works correctly you can use manual settings and write a size of cutting plane in meters
Manually - (on/off)
Size X -
Size Y -
Ground culling settings: The settings below are needed if you want instances outside of the camera's field of view to cast shadows and appear in reflections. This function allows you to use low-poly models without loading the PC or create them automatically.
Outside Low poly geometry - (on/off)
Low poly object - select a pre-prepared low-poly object
Automatic - use automatic creation of a low-poly model (on/off)
Distance - minimum distance between vertices of a low-poly object
Material - select a material for the low poly object , this can be useful if you want to use a low resolution material for instances out of camera view (choose the same material as on the main model for instances if you don't want to change anything).
!!!If your main model uses multiple materials, then I strongly advise you to use a pre-made model instead of an automatically created one, as the automatic method can distort the materials in a way that you do not need, but it is possible that everything will work fine!!!
!!!If your main model uses multiple materials, then I strongly advise you to use a pre-made model instead of an automatically created one, as the automatic method can distort the materials in a way that you do not need, but it is possible that everything will work fine!!!
LOD settings:
Auto LODs - automatic generation of levels of detail (on/off)
Auto LODs settings:
LOD-(1-5) settings:
End - end of zone for given level of detail in meters
Merge by distance - minimum distance between vertices of an object in this level of detail
!!!the end of LOD-5 is also the end of all instances, so if you need to specify the end of the distribution of instances you need to enter this value here!!!
LODs Material settings: if you need each LOD to have a separate material in case you want to reduce the load on the PC a little more (let's say LOD-1 will have a texture with a resolution of 4K, LOD-2 2K and LOD-3 1K and so on) you can use the settings below
Separate materials - (on/off)
Material (1-5) - material for LOD (1-5)
Manually LOD settings: these settings in case everyone has pre-made models with different levels of detail
LOD-(1-5) object - select the appropriate object for this level of detail
LOD-(1-5) End - end of zone for given level of detail in meters
Ground LOD settings:
LOD-(1-4) end - end of zone for given level of detail in meters
Distance - minimum distance between vertices of a Ground(Base) in this level of detail
Displacement settings: these settings are almost exactly the same as the Displacement settings in the Shader editor
Displacement map - select displacement map
<Texture location
Texture rotation
Texture scale> - this is the same functionality as Mapping node in Shader editor
Displacement srtengh -
Displacement distance - distance to which displacement works - this is necessary both for optimization and due to the fact that when using Ground LODs, the mesh will not have enough polygons to correctly process displacement, but if you are confident in the power of your PC, you can equate it to the maximum camera visibility range and, if necessary, turn off Ground LODs , then you will get the usual Displacement without optimization
Before subdivision - this function works before Ground LODs and allows you to subdivide Ground(Base) thereby increasing the number of polygons for Displacement to work correctly if the original mesh did not have enough of them. Be careful to increase it gradually and don't enter large values as it may cause a crash. (It basically works like a Subdivision in simple mode)
After subdivision - this function works after Ground LODs and allows you to smooth the Displacement result. Be careful to increase it gradually and don't enter large values as it may cause a crash. (works like a Subdivision surface in Catmull-Clark mode)
Simplyfy settings: this function is needed so that with a large number of instances and high detail of the Base, you can see the entire scene at once. This method replaces all instances with their lowest-poly versions and gives the ground a single Merge by distance value, thus allowing you to at least imagine everything without a huge load on the PC. Also, this function decouples the Camera from all other functions, thereby allowing it to be animated without freezing (but if this does not help, you can simply disable (not delete) this assembly of geometry nodes, and enable it after animating the camera, or not enable it at all in the viewport leaving it enabled only when rendering)
Simplyfy - (on/off)
Groung merge Distance - minimum distance between vertices of a Ground(Base)
Collection instance
!!!Same settings as Main but also includes collections settings!!!
Collection instance
!!!Same settings as Main but also includes collections settings!!!
Collection settings:
Original/Relative - Output the instances relative to the collection offset/Join the input collection instances with the modified object as geometry, maintaining the relative position between the objects in the scene.
Separate Children - Output each child of the collection as a separate instance. The list of instances will be sorted alphabetically with the objects and child collections sorted together. This can be used with the Pick Instance option in the Instance on Points Node to choose between collection children at each point.
Reset Children - Remove the transform of each of the collection’s children when converting them to instances. This is useful in order to keep child objects visually separate in the viewport, while keeping every instance located directly at the location of the point it was added for.
Pick Instances - If enabled, instead of adding the entire geometry from the Instance input on every point, choose an instance from the instance list of the geometry based on the Instance Index input. This option is intended to be used with the Collection Info Node.
LODs for single objects
Camera object - select active camera
Camera's view distance - the distance the camera sees
Max merge distance - minimum distance between vertices of an object at the maximum distance from the camera, this distance changes from 0 to the entered value evenly to where the camera sees
Camera settings:
Width - camera resolution X (for example if your resolution is 1920x1080 you should write 1920)
Hight - camera resolution Y (for example if your resolution is 1920x1080 you should write 1080)
Focal lenght effector - change to compensate for the effect of focal length
Manually - if for some reasons auto setting not works correctly you can use manual settings and write a size of cutting plane in meters (on/off)
Size X -
Size Y -
LODs for single objects(Global)
Has the same settings as LODs of single objects but they are located in the Geometry nodes tab, this is the only way to make the settings global.
Important conditions for correct operation
I have not yet found such conditions, but if they appear (or such arise and the user) I will add it here
How to add these assemblies to your project
To add an assembly to your project, you need to click on the "File" button on the upper left corner of Blender, then "Append",then find the "Scene optimizer.blend" on your PC and click on it, then in the "Node groups" folder select node group you need , for example "(A)Main".
Then select the desired object , add the "geometry nodes" modifier and select "(A)Main".
All 4 assemblies that can be added have "(A)" at the beginning of the name, this is done so that it would be easier for you to find and add them, the rest of the assemblies are just small functional blocks of the main ones.
Innovations that can be included in the product in future:
!!!all of the above may not be added if it will harm performance, cause errors, or be too difficult to implement!!!
*Occlusion culling - will allow you to delete parts of objects hidden behind other objects , thereby potentially increasing performance by about 2 times more. This will work for both object polygons and instances. I will add this method if I'll make sure that it really increases performance and does not harm it, because it may turn out that it takes more time to calculate it than it saves when rendering.
*Ground culling improvements - the current method is not very optimal, since first subdivides the polygons and then merging them by distance, thereby doing extra calculations, so I want to replace it with Recursive subdivision , but there are problems, the first is that with this method, the base will consist of several separate meshes islands which can create gaps when using Displacement , problems with UVs and others. I will add this feature if I can solve these problems, or at the very least make the old and new methods switchable.
*Polygon visualizer - will switch all materials, both bases and instances, to a special shader that paints each polygon in a random color, thereby allowing you to visually see the change in the number of polygons.
*Modular system - that is, there would be different assemblies with different functionality that could be combined depending on the situation, this would allow us to optimize already configured scenes without redoing them to work with my assembly, it would also add the ability to use only the necessary functions, thereby not overloading the interface with topics you won't use.But I'm not sure how realistic it is to create such a thing so that it would work correctly, this is just a concept, but if I find a way to competently implement it and if there is a demand for it, then I will make such a system.
Choose a product version:
-
$15 Single user
select this option if you work alone
-
$50 Studio
select this option if you work in a studio. (Has same funtionality as single user version)
Dev Fund Contributor | |
Published | over 1 year ago |
Blender Version | 3.1, 3.2, 3.3, 3.4, 3.5, 3.6 |
License | Royalty Free |
![](https://d1231c29xbpffx.cloudfront.net/site_assets/support-icon.png)
Have questions before purchasing?
Contact the Creator with your questions right now.
Login to Message