gpt4 book ai didi

vulkan - 存储动画顶点数据的最佳方式

转载 作者:行者123 更新时间:2023-12-03 09:08:48 60 4
gpt4 key购买 nike

据我了解,有几种方法可以将顶点数据存储和传输到 GPU。

  • 使用临时暂存缓冲区并每帧将其复制到独立 GPU 内存
  • 使用共享缓冲区(这很慢?)并且每帧更新共享缓冲区
  • 永久存储每个网格的暂存缓冲区,而不是每帧重新创建它并将其复制到 GPU

哪种方法最适合存储快速变化的动画网格数据?

最佳答案

这取决于硬件及其宣传的内存类型。请注意,以下所有内容都要求您使用 vkGetBufferMemoryRequirements 来检查内存类型是否可以支持您需要的用法。

如果硬件通告的内存类型同时DEVICE_LOCALHOST_VISIBLE,那么您应该使用该而不是> 分期。现在,您仍然需要对其进行双缓冲,因为您无法写入 GPU 正在读取的数据,并且您不想与 GPU 同步,除非 GPU 晚了一帧。这也是你应该衡量的;您的 GPU 需求可能需要三重缓冲区,因此请设计灵活的系统。

请注意,某些硬件具有两个不同的 DEVICE_LOCAL 堆,但只有其中一个具有 HOST_VISIBLE 内存类型。因此请注意这些情况。

如果没有这样的内存类型(或者内存类型不支持您需要的缓冲区使用),那么您需要对此进行分析。两种选择是:

  • 暂存(通过可用的专用传输队列)到 DEVICE_LOCAL 内存类型,数据最终会在其中使用。
  • 直接使用非DEVICE_LOCAL内存类型。

请注意,这两者都需要缓冲,因为您希望尽可能避免同步。通过传输队列进行暂存还需要信号量,因为您需要确保图形队列在传输队列完成使用之前不会尝试使用内存。这也意味着您需要处理队列之间的资源共享。

但就我个人而言,我会尽可能避免使用 CPU 动画顶点数据。支持 Vulkan 的 GPU 完全能够自行完成任何动画操作。 GPU 进行骨骼加权蒙皮(甚至基于双四元数)已有十多年了。甚至顶点调色板动画也是 GPU 可以完成的;将各个不同的顶点相加得出最终答案。因此,具有大量 CPU 生成的顶点数据的场景应该相对较少。

关于vulkan - 存储动画顶点数据的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44740106/

60 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com