1 Punkte von GN⁺ 2025-12-19 | Noch keine Kommentare. | Auf WhatsApp teilen
  • Ab OBS Studio 32.0.0 für macOS wurde experimentell ein Apple-Metal-basierter Renderer-Backend hinzugefügt, mit dem Ziel, Leistung und Effizienz gegenüber dem bisherigen OpenGL zu verbessern
  • Metal ist eine API, die für geringen Overhead und moderne GPU-Architekturen entwickelt wurde; um sie zu unterstützen, musste OBS die Art der GPU-Interaktion grundlegend überarbeiten
  • Da der bisherige Renderer von OBS auf eine Direct3D-zentrierte Struktur ausgerichtet war, erforderte das Metal-Backend umfangreiche Kompatibilitätsarbeiten bei Shader-Umwandlung, Ressourcenverwaltung und mehr
  • Insbesondere umfasst es eine komplexe Implementierung, die HLSL-Shader in Echtzeit in MSL umwandelt und das Verhalten von Direct3D-map/unmap innerhalb von Metal simuliert
  • Das Metal-Backend befindet sich noch im „experimentellen“ Stadium, markiert aber mit schnellerer Leistung als OpenGL, einer sicheren Swift-basierten Code-Struktur und EDR-Preview-Unterstützung einen wichtigen Wendepunkt für die macOS-Entwicklungsumgebung

Überblick über die Einführung des Metal-Renderers

  • Seit OBS Studio 32.0.0 wird unter macOS experimentell ein auf der Metal-Grafik-API basierender Renderer angeboten
    • Als Alternative zum bisherigen OpenGL-Backend soll er Leistung und Effizienz verbessern
    • Metal ist eine moderne API, die die Interaktion mit der GPU grundlegend verändert; OBS hat seine interne Struktur entsprechend angepasst
  • Das Metal-Backend ist als „Experimental“ gekennzeichnet und weist einige bekannte Probleme und Einschränkungen auf
    • Der OpenGL-Renderer bleibt weiterhin die Voreinstellung, Nutzer können die Metal-Version aber direkt ausprobieren
    • Entwickler mit Metal-Erfahrung werden ausdrücklich um Feedback und Pull Requests gebeten

Hintergrund und Designphilosophie von Metal

  • Apple stellte Metal 2014 zunächst für das iPhone vor und erweiterte es 2015 auf den Mac
    • Damals war Metal eine der ersten Grafikschnittstellen der nächsten Generation, die Intel-, AMD- und NVIDIA-GPUs unterstützte
  • Metal kombiniert Konzepte aus AMDs Mantle sowie bestehendem OpenGL und Direct3D, wurde aber ohne Legacy-Elemente neu entworfen
    • Als Objective-C- und Swift-basierte API bietet es iOS- und macOS-Entwicklern eine vertraute Struktur
    • In Xcode werden Shader-Debugging und GPU-Analysefunktionen integriert unterstützt

Unterschiede im API-Design und die Anpassung des OBS-Renderers

  • Bei herkömmlichem OpenGL und Direct3D wurden Ressourcenverwaltung und Synchronisierung automatisch von der API erledigt,
    moderne APIs wie Metal verlangen dies jedoch direkt vom Entwickler
  • Neue APIs behandeln die GPU als Verarbeitungseinheit auf Basis paralleler Command Queues und verwalten Pipeline-Zustände als unveränderliche Objekte
  • Der bisherige Renderer von OBS war auf die Arbeitsweise von Direct3D ausgelegt,
    daher wurde für die Metal-Unterstützung eine Kompatibilitätsschicht auf Backend-Ebene implementiert

Struktur des OBS-Renderers und Kompatibilitätsprobleme mit Metal

  • OBS verwendet je nach Plattform die Backends Direct3D (Windows) und OpenGL (Linux/macOS)
    • Der Renderer-Kern ist zwar API-unabhängig, enthält aber einige Direct3D-zentrierte Annahmen
  • Wichtige Einschränkungen
    • Shader sind auf HLSL-Basis geschrieben und müssen zur Laufzeit umgewandelt werden
    • Verwendung globaler Variablen, Annahmen über sequentielle Ausführung und Direct3D-artige Texturverarbeitung
    • Das Preview-Rendering hängt vom „discard model“ von DXGI ab

