1 puan yazan GN⁺ 2024-09-06 | 1 yorum | WhatsApp'ta paylaş

Nanite WebGPU

Özet

  • Nanite WebGPU, web tarayıcısında WebGPU kullanarak Nanite'i uygulayan bir projedir.
  • Yalnızca Chrome üzerinde kullanılabilir.
  • Meshlet LOD hiyerarşisi, yazılım rasterizer'ı, billboard impostor ve benzeri bileşenleri içerir.
  • Frustum ve occlusion culling desteği sunar.
  • Texture ve vertex normal desteği vardır.
  • Deno kullanarak çevrimdışı da çalışır.

Özellikler

  • Meshlet LOD hiyerarşisi

    • Tarayıcıda WebAssembly kullanarak mesh'i ön işler.
    • Dosya dışa aktarma özelliği de sunar.
  • Yazılım rasterizer'ı

    • WebGPU, atomic<u64> desteği sunmaz.
    • Derinliği (u16) ve octahedron kodlamalı normal'i (2 * u8) 32 bit içinde sıkıştırır.
  • Billboard impostor

    • Kamera konumuna göre 12 görüntüyü harmanlayarak gösterir.
    • Üst ve alt görünüşleri işlemez.
  • Culling

    • Instance bazında: frustum ve occlusion culling.
    • Meshlet bazında: frustum ve occlusion culling.
    • Üçgen bazında: donanımsal backface culling ve z-buffer.
  • GPU tabanlı render ile CPU uygulaması arasında geçiş yapılabilir.

  • Texture model ve çeşitli nesneleri aynı anda destekler.

  • Çalışma zamanında parametre değiştirme mümkündür.

  • İstatistik bilgileri sunar: bellek, geometri, meshlet sayısı, üçgen sayısı vb.

  • Özel dosya biçimi desteği vardır.

  • Vertex position quantization ve octahedron kodlamalı normal desteği sunar.

  • Pencere yeniden boyutlandırmayı yönetir.

  • Deno kullanarak çevrimdışı da çalışır.

  • WebGPU ve WGSL kodu projeye kopyalanabilir.

Hedefler

  1. Sadelik: OBJ dosyasıyla başlayıp tüm işlemleri uygulama içinde yapmak.
  2. Deney: Farklı ayarları değiştirerek performansı test edebilmek.

Demo sahneleri

  • Jinx: 120*120 instance, 640m üçgen.
  • Lucy ve dragon: 70*70 instance, 1.7b üçgen.
  • Lucy: 110*110 instance, 1.2b üçgen.
  • Dragon: 70*70 instance, 1.2b üçgen.
  • Rabbit: 500*500 instance, 1.2b üçgen.
  • Impostor önizleme: impostor texture boyutunun artırılması.

Kullanım

  • Hareket için [W, S, A, D], yukarı-aşağı hareket için [Z, SPACEBAR] tuşlarını kullanın.
  • Hataları gidermek için culling seçeneklerini açıp kapatabilirsiniz.
  • Performansı ölçmek için profile düğmesini kullanabilirsiniz.

SSS

  • UE5'teki Nanite ile temel farklar

    • Basitleştirme hata metriği sadedir.
    • Meshlet basitleştirmesi sadedir.
    • 2 aşamalı occlusion culling yoktur.
    • Shader içinde iş kuyruğu yoktur.
    • VRAM'de kullanılmayan LOD'ların kaldırılması ve streaming yoktur.
    • Visibility buffer yoktur.
    • Yerleşik shadow/multiview yoktur.
    • Çok sayıda farklı nesneyi işleyemez.
    • GPU profiler yoktur.
  • Milyarlarca üçgenin anlamı

    • Yoğun mesh'ler performansı olumsuz etkileyebilir.
    • Instance sayısı fazla olduğunda VRAM tüketimi artar.
    • Sahne yerleşimi performansı etkiler.
  • Nanite ile ilgili şaşırtıcı noktalar

    1. DAG'in amacı uzak nesneler için daha az üçgen kullanmak değildir.
    2. Nanite'in kendisinden çok culling ve Meshlet işlemlerinde zaman harcanır.
    3. Meshlet LOD hiyerarşisi kolayca çalışır.
    4. Mesh temiz biçimde basitleştirilmiyorsa performans düşer.
  • Mesh basitleştirme

    • Basitleştirme sürecinde birçok sorun ortaya çıkabilir.
    • UE5 kendi mesh basitleştirme kodunu kullanır.
  • Hata metriği

    • Uygun Meshlet'i seçmek Nanite'in özüdür.
  • Nanite implementasyonunu kendim yazmalı mıyım?

    • En basit yol UE5 kullanmaktır.
    • Öğrenme amacıyla kendiniz uygulamayı deneyebilirsiniz.
  • Meshlet backface cone culling'in değeri

    • Yoğun mesh'lerde etkilidir.
    • Occlusion culling ile örtüşebilir.
    • WebAssembly çağrıları nedeniyle performans düşüşü yaşanabilir.

