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

看板GameDesign (遊戲設計)作者 (CJ Cat)時間4年前 (2020/04/22 17:32), 4年前編輯推噓6(606)
留言12則, 9人參與, 4年前最新討論串1/1
這是最近做的一個實驗 因為某些原因,就跳進射線邁進(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://www.ptt.cc/bbs/GameDesign/M.1587547933.A.82C.html ※ 編輯: cjcat2266 (23.242.26.50 美國), 04/22/2020 17:44:45

04/22 17:47, 4年前 , 1F
04/22 17:47, 1F

04/22 17:55, 4年前 , 2F
04/22 17:55, 2F

04/22 18:29, 4年前 , 3F
04/22 18:29, 3F

04/22 19:43, 4年前 , 4F
04/22 19:43, 4F

04/23 00:19, 4年前 , 5F
感覺好厲害,也期待有texture xD
04/23 00:19, 5F
※ 編輯: cjcat2266 (160.33.168.6 美國), 04/23/2020 02:27:35

04/23 11:46, 4年前 , 6F
推BVH優化,雖然我的電腦GPU還是被操到100% XD
04/23 11:46, 6F
因為運算量太多了,所以有沒有優化都撐到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

04/25 08:03, 4年前 , 7F
推 好奇運算量如此龐大的情況下是如何實際應用?
04/25 08:03, 7F

04/25 11:04, 4年前 , 8F
可能不適合繪製全螢幕解析度的效果吧,區域性效果應該
04/25 11:04, 8F

04/25 11:04, 4年前 , 9F
比較可行。我現在在研究Dreams和Clayxels使用的繪圖方
04/25 11:04, 9F

04/25 11:04, 4年前 , 10F
式,不是用ray marching而是voxel splatting,看起來
04/25 11:04, 10F

04/25 11:04, 4年前 , 11F
比較適合即時大範圍性的繪製
04/25 11:04, 11F

04/25 23:07, 4年前 , 12F
04/25 23:07, 12F
文章代碼(AID): #1Ue0yTWi (GameDesign)
文章代碼(AID): #1Ue0yTWi (GameDesign)