Metal — apa itu, API grafis dan shader

Penulis: IT Sectr Diterbitkan: 2026-05-03 Waktu membaca: 10 mnt

Metal adalah API grafis dan komputasi tingkat rendah dari Apple yang menyediakan akses langsung ke GPU di iOS, macOS, dan tvOS. Ini menggantikan OpenGL dan OpenCL, memberikan overhead CPU minimal dan kinerja yang dapat diprediksi. Menurut data Apple WWDC (2025), Metal digunakan di 98% aplikasi dengan rendering GPU di ekosistem Apple.

Poin Penting

  • Metal — API GPU tingkat rendah Apple dengan dukungan grafis dan komputasi
  • MTLDevice — abstraksi GPU yang melaluinya semua sumber daya Metal dibuat
  • Buffer perintah MTLCommandBuffer menyediakan pencatatan perintah multi-thread
  • Shader Metal Shading Language dikompilasi ke kode GPU berbasis C++14
  • Metal Performance Shaders menyediakan fungsi GPU yang dioptimalkan untuk ML dan filtering

Apa itu Metal?

Metal adalah API tingkat rendah untuk bekerja dengan prosesor grafis (GPU), diperkenalkan oleh Apple pada tahun 2014 bersama iOS 8 dan OS X Yosemite. Metal dibuat sebagai pengganti OpenGL dan OpenCL dengan tujuan mengurangi overhead CPU dan menyediakan akses yang lebih langsung ke perangkat keras GPU di perangkat Apple.

Tidak seperti OpenGL, di mana driver melakukan banyak pemeriksaan dan transformasi pada CPU, Metal menggunakan model manajemen sumber daya eksplisit. Pengembang mengontrol alokasi memori, sinkronisasi, dan pengiriman perintah GPU, yang memberikan peningkatan kinerja hingga 50% dibandingkan OpenGL ES pada perangkat keras yang sama.

Metal mendukung semua chip Apple, mulai dari A7 (2013) hingga M4 Ultra (2025). API terus berkembang: Metal 3 (2022) menambahkan dukungan untuk mesh-shader dan ray tracing, Metal 3.1 (2023) — berbagi sumber daya cepat antara CPU dan GPU, dan Metal 4 (2025) — percepatan perangkat keras jaringan saraf pada GPU dengan dukungan FP8 dan INT4.

Sejarah Metal

Versi pertama Metal (2014) menyediakan API dasar untuk rendering grafis di iOS. Metal 2 (2017) menambahkan shader komputasi dan Metal Performance Shaders. Metal 3 (2022) memperkenalkan MetalFX Upscaling — teknologi upscaling milik Apple untuk game, pesaing NVIDIA DLSS dan AMD FSR. MetalFX memberikan peningkatan kinerja hingga 2x pada Mac dengan M2.

Metal 4 (2025) berfokus pada pembelajaran mesin dan ray tracing. Menurut data Apple (2025), Metal 4 pada M4 Ultra mencapai hingga 80 TFLOPS dalam tugas komputasi pada FP16 dan mendukung decoding perangkat keras AV1. Metal sekarang juga didukung di Apple Vision Pro melalui layanan compositor untuk rendering konten imersif.

Arsitektur Metal: perangkat dan sumber daya

Arsitektur Metal dibangun di sekitar konsep manajemen eksplisit: pengembang membuat objek MTLDevice (perangkat), MTLBuffer (buffer data), MTLTexture (tekstur), dan MTLCommandQueue (antrean perintah). Tidak seperti OpenGL, di mana status disimpan dalam konteks, Metal menggunakan objek status (state objects) yang dikompilasi sebelumnya.

MTLDevice — titik masuk API

MTLDevice mewakili GPU fisik atau virtual. Semua sumber daya Metal dibuat melalui objek ini: buffer, tekstur, pustaka shader, pipeline. Dalam sistem dengan banyak GPU (Mac Pro), perangkat tertentu dapat dipilih. Metode supportsFamily: memeriksa dukungan fitur: ray tracing, mesh-shader, MetalFX.

swift
import Metal
 
// Mendapatkan perangkat GPU
guard let device = MTLCreateSystemDefaultDevice() else {
    fatalError("Metal tidak didukung")
}
 
// Memeriksa kemampuan
let supportsRayTracing = device.supportsFamily(.metal3)
let gpuName = device.name // “Apple M4 Pro”
let maxBufferSize = device.maxBufferLength

