3D 应用程序性能

时间:2021-07-06 19:50:03
原文: 3D 应用程序性能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37591671/article/details/74595999

3D 应用程序性能

渲染 3D 场景比渲染 2D 场景需要做更多的工作。当为 3D 场景应用动画时,WPF 试图以每秒 60 次的频率更新改变的部分。根据场景的复杂程度,这可能很容易耗光显卡内存的资源,从而会导致帧速率下降并且使动画出现抖动。

可以使用几种基本技术改善 3D 应用程序的性能。

  • 如果不需要裁剪超出视口范围的内容,将 Viewport3D.ClipToBounds 属性设置为 false。
  • 如果不需要在 3D 场景中提供命中测试,将 Viewport3D.IsHitTestVisible 属性设置为 false。
  • 如果不在乎更差的指令 —— 在 3D 形状上的粗糙边缘 —— 将 Viewport3D 的RenderOptions.EdgeMode 属性设置为 Aliased。
  • 如果 Viewport3D 比所需的更大,改变其尺寸使其更小。

创建最高效的网格和模型的几个提示

只要有可能,就创建单独的复杂的网格而不是几个更新的网格。
如果需要为相同的网格使用不同的材质,只定义 MeshGeometry 对象一次(作为资源),然后重用 MeshGeometry 对象创建多个 GeometryModel3D 对象。
只要有可能,就在一个 Model3DGroup 对象中包装一组 GeometryModel3D 对象,并且将这组对象放置到单个 ModelVisual3D 对象中。不要为每个 GeometryModel3D 对象都创建单独的 ModelVisual3D 对象。
不要定义背面材质(使用 GeometryModel3D.BackMaterial 属性),除非确实要查看对象的背面。同样,当定义网格时,可以考虑忽略不可见的三角形。
尽可能使用纯色画刷、渐变画刷以及图像画刷,而尽可能不要使用 DrawingBrush 画刷和 Visual 画刷,这两个画刷都需要更多的开销。当使用 DrawingBrush 画刷和 Visual 画刷绘制静态内容时,可以缓存画刷中的静态内容以提高性能。为此,将画刷的 RenderOptions.CachingHint 属性设置为 Cache。