[RELEASED] GPU Instancer

GPU Instancer is released in the asset store.

You can download demo builds for PC, VR, Mac and Android

Introducing GPU Instancer

GPU Instancer is an out of the box solution to display extreme numbers of objects on screen with high performance. With a few mouse clicks, you can instance your prefabs, Unity terrain details and trees.

GPU Instancer provides user friendly tools to allow everyone to use Indirect GPU Instancing without having to go through the deep learning curve of Compute Shaders and GPU infrastructure. Also, an API with extensive documentation is provided to manage runtime changes.

To provide the fastest possible performance, GPU Instancer utilizes Indirect GPU Instancing using Unity’s DrawMeshInstancedIndirect method and Compute Shaders.

GPU Instancing results in magnitudes of performance improvement over static batching and mesh combining. Also, other available solutions for GPU Instancing (including Unity’s material option and the DrawMeshInstanced method) fail short on limited buffer sizes and therefore result in more draw calls and less performance. By using the indirect method GPU Instancer aims to provide the ultimate solution for this, and increases performance considerably while rendering the same mesh multiple times.



GPU Instancer features are:

  • Out of the box solution for complex GPU Instancing.

  • VR compatible. Works with both single pass and multipass rendering modes.

  • Mobile compatible. Works with both iOS and Android.

  • Easy to use interface.

  • Tens of thousands of objects rendered lightning fast in a single draw call.

  • GPU frustum culling.

  • GPU occlusion culling (also supports VR platforms with both single pass and multi pass rendering modes).

  • Automatically configured custom shader support

  • Complex hierarchies of prefabs instanced with a single click.

  • Multiple sub-meshes support.

  • LOD Groups and cross-fading support (with animation or fade transition width).

  • Automatic 2D Billboard generation system (auto-added as last LOD).

  • Shadows casting and receiving support for instances (frustum culled instances still can cast shadows).

  • Ability to use custom shadow distance per prototype and to choose the LOD to render shadows with.

  • Support for Floating Origin handling.

  • Multiple camera support.

  • Unity 5.6 support.

  • Well documented API for procedural scenes and runtime modifications (examples included).

  • Example scenes that showcase GPU Instancer capabilities.

Prefab Instancing Features:

  • Ability to automatically instance prefabs at your scene that you distribute with your favorite prefab painting tool.

  • Automatically Add-Remove prefab instances without any aditional code.

  • Automatic detection and updating of transform position, rotation and scale changes.

  • Full or area localized rigidbody and physics support.

  • Nested Prefabs support (Unity 2018.3 and later).

  • Add-Remove-Update prefab instances with or without instantiating GameObjects (examples included).

  • Instance based material variations through API (similar to Material Property Blocks).

  • Enabling and disabling instancing at runtime per instance basis.

  • API to manage instanced prefabs at runtime.

  • Includes mobile demo scene with custom controllers.

Detail Instancing Features:

  • Dense grass fields and vegetation with very high frame rates.
  • Included vegetation shader with wind, shadows, AO, billboarding and various other properties.
  • Support for custom shaders and materials.
  • Cross quadding support: automatically turns grass textures to crossed quads.
  • Ability to paint prefabs with custom materials on Unity terrain (with Unity terrain tools).
  • Ability to use prefabs with LOD Groups on Unity terrain.
  • Further performance improvements with automatic spatial partitioning.
  • API to manage instanced terrain detail prototypes at runtime (Examples included).
  • Editor GPU Instancing simulation.

Tree Instancing Features:

  • Dense forests with very high frame rates.

  • Speed Tree support with wind animations.

  • Speed Tree 8 support with wind animations.

  • Tree Creator support with wind animations.

  • Support for Soft Occlusion Tree shaders.

  • Included billboard baker and renderers.

Third Party Integrations:

  • Gaia integration.
  • MapMagic integration.


Requirements:

  • DirectX 11 or DirectX 12 and Shader Model 5.0 GPU (Windows, Windows Store)
  • Metal (macOS, iOS)
  • OpenGL Core 4.3 (Windows, Linux)
  • Vulkan (Android, Windows, Linux)
  • OpenGL ES 3.1 (Android 8.0 Oreo or later)
  • Modern Consoles (PS4, Xbox One)

Please also note that even though some integrated graphics cards may satisfy these requirements, they may not provide the boost you can get from GPU Instancing. Therefore, hardware with a dedicated GPU is recommended.

For more information:
Getting Started
F.A.Q.
Tutorial Videos
API Documentation
Performance Analysis

17 Likes

Looks very interesting and promising :slight_smile:

Will it be compatible with Vegetation studio ? Even if not, I can see how this could very
very useful to use in conjunction with VS.

And second part question :smile: I assume this would be great for use with VR ?

1 Like

Thanks for your interest and kind words :slight_smile:

For your first question, basically yes. There is no reason why the prefab instancing bit wouldn’t work with Vegetation Studio and actually would improve scene performance further in conjunction with it. The detail instancing bit, however, instances Unity Terrain details directly and you would probably have to choose between GPU Instancer and Vegetation Studio according to your needs.

