- Oyun akışı için son derece düşük gecikme vazgeçilmezdir
- PyroWave, hareket kestirimi ve entropi kodlamayı kaldırarak uç düzey hıza ulaşıyor
- Ayrık Dalgacık Dönüşümü (DWT) tabanlı yaklaşımıyla mevcut DCT kodeklerinden ayrışıyor
- 32×32 blok bazlı paralel işleme ve hızlı oran kontrolü sayesinde GPU üzerinde kodlama/kod çözme çok hızlı
- Kalite değerlendirmesinde H.264/HEVC/AV1 gibi seçeneklerle karşılaştırıldığında da belirli senaryolarda yeterli sonuç veriyor
Oyun akışında ultra düşük gecikme gereksinimi ve mevcut yöntemlerin sınırları
- Son dönemde oyun akışı talebi arttıkça, ağ üzerinden bir cihazdan diğerine gerçek zamanlı aktarım daha önemli hale geldi
- DMA, render alma, kodlama, iletim, kod çözme ve ekran çıktısına kadar her aşamada biriken gecikme, toplam deneyimi büyük ölçüde etkiliyor
- Geleneksel çözüm, H.264, HEVC, AV1 gibi GPU hızlandırmalı video kodeklerini kullanmak
- Ancak akışta B-frame gibi yüksek sıkıştırma teknikleri kullanılamadığından, gecikme ve bit hızı kısıtları daha da sertleşiyor
Tasarım felsefesi: hareket kestirimi ve entropi kodlamayı kaldırmak
Hareket kestirimini kaldırmak – Intra-Only yaklaşımı
- Mevcut video kodeklerindeki hareket kestirimi kaldırılarak tüm kareler birbirinden bağımsız ele alınıyor
- Bunun sonucu olarak bit hızı artıyor; ancak hata dayanıklılığı, sadelik ve kalite tutarlılığı gibi alanlarda avantaj sağlanıyor
- Dijital sinema gibi alanlarda da Intra-only yaklaşımının kullanım geçmişi bulunuyor
- Bu nedenle internet akışı için pek uygun olmasa da LAN gibi yüksek bant genişlikli ortamlarda iyi sonuç verebiliyor
Entropi kodlamayı kaldırmak
- Entropi kodlama, GPU paralel işleme açısından elverişsiz olduğundan tamamen çıkarılmış
- Daha önce yalnızca ASIC odaklı ya da özel donanımlara özgü görülen bir alan yazılım tabanlı biçimde gerçekleştirilmiş
- FFmpeg’de olmayan ultra düşük gecikmeli kodek alanında yeni bir yaklaşım ortaya koyuyor
Dalgacık dönüşümü (DWT) kullanan yeni yaklaşım
- Mevcut kodeklerin DCT yaklaşımı yerine Ayrık Dalgacık Dönüşümü (DWT) benimsenmiş
- Dalgacık dönüşümü, grafik programcılarının aşina olduğu mip-map yapısına benziyor
- Görüntü birden çok banda ayrılıyor ve her banda ayrı nicemleme uygulanıyor
- Yüksek frekans bantları daha güçlü nicemlenerek görsel özelliklerden azami ölçüde yararlanılıyor
- Bu süreç oran denetimiyle de ilişkilendiriliyor
Dalgacık tabanlı kodeklerin tipik artifaktları ve sınırları
- JPEG’deki blocking artifaktları yerine, dalgacık yaklaşımında daha çok bulanıklık veya ringing görülüyor
- Bu durum, modern oyunlarda TAA kaynaklı bulanıklık etkisiyle örtüştüğünden pratikte büyük bir sorun olmayabilir
Yüksek hızlı bit akışı paketleme ve paralelleştirme
- 32×32 katsayı blokları bağımsız işlendiğinden paket kaybı durumunda etki yerel bulanıklıkla sınırlı kalıyor
- 8×8 ve 4×2 alt blok yapılarıyla GPU workgroup düzeyinde paralel işleme optimize ediliyor
- Bitplane kodlama kullanılıyor, ancak karmaşık entropi kodlama olmadan ham bit verisi saklanıyor
- SSBO 8-bit depolama gibi GPU dostu yöntemlerle bellek verimliliği ve işlem hızı en üst düzeye çıkarılıyor
Doğru ve hızlı oran kontrolü
- Geleneksel entropi kodlama yöntemlerinden farklı olarak, her blok için atlanacak bit sayısı yinelemeli biçimde ölçülüp saklanarak uygun oran ayarlanıyor
- Küresel ölçekte en uygun oran-bozulma aralığı hesaplanarak CBR sıkı biçimde korunuyor
- Dalgacık türü kodeklerin güçlü yanı olan bitplane bazlı erken durdurma, yazılımda da başarılmış
Pratik performans ve verimlilik
- 1080p 4:2:0 temelinde RX 9070 XT GPU üzerinde kodlama/kod çözme 0.13 ms’de tamamlanıyor
- DWT, nicemleme ve diğer işlem aşamalarında FP16 optimizasyonları kullanılarak kalite-hız trade-off’u ayarlanabiliyor
- 4K videoda da PCI-e aktarım hızından ziyade GPU’da sıkıştırıp sonra aktarmanın daha hızlı olduğu deneysel olarak doğrulanmış
- Özel donanım kodeklerinden bile 10 kata kadar daha yüksek hız elde edilebiliyor
Kalite değerlendirmesi ve diğer kodeklerle karşılaştırma
- Karşılaştırma grubu: FFmpeg GPU kodlayıcılarında (H.264/HEVC/AV1) Intra-only, CBR ve minimum gecikme modu
- PyroWave, 200Mbps ve 60fps koşullarında gözle bakıldığında sıkıştırma artifaktlarının neredeyse ayırt edilemediği bir sonuç veriyor
- Çeşitli oyun sahnelerinde VMAF, SSIM, PSNR gibi nesnel kalite metrikleriyle de yeterli sonuçlar elde edilmiş
- Bazı metrikler (ör. VMAF), PyroWave’i bir miktar cömert değerlendirirken PSNR gibi metrikler iç hassasiyetin etkisini daha çok gösteriyor
- Görüntüde bulanıklık veya düşük kalite artifaktları olsa da modern oyun görselleri ve kullanım amacı düşünüldüğünde pratik kullanımda büyük bir sorun oluşturmuyor
Sonuç
- PyroWave, aşırı düşük gecikme ve yüksek hız gerektiren yerel oyun akışı alanında yenilikçi bir alternatif sunuyor
- Modern GPU mimarileriyle birlikte paralel işleme ve CBR denetimine özel olarak uyarlanmış durumda
- Kişisel bir proje olsa da DIY ultra hızlı akış çözümü olarak memnuniyet verici bir sonuç sunuyor
1 yorum
Hacker News görüşleri
BBC tarafından geliştirilen, yalnızca intra kullanan wavelet tabanlı ultra düşük gecikmeli codec VC-2'den bahsediliyor. Bu codec telifsiz kullanılabiliyor ve şu anda yalnızca ffmpeg ile resmi BBC deposunda CPU tabanlı uygulamalar bulunuyor. Kendi yüksek lisans tezi kapsamında CUDA hızlandırmalı bir sürüm yapmayı planlıyor. Geçen yıl GSoC'ta yapılan Vulkan implementasyonları henüz tatmin edici değil. İnsanlara bu codec'e mutlaka göz atmalarını öneriyor
Bu yazı, sinyal özelliklerine uygun bozulma toleransını ve tavizleri iyi eşleştirerek açıklayan harika bir örnek. Codec tasarlamak yerine seçen tarafta olsanız bile bu süreci izlemek iyi sonuçlar verebilir. Ultra düşük gecikmenin önemli olduğu alanlara ilgi duyuyorsanız, VSF'nin çeşitli alternatif codec'lerin özelliklerini özetlediği rapora (bağlantı) bakmak faydalı olabilir
Video encoding hakkında neredeyse hiçbir şey bilmiyorum ama encoder oyun motoruyla az da olsa iş birliği yaparsa, video oyunu streaming'inde kaçırılan birçok pratik yaklaşım olabileceğini düşünüyorum. Örneğin çoğu rendering engine'in kendi amaçları için zaten bir motion prediction buffer'ı var; bunu encoding için de bedavaya kullanabiliriz. Ama muhtemelen yenilikleri engelleyen patentler vardır diye üzülüyor; bu yüzden pratikte zor olabilir
LLM (büyük dil modeli) ile oyundaki durumu her framede birkaç cümleyle özetleyip bunu ağ üzerinden gönderen, alıcı taraftaki LLM'in de bu metinden frame'i yeniden oluşturduğu bir yaklaşım öneriliyor. Gerçek zamanlı olması zor ve kaybı yüksek olurdu ama sıkıştırma oranı müthiş olurdu ve güncel trendlere de uygun olurdu deniyor
Bu codec yaklaşımı, araştırma projesinde kullanmayı düşündüğüm şeyle neredeyse birebir aynı. Bilgi olsun diye, ticari projelerde patent havuzu meseleleri yüzünden ücretli standart JPEG-XS'in de (bağlantı1, bağlantı2) ultra düşük gecikme iddia ettiği ve daha güvenli bir tercih olabileceği belirtiliyor
VLC'nin kurucusunun ultra düşük gecikmeli bir streaming protokolü geliştirdiği söylenerek bir röportaj (bağlantı) ve demo videosu (bağlantı) paylaşılıyor
Bu CODEC'in HTJ2K (High-Throughput JPEG 2000) benzeri algoritmalara dayandığı fark edilerek, yazar bunu görürse HTJ2K ile farklarını açıklamasının ilginç olacağı söyleniyor
Yalnızca yerel ağ streaming'ine odaklanılıyorsa modern codec'lerin birçok özelliğine gerek olmadığı açıklanıyor. Bant genişliği yaklaşık 100Mbps ise işlem çok hızlı ve gecikme de çok düşük tutulabilir. Örnek olarak Microsoft DXT codec'inin modern codec özelliklerinin çoğuna sahip olmadığı (entropy encoding, motion compensation, deblocking yok), ama 4-8x sıkıştırma ve donanım decode desteği sayesinde toplam gecikmeyi azaltmada avantajlı olduğu belirtiliyor. Ancak ne kadar optimize edilirse edilsin ekranın kendisinin ayrıca 30-100ms gecikme yaratabildiğine dikkat çekiliyor
Geliştirilen sonucun gerçekten etkileyici olduğu ve bir gün Moonlight ya da benzeri bir projede kullanıldığını görmeyi umduğu söyleniyor
Bu codec'in hâlâ niş ve uzmanlık gerektiren bir alan olması nedeniyle rakip codec'lerle karşılaştırma bulmanın zor olduğu yönündeki görüşe katılarak, H.264/AVC (sıfır gecikmeli ffmpeg seçeneği) ve JPEG XS ile benchmark sonuçlarının merak edildiği belirtiliyor. Hatta ffmpeg komut örneği ve ayrıntılı encoding parametreleri de paylaşılıyor