When setting up your scene, you may want to reference similar objects into the same namespace (for example, effects, hair, set, characters, and so forth). This allows you to create collections of similar objects to override their attributes and control their visibility.
You can populate collections easily with expressions using the namespace.
For example, create a namespace called chr to reference your characters.
Then within the chr namespace, create a crowd namespace and a hero namespace and a hair namespace.
Reference in your objects as follows:
chr:crowd:chr_crowd_verA
chr:hero:chr_nik
chr:hair:chr_mike_hairgroom
You can then use the expression chr::* to populate your character collection.
When you populate a collection, results are cached after calculations are performed for the first time, and processing will be faster the second time you make visible the layer. The cache is invalidated (and calculations re-occur) when you make a change to the collection or your scene.
To improve performance, you can create a layer without being in the layer; that is, the scene layer can remain visible while you populate your render layer with collections and create overrides.
You can also create collections for data that does not yet exist. For example, as you build a city scene with many buildings, follow a consistent naming convention for your buildings (for example, citybldg1, citybldg2, and so forth), and use an expression such as citybl* to add all buildings in a collection.
As you create a new scene and import a render setup template, then add buildings to your scene, your expression can be reapplied by clicking the icon and the buildings are automatically added to the collection as a result.
In addition, re-ordering or enabling/disabling collections and overrides are also best done while the scene layer is visible to improve performance and calculation times.
Pause the viewport before loading a complex scene if you do not need to visualize your scene. Pausing allows you to make changes in your scene (such as importing a .json template file) without having to wait for the viewport to update. See Pause Viewport 2.0 and the Material Viewer in the Hypershade.
Similarly, pause the viewport when performing multiple operations on a complex scene where immediate visual feedback is not required.
Ensure that computationally intensive animated objects are not in your current render layer. Alternatively, you can also add these objects to a collection and disable this collection in your current layer.
It is not necessary to override the visibility of animated objects in order to improve performance. In fact, you should avoid doing so, as it may lead to incorrect behavior unless you update the visible render layer after changing the value of the Visibility override, which can be done by switching to the scene layer and back to the current layer.
When creating a collection, precision with declaring your expression will help to reduce calculation time; for example: |Set|Building|* instead of just |Set|*, as this reduces the number of nodes in the collection.