1 poin oleh GN⁺ 2025-12-19 | 1 komentar | Bagikan ke WhatsApp
  • Mulai OBS Studio 32.0.0 untuk macOS, backend renderer berbasis Apple Metal ditambahkan secara eksperimental, dengan tujuan meningkatkan performa dan efisiensi dibanding OpenGL yang ada saat ini
  • Metal adalah API yang dirancang untuk overhead rendah dan mencerminkan arsitektur GPU modern, dan untuk mendukungnya OBS harus mengubah secara mendasar cara berinteraksi dengan GPU
  • Karena renderer OBS yang ada sebelumnya dibangun dengan struktur berpusat pada Direct3D, backend Metal memerlukan pekerjaan kompatibilitas skala besar pada hal-hal seperti konversi shader dan manajemen resource
  • Secara khusus, implementasinya mencakup hal kompleks seperti mengonversi shader HLSL ke MSL secara real-time dan mensimulasikan perilaku map/unmap milik Direct3D di dalam Metal
  • Backend Metal masih berada pada tahap "eksperimental", tetapi menjadi titik balik penting untuk peningkatan lingkungan pengembangan macOS melalui performa yang lebih cepat daripada OpenGL, struktur kode aman berbasis Swift, dan dukungan pratinjau EDR

Gambaran Umum Penerapan Renderer Metal

  • Sejak OBS Studio 32.0.0, renderer berbasis API grafis Metal tersedia secara eksperimental di macOS
    • Ditujukan sebagai alternatif backend OpenGL yang ada, dengan target peningkatan performa dan efisiensi
    • Metal adalah API modern yang secara mendasar mengubah cara interaksi dengan GPU, dan OBS menyesuaikan struktur internalnya agar selaras dengan hal itu
  • Backend Metal ditandai sebagai "Experimental" dan masih memiliki beberapa masalah serta keterbatasan yang sudah diketahui
    • Renderer OpenGL tetap menjadi default, dan pengguna dapat mencoba versi Metal secara langsung
    • Umpan balik serta partisipasi Pull Request dari developer yang berpengalaman dengan Metal sangat dianjurkan

Latar Belakang Metal dan Filosofi Desainnya

  • Apple pertama kali memperkenalkan Metal untuk iPhone pada 2014, lalu memperluasnya ke Mac pada 2015
    • Saat itu, Metal merupakan salah satu API grafis generasi berikutnya pertama yang mendukung GPU Intel, AMD, dan NVIDIA sekaligus
  • Metal menggabungkan konsep dari Mantle milik AMD serta OpenGL dan Direct3D yang sudah ada, tetapi dirancang ulang dengan membuang elemen legacy
    • Dengan API berbasis Objective-C dan Swift, strukturnya terasa familier bagi developer iOS dan macOS
    • Mendukung integrasi debugging shader dan analisis GPU langsung di dalam Xcode
    Iklan

Perbedaan Desain API dan Adaptasi Renderer OBS

  • OpenGL dan Direct3D sebelumnya menangani manajemen resource dan sinkronisasi secara otomatis di level API,
    sedangkan API modern seperti Metal mengharuskan developer mengelolanya sendiri
  • API baru memperlakukan GPU sebagai perangkat pemrosesan berbasis command queue paralel, dengan state pipeline dikelola sebagai objek immutable
  • Renderer lama OBS dirancang mengikuti pendekatan Direct3D,
    sehingga untuk mendukung Metal diperlukan lapisan kompatibilitas di level backend

Struktur Renderer OBS dan Masalah Kompatibilitas Metal

  • OBS menggunakan backend Direct3D (Windows) dan OpenGL (Linux/macOS) sesuai platform
    • Inti renderer bersifat independen terhadap API, tetapi masih ada beberapa asumsi yang berpusat pada Direct3D
  • Keterbatasan utama
    • Shader ditulis berbasis HLSL, sehingga perlu dikonversi saat dijalankan
    • Ada penggunaan variabel global, asumsi eksekusi berurutan, serta penanganan tekstur ala Direct3D
    • Rendering pratinjau bergantung pada model discard milik DXGI

