[Released] GPU Instancer Pro

Hmm, it seems that MM2 might be updating object positions after they’ve been added to the Prefab Manager. I’ll take a look into this and work on making the UpdateTransformData calls automatic. Thanks for the feedback!

1 Like

The Detail Manager dynamically generates detail instances based on the Camera position.

  • detailObjectDistance: Determines the maximum distance from the camera within which detail instances will be generated.
  • detailUpdateDistance: Sets the minimum amount of camera movement required before updating detail instances.
  • minMaxDistance: A general culling property; instances closer than the minimum or beyond the maximum distance are culled.

You can try adjusting shadow settings. Besides enabling/disabling shadows with isShadowCasting, you can use shadow culling features like isShadowFrustumCulling and isShadowOcclusionCulling. Depending on the scene, shadow culling can cause slight popping but may offer significant performance gains. You can also adjust the shadowLODMap to select lower LOD levels for shadows, reducing the shadow vertex count for objects with LOD groups.

Use UpdateParameterBufferData whenever you modify settings at runtime to update the GPU buffer. Adding or removing prefab instances or terrains does not require calling this function.
Tip: When you modify properties in classes that implement the IGPUIParameterBufferData interface, you need to call UpdateParameterBufferData.

For editing LOD settings, you can access GPUILODGroupData.

To edit the values in the Inspector window, go to Statistics tab and double click on the GPUILODGroupData object:

You can modify LOD values programmatically. Here’s an example:

public class GPUIForceLODLevel : MonoBehaviour
{
    [Range(0, 3)]
    public int forcedLOD = 2;
    public GPUIPrefabManager manager;
    private int _currentForcedLOD = -1;

    private void Update()
    {
        if (!GPUIRenderingSystem.IsActive || manager == null || _currentForcedLOD == forcedLOD)
            return;
        _currentForcedLOD = forcedLOD; // Store the current setting to not make an update every frame.

        GPUICoreAPI.RegenerateRenderers(); // Reset values from the prototype GameObjects.
        for (int prototypeIndex = 0; prototypeIndex < manager.GetPrototypeCount(); prototypeIndex++)
        {
            if (GPUIRenderingSystem.TryGetRenderSourceGroup(manager.GetRenderKey(prototypeIndex), out GPUIRenderSourceGroup renderGroup)) // Get the GPUIRenderSourceGroup for the renderKey.
            {
                for (int l = 0; l < forcedLOD; l++)
                    renderGroup.LODGroupData.transitionValues[l] = 1f; // Set the transition value to 1 so the higher levels will be culled unless the object has a bigger size than the screen.
                renderGroup.LODGroupData.transitionValues[forcedLOD] = 0f;  // Set the forcedLOD transition value to 0 so it is always chosen.
            }
        }
        GPUICoreAPI.UpdateParameterBufferData(); // Update the GPU buffer with new settings.
    }
}

In an upcoming update (planned for release next week), Maximum LOD Level quality setting support will be added. This feature will allow you to specify the maximum LOD level globally from QualitySettings and also adjust it for specific prototypes using GPUI Profile settings.

Hi everyone,

Version 0.9.10 is now available on the Asset Store.

This update includes a redesigned Occlusion Culling system to better align with changes in Unity, plus several fixes for Unity 6. There are also two significant new features:

1- GPUI Pro Scene View Overlay: At runtime, you can now easily toggle between Culled and Full view modes for the Scene camera with a single click. You can add this button to your Scene by right-clicking on the Scene tab and selecting “Overlay Menu” and then “GPUI Pro”.

2- Maximum LOD Level setting: GPUI Pro rendering system now respects the Maximum LOD Level QualitySetting, and you can also adjust this directly in the Profile settings for specific prototypes. This feature allows for tailored Quality levels in your project and helps identify performance bottlenecks more easily.

GPUI Pro - Maximum LOD Level setting

Please see the full change log for detailed information:

[0.9.10] - 2024-10-29

New

  • Added a Scene View overlay to chose between different rendering modes for the Scene camera. The Scene View camera now has the option the make its own visibility calculations at runtime. Allowing users to see the objects that are culled by the Game camera.
  • Added a Runtime Settings option to select the Depth texture retrieval method for the Occlusion Culling system.
  • The rendering system now respects the Maximum LOD Level quality setting and avoids rendering LODs higher than the specified level. Additionally users can set a Maximum LOD Level through Profile settings to have different settings for diffferent prototypes.
  • Added an editor setting to prevent Unity from including shader variants with both DOTS instancing and procedural instancing keywords in builds.

Changed

  • Redesigned the Occlusion Culling system for improved compatibility with future Unity changes.
  • Added various quality-of-life improvements to the user interface.

Fixed

  • Resolved Occlusion Culling issues in Unity 6000 URP and HDRP.
1 Like

Any plans to support Meta Quest 3/3S? Currently, GPU Instancer does not work on “Android VR” platforms, according to your docs (and according to seeing it not work when trying it out). We are currently forced to use other solutions like Nature Renderer since this is one of our target platforms.

GPU Instancer Pro supports Meta Quest 3/3S. Some limitations present in the standard GPU Instancer do not apply to the Pro version.

1 Like

Outstanding news, Gurhan! Thank you for an awesome product!

1 Like