hmmm, that's a wide open question on a quite complex topic
Need more info on your scenario & models to help you efficiently (number of objects ? number of polygons ? number of materials ?, targeted machine hw and output ?, scenario ? targeted rendering quality ? etc..).
First, when it's slow you need to find out where is the bottleneck. Some common performance bottlenecks are:
- too many polygons visible at a time (check number of Primitives in Studio profiling tools (² then F7). To make it very synthetic, for a decent desktop station hundreds thousand polygons is fine, millions polygons should be ok but starts to be a bit too much and tens of millions is definitely too much. But this is very dependant on targeted machine. If you have too much polygon, try to decimate before importing to studio or try to use render optimization tools inside Studio (some of them described below)
- too many objects in your project (check number of Draw in Studio profiling tools (² then F7).
- Bad product structure (flat hierarchy with hundred thousands objects..)
- too many materials or too complex materials (write a small script that override all materials of the scene into one, and compare frame rate)
- too many transparent objects (transparent sorting) (write a small script that override all materials of the scene into one opaque mat, and compare frame rate)
- too many light sources, careful with shadow casting (disable all light sources and compare frame rate)
- too many viewport effects (SSAO, etc...) (disable all viewport effects and compare frame rate)
To quickly start, here are some standard methods you may want to try if the problem is about polygon count:
- Try to play with "Pixel Cullingn threshold" option in Project Options / Engine / Render Options. If value if > 0, It will automatically hide "small" objects. The bigger the value, the the bigger the "hide size" threshold. Can be very efficient.
- Hierarchy LOD component (inside Libraries / 3D) allows to define several version of a mesh for a 3D entity (Mesh1: 100 000 M Poly, Mesh2: 10 000 Poly, Mesh3: 1000 poly for instance). Meshes will be automatically switched by render engine depending on distance from camera, or size on screen.
- By default Studio don't perform any occlusion culling. It only performs frustum culling (don't render objects that are not in the camera viz cone). If you have a big wall in front of you with thousands of objects behind, they will be processed anyway. Occluder component (Libraries / 3D / Occluders) allow to manually define objects that will occlude what is behind them. Too much declared occluders = poor performances probably.
- SSP (Screen Space Partitionning) is another technique to detect what is really visible from current viewpoint. Associated with data streaming, it allows to dynamically load/unload assets from disk if object is visilbe or not from current viewpoint. See White Paper in chm Studio Pro documentation for more details about that. Just be aware that this one is a "heavy method", to be used only for VERY large data (let's say more than 500 Mb asset binary files) where massive occlusion do occur (plant walkthrough, etc...).
Well that's a start...hope it helps,
Cheers,
A/