WebGPU में UE5 Nanite तकनीक
(github.com/Scthe)Nanite WebGPU
सारांश
- Nanite WebGPU एक ऐसा प्रोजेक्ट है जो वेब ब्राउज़र में WebGPU का उपयोग करके Nanite को लागू करता है.
- यह केवल Chrome में उपलब्ध है.
- इसमें Meshlet LOD hierarchy, software rasterizer, billboard imposters आदि शामिल हैं.
- यह frustum और occlusion culling को सपोर्ट करता है.
- यह texture और vertex normals को सपोर्ट करता है.
- यह Deno का उपयोग करके ऑफलाइन भी काम करता है.
फीचर्स
-
Meshlet LOD hierarchy
- ब्राउज़र में WebAssembly का उपयोग करके mesh को preprocess किया जाता है.
- file export फीचर भी दिया गया है.
-
Software rasterizer
- WebGPU
atomic<u64>को सपोर्ट नहीं करता. - depth (
u16) और octahedron-encoded normals (2 * u8) को compress करके 32-bit में रखा जाता है.
- WebGPU
-
Billboard imposters
- कैमरा की स्थिति के अनुसार 12 images को blend करके दिखाया जाता है.
- ऊपर और नीचे के view को handle नहीं किया जाता.
-
Culling
- प्रति-instance: frustum और occlusion culling.
- प्रति-Meshlet: frustum और occlusion culling.
- प्रति-triangle: hardware backface culling और z-buffer.
-
GPU-आधारित rendering और CPU implementation के बीच switch किया जा सकता है.
-
यह textured models और विभिन्न objects को एक साथ सपोर्ट करता है.
-
runtime पर parameters बदले जा सकते हैं.
-
statistics उपलब्ध हैं: memory, geometry, Meshlet count, triangle count आदि.
-
custom file format को सपोर्ट करता है.
-
vertex position quantization और octahedron-encoded normals को सपोर्ट करता है.
-
window resize को handle करता है.
-
यह Deno का उपयोग करके ऑफलाइन भी काम करता है.
-
WebGPU और WGSL code को प्रोजेक्ट में कॉपी किया जा सकता है.
लक्ष्य
- सरलता: OBJ file से शुरुआत करके सभी काम app के अंदर ही किए जाते हैं.
- प्रयोग: अलग-अलग settings बदलकर performance test की जा सकती है.
डेमो दृश्य
- Jinx: 120*120 instances, 640m triangles.
- Lucy और dragon: 70*70 instances, 1.7b triangles.
- Lucy: 110*110 instances, 1.2b triangles.
- Dragon: 70*70 instances, 1.2b triangles.
- Rabbit: 500*500 instances, 1.2b triangles.
- Imposter preview: imposter texture size में वृद्धि.
उपयोग
- [W, S, A, D] keys से move करें, [Z, SPACEBAR] से ऊपर-नीचे जाएँ.
- bugs ठीक करने के लिए culling options को toggle किया जा सकता है.
- performance मापने के लिए profile button का उपयोग किया जा सकता है.
FAQ
-
UE5 के Nanite से मुख्य अंतर
- simplification error metric सरल है.
- Meshlet simplification सरल है.
- 2-step occlusion culling नहीं है.
- shader में work queue नहीं है.
- VRAM में unused LOD removal और streaming नहीं है.
- visibility buffer नहीं है.
- built-in shadows/multiview नहीं है.
- कई अलग-अलग objects को handle नहीं कर सकता.
- GPU profiler नहीं है.
-
अरबों triangles का मतलब
- dense meshes performance पर नकारात्मक असर डाल सकते हैं.
- instances की संख्या अधिक होने पर VRAM की खपत बढ़ती है.
- scene arrangement performance को प्रभावित करता है.
-
Nanite के बारे में चौंकाने वाली बातें
- DAG का लक्ष्य दूर की objects के लिए कम triangles का उपयोग करना नहीं है.
- Nanite से ज्यादा समय culling और Meshlet processing पर खर्च होता है.
- Meshlet LOD hierarchy आसानी से काम करती है.
- अगर mesh साफ़-सुथरे तरीके से simplify नहीं होती, तो performance गिर जाती है.
-
Mesh simplification
- simplification process में कई समस्याएँ आ सकती हैं.
- UE5 अपना खुद का mesh simplification code उपयोग करता है.
-
Error metric
- सही Meshlet चुनना ही Nanite का मुख्य बिंदु है.
-
क्या Nanite implementation खुद लिखनी चाहिए?
- UE5 का उपयोग करना सबसे सरल तरीका है.
- सीखने के उद्देश्य से इसे खुद implement करना उपयोगी हो सकता है.
-
Meshlet backface cone culling का महत्व
- dense meshes में यह प्रभावी है.
- यह occlusion culling के साथ overlap कर सकता है.
- WebAssembly calls के कारण performance में गिरावट आ सकती है.
GN⁺ की संक्षिप्त टिप्पणी
- Nanite WebGPU एक दिलचस्प प्रोजेक्ट है जो वेब ब्राउज़र में Nanite को लागू करता है.
- यह विभिन्न culling तकनीकों और software rasterizer के माध्यम से performance को optimize करता है.
- UE5 की तुलना में simplification और error metric में अंतर है.
- सीखने के उद्देश्य से इसे खुद implement करना उपयोगी हो सकता है, लेकिन वास्तविक प्रोजेक्ट्स में UE5 का उपयोग करना बेहतर हो सकता है.
- समान फीचर्स वाले प्रोजेक्ट के रूप में Unreal Engine 5 का Nanite मौजूद है.
1 टिप्पणियां
Hacker News राय
Nanite का third-party implementation दिलचस्प है
Bevy के पास भी Nanite के विचारों को लागू करने वाला Virtual Geometry है
demo का user agent string का उपयोग करके compatibility तय करना अच्छा नहीं है
iPhone 12 Pro Max पर WebGPU काम नहीं करता
WebGPU में 64-bit atomics की कमी को दूर करने के लिए समझौता करना पड़ा
नाम और विवरण भ्रमित करने वाले हैं और trademark infringement की संभावना है
दूसरे engines के LOD systems की तुलना
three.js forum में virtual geometry implementation पर दिलचस्प चर्चा पढ़ी
software rasterizer के hardware rasterizer से तेज़ होने के दावे पर सवाल
M2 Max पर jinx demo चलाते समय WebGPU error हुई