什么是最快的阴影算法(仅限CPU)?

时间:2014-03-12 09:37:40

标签: algorithm 3d rendering shader occlusion-culling

假设我有一个3D模型:

enter image description here

模型以顶点,面(所有三角形)和法向量的形式给出。该模型可能有孔和/或透明部分。

对于无限远处任意放置的光源,我必须确定:

  • [必需]哪些三角形(部分)被其他三角形遮挡

然后,对于部分阴影的三角形:

  • [奖励]三角形区域的哪个部分被遮蔽
  • [ superbonus ]想出一个新的网格来描述阴影的形状正好

我的最终应用程序必须在无头机上运行,即它们没有GPU 。因此,OpenGL,Op​​enCL等所有标准的东西可能都不是最好的选择。

考虑到这种限制,确定这些事情的最有效算法是什么?

1 个答案:

答案 0 :(得分:2)

您是否有单个网格或更多网格?

意味着阴影是投射在单个“地面”表面还是更像房间墙壁或甚至是物体附近。根据这些信息,解决方案非常不同

  1. 适用于平坦的地面/墙面

    通常是投影渲染到此表面的最佳方式

    shadow projection

    相机方向与光线法线相反,屏幕是渲染到表面。表面通常不垂直于光线,因此您需要使用投影来补偿...每个目标表面需要1个渲染通道,因此如果阴影投射到近网格上(仅适用于地面/墙壁),则不适合

  2. 更复杂的场景

    您需要使用更高级的方法。它们中有很多种,每种都有其优点和缺点。我会使用体素地图,但如果你受空间的限制,那么某些模板/矢量方法会更好。当然所有这些技术都非常昂贵,没有 GPU 我甚至都不会尝试实现它们。

    这就是Voxel地图的样子:

    shadow voxel map

    如果你只需要自阴影,那么体素贴图尺寸只能是网格周围的一些边界框,在这种情况下,你不需要整个网格体积而只是将每个像素投影到光线方向(忽略第一个体素...)以避免点亮表面上的阴影