Konversi Shader (Transpiling Shaders)

  • File efek OBS ditulis dalam HLSL dan dikonversi agar sesuai dengan masing-masing API
    • Untuk dukungan Metal, ditambahkan konverter HLSL → MSL
  • Perbedaan utama
    • MSL mengharuskan struct input dan output dipisahkan, serta tidak mendukung variabel global
    • Semua data uniform harus dikirim melalui buffer GPU dan diteruskan secara eksplisit sebagai argumen fungsi
    • Saat pemanggilan fungsi, kecocokan tipe dan verifikasi signature diterapkan secara ketat
    Iklan
  • Konverter tersebut menulis ulang sebagian kode shader saat runtime agar sesuai dengan aturan MSL
    • Contohnya, variabel uniform pada HLSL diubah menjadi constant buffer pada MSL
    • Logika konversi tipe seperti int3uint2 + uint juga disisipkan secara otomatis

Simulasi Perilaku Direct3D

  • Renderer OBS dirancang dengan asumsi perilaku map/unmap milik Direct3D
    • Karena Metal tidak menyediakan sinkronisasi otomatis seperti itu, implementasinya dilakukan langsung di backend
  • Cara kerja backend Metal
    • Saat menulis, dibuat buffer GPU yang berbagi langsung dengan memori CPU
    • Saat unmap, perintah blit GPU dijadwalkan untuk menyalin ke tekstur
    • Saat membaca, buffer GPU tetap dibagikan, tetapi sinkronisasi eksplisit digunakan untuk mencegah benturan
  • Hasilnya, pelacakan resource dan sinkronisasi ala Direct3D direproduksi di dalam Metal

Masalah Rendering Pratinjau dan Solusi Sementara

  • Metal Layer di macOS, tidak seperti DXGI, tidak memungkinkan aplikasi menampilkan frame secara sembarang
    • Sistem mengontrol frame rate berdasarkan ProMotion dan mode hemat daya
    Iklan
  • Ketidakselarasan antara render loop milik OBS dan siklus tampilan macOS menyebabkan latensi pratinjau
  • Solusi sementara
    • OBS terlebih dahulu merender ke tekstur virtual, lalu thread terpisah menyalinnya ke Surface layar
    • Proses ini memerlukan sinkronisasi GPU, dan tetap ada kemungkinan ketidakcocokan frame
  • Setelah macOS 14, timer independen per jendela diperkirakan akan menambah tantangan baru

Biaya Tersembunyi dari API Grafis Modern

  • Pengembangan backend Metal memerlukan riset selama berbulan-bulan dan desain berulang
    • Ini menunjukkan secara nyata mengapa perpindahan OpenGL→Vulkan atau D3D11→D3D12 bisa menimbulkan penurunan performa
  • Pada API modern, pekerjaan yang dulu dilakukan driver kini harus ditangani langsung oleh aplikasi
    • Dibutuhkan pemahaman mendalam tentang cara kerja GPU dan dependensi antar perintah
  • Backend Metal memang memperkenalkan kembali sebagian overhead, tetapi tetap menawarkan manfaat berikut
    • Performa setara atau lebih baik daripada OpenGL
    • Fitur analisis yang kuat seperti debugging shader dan tekstur
    • Struktur kode aman berbasis Swift
    • Dukungan pratinjau EDR untuk pemrosesan video berkualitas tinggi
  • Melalui fitur analisis terintegrasi di Xcode, efisiensi pemeliharaan OBS di macOS meningkat, dan tim meminta umpan balik developer untuk membantu transisi Metal menjadi renderer default di masa mendatang

