This article describes how to use the "Game Ready Level 1 - Fantasy Kingdom" package. The "Game Ready Levels" are ready-made scenes created with the Procedural Worlds toolset. The pack is available to our Canopy Pro subscribers - please click here to learn more about our Canopy Pro offer.
You can use those as levels for your games, quick prototyping, inspiration, or as a playground to try other assets out.
Here are some impressions from the scene:
And here is a trailer:
In order to be able to use this package, you need to have the following assets installed. Ensure that you have them all installed before installing the Game Ready level itself. This will ensure that all object references are correctly maintained.
Gaia Pro 2021
POLYGON Fantasy Kingdom - Low Poly 3D Art by Synty Studios
PWS - POLYGON Fantasy Kingdom - Spawner Pack
<Optional> PW Toolbox - Only if you want to do your own mesh combining for performance tuning.
It is recommended to keep this install order - the Level of course uses resources from both the Fantasy Kingdom Pack and the associated Spawner Pack - by installing them first you make sure there will be no errors when opening the Game Ready Level, since it should be able to find all the content it uses already installed.
If you did not keep the order it should not matter either, any errors regarding missing prefabs etc. should resolve themselves when all packages are installed in the end.
The scenes were designed to use linear color space and post processing - if in built-in rendering, you would need to set the color space to linear and install the post processing package. The Gaia setup panel would highlight this as well when you start using it.
To start using the package, you can watch this quickstart video below which has information about installation as well as editing the included scenes, or you can read on further for instructions in text form.
Render Pipeline Compatibility
The level is authored and configured for the 3 different standard pipelines: Built-In, URP, HDRP. Please make sure to download the correct version when you first download the level from canopy. The differences between the pipeline specific versions of the pack are that the materials have been adapted to use the correct shader for the respective pipelines, and the lighting and post processing setup has been adjusted to use the features of the pipeline in question. Here is a trailer showcasing the URP / HDRP version:
You can download the package as a Canopy Pro subscriber from here:
The download consists of a compressed .zip file. If you open it, you will find an .unitypackage inside. Copy and paste / unpack the .unitypackage from the .zip, then you can install it by
- double clicking the .unitypackage file
- dragging and dropping it into the project hierarchy in the unity editor
- Selecting Assets >Import Package > Custom Package... in the unity editor, and then selecting the .unitypackage file for import.
The package will create the following file structure in your project:
Assets\Procedural Worlds\Game Ready Levels\
- Content Resources - Additional Resources such as Materials, Presets etc. that were created for the scenes
Scenes - Contains the actual "Game Ready" scenes, ordered in subfolders
FK_Scenes - Scenes based on the Fantasy Kingdom Pack
- GRL_01 - The scenes from this very pack
- FK_Scenes - Scenes based on the Fantasy Kingdom Pack
- Scripts - Additional Scripts used in the creation of the scenes, such as VFX or small interactive parts.
HDRP / URP setup
When using the HDRP / URP pipeline and your project is not set up to use these pipelines yet, the scene will not display correctly after installation. You would need to assign a pipeline settings asset in the project graphics settings.
You can find pre-configured render pipelines settings assets under:
Assets/Procedural Worlds/Game Ready Levels/URP Resources (for URP)
Assets/Procedural Worlds/Game Ready Levels/HDRP Resources (for HDRP)
For more information about which render pipeline asset to pick, please see the HDRP / URP optimization chapters near the end of this article.
Using the Scenes
You can simply open the scenes from the scenes folder and run them to use them. There are 3 different version of the level included in this pack:
GRL_Scene_Source_01: The complete source scene - this scene is based on an unity terrain and still contains all original tools that were used to create the scene - Gaia and GeNa spawners, GeNa Road and River splines as part of the scene. This scene will perform the worst when running, but allows for easy editing.
GRL_Scene_01: This scene has the tools removed, lighting and occlusion culling baked in terms of optimization. Game Objects are still independent objects. This scene will perform better and has less clutter from the Gaia tools. This scene is suitable if you want to work with unity terrain and / or still need independent, non-combined Game Objects.
GRL_Scene_Optimized_01: This scene has further been optimized to use a mesh instead of an unity terrain. The unity terrain is still in the scene for rendering the vegetation, but does not render the surface anymore. Game Objects were combined in larger meshes to further optimize performance. This scene will show the best performance, but is least flexible in terms of editing / using individual objects.
It is possible to do edits in the source scene, and then re-apply all the optimizations that were made so you can get the same performance improvements on your edited scene.
The following section describes how that workflow would look like.
How to make changes and re-apply optimizations
Start by loading up the source version of the scene so you have all tools and original spawner tools, etc. available, and save the scene as a new scene as to not override the original source scene with your edits.
Additionally take note that the terrains in the scenes share the terrain data object - this means all scenes including the copy you just made reference the same terrain data object in the project hierarchy.
This means if you make a change on the terrain in one scene, this will carry over into other scenes as well - this is standard behavior of Unity if you duplicate a scene with a terrain in it. If you want to avoid this and you want to keep the original source scene intact, you need to make your own copy of the terrain data object, and assign this both in the terrain collider component and the terrain component itself. To do so, you need to put the Inspector in Debug mode, then you can assign the copy / duplicate of the terrain data object.
Then make the changes to your own copy of the source scene. You should be able to use the Gaia / GeNa tools as you are used to from your own projects, and you can also bring new spawners etc. in.
After that you can perform the optimization steps outlined in the next few sections.
1. <Optional> Converting to Mesh Terrain
Consider if you want to use a mesh terrain instead of native unity terrain - this increases performance, but you will lose the splatmap texturing of the terrain. The terrain mesh export can bake the texturing information to use the unity standard shader, or convert to a vertex color low poly shader which fits well with the synty assets in the scene. To do so, open the Terrain Mesh Exporter from the Gaia Manager:
Then choose the Low Poly Export option....
....and start the export:
You should now see a low poly style mesh terrain instead of the original unity terrain being rendered in scene view. The original terrain is still in the scene, but deactivated in favor for the exported mesh. The trees on the terrains have been converted to Game Objects, but we recommend to remove those and rather use the trees and grass on the original terrain.
To do so, you can activate the terrain back, but then deactivate the surface rendering of the unity terrain (Uncheck "Draw" in the terrain inspector settings) - this allows the vegetation to render on top of the exported mesh terrain.
2. <Optional> Mesh Combining
Consider if you want to combine static meshes - this will copy meshes sharing the same material together to save draw calls to improve performance. The downside is that those objects will not be as easy to process as independent objects during runtime anymore, e.g. when doing collision detection.
To do this mesh combining optimization, you need the PW Toolbox. Open the main window of the toolbox:
Then drop the "GeNa Spawns" Game Object on the Drop Area in the Mesh Combine tool:
Click through the different layer types from "Small" to "Extra Large Objects" and set up the mesh combining cell sizes and other settings according to these screenshots.
Extra Large Objects:
Then with all the settings being set up, click on "Combine Meshes".
The combination process can take a few minutes to complete. You should see the output in a Gameobject called "Optimized" when finished. Make sure you assign the small, medium and large objects to the respective Gaia Layer "PW Small", "PW Medium" and "PW Large".
By doing so, you can benefit from layer-dependent culling where smaller game objects will be hidden earlier to save performance.
If you added a lot of Game Objects to the scene which would not be included in the "GeNa Spawns" object, you could consider repeating this for those objects as well.
4. Light Baking
To further save performance, you can bake the lighting for the scene.
Go to the lighting panel under Window / Rendering / Lighting
And assign GRL_01_Optimized_Light_Data as lighting settings object.
Then bake your lighting by clicking "Generate Lighting".
5. Baking Occlusion Culling
Baking Occlusion Culling helps with the performance in the scene as it evaluates during design time which areas of the scene can be seen from other areas in the scene. This visibility information is then stored with the scene, and can be used during runtime to determine which objects need to be rendered from a certain position in the scene.
You can bake the occlusion culling via Window / Rendering / Occlusion Culling
We suggest to use the following settings, and you can start the occlusion culling calculations by clicking the Bake button.
URP specific optimizations
In the project there are 2 assets GRL_UniversalRenderPipelineAsset and GRL_UniversalRenderPipelineAsset_Optimized.
You can find these assets at Assets/Procedural Worlds/Game Ready Levels/URP Resources
The first asset has Screen Space Ambient Occlusion added to the renderer for a boost in quality at the cost of a little performance where as the optimized asset does not have this effect.
The optimized asset also has Depth and Opaque Texture disabled and additional lights like point/spot lights do not cast shadows. Also, the directional light shadow resolution is only 2048 where as the un-optimized asset is 4096. These differences save on some performance and offer a much better FPS but at a loss of visual quality.
You can assign the asset you prefer to use in the Project > Graphics settings.
HDRP specific optimizations
You can find multiple render pipeline settings assets at Assets/Procedural Worlds/Game Ready Levels/HDRP Resources which have been optimized for different unity versions.
If you are using unity 2021+ we recommend you assign the HDRenderPipelineAsset PWS HD 12.1.0+ and anything below this version use HDRenderPipelineAsset PWS HD 10.3.2+.
HDRP is all about high fidelity so can sometimes be tricky to optimize to get good performance.
One of the expensive features is Screen Space Global Illumination (SSGI).
SSGI uses the depth and color buffer of the screen to calculate diffuse light bounces. This can be very costly on lower end GPU and should only be used on higher end hardware. To disable this feature, go to Gaia Runtime/HD Environment Volume/Screen Space Global Illumination component in the volume profile and un-check "Enable".
Here you can see the difference between the 2 effects on and off and their quality impact in the scene.
You can see you lose a bit of the lighting quality having SSGI off but will save you some performance on lower end hardware.
Edited by Peter