【问题标题】:Rendering multiple models bug on DirectX 12在 DirectX 12 上渲染多个模型错误
【发布时间】:2016-08-11 19:27:47
【问题描述】:

我试图仅使用一个图形上下文在 DirectX 12 上渲染多个模型,但结果非常奇怪,我不太清楚是什么原因。 sponza 模型从外部渲染结果,右边是正确的结果,左边的有问题。

左侧sponza(有问题)的内部渲染结果。

即使加载的两个网格是相同的,每个模型都有自己的顶点缓冲区、索引缓冲区和 SRV。在创建图形上下文的过程中,只有一个图形上下文,并设置了每个模型的索引和顶点缓冲区,然后我调用drawIndexed()函数进行渲染。创建图形上下文后,我们每帧执行一次图形上下文。但是,如果我们为每个模型创建单独的图形上下文并每帧执行所有图形上下文,则渲染效果很好,但帧速率会下降很多。

提供有关导致奇怪结果的原因的任何提示对您非常有帮助,或者提供解决方案会更好。非常感谢您。

【问题讨论】:

  • 你叫什么图形上下文? d3d12中没有这样的东西,你是在说命令列表吗?
  • 是的。图形上下文是在 DirectX 12 示例的迷你引擎中定义的结构。
  • Direct3D 12 添加了许多额外的方法来搞乱 Direct3D 11 上的渲染,因此在尝试使用 DX12 之前很好地调试图形问题非常重要。在隔离问题之前,您需要一次更改一件事,并记住,使用 DX12,您可能需要额外的栅栏、渲染屏障或其他更改来控制重用资源的时间。您还应该尝试使用 WARP 以确保它不是特定于驱动程序的问题。

标签: rendering directx-12 graphicscontext


【解决方案1】:

首先,我建议您远离 dx12 并坚持使用 dx11,除非您已经是 dx11 专家并且您是前 1% 的应用案例,例如 3A 游戏或对控制的非常具体的高要求gpu内存。

这里没有详细说明你的问题,我只能给你一些基本的建议:

  1. 使用调试层运行并使用D3D12GetDebugInterface 查看控制台日志(您需要安装名为图形工具的可选功能)
  2. 使用帧捕获工具,例如 Visual Studio 中的 VSGD 或 nVidia 中的 nsight,并逐步检查您的帧
  3. 使用 Dx11,真的

【讨论】:

    猜你喜欢
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 2013-01-07
    • 2012-09-25
    • 2016-10-12
    • 1970-01-01
    相关资源
    最近更新 更多