1 poin oleh GN⁺ 2024-10-31 | 1 komentar | Bagikan ke WhatsApp
  • 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
  • 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

 
GN⁺ 2024-10-31
Komentar di Hacker News
  • Hal yang paling saya suka adalah fakta bahwa bayangan luar ruangan berwarna biru
    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
    • Benar, dan terlalu subtil sehingga banyak orang bahkan tidak menyadarinya
      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
    • Pelukis sering diajari untuk mewarnai bayangan luar ruangan sedikit keunguan, demi memaksimalkan kontras dengan rona kuning sinar matahari
    • Baru saja melihatnya juga di lukisan musim dingin Monet: https://news.artnet.com/art-world/monet-the-magpie-three-fac...
  • Saya suka variasi yang dipakai di game platform Nintendo belakangan ini. Mereka memakai shadow map seperti kebanyakan game modern, tetapi bayangan karakter pemain disetel agar selalu jatuh tepat di bawahnya, terlepas dari posisi sumber cahaya sebenarnya
    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
  • Saya sempat berpikir alasan Valorant selalu terlihat kurang bagus adalah karena pemain tidak menimbulkan bayangan. Saya baru tahu beberapa hari lalu bahwa katanya ini karena server tidak mengirim posisi model pemain lain ke klien sampai server menilai mereka terlihat, demi mengurangi cheating
    Kalau begitu, bayangan akan muncul dan menghilang saat model pemain dimuat dan dibongkar, jadi bayangan tidak bisa terlihat kecuali tubuh pemainnya juga terlihat
    • Mungkin yang kamu lihat adalah tulisan saya. Saya tidak tahu apakah Valorant mematikan bayangan pemain karena sistem anti-cheat, tetapi anti-cheat memang jelas jadi lebih sederhana
      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
    • Bukankah ini bisa diperbaiki kalau server juga memeriksa visibilitas bayangan? Saya tidak terlalu tahu Valorant, tapi dalam dunia nyata, tidak bersembunyi dengan sumber cahaya di belakang punggung tampaknya bisa menjadi elemen strategi
  • Artikel yang bagus, dengan banyak referensi game yang membangkitkan nostalgia. Saya masih ingat dulu sangat terkesan melihat bayangan di Zelda N64
    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
    • Kalau bayangan yang cukup bagus bisa dibuat dengan trik smoke and mirrors, lebih baik tetap memakai teknik tipu daya itu karena alasan performa
  • Mengenai bagian “game paling awal yang dirilis dengan stencil shadow mungkin adalah Severance: Blade of Darkness pada 2001, dan bayangannya luar biasa”, Revolte untuk PowerVR PCX1 sudah memakai stencil shadow pada 1996
    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
  • Untuk melihat level terkini teknologi pencahayaan video game, lihat demo UE 5.5 MegaLights terbaru dari Epic: https://youtu.be/p9XgF3ijVRQ?si=GcU0kP33iKQh_5Ge
  • Jika ada lebih dari satu sumber cahaya, bayangan yang tumpang tindih memang menjadi lebih gelap
    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
    • Itu tidak benar. Saat satu bayangan dari masing-masing sumber cahaya, yakni dua bayangan, berpotongan, yang tersisa adalah hitam atau hanya cahaya ambient
      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
    • Pengamatan yang bagus, tetapi artikelnya tidak salah. Itu cukup menarik
      Ada kondisi yang menyertainya: “karena hanya ada satu sumber cahaya dan jaraknya cukup jauh, bayangan hanyalah ketiadaan cahaya”
  • Mengenai bagian “beberapa simulator penerbangan awal menggambar bayangan pipih dari tampak atas saat berada di landasan. Saat meneliti, saya berharap menemukan contoh bayangan yang terlihat juga saat terbang, tetapi tidak menemukannya”, F-29 RETAL atau F29 Retaliator, F29 adalah contohnya
    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 bayangan yang paling berkesan bagi saya adalah saat memainkan GTA IV. Saya punya PC gaming yang cukup kuat, dan bayangan real-time yang dihasilkan lampu depan kendaraan pemain secara umum sangat bagus
    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
  • Tulisannya bagus dan menyenangkan dibaca
    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
    • Kalau ingin game tetap terlihat bagus setelah lama berlalu, tidak ada yang seperti baked global illumination. Itu game pertama tempat saya melihat bayangan biru sungguhan di siang hari. Meski begitu, bayangan itu berasal dari geometri level
      Menurut saya dulu game ini diremehkan secara tidak adil. Mungkin karena lebih pendek dibanding para pesaingnya