Properti maxBufferLength menentukan ukuran buffer maksimum yang didukung perangkat. Pada Apple Silicon dengan Unified Memory, batasnya hingga 128 GB (pada M4 Ultra). Ini memungkinkan bekerja dengan kumpulan data besar untuk ML dan perhitungan ilmiah tanpa segmentasi buffer. Perangkat juga mengelola kumpulan memori melalui MTLHeap.

MTLBuffer dan MTLTexture — data untuk GPU

MTLBuffer — area memori berkelanjutan yang dapat diakses GPU. Buffer digunakan untuk data vertex, matriks, variabel uniform. Mode: shared (akses CPU + GPU di memori terpadu), private (hanya GPU, lebih cepat), managed (untuk GPU diskrit, dengan sinkronisasi). Pada Apple Silicon, shared direkomendasikan untuk kesederhanaan.

MTLTexture — array piksel multidimensi untuk tekstur dan target rendering. Tekstur 1D, 2D, 3D, cube, dan array didukung. Format: RGBA8Unorm, BGRA8Unorm, RGBA16Float, R32Float, ASTC (kompresi), kedalaman (depth32Float), dan stensil. Bendera Texture Usage menunjukkan bagaimana tekstur akan digunakan: rendering, pembacaan shader, penyalinan.

MTLLibrary dan kompilasi shader

MTLLibrary — kumpulan fungsi GPU yang dikompilasi (shader). Pustaka dapat dibuat dari kode sumber MSL (Metal Shading Language) saat runtime atau dikompilasi sebelumnya dan disertakan dalam bundel (.metallib). Kompilasi awal direkomendasikan untuk menghilangkan penundaan pada fase inisialisasi.

MTLFunction mewakili fungsi shader tertentu. Shader vertex, fragment, komputasi (kernel), dan mesh-shader dibuat melalui pustaka. Fungsi di-cache di GPU dan digunakan kembali antar bingkai. Argumen shader ditentukan melalui buffer dan slot tekstur dengan pengikatan berdasarkan indeks.

Rendering melalui Metal: buffer perintah

Rendering di Metal diatur melalui antrean perintah asinkron. Pengembang membuat MTLCommandBuffer, mengkodekan perintah rendering atau komputasi ke dalamnya, dan mengirimkannya ke MTLCommandQueue. GPU mengeksekusi perintah secara berurutan, sementara CPU dapat melanjutkan pekerjaannya. Sinkronisasi terjadi melalui semafor atau completionHandler.

MTLCommandQueue dan MTLCommandBuffer

MTLCommandQueue — antrean perintah yang dibuat dari MTLDevice. Aplikasi dapat memiliki beberapa antrean untuk grafis, komputasi, dan penyalinan. Setiap antrean menjamin eksekusi perintah secara berurutan. MTLCommandBuffer — wadah untuk satu porsi pekerjaan GPU. Setelah dikodekan, ia dikomit dan dieksekusi di GPU.

swift
// Siklus rendering utama
let commandQueue = device.makeCommandQueue()!
 
guard let commandBuffer = commandQueue.makeCommandBuffer()
else { return }
 
guard let descriptor = currentDrawable.texture.makeRenderPassDescriptor(
    attachment: 0
) else { return }
 
let encoder = commandBuffer.makeRenderCommandEncoder(
    descriptor: descriptor
)!
encoder.setRenderPipelineState(pipelineState)
encoder.drawPrimitives(type: .triangle,
    vertexStart: 0, vertexCount: 36)
encoder.endEncoding()
 
commandBuffer.present(currentDrawable)
commandBuffer.commit()

Metode drawPrimitives melakukan penggambaran geometri. Parameter vertexCount menunjukkan jumlah vertex. Untuk setiap bingkai, command buffer baru dibuat. Present menyinkronkan penggambaran dengan VSync layar. Metal secara otomatis mengelola sinkronisasi dengan layar melalui CAMetalLayer.

Status Pipeline Render

MTLRenderPipelineState — status pipeline rendering yang dikompilasi, termasuk shader vertex dan fragment, konfigurasi depth-stencil, blending, dan format piksel keluaran. Membuat pipeline state adalah operasi mahal, sehingga objek di-cache dan digunakan kembali. Untuk kombinasi shader yang berbeda, pipeline states yang berbeda dibuat.