1 komentar

 
GN⁺ 2025-12-19
Komentar Hacker News
  • Tulisan yang sangat bagus. Penjelasan tentang cara pemrosesan shader benar-benar mengejutkan
    Saya jadi penasaran apakah memang harus melalui proses seperti itu agar shader plugin pihak ketiga bisa berjalan di berbagai backend, atau apakah itu dilakukan karena menjaga kompatibilitas ke belakang
    Dari sudut pandang tim inti, mungkin mudah untuk meminta pengembang eksternal “menulis semuanya dalam masing-masing bahasa shader”, tetapi secara realistis itu bukan pendekatan yang diinginkan

    • Sebagian besar game engine sudah melakukan transpiling shader selama lebih dari 10 tahun
      Semua orang menganggapnya tidak efisien, tetapi dalam praktiknya memang tidak ada alternatif yang nyata
  • Judul artikelnya menyembunyikan inti persoalan
    Seharusnya diubah menjadi sesuatu seperti “OBS Studio mengadopsi renderer baru: proses adopsi Metal

    • Namun ini adalah cerita khusus Mac, jadi orang yang tidak memakai Mac mungkin bahkan tidak tahu apa itu Metal
  • Ini dengan jelas menunjukkan harga yang harus dibayar karena Apple membuat API untuk melindungi ekosistemnya sendiri alih-alih memakai Vulkan
    OBS Studio menambahkan dukungan Vulkan pada Maret 2020, di versi 25.0. Sudah lewat 5 tahun setengah

    • Vulkan tidak didukung di konsol selain Switch. Di Windows pun itu bukan dukungan resmi, melainkan struktur di mana vendor GPU menambahkan stack driver mereka sendiri agar bisa berjalan
      Di lingkungan embedded pun OpenGL ES masih tetap dominan
    • Metal hadir lebih dulu daripada Vulkan, dan beberapa orang menilai Metal lebih mudah digunakan
    • Namun strategi ekosistem tertutup seperti ini juga sudah lama dilakukan oleh DirectX milik Microsoft maupun sebagian besar produsen konsol
  • Saya bukan ahli di topik ini. Saya mungkin cuma paham sekitar 5% dari yang saya baca, tetapi saya ingin lebih banyak tulisan berisi penjelasan teknis seperti ini
    Pengumuman biasa terasa seperti materi pemasaran

  • Secara pribadi saya lebih menantikan dukungan VST3 yang akan datang, tetapi kabar ini juga menyenangkan
    Jauh lebih mudah daripada menyiapkan hardware encoding di SoC Rockchip

  • Menarik melihat penjelasan bahwa Metal mengembangkan lebih lanjut pendekatan berorientasi objek dari Direct3D lalu menggabungkannya dengan desain API Objective-C dan Swift yang “banyak bicara”
    Mengejutkan bahwa API grafis 3D tingkat OS bisa dibuat dengan pendekatan berbasis bahasa dinamis seperti ini
    Saya rasa ini berkat optimasi objc_msgSend()

    • API grafis modern memakai jauh lebih sedikit pemanggilan dibanding OpenGL
      Vulkan/Metal/DirectX 12 mengirim banyak perintah sekaligus dalam command buffer, bukan lewat pemanggilan satu per satu
    • Sebenarnya pendekatan seperti ini sudah lama memungkinkan
      Pada awal 2000-an ada buku tentang penggunaan Direct3D dari C#, dan itu mengubah cara pandang bahwa grafik berperforma tinggi juga mungkin di bahasa dengan GC
      Intinya adalah meminimalkan overhead runtime lewat struktur pemrosesan batch yang mereferensikan buffer yang sudah dialokasikan sebelumnya
    • Referensi terkait: LLVM review D69991
    • Namun pada praktiknya, Objective-C hampir tidak dipakai di level bawah OS
      Sejak era Cocoa, sebagian besar ditulis dengan subset C++ yang dibatasi (misalnya IOKit)
    • Metal memang menyediakan API Obj-C, tetapi implementasinya sendiri ditulis dalam C++
  • Saya berharap API GPU modern hanyalah tahap transisi menuju sesuatu yang lebih sederhana
    OpenGL adalah hubungan cinta-benci, tetapi setelah mencoba API baru, saya malah merindukan kesederhanaan OpenGL

  • Saya penasaran apakah Metal akan meningkatkan performa juga di Mac Intel lama, atau apakah ini optimasi khusus seri M

    • Menurut tulisannya, “backend Metal hanya didukung di Apple Silicon dan GPU serta CPU berbagi memori”
      Namun Metal 3 masih didukung di beberapa Mac Intel juga, jadi aneh kenapa dibatasi seperti itu
  • Saya sempat berpikir untuk merakit perangkat streaming dengan Mac Mini
    Saya penasaran apakah peningkatan performa kali ini sudah cukup untuk itu

    • Tergantung konten streaming-nya
      Kalau hanya game arcade 2D atau layar pengembangan, seharusnya tidak masalah
      Kalau game AAA terbaru, lebih baik ambil tampilan PC lewat capture card
      Sekitar 2017, streaming di macOS memang sulit, tetapi sekarang seri M sudah cukup memadai
    • Untuk streaming video kamera, Mac Mini seri M sebenarnya sudah cukup cepat
      Dengan peningkatan kali ini, saya berharap efisiensinya akan jadi lebih baik lagi
  • Saya berharap Apple menginvestasikan lebih banyak sumber daya agar Metal punya lebih banyak kisah sukses eksternal
    Di luar internal Apple, Metal masih belum terlalu sukses besar

    • Misalnya Blender adalah contoh yang bagus untuk itu