For your second question, well you’re definitely right. We have tested with HTC Vive so far and results were quite exciting. Since the primary goal of GPU Instancer is performance, one aspect of using it is to provide better quality visuals with faster and stable frame rates on VR.

In the near future, we will share detailed performance analyses with different hardware.

1 Like

Very exciting thank you. :wink:

I am not a coder, so please forgive what might sound like stupid questions …

I read through and getting started, a bit fast. The main question would be, do you need to use this system
for terrain / grass and tree’s ? Or could you set other objects, like rocks, houses / off shore island meshes that
are decoration only kind of thing ? A mix and match sounds like a huge speed up is possible :slight_smile:

You have LOD group support, but is it safe to say that it doesn’t automatically create LOD groups for each object we choose? Is that something we have to do ourselves?

Great product, by the way.

Hello, does it Support SpeedTree? -If yes, does it support fading/billboards ?
Also, are shadows correctly working when objects are outside the frustrum but casted shadows are visible in camera view ?
Thanks.

Hi :slight_smile:

You can use GPU Instancer to instance any of your prefabs including your rocks, houses and any game object with a MeshRenderer without having a terrain in your scene. (The asteroids scene in the video is a good example of this.) Obviously, the higher the amount of objects in your scene, the more performance boost you will get.

For the terrain details, we have a dedicated system in which you can add your grass, vegetation and any prefab really to use with Unity’s terrain painting tools, and we use that data to instance those objects. This also works if you have an existing terrain with painted details on it.

In short, yes, you can instance any mesh (except skinned meshes - which we will support in a future release) and you are not restricted to vegetation. :slight_smile: All you need to do is to add your prefabs to the GPU Instancer Prefab Manager and they will be instanced. We will provide some videos that show how to do this very soon.

3 Likes

Thanks Neviah :slight_smile:

Currently, we do not offer an automatic LOD creation tool. The LOD Support we have is for instancing prefabs that you create as Unity LOD Groups. If you have a prefab with an “LOD Group” component on it, we instance all its LOD renderers and do the necessary calculations to switch LODs on the GPU as well.

1 Like

Thanks for your interest.

We currently do not support SpeedTree (or TreeCreator) objects; although we have a working prototype and we will add support for this in a future release.

About the shadows; yes, the shadows work correctly for the objects that are outside the frustum but are supposed to cast shadows. We have a dedicated buffer and a shader that specifically takes care of this.

So there are no popping or missing shadows :slight_smile:

3 Likes

Forgot to ask … so does GPU instanter use special shaders ?

Hi Mark :slight_smile:

The GPU Instancer experience is designed to be out of the box and seamless, so you don’t need to change your materials or do anything at all - you can instance all your prefabs as they are.

A small explanation before answering your question: GPU Instancer uses compute shaders that do intensive work on the GPU before sending data to any surface (or fragment) shaders. So the only requirement here is that the surface shader must be able to accept this data.

Now to answer your question, GPU Instancer comes with versions of standard Unity shaders that are configured to accept this data - and uses them automatically if your materials use the Unity standard shaders (whether standard or standard specular). Also, if you are using a custom or third-party shader, GPU Instancer automatically creates a configured version of this shader.

For replacing terrain grass (texture details), GPU Instancer comes with a custom grass shader that we use instead of the Unity grass shader; that is what you see in the video. However, you can choose to use your own custom grass surface shader and it will again be automatically configured to work with GPU Instancer.

Hope this answers your question :slight_smile:

6 Likes

Very cool!! :slight_smile: It sounds very good. I am hoping I will be able to afford this.

Another thought, would be particle system too ?

This to me is something that you could do very well with this in the store. I am excited about the possibilities
with this.

I believe GPU Instanter has the capability to become a top seller in the asset store.:):):slight_smile:

Thanks a lot! :slight_smile:

We currently don’t have any plans to integrate a GPU based particle system - although a particle system approach definitely sounds exciting :slight_smile:

However, GPU Instancer currently supports per-instance based modification of instances’ transform data at runtime, so you can use the API to move, rotate and scale instanced prefabs through scripts.

3 Likes

Hi @LouskRad , congratulations on the asset store release! I am excited to see some benchmark numbers when they are available. Your description sounds promising.

Hi there, and thanks :slight_smile:

We have just added some benchmark results to our website. You can view them at:
http://www.gurbu.com/performance

2 Likes

Looks very nice. What’s the price going to be?

Thanks :slight_smile:
We will set a prize tag very soon, and I will let you all know in this thread. But I can say for now that we plan to launch with an initial discounted price until we launch the 1.0 version.

3 Likes

Released… 50$.

If we use this to instance 50 objects, each with a different material, will they still require 50 draw calls or will they some how become 1 draw call? Using your black magic.

Hi,

50 different materials would mean 50 draw calls. However, GPU Instancer supports material variations for instances similar to material property blocks. That is, you can have a single material on those objects and define how they differ through our API and they will render in a single draw call. An example scene for this is included in the asset package.

1 Like