為什麼很少有渲染器能處理色散?


因為流行的渲染器raytrace一類的基於光子模型本身的局限,基於電磁波的渲染器比如maxwell就可以


感覺能渲染色散的ray tracer確實不多見,相關的教材上也沒有講這方面的演算法。

正好我之前寫過一個基於蒙特卡洛演算法的tracer,這裡就提下吧。具體做法是對複色光頻率進行隨機取樣,此時你需要知道光源的頻譜的函數,按此頻譜作為概率密度。得到某一頻率的光束後,其折射時我們還需要知道透明材質折射率和透射度隨頻率的關係。總體來說使用了散射效果後渲染結果的噪點會更多些。

附上幾張渲染結果

github主頁: https://github.com/MrVPlusOne/Einstein


並不是不能處理 色散本質上是介質對不同波長的光折射率不一樣。那模擬色散方法就有很多:

最hardcore的方法就是像maxwell一樣 對spectrum 採樣 對採樣出來的波長算出個折射率 這種方法要達到好效果自然需要非常多的sample數目(本來焦散對於光線跟蹤就不是很容易收斂)

當然也有各種各樣取巧的方法,有一個mentalray做的色散就是 三種顏色的折射率 各渲一張圖 然後合成。

對於不支持spectrum的raytracer一樣可以通過shader實現焦散,原理差不多 先佔坑 之後丟一個自己之前弄的shader上來


題主錯了,使用多種頻率的snell係數,就可以,任何渲染引擎都能做到,這個是應用層的問題。


推薦閱讀:

某些知名裝修(如酷家樂)網站的 10 秒出渲染圖技術,是怎麼實現的?
如何評價C4d的插件Aronld?
能不能寫一點關於Maxwell Render渲染器的一些實例教程?
gpu渲染器有哪些,octane 和maxwell比較呢,能渲染動畫嗎,速度和vr,mr,ar比較呢?

TAG:CG | 渲染 | 計算機圖形學 | 渲染器 |