2013-09-25 40 views
1

我正在處理漫反射光線跟蹤器(每個反射有64或128個樣本)。按百分比偏移反射

例如,材料可能具有75%的反射率,這意味着反射光線需要偏離「完美」反射25%。

我一直在嘗試通過計算反射光線的向右和向上矢量,並使用百分比將所有三個元素相乘以合併成一個偏差向量來進行分類。

right = cross(intersectionNormal, ray) 
up = cross(right, ray) 
ray' = (ray * w) + (up * u) + (right * v) 

我似乎無法得到正確的數學。我試着根據球面座標(以完美反射周圍的隨機角度隨機傾斜)爲每個組件生成乘數,但我的數學運算不正常。結果從來不像半漫反射。他們看起來不對。我使用Random.NextDouble()來獲取材質反射率範圍內的隨機球座標。

給定1.0(完全)和0.0(漫射)之間的反射率,交點法線和完美反射線,我會如何偏離反射率百分比?

回答

0

從你想達到的目標來看,「右」和「上」不應該取決於入射光線的方向,而只是與正常值形成一個正交基。所以你會選擇up = cross(right, intersectionNormal)

但是,我不建議你自己滾動,而是建議使用像Blinn/Phong這樣的標準反射模型之一,其中指數完成了你想要的反射率參數。

+0

問題是我還沒有正確的矢量。我只有事件向量和正常。我必須從這些生成正確的向量。至於反射,我已經正常渲染了正常的漫反射顏色,但我想增強反射跟蹤方法,以便在每次反射的某個樣本計數處使用漫反射散射方法(0.0完美反射 - > 1.0完全散射)進行漫反射(32-64是很多樣本)。 –

+0

無論你喜歡什麼,你都可以選擇「正確」的矢量,它只需要垂直於正常。你的「cross(n,ray)」正在爲你從正上方看到的表面生成假結果,但這是一個起點。但是第三個向量'up'應該垂直於'right'和'n'。另外,你在使用前是否將這些載體標準化? – Waldheinz

+0

現在我正在使用'norm([Y,-X,0])'產生一個垂直向量'right'並且執行'norm(ray x right)'來獲得向上的向量(任意),但是我的數學把這三個結合成一個來自'ray'的最終%偏離矢量是行不通的。我試圖使用極座標作爲一種方法。 –