我可以将网格着色器的网格输出访问回CPU吗?

问题描述 投票:0回答:1

所以我正在 Vulkan 中制作一个体素游戏,其中大部分计算不仅是渲染每个块的面,而且还像在地形生成器中一样生成这些块。在听说了网格着色器可以拥有的所有灵活性之后,因为它被视为计算着色器,我很想将更多此类程序生成代码放入 GPU 网格着色器中。我还没有接触过网格着色器,但如果我要生成地形数据(而我会把它留给 CPU 在传统的顶点着色器管道下完成),我需要将地形数据发送回 CPU用于测试与玩家的碰撞。

注意:除了碰撞之外,不会有太多玩家互动。

网格着色器是否普遍支持将一些网格数据返回给CPU?如果没有,是否有机会在 Nvidia 上实现这一目标? (无需返回使用传统渲染管道计算着色器)

glsl shader mesh vulkan voxel
1个回答
0
投票

变换反馈不适用于 NV_mesh_shader。这是,或者至少曾经是,硬件问题。我不知道有任何关于他们解决这个问题的声明。

即使你可以使用它......你真的不应该。

网格着色器用于渲染三角形;这就是他们生产的。但你的CPU不需要三角形;它需要的是这些三角形代表的更抽象的数据结构。

在 Minecraft 中进行碰撞检测时,您不会进行对象三角形碰撞测试。您不需要针对三角形进行测试;您针对进行测试。轴对齐块。知道这就是您要测试的对象,可以使测试的计算变得更加容易和快捷。

为网格着色器提供世界的抽象表示并让它们计算三角形是有意义的。将这些三角形提供给 CPU 则不会。 CPU 应该使用自己的世界抽象表示。也许您可以直接与 GPU 网格着色器共享此表示,但所有重要的“程序生成代码”都应该位于 CPU 上。

仅仅为了弄清楚碰撞如何工作而必须进行 CPU->GPU->CPU 往返并不是一个好主意。

© www.soinside.com 2019 - 2024. All rights reserved.