gpt4 book ai didi

metal - Metal 中的多个模型。如何?

转载 作者:行者123 更新时间:2023-12-04 03:43:01 26 4
gpt4 key购买 nike

这是一个绝对的初学者问题。

背景:我并不是真正的游戏开发者,但我正在努力学习底层 3D 编程的基础知识,因为这是一个有趣且有趣的话题。我选择了 Apple 的 Metal 作为图形框架。我知道 SceneKit 和其他更高级别的框架,但我有意尝试学习低级位。不幸的是,我的深度不够,而且网上似乎很少有面向初学者的 Metal 资源。

通过阅读 Apple 文档并遵循我能找到的教程,我设法实现了一个简单的顶点着色器和一个片段着色器,并在屏幕上绘制了一个实际的 3D 模型。现在我想画第二个模型,但我有点卡住了,因为我不确定什么是最好的方法。

难道我……

  • 为我的所有模型使用单个顶点缓冲区和索引缓冲区,并在渲染单个模型时告诉 MTLRenderCommandEncoder 偏移量?
  • 每个模型都有单独的顶点缓冲区/索引缓冲区吗?这种方法会规模化吗?
  • 还有什么?

  • TL;DR:在 Metal(或任何其他 3D 框架)中存储多个模型的顶点数据的推荐方法是什么?

    最佳答案

    没有一种推荐的方法。当您在 Metal 这么低的级别上工作时,有很多可能性,您选择的可能性在很大程度上取决于情况以及您想要/需要优化的性能特征。如果您只是在玩介绍项目,那么这些决定中的大多数都是无关紧要的,因为在您扩大到“真正的”项目之前,性能问题不会受到影响。

    通常,游戏引擎为每个模型使用一个缓冲区(或一组顶点/索引缓冲区),尤其是当每个模型需要不同的渲染状态(例如着色器、绑定(bind)纹理)时。这意味着当场景中引入新模型或不再需要旧模型时,可以将必要的资源加载到 GPU 内存中/从 GPU 内存中删除(通过创建/销毁 MTL 对象的方式)。

    从同一个缓冲区(的不同部分)进行多次绘制的主要用例是当你改变缓冲区时。例如,在第 n 帧上,您正在使用缓冲区的前 1KB 进行绘制,同时您正在计算/流式传输新的顶点数据并将其写入缓冲区的第二个 1KB ......然后第 n + 1 帧您切换缓冲区的哪些部分用于什么。

    关于metal - Metal 中的多个模型。如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34485259/

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