Shader-Umwandlung (Transpiling Shaders)

  • Die Effektdateien von OBS sind in HLSL geschrieben und werden für die jeweilige API konvertiert
    • Für die Metal-Unterstützung wurde ein HLSL→MSL-Konverter hinzugefügt
  • Wichtige Unterschiede
    • MSL verlangt getrennte Ein-/Ausgabe-Structs und unterstützt keine globalen Variablen
    • Alle Uniform-Daten werden über GPU-Buffer übergeben und müssen explizit als Funktionsargumente übergeben werden
    • Bei Funktionsaufrufen werden Typübereinstimmung und Signaturprüfung strikt erzwungen
  • Der Konverter schreibt Shader-Code zur Laufzeit teilweise um, damit er den MSL-Regeln entspricht
    • Beispielsweise werden HLSL-uniform-Variablen in MSL-constant buffer umgewandelt
    • Auch Typumwandlungslogik wie int3uint2 + uint wird automatisch eingefügt

Simulation des Direct3D-Verhaltens

  • Der OBS-Renderer ist unter der Annahme des Direct3D-map/unmap-Verhaltens entworfen
    • Da Metal diese automatische Synchronisierung nicht bereitstellt, wird sie im Backend direkt implementiert
  • Verarbeitungsweise des Metal-Backends
    • Beim Schreiben wird ein GPU-Buffer erzeugt und direkt mit dem CPU-Speicher geteilt
    • Bei unmap wird ein GPU-Blit-Befehl eingeplant, um in die Textur zu kopieren
    • Beim Lesen wird der GPU-Buffer ebenfalls geteilt, Kollisionen werden jedoch durch explizite Synchronisierung vermieden
  • Damit werden die Ressourcenverfolgung und Synchronisierungsfunktionen von Direct3D innerhalb von Metal nachgebildet

Probleme beim Preview-Rendering und temporäre Lösung

  • Anders als DXGI kann die Metal Layer unter macOS nicht beliebig Frames durch die App anzeigen lassen
    • Das System steuert die Framerate abhängig von ProMotion und Stromsparmodus
  • Da die eigene Render-Schleife von OBS nicht mit dem Anzeigezyklus von macOS übereinstimmt, kommt es zu Preview-Verzögerungen
  • Temporäre Lösung
    • OBS rendert zunächst in eine virtuelle Textur, die anschließend von einem separaten Thread auf die Screen Surface kopiert wird
    • Dabei ist GPU-Synchronisierung erforderlich, und es kann zu Frame-Abweichungen kommen
  • Seit macOS 14 werden durch fensterweise unabhängige Timer zusätzliche Herausforderungen erwartet

Die versteckten Kosten moderner Grafik-APIs

  • Die Entwicklung des Metal-Backends erforderte mehrere Monate Forschung und iteratives Design
    • Das bestätigt, warum es bei Übergängen wie OpenGL→Vulkan oder D3D11→D3D12 zu Leistungseinbußen kommen kann
  • Bei modernen APIs muss die Anwendung Aufgaben selbst übernehmen, die früher der Treiber erledigte
    • Dafür ist ein tiefes Verständnis der GPU-Arbeitsweise und der Befehlsabhängigkeiten nötig
  • Das Metal-Backend führt zwar teilweise wieder Overhead ein, bietet aber folgende Vorteile
    • Leistung auf dem Niveau von OpenGL oder besser
    • Leistungsstarke Analysefunktionen wie Shader- und Textur-Debugging
    • Sichere Swift-basierte Code-Struktur
    • EDR-Preview-Unterstützung für hochwertige Videoverarbeitung
  • Durch die in Xcode integrierten Analysefunktionen verbessert sich die Effizienz bei der Wartung von OBS unter macOS,
    zugleich wird Entwickler-Feedback für einen künftigen Wechsel von Metal zum Standard-Renderer erbeten

Noch keine Kommentare.

Noch keine Kommentare.