Metal 3.1 memperkenalkan rendering cepat melalui Immutable Samplers, yang di-cache di GPU untuk mempercepat pengambilan sampel tekstur. Metal mendukung hingga 31 tekstur per slot shader di lingkungan Apple Silicon. Pada perangkat lama dengan A13 ke bawah, batasnya diturunkan menjadi 16 slot. Disarankan untuk menggabungkan tekstur dalam Texture Atlases untuk mengurangi jumlah sampel.

Metal Shading Language dan shader

Metal Shading Language (MSL) — bahasa pemrograman shader berbasis C++14 dengan ekstensi untuk komputasi GPU. MSL mendukung templat (templates), kelebihan muatan fungsi, ruang nama, dan aritmatika alamat. Shader dikompilasi ke kode biner GPU melalui backend LLVM Apple.

Shader Vertex dan Fragment

Vertex shader memproses setiap vertex: mentransformasi koordinat dari ruang dunia ke ruang layar, menghitung normal, dan meneruskan data ke fragment shader. Fragment shader menghitung warna setiap piksel: menerapkan tekstur, pencahayaan, dan efek pasca-pemrosesan.

cpp
// Shader vertex Metal
#include <metal_stdlib>
using namespace metal;
 
struct VertexIn {
    float3 position [[attribute(0)]];
    float3 normal   [[attribute(1)]];
};
 
struct VertexOut {
    float4 position [[position]];
    float3 worldNormal;
};
 
vertex VertexOut vertexMain(
    VertexIn in [[stage_in]],
    constant float4x4 &mvp [[buffer(0)]]
) {
    VertexOut out;
    out.position = mvp * float4(in.position, 1.0);
    out.worldNormal = in.normal;
    return out;
}

Atribut [[attribute(N)]] sesuai dengan format vertex yang ditentukan dalam MTLVertexDescriptor. Buffer [buffer(0)] meneruskan matriks MVP sebagai variabel uniform. Posisi vertex harus ditandai dengan [[position]] untuk diteruskan ke rasterizer. Semua tipe vektor MSL — float2, float3, float4 — dipetakan ke register perangkat keras GPU.

Shader Komputasi (Compute Kernels)

Compute shader (kernel) — fungsi GPU yang dijalankan di luar pipeline grafis. Fungsi kernel ditandai dengan kualifikasi kernel dan dijalankan dalam utas (threads) yang diatur dalam grup (threadgroups). Shader komputasi digunakan untuk pemrosesan gambar, simulasi fisika, ML, dan pasca-pemrosesan.

cpp
// Compute kernel untuk pengaburan gambar
kernel void blurKernel(
    texture2d<half> input  [[texture(0)]],
    texture2d<half> output [[texture(1)]],
    constant float &radius  [[buffer(0)]],
    uint2 gid [[thread_position_in_grid]]
) {
    if (gid.x >= input.get_width() ||
        gid.y >= input.get_height()) { return; }
    half4 color = input.read(gid);
    output.write(color, gid);
}

Parameter gid [[thread_position_in_grid]] berisi indeks utas unik. Texture2D berspesialisasi berdasarkan tipe piksel: half (FP16), float (FP32). Compute kernels dapat dijalankan dengan ukuran grid lebih dari 1 miliar utas pada M4 Ultra. Ukuran threadgroup maksimum adalah 1024 utas pada GPU Apple Silicon.

Kinerja dan Metal Performance Shaders

Metal Performance Shaders (MPS) — pustaka fungsi GPU yang dioptimalkan dari Apple. MPS mencakup jaringan saraf konvolusional (MPSNNConvolution), perkalian matriks (MPSMatrixMultiplication), pengurutan (MPSParallelSort), dan pemrosesan gambar (MPSImageGaussianBlur). Semua fungsi dioptimalkan untuk GPU Apple tertentu.

MetalFX Upscaling

MetalFX — teknologi upscaling dan anti-aliasing, pesaing NVIDIA DLSS dan AMD FSR. MetalFX menawarkan dua mode: Spatial (upscaling spasial melalui algoritma FSR 2) dan Temporal (upscaling temporal dengan vektor gerak). Temporal MetalFX memberikan kualitas mendekati 4K asli dari rendering pada 1440p.

Menurut data Apple (2025), MetalFX Temporal pada M4 Max memberikan peningkatan kinerja hingga 3x di game sambil mempertahankan kualitas yang secara visual tidak dapat dibedakan dari resolusi asli. MetalFX bekerja pada GPU apa pun yang mendukung Metal 3, tanpa inti tensor khusus. Integrasi MetalFX ke dalam proyek membutuhkan sekitar 50 baris kode.

