https://youtu.be/c0YzwR3iaX8

最近因為要做一個關於compute shader的教學範例,需要進階一點的內容,想來想去最後想到可以實作Ray Tracing in One Weekend 的內容,這樣同時可以示範compute shader以及ray tracing,一舉兩得。

關於範例中用到的演算法,除了像是亂數跟遞迴這些compute shader中無法直接套用的的東西外,其他基本上就是跟RTOW中是一樣的,有興趣了解演算法的人可以去閱讀一下RTOW的文章,非常淺顯易懂,專心的話大概一個下午應該就可以完全理解。

在Unity上,主要是利用ComputeShader來執行ray tracer並將結果畫到一個RenderTexture上,然後將結果貼到一個full screen quad上。但事實上也能做到hybrid rendering,也就是先使用傳統rastering的方式渲染出主要場景,再將ray tracing的部分疊加上去,這部分打算之後有機會再寫一個範例加入。場景中物件的部分,則是由script透過ComputeBuffer來跟compute shader溝通。

我把第一版的程式放上Github了,有興趣的人可以去下載。強烈建議順便了解一下ray tracing的原理,因為ray tracing很快就會變成遊戲的標配了。之後應該還會陸續寫些不同的範例來示範ray tracing,有興趣的人可以持續關注我的網誌。

Image Quality Compare


Samples per pixel : 64 / Maximum tracing depth : 64

Samples per pixel : 16 / Maximum tracing depth : 6

Github Page