3D 视图动画中的 WPF 2D:性能问题

WPF 2D in 3D view Animations : Performance issue

我在 3D 面板 (Planerator) 中放置了一个 TextBlock,并使用 Storyboard 对其进行动画处理。 (作为抓取文本)

当视野为1时一切正常,但是如果我将视野设置为50以上,帧率会急剧下降并且渲染会不稳定。

我用了CompositionTarget.rendering.

请看以下图片:

我需要在 3d 视图中以良好的性能制作 2D 动画。

请告诉我如何解决这个问题?我应该离开 WPF 并转到 DirectX 吗?

更新 1:

我只想移动 ONE 3D 中的 2D 文本 space,但性能很差。(渲染不流畅,断断续续)

这是a sample project

更新 2:

这是基于 cokeman19 的回答的 sample project 更新版本。 (性能提升~10帧,但我需要完美渲染)

更新 3:

最后,在cokeman19的回答和this page的内容的帮助下,我得到了一个可以接受的表现。

我不确定它是否只是示例应用程序的副产品,但在 Planerator.CreateVisualChild() 下,似乎没有必要设置 GeometryModel3D.BackMaterial。供参考:

VisualBrush vb = new VisualBrush(_logicalChild);
SetCachingForObject(vb);  // big perf wins by caching!!
Material backMaterial = new DiffuseMaterial(vb);
...
GeometryModel3D backModel = new GeometryModel3D() { ..., BackMaterial = backMaterial };

BackMaterial 逻辑 child 的 VisualBrush 包装器,不属于可视化树,因此渲染在这里似乎没有意义。此外,逻辑 child(LayoutInvalidationCatcher class)反过来又是 visual child 的包装器,它已经是在设置 frontModel.Visual.

中呈现(使用 _logicalChild

删除创建和设置 BackMaterial 的代码可将 FPS 提高到 ~55。

此外,如果这是一个选项,设置以下设置可使 FPS 恢复到 60,而质量没有明显下降。

RenderOptions.SetEdgeMode(_viewport3d, EdgeMode.Aliased);

更新:

我能够获得的唯一其他收获是将 CacheMode 设置为 BitmapCache,这可能不适用于您的需要。

frontModel.CacheMode = new BitmapCache(20) { EnableClearType = false };

即使在我最慢的机器上,这也允许最大 FPS,但也有一些缺点。因为文本元素上的缩放级别非常高,而且这种技术创建了一张图片以在动画中使用(而不是为 UIElement 本身设置动画),所以我不得不将缩放级别设置为 20,然后它变得几乎 视觉上无法察觉。这当然也会影响记忆。