【问题标题】:Raytracing via diffusion algorithm通过扩散算法进行光线追踪
【发布时间】: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


【解决方案1】:

目前存在一些问题。

第一个问题是,从根本上说,牛顿意义上的光子不会根据周围其他光子的密度做出反应或改变。因此,使用密度场并尝试按照经典的 Navier-Stokes 风格解决方案进行照明(这是您正在尝试做的,基于您给出的密度场解释)会导致错误的结果。如果有足够的迭代,它还会导致场景中的完全熵,这也不是光会发生的情况。

即使您要摆脱密度问题,您仍然会遇到多个光子在同一个单元中向不同方向传播的问题,这是全局照明和漫射照明所必需的。

所以,去掉你想法中的问题部分,你剩下的是一个光子粒子系统:P

现在,公平地说,sudo 粒子系统目前用于全局照明解决方案。这种类型的东西称为光子映射,但使用它实现直接照明解决方案很简单:P

【讨论】:

    猜你喜欢
    • 2019-03-20
    • 2013-07-01
    • 2013-02-26
    • 2012-05-23
    • 1970-01-01
    • 2014-12-30
    • 2021-07-24
    • 2010-09-07
    • 2014-09-02
    相关资源
    最近更新 更多