去年因為工作的關係研究了一下Vulkan的ray query功能,但是除了拿來做陰影跟反射,我想用它來做些比較不同的應用,於是就想到了Subsurface Scattering。
在ray tracing GPU 上市之前,Subsurface Scattering的普通做法就是利用depth map來計算mesh受光面跟背光面的距離,藉此算出mesh的厚度,再根據mesh的厚度算出透光度。不過就和shadow map一樣,depth map有解析度跟精確度的限制,容易出現一些artifact。
而ray query的做法就相對簡單且精確。只要透過ray的路徑來計算碰撞點,就可以計算出mesh的正確厚度,再根據mesh的厚度算出透光度,效果比傳統的depth map作法好很多。
不過這個測試只是可行性測試,我並沒有花很多時間在細節上的調教跟改進,不過初步結果看起來效果還不錯,有興趣的人可以自己實作並改進看看。


