Implementasi Radiosity Dalam Battlefield 3

0 Comments

Implementasi Radiosity Dalam Battlefield 3

Artikel ini merupakan hasil penulisan ulang dan terjemahan dari hasil tulisan pada blog berikut :

Jika kamu tidak familiar dengan radiosity, radiosity mengacu pada pantulan cahaya -- sebagai contoh, jika kamu menyinari sebuah tembok berwarna merah cerah dengan sebuah cahaya, cahaya tersebut akan mamantulkan warna merah ke seluruh ruangan. Setelah mengerjakan Mirror's Edge, tim DICE menyukai kekuatan yang dimiliki oleh radiosity, namun tidak menyukai lama waktu yang dibutuhkan untuk melakukan komputasi: pencahayaan untuk setiap tingkat ME dapat menghabiskan waktu 24 jam untuk menyelesaikannya (menggunakan mesin pencahayaan Autodesk bernama "Beast"). 

Dengan waktu pengemasan yang lama tersebut, seniman pencahayaan terlalu banyak menghabiskan waktu tunggu dan tidak memiliki waktu untuk mengulangi pengaturan pencahayaan lainnya.

Left shows direct lighting only, right shows direct and indirect combined
Untuk menghindari masalah ini di Battlefield 3, DICE bekerjasama dengan Enlighten (sebuah pionir real-nime radiosity) untuk menyediakan sebuah alir kerja lighting-fast untuk seniman pencahayaan. Versi PC dari game ini akan menggunakan teknologi tersebut didalam game itu sendiri untuk merubah pencahayaan tidak langsung atas respon dari tembok yang hancur, namun XBOX dan PS3 akan hanya menggunakannya untuk mengemas pencahayaan tidak langsung bersifat statis. Pada kedua platform, objek dinamis tidak akan berperan dalam pencahayaan tidak langsung, tapi hanya menerimanya dengan interpolasi diantara probe cahaya.

Spherical harmonic light probes
Enlighten mengimplementasikan radiosity secara real-time menggunakan beberapa simplifikasi. Pertama, mereka menggunakan perkiraan yang sangat abstrak untuk setiap dataran; seperti contoh sebuah 5000 segitiga gedung dapat dikurangi menjadi sebuah balok sederhana. Kedua, mereka menggunakan lightmap yang resolusinya sangat rendah. Pencahayaan tidak langsung terkadang sangat besar resolusinya, gradien yang sangat halus, sehingga lightmap kasar terlihat dapat diterima dalam praktiknya. Dan terakhir, setiap pixel dari lightmap ini memiliki daftar titik contoh dan beban kontribusi yang sudah dihitung sebelumnya, sehingga tidak memerlukan hitungan matematika rumit yang harus dilakukan secara real-time.

Left shows the low-detail approximation, and right shows the interpolated results
Setelah mulakukan perhitungan atas informasi ini sebelumnya, Enlighten dapat digunakan untuk menghitung radiosity dengan cara menyediakannya menggunakan informasi pencahayaan langsung untuk titik contoh tersebut. Enlighten kemudian mengaplikasikan beban akumulasi untuk setiap piksel lightmap untuk menghitung pantulan pertama dari cahaya tidak langsung. Enlighten kemudian memberikan output dari pantulan pertama yang lolos sebagai input untuk pantulan kedua, dan seterusnya.

Direct lighting and the direct light sample points
Walaupun dengan semua simplifikasi ini, Enlighten tidak cukup cepat untuk melakukan radiosity dalam setiap bingkai secara menyeluruh. Sebagai contoh, jika matahari digerakkan di editor, matahari tersebut memerlukan beberapa waktu agar seluruh pencahayaannya diperbaharui. Masalah ini juga menjadikannya tidak dapat diterapkan dalam pencahayaan instan dalam sebuah permainan, seperti ledakan.

Gambar diambil dari presentasi Siggraph slides dan video.


You may also like

No comments: