Difference between revisions of "GPU Instancer:GettingStarted"

From GurBu Wiki
Jump to: navigation, search
(Scene Settings)
(Billboard Settings)
Line 175: Line 175:
  
  
Billboard Settings can be edited individualy for each prototype.
+
GPU Instancer comes with a billboard generator system. A [[GPU Instancer:Terminology#Billboards|billboard]] is
 +
 
 +
 
 +
All the billboard settings here can be edited for each individual prototype.
 +
 
 +
 
 +
'''Generate Billboard:''' if enabled, GPU Instancer will automatically generate a camera facing billboard of this prototype to use as its final LOD level. This billboard is made of a single quad mesh, and as such it can increase the performance for distant instances greatly.
 +
 
 +
 
 +
'''Billboard Quality:''' defines the resolution of the billboard textures. Higher resolutions result in better looking billboards, but use more memory. Texture atlasses are not square for 2D billboards; so for example "2048" option results in a 2048x256 texture resolution.
 +
 
 +
 
 +
'''Billboard Frame Count:''' defines the total amount of snapshots that are taken from different angles for this billboard. Higher frame counts result in more accurate view differences in different view angles, but result in lower resolution frames since they are all packed in the same atlas.
 +
 
 +
 
 +
'''Replace LOD Culled With Billboard:''' if enabled, GPU Instancer will use the generated billboard instead of the "Culled" distance defined in this prototype's LOD Group. Deselect this option if you want to use a custom billboard distance.
 +
 
 +
 
 +
'''Billboard Distance:''' defines the distance to the camera in which the prototype will render as the billboard. Increase this if you want the prototypes to switch to billboards further away from the camera.
 +
 
 +
 
 +
'''Regenerate Billboard:''' this button regenerates the billboard atlases for this prototype and updates the current textures with the changed settings.
 +
 
 +
 
 +
'''Show Billboard:''' this button instantiates a quad mesh at (0,0,0) position and shows the generated billboard on it. You can use this to inspect how the billboards will look like at runtime.
 
<br>
 
<br>
  

Revision as of 18:27, 6 December 2018

About | Features | Getting Started | Terminology | Best Practices | F.A.Q.


Getting Started


GPU Instancer consists of three main Monobehavior classes. These are the Prefab Manager, Detail Manager and Tree Manager. The managers are designed with mainly ease of use in mind, and adding them to your scene is as easy as clicking a menu item. On this page, you will find information about these managers that will quickly get you started using GPUI.


HelpButton.png  All the GPU Instancer Managers also have a question mark icon on their top right corners. Clicking this icon will make the managers show descriptions on their settings. You can always click this button to get information about a manager setting.



The Prefab Manager


By adding your prefabs to the GPU Instancer Prefab Manager, the prefab instances you add to your scenes are automatically rendered by GPU Instancer. It also provides additional functionality such as adding/removing/updating instances at runtime, changing material properties per instance, choosing an LOD level to render the shadows from, and much more. Note that the Prefab Manager only accepts user created prefabs. It will not accept prefabs that are generated when importing your 3D model assets.


Adding a Prefab Manager
The Prefab Manager


You can add a Prefab Manager from:

GPU Instancer -> Add Prefab Manager

HelpButton.png   You can press the question mark icon at the top-right corner of the Prefab Manager at any time to get detailed information about these settings.


Below are the sections you will find in the Prefab Manager.


Scene Settings



The Scene Settings section contains scene specific settings like camera selection and global culling settings that effect all the prototypes in this manager.


Auto Select Camera: When this checkbox is active, GPU Instancer will use the first camera with the "MainCamera" tag at startup. If the checkbox is inactive, the desired camera can be set manually. GPU Instancer uses this camera for various calculations including culling operations.


Use Selected Camera Only: If enabled, instances will only be rendered with the selected camera. They will not be rendered in other active cameras (including the Scene View camera). This may improve performance if there are other cameras in the scene that are mainly used for camera effects, weather/water effects, reflections, etc. Using this option will make them ignore GPUI, increasing performance. Please note that the scene view during play mode will no longer show GPUI instances if this is selected.


Use Frustum Culling: Toggles frustum culling globally for all the prototypes in this manager. By turning frustum culling off, you can have view GPUI prototypes in all active cameras since they will not be culled. However, please note that turning frustum culling off may result in a lower FPS than having it on. If turned on, you can still turn frustum culling off for individual prototypes.


Use Occlusion Culling: toggles occlusion culling globally for all the prototypes in this manager. By using occlusion culling, the prototypes that are not actually visible at runtime will not be rendered. This will increase rendering performance depending on the amount of occluded geometry. Please note that occlusion culling may lag if the FPS falls to extremely low levels. If this is a possibility, it could be better to turn it off. Please also check the Best Practices section on occlusion culling.


Min. Culling Distance: You can use this slider to define the minimum distance that any kind of culling will occur. If it is a value higher than 0, the instances with a distance less than the specified value to the Camera will never be culled.


Registered Prefabs



Registered Prefabs shows the list of registered prefab instances that are currently in the scene. These instances will be rendered with GPU Instancer.


Register Prefabs in Scene: This button can be used to register the prefab instances that are currently in the scene, so that they can be used by GPU Instancer. When you add new instances to the scene using the Unity editor, you need to register them to GPUI again using this button to update the current instance counts. For adding new instances at runtime, you can check the API documentation.

Prototypes



Prototypes show the list of objects that will be rendered by GPU Instancer. To modify the settings of a prototype, you can click on its image.


Add: Click on this button to select a prefab from your project and add it as a prototype to the manager. You can also drag and drop a prefab, a prefab instance or a GPUI prototype scriptable object on this button; in all these cases the referenced prefab is added to the manager. You can take a look at this section of the Best Practices Page to see how you can add multiple prefabs like this. Please note that you can also use the Scene Prefab Importer tool to create a Prefab Manager with the selected prefab instances in your scene.


The following settings can be edited for each individual prototype.


Shadows



Settings related to shadows can be accessed from this section. GPU Instancer allows you to use shadows selectively on your prototypes. Shadow casting requires extra shadow passes in shaders - resulting in additional rendering operations. GPUI uses various techniques that boost the performance of these operations, but turning shadow casting off completely will increase performance a lot more. If your prefab for the selected prototype is an LOD Group, you can also choose which LOD level to render the shadows from. Rendering shadows from LOD levels with lower triangle counts will help a lot with performance.


Is Shadow Casting: This option specifies whether the object will cast shadows or not. Turning shadows off hides the rest of the shadow options in the menu as well.


Shadow with Original Shader: By default, GPUI uses a custom, lightweight "shadows only" shader to render the shadows of the prototypes that are defined on a Prefab Manager. Using this shader helps increase the shadow performance slightly more; especially if the original shader is using a shadow pass generated by a surface shader (using the addshadow directive). In most cases this shader is enough to render the prototype flawlessly; however, if the original shader uses vertex animation and/or alpha cutoff, then the shadows might not look right. Typical cases of this are when adding tree prefabs. In these cases you can enable this option to use the shadow pass of the original shaders of the prefab and the shadows should then look right.


Use Custom Shadow Distance: If this option is enabled, you can set a custom shadow distance for this prototype. This is particularly helpful since shadows can have the hugest impact on performance. If, for example, your scene fog is blurring objects further away from the camera, then using using a smaller shadow distance can increase the performance while not changing much of visual quality. If this option is not enabled, then GPUI will use the shadow distance defined in Unity's quality settings.


LOD N Shadow: These options appear if the registered prefab has an LOD Group on it. There will be as many options showing here as there are LOD levels on the LOD Group. Using the dropdowns, you can select which LOD level to render the shadows from for each LOD individual level; or choose "None" if you don't wish to render shadows for a specific LOD Group. Managing these options correctly can increase the scene performance greatly.


Use Culling for Shadows: By default GPUI does not use frustum and occlusion culling for prototype shadows that are in the shadow distance. This prevents issues with shadows (e.g. shadow popping) especially if the camera is dynamic and scene lighting changes a lot. If this option is selected, culling results will also be applied to the prototype shadows. This will result in more performance but might also lead to less consistency in shadows.


Culling



These are the culling settings you can define on a prototype basis. Changing settings here will override the general settings in the manager for the selected prototype. You can check the Terminology Page for more information on culling.


Max Distance: Defines the maximum distance from the selected camera within which this prototype will be rendered.


Is Frustum Culling: Specifies whether the objects that are not in the selected camera's view frustum will be rendered or not. If enabled, GPU Instancer will not render the objects that are outside the selected camera's view frustum. This will increase performance. It is recommended to turn frustum culling on unless there are multiple cameras rendering the scene at the same time.


Frustum Offset: Defines the size of the area around the camera frustum planes within which objects will be rendered while frustum culling is enabled. GPU Instancer does frustum culling on the GPU which provides a performance boost. However, if there is a performance hit (usually while rendering an extreme amount of objects in the frustum; or because of some game script), and if the camera is moving very fast at the same time, rendering can lag behind the camera movement. This could result in some objects not being rendered around the frustum edges. This offset expands the calculated frustum area so that the renderer can keep up with the camera movement in those cases.


LOD



Using LODs (Level of Detail) are a great way to improve performance. GPUI supports LOD groups on your prefabs and automatically renders them with indirect instancing while managing the necessary GPU buffer automatically. The LOD settings of the prototype will only be visible if there is an LOD Group on the prefab.


LOD Cross-Fade: Enables cross-fade style blending between the LOD levels of this prototype. This can have a minor impact on performance since during cross-fading, both LOD levels will be rendering.


Animate Cross-Fading: If this option is selected, GPUI animates cross-fading instead of it being distance based. The animation starts with the first occurrence of the changed LOD. During the animation, both LOD levels will be rendered.


LOD Fade Transition Width: You can use this value to define the cross-fading zone between LOD Levels. This zone is the distance in which the prototype LODs are cross-faded. Higher numbers result in wider transition zones. In the transition zone, both LOD levels will be rendered. This option only becomes visible if cross-fade animation is disabled.


LOD Bias Adjustment: This value effects the LOD level distances per prototype. When it is set to a value less than 1, it favors less detail. A value of more than 1 favors greater detail. You can use this to manipulate the instance LOD distances without changing LOD Group on the original prefab.


Runtime Settings



The runtime settings that you can find here can be used to change the runtime behavior of the prototype instances. If you enable runtime modifications, the instances can be added, removed and/or updated during runtime. These modifications can either be done through the GPU Instancer API, or automatically from the manager.


Enable Runtime Modifications: If this option is enabled, transform data (position, rotation, scale) for the prefab instances can be modified at runtime. This can be done either automatically (see below) or through scripting with API calls. The options below become visible only when this option is enabled.


Start With RigidBody: When using this option, the prefab instances that have a RigidBody component on them will start with an active RigidBody.


Add/Remove Instances At Runtime: Enabling this option allows you to add new prefab instances or remove existing ones at runtime. This can be done either automatically (see below) or through scripting with API calls.


Extra Buffer Size: This option specifies the amount of prefab instances that can be added without re-initializing compute buffers at runtime. This is relevant when scripting the add/remove operations and not while GPUI is automatically managing the buffers (see below).


Auto. Add/Remove Instances: If this option is enabled, new prefab instances will be added or existing ones will be removed automatically at runtime without using any API calls. This is the easiest way to use this feature; however, if you have an extreme number of objects (e.g. tens or hundreds of thousands) it is recommended to use the API and manage these operations through code. The reason for this is, each time an instance is added/removed, GPU buffers will be re-initialized. Even though these operations are optimized for efficiency and are quite fast, in extreme numbers there will be a slight difference in performance.


Auto. Update Transform Data: If this option is enabled, transform updates (position, rotation and scale changes) on prefab instances will be reflected automatically on the prototype instances at runtime without the need for API calls. GPUI will track transform changes and physics movements through rigidbodies and apply them to its rendered instances automatically. Please have in mind, however, that even though GPUI efficiently keeps track of the transform changes (i.e. transform data is cached as opposed to being queried each frame), this still adds a further operation to each update. The impact of this on performance should usually not be noticeable, but if you know that your instances transforms will not be updated (that they won't move, rotate or resize) then you should not enable this option.


Billboard Settings



GPU Instancer comes with a billboard generator system. A billboard is


All the billboard settings here can be edited for each individual prototype.


Generate Billboard: if enabled, GPU Instancer will automatically generate a camera facing billboard of this prototype to use as its final LOD level. This billboard is made of a single quad mesh, and as such it can increase the performance for distant instances greatly.


Billboard Quality: defines the resolution of the billboard textures. Higher resolutions result in better looking billboards, but use more memory. Texture atlasses are not square for 2D billboards; so for example "2048" option results in a 2048x256 texture resolution.


Billboard Frame Count: defines the total amount of snapshots that are taken from different angles for this billboard. Higher frame counts result in more accurate view differences in different view angles, but result in lower resolution frames since they are all packed in the same atlas.


Replace LOD Culled With Billboard: if enabled, GPU Instancer will use the generated billboard instead of the "Culled" distance defined in this prototype's LOD Group. Deselect this option if you want to use a custom billboard distance.


Billboard Distance: defines the distance to the camera in which the prototype will render as the billboard. Increase this if you want the prototypes to switch to billboards further away from the camera.


Regenerate Billboard: this button regenerates the billboard atlases for this prototype and updates the current textures with the changed settings.


Show Billboard: this button instantiates a quad mesh at (0,0,0) position and shows the generated billboard on it. You can use this to inspect how the billboards will look like at runtime.

The Detail Manager

Scene Settings

Scene Settings contains scene specific settings like camera selection.

Debug

Debug shows the list of registered prefab instances that are currently in the scene that will be used by GPU Instancer.

Global Detail Values

Global Detail Values settings that are applied to all detail prototypes.

Prototypes

Prototypes show the list of objects that will be used in GPU Instancer. To modify a prototype, click on its image.

Render Settings

Render Settings can be edited individualy for each prototype.

Detail Properties

Detail Properties can be edited individualy for each prototype.

Cross Quads

Cross Quads can be edited individualy for each prototype.

Foliage Shader Properties

Foliage Shader Properties can be edited individualy for each prototype.

The Tree Manager

Scene Settings

Scene Settings contains scene specific settings like camera selection.

Global Tree Values

Global Tree Values settings that are applied to all tree prototypes.

Prototypes

Prototypes show the list of objects that will be used in GPU Instancer. To modify a prototype, click on its image.

Render Settings

Render Settings can be edited individualy for each prototype.

Billboard Settings

Billboard Settings can be edited individualy for each prototype.