The main performance feature of Eyeshot is the Minimum Frame Rate. It basically skips small objects during dynamic movements trying to maintain the target frame rate.
The following settings affect the number of drawn objects when the Minimum Frame Rate is enabled, and affect the FPS when disabled. Before playing with these settings, please turn on the current frame rate display using the Design.ShowFPS property.
Always use the least acceptable Design.DisplayMode. For example, if you are drawing only wires, don't forget to set the display mode as Wireframe. If you are drawing 3D objects, try first Shaded display mode, it uses colors only instead of all material properties.
Available only in the Rendered display mode, ambient occlusion requires heavy computations to be performed on the GPU, so it could slow down the scene when enabled on low-end configurations. Screen space ambient occlusion can be disabled as follows:
design1.AmbientOcclusion.Enabled = false;
Alternatively, you may try to decrease the quality to achieve better performance:
design1.AmbientOcclusion = new AmbientOcclusionSettings(AmbientOcclusionSettings.aoQuality.Low, design1.RenderContext);
For further information about ambient occlusion, you can take a look at the dedicated article.
Silhouettes are computationally expensive and can slow down a scene. They can be either disabled entirely, drawn only at the end of a dynamic movement (the default) or drawn at every frame. Set the Model.SilhouettesDrawingMode property of the desired display mode to:
design1.Wireframe.SilhouettesDrawingMode = silhouettesDrawingType.Never; design1.Shaded.SilhouettesDrawingMode = silhouettesDrawingType.Never; design1.Rendered.SilhouettesDrawingMode = silhouettesDrawingType.Never; design1.Flat.SilhouettesDrawingMode = silhouettesDrawingType.Never; design1.HiddenLines.SilhouettesDrawingMode = silhouettesDrawingType.Never;
Starting from Eyeshot 2023, you can also consider switching to image-based silhouettes, which are considerably faster than their geometric counterpart, although they come with a few limitations.
Available only in the Rendered display mode, they require an extra drawing pass so they decrease the frame rate. They can be disabled with the following property:
design1.Rendered.PlanarReflections = false;
Available only in the Rendered display mode, they require extra drawing steps so they slow down the scene. They can be disabled with the property:
design1.Rendered.ShadowMode = shadowType.None;
Their quality can be tuned with the property:
design1.Rendered.RealisticShadowQuality = realisticShadowQualityType.Low;
which can be Low, Medium, or High, where Low requires less drawing passes and High requires more drawing passes.
Edges and internal wires
In Shaded and Rendered display modes, you may want to turn off edges and internal wires drawing in this way:
design1.Shaded.ShowEdges = false; design1.Shaded.ShowInternalWires = false; design1.Rendered.ShowEdges = false;
Many transparent objects will for sure slow down drawing. Keep their number at the minimum or keep low their triangle count.
A complex multilevel scene structure using Block/BlockReference will allow saving memory but in general will not improve the frame rate.
The bigger is the scene number of segments/triangles the slower will be dynamic movements. You can try reducing the segments/triangles total count calling design1.Entities.RegenAllCurved(<deviation>) with the biggest acceptable deviation (chordal error) tolerance.
Immediate mode rendering in WPF
If you use the WPF Eyeshot control, try enabling the Immediate mode rendering in this way:
design1.Renderer = rendererType.OpenGL;
Skipping small objects
Active only when the Minimum Frame Rate is disabled.
During dynamic movements, Eyeshot skips drawing all entities whose size on screen is bigger than Viewport.SmallSizeMoving (in pixels). With the property Viewport.SmallSizeRatioMoving you can control the SmallSizeMoving value estimation, based on the smallest Viewport dimension. The default value is 0.01 (1% of the smallest Viewport dimension) and can be disabled using zero.
Equivalent properties for still frames are Viewport.SmallSizeStill and Viewport.SmallSizeRatioStill.
If most of your problems are with dynamic movements, you can try to activate Turbo. It kicks in only during dynamic movements and disables minimum frame rate, small objects culling, and all the graphics sexy features, like shadows, silhouettes, planar reflection, materials, etc. To use it, just set a maximum number of items on screen beyond with you want turbo to automatically activate:
design1.Turbo.MaxComplexity = 100;
The next time you Zoom/Pan/Rotate your scene you'll notice a considerable speed improvement at the cost of a small delay during geometry bounding box update. You can read more on Turbo mode here.