Ray Tracing di Metal

Ray Tracing di Metal 3 didukung pada chip M3, M4, dan A17 Pro dengan blok akselerasi perangkat keras (Ray Tracing Accelerators). Metal menyediakan MTLAccelerationStructure untuk membangun BVH dan MTLIntersectionFunction untuk persimpangan sinar di shader. Adegan raksasa dengan jutaan segitiga dikompilasi ke BVH dalam milidetik.

Menurut data Apple (2025), ray tracing perangkat keras pada M4 Ultra melakukan hingga 40 miliar persimpangan sinar per detik (Giga rays/s). Ini 4 kali lebih cepat dari ray tracing perangkat lunak pada M1 Ultra. Metal RT mendukung intersection queries, geometri dinamis, dan Motion Blur untuk animasi realistis. Refleksi dan bayangan dengan ray tracing bekerja secara real-time pada 60 FPS.

Unified Memory dan Zero-Copy

Unified Memory — arsitektur Apple Silicon di mana CPU dan GPU menggunakan memori fisik yang sama. Metal pada Apple Silicon tidak memerlukan penyalinan data antara CPU dan GPU: MTLBuffer dalam mode shared dapat diakses oleh kedua prosesor tanpa penyalinan. Ini menghilangkan hambatan utama GPU tradisional (transfer PCIe).

Zero-Copy di Metal memungkinkan CPU menulis data ke buffer, dan GPU membacanya tanpa penundaan. Menurut data Apple (2025), ini memberikan peningkatan kinerja 30–50% dibandingkan GPU diskrit pada game dan tugas ML. Untuk GPU diskrit (Mac Pro dengan Radeon), Metal mendukung mode managed dengan sinkronisasi otomatis melalui memory barriers.

Pertanyaan yang Sering Diajukan

Apa itu Metal dan untuk apa?

Metal — API tingkat rendah Apple untuk bekerja dengan GPU, memberikan overhead CPU minimal. Diperlukan untuk grafis 3D, perhitungan ML, pemrosesan gambar, dan simulasi di iOS, macOS, dan tvOS. Menggantikan OpenGL dan OpenCL.

Apa perbedaan Metal dengan Vulkan?

Metal hanya bekerja di perangkat Apple, terintegrasi dengan Unified Memory dan Metal Performance Shaders. Vulkan adalah API lintas platform untuk Windows, Android, dan Linux. Dari segi kinerja, kedua API sebanding, tetapi Metal memiliki overhead lebih rendah pada Apple Silicon.

Apakah Metal mendukung ray tracing?

Ya, sejak Metal 3 pada chip M3, M4, dan A17 Pro tersedia ray tracing perangkat keras. Metal menyediakan MTLAccelerationStructure dan dukungan intersection queries di shader. Kinerja — hingga 40 Giga rays/s pada M4 Ultra.

Apa itu MetalFX Upscaling?

MetalFX — teknologi upscaling Apple dengan mode Spatial dan Temporal. Bekerja di GPU apa pun dengan Metal 3, tanpa inti tensor. Memberikan peningkatan kinerja hingga 3x dengan kualitas mendekati 4K asli pada M4 Max.

Apakah sulit memulai dengan Metal?

Ambang masuk lebih tinggi daripada SceneKit atau Unity karena manajemen sumber daya tingkat rendah. Apple menyediakan Metal Sample Code dan tutorial di developer.apple.com. Untuk rendering dasar segitiga, diperlukan sekitar 200 baris kode.

Kesimpulan

  • Metal — API GPU tingkat rendah Apple dengan overhead CPU minimal
  • MTLDevice dan MTLCommandQueue — dasar arsitektur dengan manajemen sumber daya eksplisit
  • MTLCommandBuffer dan encoder menyediakan pencatatan perintah GPU multi-thread
  • Metal Shading Language (C++14) mendukung shader vertex, fragment, compute, dan mesh
  • MetalFX — upscaling dengan peningkatan hingga 3x pada GPU apa pun dengan Metal 3
  • Ray tracing perangkat keras tersedia di M3/M4/A17 Pro
  • Unified Memory pada Apple Silicon menghilangkan penyalinan data antara CPU dan GPU

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga