Teknik Bayangan pada Video Game 3D Klasik
(30fps.net)- Bayangan dalam game 3D bukan muncul otomatis seperti di dunia nyata, melainkan efek visual yang dirancang agar terlihat meyakinkan dalam batasan performa
- Game 3D awal menangani bayangan dengan teknik yang sederhana tetapi cepat, seperti gambar 2D, blob shadow di bawah kaki, tekstur bayangan runtime, dan geometri proyeksi bidang
- Seiring adegan menjadi makin kompleks, tekstur proyeksi, shadow map, dan stencil shadow digunakan, tetapi disertai batasan seperti artefak resolusi, proyeksi ke permukaan yang salah, dan biaya eksekusi yang sulit diprediksi
- Pencahayaan level statis menyimpan bayangan besar lewat vertex color dan lightmap, dan game modern pun terus memanfaatkan variasi teknik tradisional seperti Cascaded Shadow Maps, light probes, dan capsule shadows
- Bayangan ray tracing adalah arah yang lebih natural, tetapi pada adegan kompleks seperti Alan Wake 2, ia masih bergantung pada sampling dan denoiser sehingga trade-off tetap menentukan karakter tampilan di layar
Bayangan game dibuat berbeda dari dunia nyata
- Di dunia nyata, bayangan adalah hasil cahaya yang terhalang, dan jika satu sumber cahaya berada jauh, beberapa bayangan yang saling bertumpuk tidak menjadi lebih gelap
- Dalam video game 3D, bayangan tidak hadir secara alami, sehingga developer harus merancangnya langsung dengan menyeimbangkan performa dan daya meyakinkan secara visual
- Di dalam game, ekspresi seperti blob shadow di Metal Gear Solid, yang makin gelap ketika bayangan saling bertumpuk, juga dimungkinkan
Bayangan 2D yang digambar langsung di atas layar
- Cara paling sederhana adalah menggambar gambar bayangan 2D di layar terlebih dahulu sebelum menggambar karakter
- Winter Gold dan MDK menggunakan gambar bayangan 2D animasi tanpa scaling
- Pada adegan ketika karakter berada di depan semua hal lain, cara sederhana ini juga bekerja dengan baik
Blob shadow: lingkaran gelap di bawah kaki
- Pendekatan paling sederhana dalam 3D adalah menggambar cakram gelap di bawah karakter
- Super Mario 64 menggunakan blob shadow untuk karakter, dan lewat fitur decal hardware Nintendo 64, bayangan secara efektif di-clip agar hanya terlihat pada bidang lantai
- Blob shadow bisa dianimasikan sesuai situasi
- Di Super Mario 64, bayangan mengecil saat melompat
- Di Metal Gear Solid, bentuk bayangan berubah
- Masalah bayangan yang melewati tepi tebing juga bisa ditangani dengan memproyeksikan blob quad seperti decal
Bayangan bidang berbasis render texture
- Jika blob hanyalah tekstur sederhana, karakter dapat dirender dari atas saat runtime untuk digunakan sebagai tekstur bayangan
- Crash Bandicoot: Warped menghasilkan hasil yang baik dengan tekstur bayangan runtime
- Soldier of Fortune juga memakai cara yang sama, tetapi hasilnya kurang baik karena resolusi bayangannya rendah
- Cara ini berbeda dari shadow mapping, yang membuat depth map dari sudut pandang cahaya
- Di sini, gambar hitam/putih digunakan sebagai tekstur
- Konsepnya mendekati shadow map 1-bit
Bayangan bidang yang dibuat dengan geometri
- Cara yang intuitif adalah memproyeksikan objek pembuat bayangan secara pipih ke bidang ke arah berlawanan dari cahaya, lalu merender objek yang sama sekali lagi dalam warna hitam
- Bayangan ini biasanya dibiarkan opak untuk menyembunyikan masalah ketika sebagian objek saling bertumpuk saat digambar
- Pada lantai datar hasilnya cocok, tetapi pada medan kompleks akurasinya menurun
- F-19 Stealth Fighter menggambar bayangan pesawat di atas landasan pacu
- Bayangan bidang juga dapat dilihat pada game berbasis GLQuake
- Kingpin: Life of Crime menggunakan bayangan bidang hitam dengan cukup baik
- Di Half-Life alpha 0.52, masalah transparansi terlihat
Bayangan bidang di atas medan
- Virus karya David Braben membuat pesawat luar angkasa menjatuhkan bayangan tampak-atas di atas medan
- Interstate ’76 memiringkan dan merentangkan bayangan bidang agar mengikuti kemiringan tanah
- Bayangan kadang menembus tanah
- Secara keseluruhan, hasilnya cukup meyakinkan
- Pada tampilan software rendering terlihat bayangan yang sedikit transparan, sementara pada tampilan hardware acceleration muncul bayangan hitam penuh
- Interstate ’76 juga mencoba memproyeksikan bayangan objek besar seperti jembatan, tetapi hasilnya tidak sepenuhnya berhasil
Drop shadow dengan tekstur proyeksi
- Metode tekstur proyeksi memproyeksikan tekstur bayangan yang dibuat di atas bukan ke bidang, melainkan ke berbagai bentuk permukaan
- Secara konsep, ini mirip menyorotkan Bat-Signal dari langit ke bawah
- Toy Story 3: The Video Game adalah contoh metode ini, dan ketika bayangan bertumpuk dengan bayangan lain, hasilnya menjadi lebih gelap
- Metode ini bisa membuat bayangan yang sangat tajam, tetapi sensitif terhadap kondisi permukaan
- Bisa terlihat aneh pada permukaan vertikal
- Dalam beberapa kasus, bisa juga muncul di langit-langit
- Contoh seperti ini dapat dilihat pada video gameplay Sonic Adventure 2: Battle
- Karena dapat terlihat menembus objek, metode ini lebih cocok untuk kasus khusus
- Metode ini juga bisa bekerja baik untuk bayangan pohon
Shadow map: metode standar de facto
- Shadow map adalah metode ketika game menggambar gambar kedalaman dari sudut pandang cahaya, lalu membaca gambar itu saat merender dunia untuk menentukan bayangan
- Karena bisa memakai ulang kode rendering umum, implementasinya relatif mudah
- Resolusi terbatas menimbulkan artefak yang dikenal luas seperti “Peter Panning” dan “shadow acne”
- Berbagai teknik telah diusulkan untuk mengalokasikan lebih banyak area shadow map ke permukaan yang dekat dengan kamera
- Untuk menghasilkan tampilan yang bagus, biasanya dibutuhkan tuning
Stencil shadow: tajam tetapi mahal
- Stencil shadow dapat menggambar bayangan tajam pada permukaan apa pun, dan menciptakan nuansa film-noir yang sulit ditiru dengan shadow map
- Contoh terkenalnya adalah Doom 3, yang dikenal dengan ruangan-ruangan gelap
- Metode ini membagi dunia menjadi ruang yang terkena cahaya dan ruang bayangan dengan shadow volume, yaitu geometri yang tidak terlihat
- Game menerapkan pencahayaan hanya pada piksel yang tidak berada di dalam shadow volume
- Agar bekerja, dunia perlu digambar beberapa kali
- Pertama, seluruh dunia digambar dengan ambient lighting
- Untuk setiap light, shadow volume digambar, lalu dunia digambar lagi sehingga hanya piksel di luar bayangan yang terpengaruh
- stencil operation yang berbeda diatur untuk front face dan back face
- Salah satu contoh komersial paling awal yang mungkin adalah Severance: Blade of Darkness, yang menampilkan bayangan bagus pada 2001
- Salah satu alasan metode ini tidak banyak digunakan hari ini adalah biaya eksekusinya sulit diprediksi
- Biaya sangat bergantung pada seberapa besar shadow volume terlihat di layar
- Algoritme yang dioptimalkan pernah dipatenkan
- Ada tautan terkait yang tampaknya menunjukkan Id Software mencapai semacam kesepakatan untuk Doom 3
Stencil shadow yang lembut
- Stencil shadow tidak harus selalu tajam
- Silent Hill 2 menerapkan bayangan lembut di PlayStation 2 dengan menggambar stencil shadow lalu memberinya blur
- Hasilnya di konsol terlihat nyaris sempurna
Bayangan karakter yang disederhanakan
- Model yang lebih sederhana daripada model yang tampil di layar dapat dibuat untuk menjatuhkan bayangan
- Di Zelda untuk Nintendo 64, hanya kaki Link yang menjatuhkan bayangan, sementara bagian lain tidak
- Hyperblade menggunakan cara unik di arena hoki futuristik: pemain menjatuhkan bayangan bidang dalam bentuk animasi sederhana
Bayangan dalam pencahayaan level statis
- Vertex color dan lightmap adalah teknik untuk menyimpan pencahayaan level game, dan di banyak game keduanya digunakan sebagai satu-satunya cara menampilkan bayangan berskala besar
-
Vertex color
- Ico menunjukkan bahwa bayangan yang rumit dapat dibuat hanya dengan per-vertex lighting gaya lama
- Pada map low-poly, bayangan tajam pun dapat diekspresikan dengan vertex color
- Tony Hawk Pro Skater 2 menghasilkan tampilan yang mengesankan bahkan dengan cara sederhana ini
-
Lightmap
- Lightmap adalah cara klasik untuk menyimpan pencahayaan dan bayangan level
- Alih-alih menyimpan warna pada tiap vertex, metode ini memakai set tekstur kedua yang hanya merepresentasikan pencahayaan
- Karena resolusi dapat dibuat berbeda per area, bayangan bisa dibuat lebih akurat di tempat yang membutuhkan
- Metode ini memakai lebih banyak memori daripada vertex color
- Quake dianggap sebagai game yang memopulerkan lightmap
Teknik tradisional yang terus dipakai di game modern
- Game modern pun terus memakai teknik bayangan tradisional sesuai situasi
- Cascaded Shadow Maps, variasi dari shadow mapping, digunakan untuk mencakup area luas dengan cepat
- Lightmap dapat digunakan bersama teknik lain seperti light probes
- Call of Duty juga menggunakan lightmap
- Contoh terkait ada pada slide Hemispherical Lighting Insights
- Ide model karakter yang disederhanakan juga berlanjut
- The Last of Us membuat bayangan karakter yang lembut dengan bola yang dipanjangkan
- Unreal Engine mendukung capsule shadows untuk karakter
- Bayangan proyeksi juga masih digunakan
- Hot Wheels Track Attack merender shadow mesh sebagai tekstur lalu memproyeksikannya ke lintasan balap
- Hal ini dapat dilihat dari penjelasan di blog developer dan video gameplay
Bayangan ray tracing pun tidak sempurna
- Dalam game yang berupaya mensimulasikan pencahayaan yang akurat secara fisik, bayangan muncul secara alami di tempat yang tidak terkena cahaya
- Berbeda dari shadow map, detail geometri kecil pun dapat menjatuhkan bayangan yang akurat
- Lampu besar secara alami menghasilkan bayangan lembut, dan cahaya tidak langsung dapat menerangi sudut yang gelap
- Untuk mewujudkan tujuan ini, banyak waktu dan biaya diinvestasikan pada algoritme serta hardware ray tracing
- Adegan dalam game modern nyata sangat kompleks sehingga simulasi harus didekati dengan aproksimasi
- Pada ray-traced shadows di Alan Wake 2, tiap piksel hanya menerima pencahayaan dari satu light yang dipilih secara acak
- Hasilnya dikirim ke denoiser, yang secara cerdas melembutkan gambar yang mengandung noise
- Bayangan ray tracing juga tidak sempurna, dan trade-off yang dipilih akan menciptakan tampilan khasnya sendiri
Pilihan tanpa bayangan
- Sebagian game bisa memprioritaskan elemen lain daripada bayangan
- Tidak mengimplementasikan bayangan juga bisa menjadi pilihan yang eksplisit
1 komentar
Komentar di Hacker News
Ini bukan ilusi optik atau nuansa artistik; karena langit berwarna biru, bayangan pada hari cerah tampak biru karena diterangi oleh cahaya yang dipantulkan dari langit
Kalau melihat ke bawah mobil, di bagian yang masih “melihat” langit ada bayangan biru yang jelas, dan semakin mendekati area tempat bodi mobil menghalangi bahkan cahaya langit, warnanya makin mendekati hitam sungguhan
Jika bayangan matahari biru yang tegas ini dicampur dengan bayangan langit AO yang lembut dan gelap, kita bisa membuat bayangan yang cukup cantik dengan biaya murah
Engine rendering grafis yang bagus akan melakukan hal seperti ini. Bayangan seharusnya punya sedikit rona warna langit
Karena itu beberapa screenshot No Man's Sky lama terasa mengganggu. Seingat saya pernah melihat adegan langitnya hijau tetapi bayangannya ungu
Ini membantu memperkirakan tempat mendarat setelah melompat seperti bayangan gumpalan klasik, sambil tetap mempertahankan kualitas visual bayangan yang layak
Kalau tidak salah ingat, di lingkungan gelap mereka bahkan membuat bayangannya lebih terang daripada lantai agar tetap terlihat
Kalau begitu, bayangan akan muncul dan menghilang saat model pemain dimuat dan dibongkar, jadi bayangan tidak bisa terlihat kecuali tubuh pemainnya juga terlihat
Valorant sengaja membuat renderingnya sangat sederhana agar bisa mencapai frame rate sangat tinggi bahkan di hardware kelas bawah. Bukan hanya tidak ada bayangan dinamis, pencahayaan dinamis juga sama sekali tidak ada, dan transparansi alfa pun tidak ada di mana pun
Hal-hal seperti asap yang biasanya digambar transparan juga dibuat bergaya agar bisa digambar sepenuhnya opak, karena itu lebih cepat. Terlepas dari cheating, kemungkinan besar bayangan dinamis tetap akan dihilangkan demi performa
Dengan diadopsinya teknik ray tracing, saya rasa area light dan bayangan lembut akan menjadi standar. Kalau hardware mendukung, coba lihat Quake 2 RTX untuk melihat kira-kira masa depan akan seperti apa
Terakhir, saya menambahkan blog ini ke daftar sumber grafis saya: https://github.com/aaron9000/c-game-resources
https://www.youtube.com/watch?v=7BvtML5dIuI
PowerVR PCX1 mendukung shadow volume di hardware, dan implementasinya lebih efisien daripada stencil shadow standar. Alih-alih menggambar adegan beberapa kali, pada dasarnya ia melakukan depth-only pre-pass di hardware ke buffer depth/stencil on-chip untuk menentukan piksel yang terlihat, memeriksa shadow volume untuk menentukan piksel mana yang berada di dalam bayangan, lalu melakukan texture sampling dan shading
Kecerahan pencahayaan disesuaikan berdasarkan hasil shadow volume, dan karena hanya piksel yang terlihat yang di-shading, overdraw tidak membuang bandwidth texture fetch yang tidak perlu
Di Dreamcast, yang berbasis penerus PCX1, juga ada banyak game yang memakai shadow volume. Implementasi Dreamcast lebih fleksibel: volume tidak hanya bisa mengubah pencahayaan, tetapi juga tekstur yang digunakan, mapping UV, bahkan persamaan blending untuk poligon transparan
Saya juga pernah membuat bayangan lembut di DC (https://imgur.com/a/DyaqzZD bagian terakhir), tetapi itu kembali ke metode stencil yang lebih standar dan menggambar ulang bayangan beberapa kali, sehingga beban fill-rate cukup besar
Jika dua lampu menerangi tiga orang, akan muncul enam bayangan. Area tempat keenam bayangan itu semuanya bertumpuk akan menjadi “hitam” atau hanya menerima cahaya ambient
Di tempat lain yang tumpang tindih bayangannya lebih sedikit, akan terbentuk gradien iluminansi
Jika kamu berada di dalam bayangan dari sumber cahaya A dan di dalam bayangan dari sumber cahaya B, dari mana kamu mendapat cahaya? Hanya dari cahaya ambient, dan kalau itu pun tidak ada, maka hitam
Ada kondisi yang menyertainya: “karena hanya ada satu sumber cahaya dan jaraknya cukup jauh, bayangan hanyalah ketiadaan cahaya”
Bayangan itu adalah satu lagi elemen kecil yang memberi game ini rasa kecepatan luar biasa
https://imgur.com/a/hOgxr7a
https://www.mobygames.com/game/6233/f29-retaliator/
Momen yang masih saya ingat adalah ketika mencuri mobil di gang belakang pada malam hari. Tepat saat karakter pemain masuk ke mobil, polisi muncul dari balik tikungan, “melihat” pencurian itu dan mencabut pistol, bersamaan dengan lampu depan menyala sehingga bayangan raksasa polisi yang bergerak jatuh ke dinding di dekatnya
Tumpang tindih bayangan di MGS tidak sepenuhnya salah. Ada cahaya ambient, hamburan, dan fenomena global illumination lainnya
Ucapan “Mirror’s Edge (2008, PC) pada dasarnya adalah Lightmaps: The Game” lucu tapi benar. Saat itu game tersebut sudah mengesankan, dan sampai sekarang masih begitu
Menurut saya dulu game ini diremehkan secara tidak adil. Mungkin karena lebih pendek dibanding para pesaingnya