快速了解Cone Tracing

單根RayTrace最大的問題,就是遠處物體采樣不足:

對于這些遠處物體,實際上一個像素感光器所接收到的像素是所有subRay的集合:

對于這些Subray,既會都來自同一個物體,也會來自前后不同的物體:

基本概念就這么多。
------------------------------------------------------------------------------------------------
跟Ray Tracing一樣,實際和理論差了一萬個坑。Cone Tracing也是。
我打賭,如果你從未先入為主得看過Ray Tracing的實現(xiàn),一定會和“主流”實現(xiàn)千差萬別。為啥一個像素只發(fā)一條?為啥只在乎1bounce?為啥1bounce后面就不半球積分了?(顯然數(shù)量爆炸了)...... Cone Tracing 也是。
非主流的就不多說了,比如ShaderToy上搜Cone Tracing,場景信息還是SDF,基本是拿來當(dāng)AA和Motion Blur使的。
主流的是Voxel Cone Tracing,也不是我上面說的多個SubRay,而是每次Step有一個球體,檢測球體里的相交信息:

通過面積占比關(guān)系可以獲得alpha,通過alpha混合可以解決上面說的(單像素不同物體的采樣不足)問題:

可以看到混合是很naive的,不過無所謂夠用了。
顯然求交合計算占比也不容易,所以把場景Voxel化,用八叉樹管理。
并且最多就trace 8次,夠用了。
因為把場景voxel變成Texture3D,可以把貼圖的mipmap用起來,相當(dāng)于一個天然的LOD。
然后第一次trace用mip7,第二次用mip6...有點類似SDFTrace時候,離得遠先Trace一個簡單的LOD,可以參考我之前trace地形,就是離得近才計算細節(jié)高度:鏈接。
主流的Voxel Cone Tracing就說完了,顯然各家會有不同的細節(jié)處理,就跟現(xiàn)在的Renderer一樣,功能一樣,但出圖就是各有各味兒。
----------------------------------------------------------------------------------
在Nvidia那叫VXGI,之前和ue4搞過整合,現(xiàn)在沒聲音了。
跟LPV一樣,好是好的,不實用,不然早起飛了。
Two Minute Paper那種降智玩意兒,之前也做過一期。md,天天在那omg,不知道你還以為多牛逼呢,計算量上去了渲染結(jié)果能不好看嗎?天天放2個圖然后開始吹水。
ShaderToy上搜標(biāo)題正經(jīng)實現(xiàn)VCT的好像也就2,3個左右,這個可以看看,顯然問題還是有很多的。Ray Tracing是做不到這種這么快,又無噪聲的實時自發(fā)光場景的??上в捎谝颜麄€場景放GPU里,所以場景只能很簡單了:
