作者oopFoo (3d)
看板GameDesign
標題[程式] Unreal的nanite分析與簡化(Part 4)
時間Fri May 24 17:05:17 2024
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://webptt.com/m.aspx?n=bbs/GameDesign/M.1716541543.A.1AA.html
1F:推 cass: 不明覺厲 07/18 05:30