作者cjcat2266 (CJ Cat)
看板GameDesign
標題[程式] 黏土繪製:射線邁進與GPU空間結構優化
時間Wed Apr 22 17:32:03 2020
這是最近做的一個實驗
因為某些原因,就跳進射線邁進(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
以上 :)
--
Web
http://AllenChou.net
Twitter
http://twitter.com/TheAllenChou
LinkedIn
http://linkedin.com/in/MingLunChou
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 23.242.26.50 (美國)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/GameDesign/M.1587547933.A.82C.html
※ 編輯: cjcat2266 (23.242.26.50 美國), 04/22/2020 17:44:45
1F:推 dreamnook:04/22 17:47
2F:→ hinenak:04/22 17:55
3F:推 wangm4a1: 推04/22 18:29
4F:推 eugenelinrmx:04/22 19:43
5F:推 nicetw20xx: 感覺好厲害,也期待有texture xD04/23 00:19
※ 編輯: cjcat2266 (160.33.168.6 美國), 04/23/2020 02:27:35
6F:推 zxc9764315: 推BVH優化,雖然我的電腦GPU還是被操到100% XD04/23 11:46
因為運算量太多了,所以有沒有優化都撐到100%運算吞吐量了吧
我用RTX 2080的資源使用差別是40% vs 100% (過飽和)
超過100%的過飽和部分要用GPU profiler或高精度stopwatch才觀測得到
我用profiler觀測的結果,效能差異約是12倍
不同於SDF運算量的30倍,因為仍需考慮兩者共同的基礎繪製運算
※ 編輯: cjcat2266 (23.242.26.50 美國), 04/24/2020 02:03:37
7F:推 aegis123321: 推 好奇運算量如此龐大的情況下是如何實際應用? 04/25 08:03
8F:→ cjcat2266: 可能不適合繪製全螢幕解析度的效果吧,區域性效果應該 04/25 11:04
9F:→ cjcat2266: 比較可行。我現在在研究Dreams和Clayxels使用的繪圖方 04/25 11:04
10F:→ cjcat2266: 式,不是用ray marching而是voxel splatting,看起來 04/25 11:04
11F:→ cjcat2266: 比較適合即時大範圍性的繪製 04/25 11:04
12F:→ doomleika: 04/25 23:07