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的回答和本页内容的帮助下,我获得了可接受的表现.
我不确定它是否只是示例应用程序的副产品,但在 下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)
更新:
我能够取得的唯一其他收益是将 设置为CacheMode,BitmapCache这可能不适用于您的需求。
frontModel.CacheMode = new BitmapCache(20) { EnableClearType = false };
Run Code Online (Sandbox Code Playgroud)
即使在我最慢的机器上,这也可以实现最大 FPS,但也有一些缺点。由于文本元素上的缩放级别非常高,并且此技术创建了一个在动画中使用的图片(而不是对 UIElement 本身进行动画处理),因此我必须将缩放级别设置为 20,然后才能在视觉上几乎察觉不到。这当然也对记忆有影响。