【发布时间】:2014-05-12 10:47:01
【问题描述】:
许多关于光线追踪的特定资源告诉我们:
“射出射线,找到第一个障碍物将其切断”
“射出二次射线……”
“或者,反向和近似/插值”
我没有看到任何使用扩散算法的算法。让我们假设一个点光源是一个比其他单元格密度更高的点(所有空间都被划分为单元格),照明/跟踪的每一步/迭代都使该源点使用速度场扩散到邻居中,而不是他们的邻居和继续这样。经过一些令人满意的迭代(如30-40次迭代)后,每个单元格的密度信息用于对该单元格中的物体进行光照。
点光和速度场:
但它必须是 1000x1000x1000 大小,这将花费太多时间和内存来计算。也许只是计算 10x10x10 并且在找到障碍物时,将该区域划分为 100x100x100(以动态 kd-tree 方式)可以帮助生成可接受分辨率的光照/阴影?特别是对于基于顶点的照明而不是三角形。
有人试过这种方法吗?
注意:这里的速度场主要是为了使光线向外扩散(不是 %100 而是 %99 以获得一些全局照明)。 Finite-element-method 可以使这个尴尬的并行。
编辑:任何被正密度击中的物体都将成为在其表面周围产生新速度场的障碍。所以光不能穿过那个物体,但可以镜像到另一个方向。(如果它是一个透镜物体,比光更难通过它)所以光的反射会影响其他具有更高迭代限制的物体
相同的 kd-tree 可用于对象碰撞算法 :)
仅作一粒盐:可以在 30x30x30 网格中训练神经网络进行平流和扩散,并且可以在“gpu(opencl/cuda)-->神经网络 ---> 有限的元素方法--->shadows”方式。
【问题讨论】:
-
看起来很酷;我对此很感兴趣,但我对此一无所知。
-
你是对的。这个问题呢?适用的种类?
-
仅仅因为这个主题需要高水平的智力,它的受众范围就会非常有限。所以是的,我会说适用:)
-
也许这已经知道但没有告诉任何人?
标签: raytracing finite-element-analysis