1 puan yazan GN⁺ 2025-12-19 | 1 yorum | WhatsApp'ta paylaş
  • macOS için OBS Studio 32.0.0 ile birlikte Apple Metal tabanlı render backend’i deneysel olarak eklendi; amaç, mevcut OpenGL’e kıyasla performans ve verimliliği artırmak
  • Metal, düşük ek yük ve modern GPU mimarisini yansıtmak için tasarlanmış bir API ve OBS bunu desteklemek için GPU ile etkileşim şeklini köklü biçimde değiştirdi
  • OBS’nin mevcut render motoru Direct3D merkezli bir yapıya göre tasarlandığı için, Metal backend’i shader dönüşümü ve kaynak yönetimi gibi alanlarda geniş çaplı uyumluluk çalışmaları yürütüyor
  • Özellikle HLSL shader’larını gerçek zamanlı olarak MSL’ye dönüştürmek ve Direct3D’nin map/unmap davranışını Metal içinde simüle etmek gibi karmaşık uygulamalar içeriyor
  • Metal backend’i hâlâ “deneysel” aşamada, ancak OpenGL’den daha hızlı performans, Swift tabanlı güvenli kod yapısı ve EDR önizleme desteği ile macOS geliştirme ortamında önemli bir dönüm noktası oluşturuyor

Metal render motoruna geçişin genel görünümü

  • OBS Studio 32.0.0’dan itibaren macOS’ta Metal grafik API’si tabanlı bir render motoru deneysel olarak sunuluyor
    • Mevcut OpenGL backend’ine alternatif olarak, performans ve verimlilik artışı hedefleniyor
    • Metal, GPU ile etkileşim şeklini kökten değiştiren modern bir API ve OBS buna uygun şekilde iç yapısını uyarlıyor
  • Metal backend’i “Experimental” olarak işaretlenmiş durumda ve bilinen bazı sorunlar ile sınırlamalar mevcut
    • OpenGL render motoru hâlâ varsayılan olarak korunuyor ve kullanıcılar Metal sürümünü doğrudan test edebiliyor
    • Metal deneyimi olan geliştiricilerin geri bildirimde bulunması ve Pull Request göndermesi teşvik ediliyor

Metal’in arka planı ve tasarım felsefesi

  • Apple, Metal’i ilk olarak 2014’te iPhone için duyurdu ve 2015’te Mac’e genişletti
    • O dönemde Metal, Intel, AMD ve NVIDIA GPU’ları destekleyen ilk yeni nesil grafik API’lerinden biriydi
  • Metal, AMD’nin Mantle yaklaşımı ile mevcut OpenGL ve Direct3D kavramlarını birleştirirken eski miras öğeleri çıkarılarak yeniden tasarlandı
    • Objective-C ve Swift tabanlı API ile iOS ve macOS geliştiricilerine tanıdık bir yapı sunuyor
    • Xcode içinde shader hata ayıklama ve GPU analiz özellikleri entegre olarak destekleniyor

API tasarım farkları ve OBS render motorunun uyarlanması

  • Mevcut OpenGL ve Direct3D, kaynak yönetimi ve senkronizasyonu API düzeyinde otomatik olarak ele alıyordu;
    Metal gibi modern API’lerde ise bunu geliştiricinin doğrudan yönetmesi gerekiyor
  • Yeni API’ler GPU’yu paralel komut kuyruğu tabanlı bir işlem birimi olarak ele alıyor ve pipeline durumunu değiştirilemez nesnelerle yönetiyor
  • OBS’nin mevcut render motoru Direct3D yaklaşımına göre tasarlandığından,
    Metal desteği için backend düzeyinde bir uyumluluk katmanı uygulanıyor

OBS render motorunun yapısı ve Metal uyumluluk sorunları

  • OBS, platforma göre Direct3D (Windows) ve OpenGL (Linux/macOS) backend’lerini kullanıyor
    • Render motorunun çekirdeği API’den bağımsız olsa da, bazı Direct3D merkezli varsayımlar bulunuyor
  • Başlıca kısıtlar
    • Shader’lar HLSL tabanlı yazıldığı için çalıştırma sırasında dönüştürülmeleri gerekiyor
    • Global değişken kullanımı, sıralı yürütme varsayımı ve Direct3D tarzı doku işleme gibi unsurlar mevcut
    • Önizleme render’ı, DXGI’nin discard model yapısına dayanıyor

