对所有可能的方向进行最快的能见度计算

我正在寻找你的建议。 我有一个庞大的体素化模型,就像图片中的那个(但是有更多的几百万个体素)。 为了减less模型的三角形总数,我可以去除体素中的共享面,但是三角形确实会保持很多。 我需要做的是创建一个索引,该索引将包含来自以下过程的布尔列表(可见/不可见)信息:

定义一组点,如图中3个黄色三维像素的质心(但是,这个集合可能再次包含数百万个点),并且每个点计算哪个体素(除了它们相应的容器)可以被看到(直接和未被阻挡的线的网站)向所有方向(像全球照明概念)。 如果射线源(来自给定点)甚至可以达到目标体素的最小值,则意味着我们对于该体素具有“真实”条件。 例如,如果我们假设图片中的射线源点是光源,那么蓝色圆圈中的所有体素对于特定点都是“真实的”。

这与游戏开发无关,所以如果我的post应该在其他地方,我很抱歉。 我只是觉得我应该在这里问一下,因为我的大部分search结果都是光线投射,硬阴影,可见的表面确定,OpenGL等,在这里非常相关。 我不需要看到任何graphics(或者具有较高的fps:D),只需要将结果存储到第三个模拟过程中即可。

我感觉到,如果我实施简单的几何计算,这个索引将运行时间太长(尽管这可以相当容易并行,我相信)。 尽管如此,我可以利用OpenGL和GPU吗? 这会大大提高我的工作吗? 我应该如何处理这个问题? 我正在使用华硕ROG-G752VY。

我只需要构建和存储这个索引(如果数十亿字节,我不会感到惊讶)。 模拟的其余部分不断运行在一个集群上。 此索引计算操作将只会运行一次或多或less。

我只是不知道用这个数量的射线源点我会提到什么执行时间(天/星期/年)以及对所有方向和体素的“粗暴”检查(使用或不使用OpenGL和GPU)。 但是,我可以预测,每次可见体素的最大数量将只有几千。

这是因为(遗憾的是,没有提及它),当它的行程距离超过“x”单位(“x”将比整个模型的尺寸小得多)时,这条射线有一个终生逻辑。 因此,对于比“X”更远的光线,search过程应该每次都会中断。

非常感谢你的时间!

最小例子

您可以为每个体素分配一个不同的颜色,将场景渲染为立方体贴图纹理(从每个起点开始的sevaral时间),然后将纹理复制到RAM中并查找其包含的所有唯一颜色。