Graphics 如何创建由较小立方体(体素)组成的立方体?

Graphics 如何创建由较小立方体(体素)组成的立方体?,graphics,3d,voxel,direct3d11,Graphics,3d,Voxel,Direct3d11,我是一个图形新手,所以我在征求意见/建议 我想创建(并渲染)一个由较小的立方体(体素)组成的大立方体。诀窍是我希望能够随意移除体素 一种方法是使用实例渲染。在Direct3D中,我可以使用两个缓冲区: 第一个缓冲区将包含立方体单个实例的数据(例如顶点位置、纹理坐标、法线等)。 第二个缓冲区将包含每个体素在第二个缓冲区中的位置。渲染体素的方法有很多,各有利弊。从这个问题上看,听起来你要做的是一个类似于地雷船的场景 一个相当简单且性能合理的实现方法就是简单地将世界分解为一些固定大小的“块”。这些块中

我是一个图形新手,所以我在征求意见/建议

我想创建(并渲染)一个由较小的立方体(体素)组成的大立方体。诀窍是我希望能够随意移除体素

一种方法是使用实例渲染。在Direct3D中,我可以使用两个缓冲区: 第一个缓冲区将包含立方体单个实例的数据(例如顶点位置、纹理坐标、法线等)。
第二个缓冲区将包含每个体素在第二个缓冲区中的位置。

渲染体素的方法有很多,各有利弊。从这个问题上看,听起来你要做的是一个类似于地雷船的场景

一个相当简单且性能合理的实现方法就是简单地将世界分解为一些固定大小的“块”。这些块中的每个块都有一个关联的顶点缓冲区,当以某种方式删除或更改块时,该块的顶点缓冲区将更新。渲染时,将为每个块发出绘制调用

为块选择正确的维度对于性能非常重要。如果块太大,则在块更改时重建顶点缓冲区的成本会很高。如果块太小,那么块的总数将很大,在呈现所有块时会增加驱动程序开销

为了提高性能,可以应用进一步的掩埋算法来避免向顶点缓冲区添加隐藏三角形


要提高性能并突破体素渲染方式的限制,您可以做很多事情,但这是一个很好的起点。

首先,我假设您的大立方体是动态的:它们可以移动/旋转,并且它们的体素可以动态隐藏/可见。如果一切都是静态的,那么有比这个答案更好的方法

正如您所描述的,实例化在性能方面是一个很好的解决方案,因为只有一个绘制调用来渲染所有体素(与逐个渲染每个体素相比)


现在,为了能够隐藏任何体素,您可以使用一个技巧:在实例化数据缓冲区中,您可以添加一个比例值以及位置,然后当您想要隐藏体素时,只需将比例设置为零

是的,这是一种可能性。根据体素的数量,最好先提取可见表面。另一种可能是使用3D纹理存储体素数据。。。见你好,可汗。不,我不想做类似于地雷船的场景。恰恰相反,我只是想把一个大立方体渲染成一个小立方体的集合。