Shader dönüştürme (Transpiling Shaders)

  • OBS’nin efekt dosyaları HLSL ile yazılıyor ve her API’ye uygun biçimde dönüştürülüyor
    • Metal desteği için HLSL → MSL dönüştürücüsü eklendi
  • Başlıca farklar
    • MSL’de girdi ve çıktı struct’ları ayrılmalı ve global değişken desteği yok
    • Tüm uniform veriler GPU buffer’ları üzerinden iletilmeli ve fonksiyon argümanları olarak açıkça verilmesi gerekiyor
    • Fonksiyon çağrılarında tip eşleşmesi ve imza doğrulaması daha katı
  • Dönüştürücü, çalışma zamanında shader kodunu kısmen yeniden yazarak MSL kurallarına uyduruyor
    • Örneğin HLSL’deki uniform değişkenleri MSL’de constant buffer yapısına dönüştürüyor
    • int3uint2 + uint gibi tip dönüşüm mantıkları otomatik olarak ekleniyor

Direct3D davranışının simüle edilmesi

  • OBS render motoru, Direct3D’nin map/unmap davranışını temel alacak şekilde tasarlanmış durumda
    • Metal bu tür otomatik senkronizasyonu sağlamadığından, bu işlev backend içinde doğrudan uygulanıyor
  • Metal backend’inin işleyişi
    • Yazma sırasında GPU buffer’ı oluşturuluyor ve CPU belleğiyle doğrudan paylaşım sağlanıyor
    • unmap sırasında GPU blit komutu zamanlanarak veriler dokuya kopyalanıyor
    • Okuma sırasında GPU buffer’ı paylaşılıyor, ancak açık senkronizasyon ile çakışmalar önleniyor
  • Sonuç olarak Direct3D’nin kaynak izleme ve senkronizasyon işlevleri, Metal içinde yeniden üretiliyor

Önizleme render sorunu ve geçici çözüm

  • macOS’taki Metal Layer, DXGI’den farklı olarak uygulamanın istediği anda kare göstermesine izin vermiyor
    • Sistem, ProMotion ve düşük güç modu durumuna göre kare hızını kontrol ediyor
  • OBS’nin kendi render döngüsü ile macOS’un görüntüleme döngüsü uyuşmadığı için önizleme gecikmesi oluşuyor
  • Geçici çözüm
    • OBS önce sanal bir dokuya render ediyor, ardından ayrı bir iş parçacığı bunu ekrandaki Surface’a kopyalıyor
    • Bu süreçte GPU senkronizasyonu gerekiyor ve kare uyumsuzluğu olasılığı bulunuyor
  • macOS 14 sonrasında pencere bazlı bağımsız zamanlayıcılar nedeniyle ek zorluklar bekleniyor

Modern grafik API’lerinin gizli maliyeti

  • Metal backend’inin geliştirilmesi aylar süren araştırma ve tekrar eden tasarım süreçlerinden geçti
    • Bu durum, OpenGL→Vulkan ve D3D11→D3D12 geçişlerinde neden performans düşüşü yaşanabildiğini somut olarak gösteriyor
  • Modern API’lerde sürücünün yaptığı işleri uygulamanın doğrudan üstlenmesi gerekiyor
    • Bunun için GPU’nun çalışma yapısı ve komut bağımlılıkları hakkında derin bir anlayış gerekiyor
  • Metal backend’i bazı ek yükleri yeniden getirse de şu avantajları sunuyor
    • OpenGL ile aynı düzeyde veya daha iyi performans
    • Shader ve doku hata ayıklama gibi güçlü analiz özellikleri
    • Swift tabanlı güvenli kod yapısı
    • EDR önizleme desteği ile yüksek kaliteli video işleme
  • Xcode’un entegre analiz özellikleri sayesinde macOS için OBS bakım verimliliği artıyor ve gelecekte Metal’in varsayılan render motoru hâline gelmesi için geliştirici geri bildirimi isteniyor

