2011-12-16 100 views
1

我想實現一個物理光線追蹤器(即使用具有給定波長的實際光子),將我自己限制在小場景(如兩個球體和一個封閉盒子)中進行實驗。這並不意味着速度很快,但我會在稍後優化它。我正在收集我所知道的關於光子如何與表面相互作用的所有知識,即它們要麼反射(吸收,然後再發射),要麼折射的概率是基於表面的吸收光譜和反射率/折射率指數,以及折射是依賴於波長(這自然導致色散)等...光線追蹤和光線

我明白如何從發射材料(如「燈」)射出光子,並使它們在場景中反彈,直到它們碰巧進入相機產生一個準確的結果,但是速度慢得不能接受,因此需要做反向拍攝(從相機拍攝光子)

但是我有無法理解如何將「表面相互作用」建模爲「向後」 - 例如,如果來自相機的光子碰到紅色盒子的一側,如果光子具有與紅色相對應的波長,則它將被反射,並且所有其他波長將被吸收,這會產生紅色。但是,通過拍攝很多非常接近的光子樣本來確定顏色的強度,然後檢查哪一個最終與光線發生碰撞,哪些不會?因爲最終,無論是光子碰到光還是光(沒有經過給定次數的反彈),都沒有局部碰撞的概念。

所以基本上我的問題是 - 一個像素接收的光的強度是該像素的光子樣本的數量的函數,它實際上是光源,還是還有其他一些參與?

+0

這是不是非常有幫助你的實際問題(對不起),但您可能希望使用[康奈爾箱(http://en.wikipedia.org/wiki/Cornell_Box)(或變種)測試:) – Hybrid 2011-12-16 17:57:58

回答

2

聽起來好像你想做一些叫做http://en.wikipedia.org/wiki/Path_tracing的東西,就像光線追蹤一樣,只是當相機的直接光線撞擊到一個表面時它不會直接採樣光源(導致它非常慢,但速度不如射線從光源「向前」)。

然而,你似乎通過考慮來自相機的「逆光子」,你認爲它已經具有屬性(「光子具有對應於紅色的波長」),你實際上試圖在第一個地點。爲了解決這個問題,您可能需要先閱讀「常規」光線跟蹤。因此,想想照相機發出的光線在場景中跳動到某個彈跳深度,或者直到它們碰到物體,然後直接採樣光源,看它們是否照亮物體。

關於您的最終問題「像素接收到的光的強度是該像素的光子樣本數量的函數,它實際上是光源,還是還有其他內容?我會向您推薦http://en.wikipedia.org/wiki/Rendering_equation,您可以在其中找到渲染方程(所有3D圖形算法(如光線追蹤試圖解決的一般數學問題))和一個列表及其限制,這些列表在負面(即光源除外)這些效果也參與決定的像素的最終顏色和強度):

  • 磷光,當光在一個時刻在時間吸收並在不同的時間發射的發生,
  • 熒光,其中吸收和發射的光具有不同的波長,干涉,其中e表現出光的波特性,並且其中入射光和出射光的空間位置不同,其中子表面散射是地下散射,其中入射光和出射光的空間位置是不同的。不考慮次表面散射的表面可能顯得不自然不透明。
+0

所以我最好的選擇是實施路徑跟蹤。看起來熒光問題可以很容易地解決,因爲我的光子將具有波長屬性(所以我可以根據材料的屬性改變反射光子的波長),但其他三個似乎難以處理。我仍然不太明白連續射線樣品(二次,三次射線等)對最終顏色的貢獻,但一些閱讀應該不會受到傷害。謝謝! – Thomas 2011-12-16 18:37:39