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

Mit*_*a M 6 c# wpf performance animation rendering

TextBlock在一个3D面板(Planerator)中放了一个,我用它Storyboard来制作动画.(作为抓取文本)

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

我用了CompositionTarget.rendering.

请看下面的图片:

在此输入图像描述

在此输入图像描述

我需要3D视图中的2D动画具有良好的性能.

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

更新1:

我只想在3D空间中移动一个 2Dtext,但性能很差.(渲染不顺畅,不稳定)

这是一个示例项目.

更新2:

这是基于cokeman19的答案的示例项目更新版本.(性能提升了~10帧,但我需要完美渲染)

更新3:

最后,在cokeman19的回答和本页内容的帮助下,我获得了可接受的表现.

cok*_*n19 3

我不确定它是否只是示例应用程序的副产品,但在 下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 };
Run Code Online (Sandbox Code Playgroud)

BackMaterial逻辑VisualBrush子项的包装器,它不属于视觉树,因此渲染在这里似乎没有意义。此外,逻辑子级(类)又是视觉子级的包装器,它已经在设置中渲染(使用)。LayoutInvalidationCatcher_logicalChildfrontModel.Visual

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

此外,如果可以选择,设置以下选项会将 FPS 恢复到 60,而质量不会明显下降。

RenderOptions.SetEdgeMode(_viewport3d, EdgeMode.Aliased);
Run Code Online (Sandbox Code Playgroud)

更新:

我能够取得的唯一其他收益是将 设置为CacheModeBitmapCache这可能不适用于您的需求。

frontModel.CacheMode = new BitmapCache(20) { EnableClearType = false };
Run Code Online (Sandbox Code Playgroud)

即使在我最慢的机器上,这也可以实现最大 FPS,但也有一些缺点。由于文本元素上的缩放级别非常高,并且此技术创建了一个在动画中使用的图片(而不是对 UIElement 本身进行动画处理),因此我必须将缩放级别设置为 20,然后才能在视觉上几乎察觉不到。这当然也对记忆有影响。