我想盡可能逼真地渲染一個場景,在這個場景中點光線照到一個物體,並以相同的角度反射到臉部的法線(入射角=反射角)並在其他地方照亮場景。如何用threejs實現真實的反射
現在,我知道在threejs反射通常處理CubeCamera
- 材料按例子我在網上找到,但它並不完全適用於我的情況下,我可以從一個點觀察場景,我可能無法觀察到物體在另一個鏡子狀表面上的反射。
考慮this example prototype我正在研究:如果在場景中從牆上突出的盒子具有鏡像材料(用CubeCamera
完成),我將無法看到綠色立方體的反射除非相機處於特定的位置,否則是底面;但是,在現實生活中,如果光源照射的物體通過另一個物體附近,它將部分地照亮它,就好像它是一個光源本身(當然取決於物體的反射率指數)等等現象應該從任何角度都可見,接收間接照明的物體是可見的。
因此,我想出了在立方體中添加PointLight
的想法,但這當然會對環境產生不良影響。
我會盡量說明與下面的順序我的目標:
1)在這裏,我將從此稱其爲陽臺另一邊是正確的黑暗,而區域標有紅色'x'的是立方體有孩子PointLight
的後果,它們閃耀着四面八方。
2)在此,陽臺的遠面仍然是黑暗和底部之一被接收作爲多維數據集經過甚至更多的光,這是可取的,但立方體後面的牆壁實際上應該是暗(我還沒有添加陰影,我首先想要獲得照明),以及它下面的地面和燈柱。
3)最後,當立方體已通過陽臺,這對於我們現在都一個反射光線不反彈回只是普通的錯陽臺的側面和底面被點亮,它來自的方式。同樣適用於燈柱。
現在我意識到所有發生的錯誤都是由於立方體本身發出的光線,我希望你能幫助我的是確定一種產生物理準確反射光線的方法。
我想避免使用環境光或其他黑客來模擬真實場景並儘可能堅持物理;我懷疑我想要實現的計算量很大,更不用說在實時用例中進行動畫製作,但這不是一個問題,因爲我只是試圖開發一個概念驗證,而不是一定應該快速執行。
從我所收集的,我也許應該編寫自定義頂點和片段着色器用於接收間接照明,右邊的材料?不幸的是,我不知道從哪裏開始,任何人都可以將我指向正確的方向?乾杯。
好吧,聽起來像我可能想使用** raytracing **,「慢但精確」的一個;有關如何使用THREE.js實現它的任何線索? – 2014-11-04 10:52:15
@AndreaAloi我不用JAVA編碼,所以我無法幫助。要麼使用像Canvas一樣的2D像素API(用於SW渲染),要麼使用OpenGL + GLSL + GLM。只有在需要照片真實/光度精度時才使用光線跟蹤。後面的光線跟蹤可以在RealTime中以非常接近它的結果的方式完成,因此通常選擇它會更好......兩個引擎都是相似的,所以如果結果不夠好,您可以用不太大的努力從backtratratra重寫到raytrace 。在這裏,應該有一些libs,但是我不使用JAVA,而且這個站點也不允許這樣的問題 – Spektre 2014-11-04 11:04:36
好的,非常感謝您的建議,我會從這裏拿走它,也許會發布另一個更具體的問題。請注意,在我的情況下,語言不是Java,而是JavaScript,我並不是要求提供關於是否使用特定程序的建議 - 本網站確實禁止 - 但是如果有人知道某個網站或資源的位置我可以在three.js中找到關於光線跟蹤的方式的文檔,這是恕我直言的完全合法。 :) – 2014-11-04 12:22:31