GN⁺ Özeti

  • Nanite WebGPU, web tarayıcısında Nanite'i uygulayan ilgi çekici bir projedir.
  • Çeşitli culling teknikleri ve yazılım rasterizer'ı ile performansı optimize eder.
  • UE5 ile karşılaştırıldığında basitleştirme ve hata metriği açısından farklılıklar vardır.
  • Öğrenme amacıyla kendiniz uygulamayı denemek değerli olabilir, ancak gerçek projelerde UE5 kullanmak daha iyi bir tercih olabilir.
  • Benzer işlevlere sahip bir proje olarak Unreal Engine 5'in Nanite'i gösterilebilir.

1 yorum

 
GN⁺ 2024-09-06
Hacker News yorumları
  • Nanite'in üçüncü taraf bir uygulaması ilgi çekici

    • Nanite, grafik mesh'lerini temsil etmenin çok zekice bir yolu
    • Tekrarlamalar bağlantılarla işleniyor ve alt mesh'ler özyinelemeli olarak paylaşılabiliyor
    • Mesh içindeki ayrıntı seviyesi destekleniyor, böylece küçük alt mesh'ler eleniyor
    • Büyük ölçekli tekrarlayan içerik az veriyle hızlıca render edilebiliyor
    • Mevcut GPU tasarımları Nanite ile uyumlu değil ve yeni donanım çalışmaları gerekiyor
    • Unreal Engine demosu, aynı heykelin tekrar tekrar kullanıldığı bir sahne gösteriyor
    • Nanite mesh'leri oluşturmak karmaşık ve şu anda bunu yalnızca Unreal Engine editörü yapabiliyor
    • Formatın iç ofsetleri bir saldırı yüzeyi oluşturabilir
  • Bevy'nin de Nanite fikirlerini uygulayan Virtual Geometry adlı bir sistemi var

    • Bevy'nin yazarı soruları doğrudan yanıtlayabilir
    • Scthe, Bevy kodunun iyileştirilmesine katkıda bulundu
  • Demonun uyumluluğu belirlemek için user-agent dizgesini kullanması iyi değil

    • Özellik uyumluluğu tek tek algılanıp kullanılmalı
    • Chromium kullanıyorum ve WebGPU'yu sık kullanıyorum ama demo Chrome istiyor
  • iPhone 12 Pro Max'te WebGPU çalışmıyor

    • Deneysel özelliklerden WebGPU'yu etkinleştirdim ama başka web sitelerinde çalışıyor
    • Web uygulamasının başarısızlık nedenine dair daha fazla bilgi vermesi iyi olurdu
  • WebGPU'daki 64 bit atomik eksikliğini aşmak için bazı tavizler gerekmiş

    • Masaüstü sınıfı donanımda bu destek neredeyse evrensel
  • İsim ve açıklama kafa karıştırıcı ve ticari marka ihlali ihtimali var

    • Gerçek Nanite ile ilişkili değil ve UE5 ile ilgisi olmayan biri tarafından uygulanmış
    • Bevy'nin Virtual Geometry yaklaşımı daha faydalı olabilir
  • Diğer motorların LOD sistemleriyle karşılaştırma

    • Godot otomatik LOD sağlıyor
    • Unity'de LOD modellerini elle oluşturmak gerekiyor
    • NeoAxis'in ilginç bir yaklaşımı var ama performansı iyi değil
    • Unreal, ekranda çok sayıda nesne göstermede çok ileride
  • three.js forumunda sanal geometri uygulamasıyla ilgili ilgi çekici bir tartışma okudum

    • Web grafik uygulamalarına dair tartışmalar ve ödünleşimler ilginçti
  • Yazılım rasterizer'ının donanım rasterizer'ından daha hızlı olduğu iddiasına dair soru

    • GPU'nun amacı rasterization'ı hızlandırmak
    • Yazılım rasterizer'ı GPU üzerinde çalışmıyorsa bunu anlamak zor
  • M2 Max'te jinx demosunu çalıştırırken WebGPU hatası oluşuyor

    • "Fill size (7398781) is not a multiple of 4 bytes" hata mesajı görünüyor