【问题标题】:What is the fastest shadowing algorithm (CPU only)?什么是最快的阴影算法(仅限 CPU)?
【发布时间】:2014-03-12 09:37:40
【问题描述】:

假设我有一个 3D 模型:

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

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

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

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

  • [bonus] 三角形面积的多少部分被阴影覆盖
  • [superbonus] 提出了一个可以准确描述阴影形状的新网格

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

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

【问题讨论】:

  • 您可以在没有 GPU 的情况下使用 OpenGL,请参阅 stackoverflow.com/questions/7310885/…
  • @PaulR:……但这是最优的吗?当以这种方式使用时,底层算法是否不会对可能使其在 CPU 上的效率低于严格必要的硬件做出假设?
  • 我没有资格回答完整的问题 - 我只是想纠正之前的错误假设,即 OpenGL 不能在没有 GPU 的情况下使用。
  • 只是为了确保我理解了这个问题:鉴于提供的图片,算法将返回几个三角形,它们就在盖子把手后面,一些在壶嘴底部后面,可能还有一些靠近壶嘴把手的底部,对吧?
  • @Marian:是的,当然还有整个背面 :) 所以,换一种说法:从平行光线光源观察时,哪些三角形(部分)不可见?

标签: algorithm 3d rendering shader occlusion-culling


【解决方案1】:

你有单个网格还是多个网格?

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

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

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

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

  2. 用于更复杂的场景

    您需要使用更高级的方法。它们有很多,每个都有其优点和缺点。我会使用 Voxel map,但如果您受到空间的限制,那么某些 stencil/vector 方法会更好。当然,所有这些技术都非常昂贵,如果没有 GPU,我什至不会尝试实现它们。

    这是体素贴图的样子:

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

【讨论】:

  • (1) 有多个网格,(2) 没有墙壁、地板等(我的真实对象是航天器),我只对这些网格的自阴影感兴趣, (3) ...所以基本上你是说~O(N²) 算法确实是最有名的,只是因为有专门的硬件,这些计算才能在游戏等事物中真正快速地完成?
  • 有一些快捷方式,例如体素贴图(您只渲染整个场景两次)或投影多边形(您将每个网格投影到垂直于光的平面上,对其进行多边形化/三角化,然后在真正的渲染过程中通过如果渲染像素在任何阴影多边形内,添加测试)如果渲染像素在阴影内,只需将颜色更改为较暗的颜色...根据我的观点,体素图是最快的,但需要大量内存才能获得更高的精度...但很容易实现......并且使用三线性过滤内存消耗不是那么高......
  • @RodyOldenhuis 其实没那么容易。从理论上讲,光线追踪是每个样本算法的 O(log(n)),它只是光栅化的实际实现是每个样本的 O(n) 快得令人眼花缭乱。此外,您经常对多个样本深度进行光线追踪。但是,是的,深度映射很容易,因为它对于 z-map 的每盏灯都有一个微不足道的光栅化
  • 对于网格表面的每个渲染像素,从该像素/体素位置沿光方向绘制线,直到地图边界,并使该线的第一个像素保持未渲染。此外,如果您发现渲染的体素已经处于最大阴影中,则停止。这条线很简单 for 循环......如果地图不是太大(256*256*256 就足够了)。与多边形化 + 投影到表面相比,它要快得多 ...
猜你喜欢
  • 1970-01-01
  • 2010-10-14
  • 2020-08-22
  • 1970-01-01
  • 2012-04-03
  • 2011-01-03
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
相关资源
最近更新 更多