1 पॉइंट द्वारा GN⁺ 2024-09-06 | 1 टिप्पणियां | WhatsApp पर शेयर करें

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 में रखा जाता है.
  • 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 को प्रोजेक्ट में कॉपी किया जा सकता है.

लक्ष्य

  1. सरलता: OBJ file से शुरुआत करके सभी काम app के अंदर ही किए जाते हैं.
  2. प्रयोग: अलग-अलग 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 के बारे में चौंकाने वाली बातें

    1. DAG का लक्ष्य दूर की objects के लिए कम triangles का उपयोग करना नहीं है.
    2. Nanite से ज्यादा समय culling और Meshlet processing पर खर्च होता है.
    3. Meshlet LOD hierarchy आसानी से काम करती है.
    4. अगर 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 टिप्पणियां

 
GN⁺ 2024-09-06
Hacker News राय
  • Nanite का third-party implementation दिलचस्प है

    • Nanite graphics mesh को represent करने का बहुत ही चतुर तरीका है
    • repetition को links से handle किया जाता है, और submesh को recursive तरीके से share किया जा सकता है
    • यह mesh के भीतर level of detail को support करता है, इसलिए छोटे submesh हटा दिए जाते हैं
    • बड़े आकार के repeated content को कम data के साथ तेज़ी से render किया जा सकता है
    • मौजूदा GPU design, Nanite के अनुकूल नहीं है, और नए hardware work की ज़रूरत है
    • Unreal Engine demo एक ऐसा scene दिखाता है जिसमें वही statue बार-बार इस्तेमाल की गई है
    • Nanite mesh बनाना जटिल है, और अभी यह सिर्फ Unreal Engine editor में ही संभव है
    • format के internal offsets attack surface दे सकते हैं
  • Bevy के पास भी Nanite के विचारों को लागू करने वाला Virtual Geometry है

    • Bevy का author खुद सवालों के जवाब दे सकता है
    • Scthe ने Bevy के code improvements में योगदान दिया है
  • demo का user agent string का उपयोग करके compatibility तय करना अच्छा नहीं है

    • feature compatibility को अलग-अलग detect करके इस्तेमाल करना चाहिए
    • मैं Chromium इस्तेमाल कर रहा हूँ और WebGPU अक्सर उपयोग करता हूँ, लेकिन demo Chrome मांगता है
  • iPhone 12 Pro Max पर WebGPU काम नहीं करता

    • experimental features में WebGPU enable किया, लेकिन दूसरी websites पर यह काम करता है
    • अच्छा होता अगर web app failure के कारण के बारे में और जानकारी देता
  • WebGPU में 64-bit atomics की कमी को दूर करने के लिए समझौता करना पड़ा

    • desktop-grade hardware पर यह लगभग सार्वभौमिक रूप से supported है
  • नाम और विवरण भ्रमित करने वाले हैं और trademark infringement की संभावना है

    • इसका वास्तविक Nanite से संबंध नहीं है, और इसे UE5 से असंबंधित व्यक्ति ने implement किया है
    • Bevy का Virtual Geometry शायद अधिक उपयोगी हो सकता है
  • दूसरे engines के LOD systems की तुलना

    • Godot automatic LOD देता है
    • Unity में LOD models manually बनाने पड़ते हैं
    • NeoAxis का approach दिलचस्प है, लेकिन performance अच्छी नहीं है
    • Unreal, स्क्रीन पर बहुत सारे objects दिखाने में काफ़ी आगे है
  • three.js forum में virtual geometry implementation पर दिलचस्प चर्चा पढ़ी

    • web graphics implementation पर चर्चा और trade-offs दिलचस्प थे
  • software rasterizer के hardware rasterizer से तेज़ होने के दावे पर सवाल

    • GPU का उद्देश्य rasterization को accelerate करना है
    • software rasterizer, GPU पर चलने वाले मामले को छोड़कर, इसे समझना कठिन है
  • M2 Max पर jinx demo चलाते समय WebGPU error हुई

    • "Fill size (7398781) is not a multiple of 4 bytes" error message दिखाई दिया