1 yorum

 
GN⁺ 2025-12-19
Hacker News görüşleri
  • Gerçekten çok iyi bir yazıydı. shader işleme biçimi açıklaması çok etkileyiciydi
    Üçüncü taraf eklenti shader'larını birden fazla backend'de çalıştırmak için gerçekten böyle bir süreçten geçmek gerekip gerekmediğini, yoksa bunun geriye dönük uyumluluğu koruma yüzünden mi böyle olduğunu merak ettim
    Dış geliştiricilere “her birini tüm shader dillerinde ayrı ayrı yazın” demek çekirdek ekip açısından kolay olabilir ama pratikte pek arzu edilen bir şey değil

    • Oyun motorlarının çoğu zaten 10 yıldan uzun süredir shader transpiling yapıyor
      Herkes bunun verimsiz olduğunu düşünüyor ama pratikte alternatif yok
  • Yazının başlığı asıl noktayı gizliyor
    OBS Studio yeni bir renderer kullanıma alıyor: Metal'i benimseme süreci” gibi değiştirilmeli

    • Ama bu yalnızca Mac'e özel bir konu, bu yüzden Mac kullanmayanlar Metal'in ne olduğunu bilmiyor olabilir
  • Bu, açıkça Apple'ın Vulkan yerine kendi ekosistemini korumak için bir API yaratmasının bedelini gösteriyor
    OBS Studio, Mart 2020'de 25.0 sürümünde Vulkan desteği ekledi. Aradan şimdiden 5 buçuk yıl geçti

    • Vulkan, Switch hariç konsollarda desteklenmiyor. Windows'ta da resmî olarak desteklenmiyor; GPU üreticilerinin kendi sürücü yığınları üzerinden çalışıyor
      Gömülü ortamlarda ise hâlâ OpenGL ES ağırlıklı bir yapı var
    • Metal, Vulkan'dan daha önce çıktı ve bazıları Metal'in kullanımının daha kolay olduğunu düşünüyor
    • Ama böyle izole ekosistem stratejileri Microsoft'un DirectX'inde ve çoğu konsol üreticisinde de görüldü
  • Bu konunun uzmanı değilim. Okuduklarımın belki %5'ini anlayabildim ama böyle teknik ayrıntılar içeren yazıların daha fazla olmasını isterim
    Sadece duyuru metinleri pazarlama gibi hissettiriyor

  • Benim için yaklaşan VST3 desteği daha heyecan verici ama bu haber de sevindirici
    Rockchip SoC üzerinde donanım kodlamayı ayarlamaktan çok daha kolay

  • Metal'in, Direct3D'nin nesne yönelimli yaklaşımını bir adım ileri taşıyıp bunu Objective-C ve Swift'in “lafı bol” API tasarımıyla birleştirdiği açıklaması ilginçti
    İşletim sistemi düzeyindeki bir 3D grafik API'sinin bu kadar dinamik dil temelli tasarlanabilmesi şaşırtıcı
    Bunun objc_msgSend() optimizasyonu sayesinde olduğunu düşünüyorum

    • Modern grafik API'leri OpenGL'den çok daha az çağrı kullanıyor
      Vulkan/Metal/DirectX 12, tek tek çağrılar yerine birden fazla komutu komut tamponlarına koyup iletiyor
    • Aslında bu yaklaşım uzun zamandır mümkündü
      2000'lerin başında Direct3D'yi C# ile kullanmayı anlatan bir kitap vardı; bu, GC dillerinde de yüksek performanslı grafiklerin mümkün olduğuna dair algıyı değiştirmişti
      Esas nokta, önceden ayrılmış tamponlara başvuran batch işleme yapısıyla çalışma zamanı ek yükünü en aza indirmek
    • İlgili referans: LLVM incelemesi D69991
    • Ama gerçekte işletim sisteminin alt katmanlarında Objective-C neredeyse hiç kullanılmıyor
      Cocoa'dan sonra çoğu şey kısıtlı bir C++ alt kümesiyle yazıldı (ör. IOKit)
    • Metal bir Obj-C API'si sunuyor ama uygulamanın kendisi C++ ile yazılmış
  • Umarım modern GPU API'leri daha basit bir şeye giden geçiş aşamasıdır
    OpenGL ile aşk-nefret ilişkisi yaşadım ama yeni API'leri kullandıktan sonra OpenGL'in sadeliğini özledim

  • Metal'in eski Intel Mac'lerde de performansı artırıp artırmayacağını, yoksa bunun yalnızca M serisine özel bir optimizasyon mu olduğunu merak ediyorum

    • Yazıya göre “Metal backend yalnızca Apple Silicon'da destekleniyor ve GPU ile CPU belleği paylaşıyor” deniyor
      Ama Metal 3 hâlâ birçok Intel Mac'te destekleniyor; neden kısıtlandığı merak konusu
  • Bir Mac Mini ile streaming ekipmanı kurmayı düşünüyordum
    Bu performans artışıyla gerçekten yeterli olup olmayacağını merak ediyorum

    • Ne tür içerik yayınladığınıza bağlı
      2D arcade oyunları ya da geliştirme ekranı gibi şeylerde sorun olmaz
      Yeni AAA oyunlarda ise PC görüntüsünü bir capture card ile almak daha iyi olur
      2017 civarında macOS ile yayın yapmak zordu ama bugün M serisi fazlasıyla yeterli
    • Kamera görüntüsü yayını yapacaksanız M serisi Mac Mini zaten yeterince hızlı
      Bu iyileştirmeyle birlikte verimliliğin daha da artması beklenebilir
  • Apple'ın, Metal'in harici başarı örneklerini artırmak için daha fazla kaynak ayırmasını isterdim
    Metal, Apple'ın iç kullanımı dışında henüz büyük bir başarı yakalayamadı

    • Örneğin Blender iyi bir örnek