【问题标题】:Raytracing and light光线追踪和光照
【发布时间】:2011-12-16 17:19:09
【问题描述】:

我想实现一个物理光线追踪器(即使用具有给定波长的实际光子),将自己限制在小场景(如两个球体和一个封闭的盒子)中进行实验。并不是说要快,但我稍后会优化它。

我目前正在收集我所知道的关于光子如何与表面相互作用的所有信息,即它们要么反射(被吸收,然后再次发射)或以基于表面吸收光谱和反射率/折射率指数的概率折射,而折射是取决于波长(自然会导致色散)等...

我了解如何从发射材料(如“灯光”)中拍摄光子并让它们在场景中反弹,直到它们碰巧落入相机会产生准确的结果,但速度慢得令人无法接受,因此需要倒退(从相机拍摄光子)

但我无法理解如何“反向”模拟表面相互作用 - 例如,如果来自相机的光子撞击红色盒子的一侧,如果光子的波长对应于红色,它将被反射,所有其他波长将被吸收,从而产生红色。但是颜色的强度是通过采集许多非常接近的光子样本来决定的,并检查它们中的哪些最终会与光发生碰撞,哪些不会呢?因为最终,光子要么撞到灯光,要么不撞到灯光(在给定数量的反弹之后)——不存在部分碰撞的概念。

所以基本上我的问题是 - 像素接收到的光的强度是该像素实际进入光源的光子样本数量的函数,还是涉及其他问题?

【问题讨论】:

  • 这对您的实际问题没有多大帮助(抱歉),但您可能希望使用Cornell Box(或变体)进行测试:)

标签: raytracing


【解决方案1】:

听起来你想做一些名为http://en.wikipedia.org/wiki/Path_tracing 的事情,它类似于光线追踪,只是当来自相机的直接光线照射到表面时它不会直接对光源进行采样(导致它非常慢,但没有那么慢从光源“向前”射出光线)。

但是,您似乎对来自相机的“反向光子”感到困惑,您认为相机已经具有您实际上试图首先确定的属性(“光子具有对应于红色的波长”) .为了解决这个问题,您可能需要先阅读“常规”光线追踪。因此,请想象一下来自相机的光线在场景中反弹到一定的反弹深度或直到它们击中物体,此时它们直接对光源进行采样以查看它们是否照亮了物体。

关于您的最后一个问题“像素接收到的光的强度是该像素实际进入光源的光子样本数量的函数,还是涉及其他问题?”我会将您推荐给http://en.wikipedia.org/wiki/Rendering_equation,在那里您会找到渲染方程(所有 3D 图形算法(如光线跟踪)都试图解决的一般数学问题)和一个包含其局限性的列表,它以否定的方式回答您的问题(即除了光源这些效果也参与决定像素的最终颜色和强度):

  • 磷光,当光在某一时刻被吸收并在不同时刻发射时发生,
  • 荧光,其中吸收和发射的光具有不同的波长,
  • 干涉,其中表现出光的波动特性,以及
  • 次表面散射,其中入射光和出射光的空间位置不同。未考虑次表面散射而渲染的表面可能会显得不自然地不透明。

【讨论】:

  • 所以我最好的选择是实现路径跟踪。似乎荧光问题很容易解决,因为我的光子将具有波长特性(所以我可以根据材料的特性改变反射光子的波长),但其他三个似乎很难解决。我仍然不太明白连续的光线样本(二次光线、三次光线等)如何影响最终颜色,但一些阅读不应该受到伤害。谢谢!
猜你喜欢
  • 2016-01-08
  • 2011-12-08
  • 1970-01-01
  • 2021-07-24
  • 2012-08-10
  • 1970-01-01
  • 2023-03-07
  • 2015-10-20
  • 2019-05-13
相关资源
最近更新 更多