[程式] 黏土繪製:射線邁進與GPU空間結構優化

作者: cjcat2266 (CJ Cat)   2020-04-22 17:32:03
這是最近做的一個實驗
因為某些原因,就跳進射線邁進(ray marching)的大坑了
Ray marching是在demoscene領域很紅的繪圖手法
在 http://shadertoy.com 上也很熱門
搭配有號距離場(signed distance field, SDF)和柔化混和
可以繪製出類似用黏土建構的場景效果
使用相關技術的遊戲有Claybook和Dreams
這是我的第一個實驗
https://twitter.com/TheAllenChou/status/1251469038644912128
後來成功將此效果套用到Unity的scene view中
這樣就可以方便用自由視角觀測
https://twitter.com/TheAllenChou/status/1251755478670962695
然後我改用compute shader後製
做到可以利用編輯器內的game object達到即時互動
https://twitter.com/TheAllenChou/status/1252126496799375361
後來試著做出能視覺化效能瓶頸的熱視圖(heat map)
這是視覺化射線邁進次數的熱視圖
https://twitter.com/TheAllenChou/status/1252495311798321153
接下來的計畫是用空間結構階層(bounding volume hierarchy, BVH)
想辦法優化,剔除射線壓根不會碰到的物件所對應的SDF
首戰告敗,因為陷入race condition的陷阱做出了...蜜蜂群XD
https://twitter.com/TheAllenChou/status/1252828873533743104
二度嘗試後成功了
BVH優化在壓力測試中可以有效剔除96%的SDF運算
我並且追加了另外一個熱視圖,以觀測射線實際運算的SDF數量
這是最終的demo + 解釋
https://www.youtube.com/watch?v=2T2FqvtXqLw
原始檔:
https://github.com/TheAllenChou/unity-ray-marching
參考資料:
http://www.michaelwalczyk.com/blog/2017/5/25/ray-marching
http://www.iquilezles.org/www/articles/smin/smin.htm
http://www.iquilezles.org/www/articles/normalsSDF/normalsSDF.htm
https://www.shadertoy.com/
https://box2d.org/files/ErinCatto_DynamicBVH_GDC2019.pdf
https://github.com/erincatto/box2d
以上 :)
作者: wangm4a1 (水兵)   2020-04-22 18:29:00
作者: nicetw20xx (哇愛台灣)   2020-04-23 00:19:00
感覺好厲害,也期待有texture xD
作者: zxc9764315 (Norus)   2020-04-23 11:46:00
推BVH優化,雖然我的電腦GPU還是被操到100% XD
作者: aegis123321 (PE)   2020-04-25 08:03:00
推 好奇運算量如此龐大的情況下是如何實際應用?
作者: cjcat2266 (CJ Cat)   2020-04-25 11:04:00
可能不適合繪製全螢幕解析度的效果吧,區域性效果應該比較可行。我現在在研究Dreams和Clayxels使用的繪圖方式,不是用ray marching而是voxel splatting,看起來比較適合即時大範圍性的繪製

Links booklink

Contact Us: admin [ a t ] ucptt.com