假设我有一个3D模型:
模型以顶点,面(所有三角形)和法向量的形式给出。该模型可能有孔和/或透明部分。
对于无限远处任意放置的光源,我必须确定:
然后,对于部分阴影的三角形:
我的最终应用程序必须在无头机上运行,即它们没有GPU 。因此,OpenGL,OpenCL等所有标准的东西可能都不是最好的选择。
考虑到这种限制,确定这些事情的最有效算法是什么?
答案 0 :(得分:2)
您是否有单个网格或更多网格?
意味着阴影是投射在单个“地面”表面还是更像房间墙壁或甚至是物体附近。根据这些信息,解决方案非常不同
适用于平坦的地面/墙面
通常是投影渲染到此表面的最佳方式
相机方向与光线法线相反,屏幕是渲染到表面。表面通常不垂直于光线,因此您需要使用投影来补偿...每个目标表面需要1个渲染通道,因此如果阴影投射到近网格上(仅适用于地面/墙壁),则不适合
更复杂的场景
您需要使用更高级的方法。它们中有很多种,每种都有其优点和缺点。我会使用体素地图,但如果你受空间的限制,那么某些模板/矢量方法会更好。当然所有这些技术都非常昂贵,没有 GPU 我甚至都不会尝试实现它们。
这就是Voxel地图的样子:
如果你只需要自阴影,那么体素贴图尺寸只能是网格周围的一些边界框,在这种情况下,你不需要整个网格体积而只是将每个像素投影到光线方向(忽略第一个体素...)以避免点亮表面上的阴影