[程式] Unreal的nanite分析與簡化(Part 4)

看板GameDesign (遊戲設計)作者 (3d)時間6月前 (2024/05/24 17:05), 編輯推噓1(100)
留言1則, 1人參與, 4月前最新討論串1/1
Nanite就是Progressive Mesh chunk/clustered化,然後利用mesh/compute shader來做View Dependent的運算。 但直覺化hierachy clustered 的 Progressive Mesh是行不通的。因為要避免邊界有t-junction/crack,邊界的vertices都會鎖住,無法簡化。 會像這樣,邊界一堆面數,無法簡化下來。 https://i.imgur.com/bqNAXS8.png
quick-vdr用方法才可以真正簡化。差異92% https://i.imgur.com/IdxL4iw.png
https://gamma.cs.unc.edu/QVDR/ Nanite就是用quick-vdr的方法 https://i.imgur.com/gtcixEA.png
https://i.imgur.com/2fUrRTO.png
quick-vdr的方法不是很直覺。traversal也要多花判斷。運算建立hierarchy也蠻麻煩。 其實要避開邊界的問題很簡單。 https://i.imgur.com/mBsScBK.png
原來的chunk不要沿著原來的邊界切開,基本上是對角切,所以128tri的chunk,對角切成64tri,4個不同chunk的64tri合併起來,再simplify成128tri的另一層chunk。 這樣的好處是hierarchy是tree而不是DAG,邊界自動避開。這樣就把Nanite的演算法改良好。QED 但現在的chunk還是需要mesh/compute shader來運算。但其實仔細想想,是不需要的。Tree Hierarchy是很容易用sliding window的index buffer來render。 想到了方法後,也才發現原來2004年就有人提出類似的方法。sliding window VIPM。 https://www.graphicon.ru/html/2004/Proceedings/Technical/2[4].pdf Sliding window的概念。 https://i.imgur.com/qzPMkTu.png
然後再延伸一下,其實我們不需要chunk,重點在tree的層次。第0層10000tri,第一層5000tri,第二層2500tri,簡單的PM運算法就行了,還不需要graph partition這種麻煩。Continuous LOD is so easy。 這種Sliding Window的好處是完全不需要gpu update,任何古早gpu都可用。缺點是index buffer會好幾倍大。 Nanite是vdpm所以效能應該會比較好,但複雜,支援的gpu也少。 很想踢自己一腳,當初看到Tom Forsyth的Sliding Window時,完全沒有看到解決方案就在眼前了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.248.96.221 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1716541543.A.1AA.html

07/18 05:30, 4月前 , 1F
不明覺厲
07/18 05:30, 1F
文章代碼(AID): #1cK5Xd6g (GameDesign)
文章代碼(AID): #1cK5Xd6g (GameDesign)