【问题标题】:Forward based ray tracer in C++C++ 中基于前向的光线追踪器
【发布时间】:2014-08-24 09:36:13
【问题描述】:

我正在用 C++ 制作光线追踪器,并且需要它基于前向(源到检测器)而不是基于后向(检测器到源)。我需要这个,因为我使用它来模拟特定材料及其与光交互时的属性。

有很多光线追踪教程可用于向后方向,这是可以理解的,因为它在为图形目的编写光线追踪时更有意义,但我找不到任何用于向前方向追踪的好教程(光源到探测器。 )

有没有人知道任何好的基于前向的教程,或者有一个基于前向的光线追踪器,他们不介意我将其用于非盈利目的?

【问题讨论】:

  • 恐怕这与 SO 无关,因为它不是特定的编程问题。我不确定是否有更合适的姊妹站点,但您可以通过单击左上角菜单中的“更多堆栈交换社区”来浏览完整列表。
  • 每个人都倒退可能有一个很好的理由。我认为这可能是要跟踪的光线的剪切量。光线撞击复杂表面可能会产生数千条反射/折射光线。
  • 我没有投反对票,但我正在投票结束,因为这在这里是题外话。你在别处可能会有更好的运气
  • 我认为教程很少,因为它更难,并且不符合教程的“即时满足”公式。不过,搜索“radiosity”可能会更好。
  • 正如其他人所提到的,纯正向光线追踪效率极低,因为几乎没有光线射中探测器。查看Photon Mapping,了解一种以有效方式组合前向和后向光线追踪步骤的好方法。

标签: c++ graphics simulation raytracing


【解决方案1】:

我曾经写过一个光线追踪器,前向光线追踪器无法(或大多数情况下肯定不可能)编写有一个简单的原因。如果场景很复杂,您将无法知道从哪里射出光线以击中探测器上的每个像素。

您可以做的是进行反向光线追踪,然后,当您已经知道光线将要跟随的路径时,进行正向追踪以计算一些额外的数据。

【讨论】:

  • 我不需要填充图像。我不是在创建图像。我所需要的只是模拟有多少光子撞击了我的探测器,任何撞击到我材料之外的障碍物的光子都可以被杀死。
  • 是的,但我的意思是,即使拍摄光子最终会在在障碍物附近的某个地方结束,你也无法知道。在某些物体上反弹后,它也可能会撞击场景的另一侧。另一方面,如果您有一些特定要求,您似乎可以在此处定义规则,因此您在 Internet 上找不到太多关于它的文档。
  • 没关系。如果光子最终到达屏障附近的某个地方,它就没有击中我的探测器。例如,如果我有一块太阳能电池板作为我的探测器,那么如果光子没有撞击我的太阳能电池板,那么我就不能使用来自光子的能量。前向光线追踪是可以写的,已经完成了。 GEANT4 工具包有一个前向光线追踪器,但在我不得不开始深入研究 GEANT4 的深度之前,我希望有某种形式的教程或工具包,因为它是一个相当复杂的程序。
【解决方案2】:

这是一个优化到光线追踪器能够在太阳变成红巨星之前追踪场景的问题。盲目地对一些复杂的场景进行前向光线追踪需要追踪许多光线,直到生成图像。基本上,您无法保证选定的“源”光线会预先出现在图像上,因此您必须不断尝试新的光线,直到您幸运地填充了图像。

我不太明白为什么需要向前的方向。当光线从图像中的像素追踪到源时,您可以根据需要简单地沿正向遍历该光线。

【讨论】:

  • 我不是在生成图像,而是在模拟材料内的光子相互作用。我正在做的光线追踪不是为了图形目的。这是出于材料设计目的。我的材料有一些有趣的光学目的,反过来就没有意义了。它需要向前,因为我正在对材料中的特定交互进行建模,这些交互必须是向前的。我并不担心没有那么多光子被建模。
  • 好吧,在这种情况下,我认为问题归结为如何(从源头)选择会击中感兴趣表面的光线。也许你可以只使用定向光源(有点像太阳,距离很远,所以太阳光线在表面上大致平行)。
【解决方案3】:

请参阅我对这个问题的回答,How to deal with refraction when the rays start inside of a nested object。在其中,我描述了模拟介电材料中光子传播所需的步骤。我讨论如何,

  • 为光线追踪(如果您使用面向对象的方法)设计一个不错的 API,
  • 处理连接两个介电体的接口之间的棘手边界问题,
  • 并应用反射、反射和接口。

还有一个伴随的 Python 项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2011-11-18
    • 2021-04-30
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    相关资源
    最近更新 更多