Penerangan di Dunia Minecraft


10

Minecraft adalah gim yang sebagian besar didasarkan pada peta ketinggian dan menggunakan informasi heigtmap itu untuk membanjiri dunia dengan cahaya. Dari pemahaman saya, titik tertinggi dalam peta ketinggian adalah akhir area yang dipengaruhi sinar matahari. Segala sesuatu di atas yang diterangi oleh sinar matahari, segala yang di bawah itu hanya dipengaruhi oleh cahaya di dekatnya dalam radius 8 blok.

Jadi, jika Anda memiliki pulau terapung di atas dunia Anda, semua yang ada di bawah ini pada dasarnya akan dianggap sebagai gua. Ketika dua lampu memengaruhi titik yang sama, cahaya yang lebih terang menang (tidak yakin tentang itu).

Apa pun yang terjadi, ada beberapa masalah dengan model pencahayaan minecrafts: pertama-tama, jika dunia Anda tidak memiliki peta ketinggian, menjadi lebih sulit untuk mencari tahu apa yang seharusnya memancarkan sinar matahari dan apa yang tidak. Cara sederhana adalah dengan mengasumsikan bahwa dunia (dalam kasus saya) adalah batu apung dan kemudian lintasi setiap sumbu dari kedua arah dan mencari tahu di mana batu itu mulai dan berakhir. Tapi ini tidak sepenuhnya menghilangkan masalah karena penyok di batu tidak seharusnya dalam kegelapan.

Minecraft sendiri akan menyimpan informasi ringan dalam bongkahannya bersama dengan informasi tentang bahan blok. Jadi hanya jika dunia diubah pencahayaan harus diperbarui. Sayangnya proses itu masih sangat lambat pada pembaruan dan perubahan cahaya cepat orang dapat melihat pencahayaan yang tertinggal. Itu terutama benar jika banyak blok berubah (TNT, sunset dll.) Dan Anda tidak menjalankan komputer tercepat (Atau Java pada Mac).

Dari pemahaman saya yang masih terbatas tentang pencahayaan grafis 3D, dunia seperti minecraft seharusnya tidak menjadi masalah terbesar. Bagaimana Anda mengatasi masalah tersebut?

Saya pikir persyaratan dasar untuk pencahayaan di dunia voxel adalah

  1. pembaruan cukup cepat sehingga bisa terjadi dalam satu frame. Seseorang mungkin dapat melakukan pencahayaan di perangkat grafis dan mengunduh informasi cahaya yang diubah ke RAM utama.
  2. informasi cahaya harus cepat tersedia untuk logika permainan utama sehingga tidak sepenuhnya berdasarkan pada perangkat grafis: alasan: cahaya mempengaruhi pertumbuhan rumput, pemijahan monster dll.
  3. pembaruan ringan harus bersifat lokal ke bongkahan atau memiliki batas lain sehingga orang tidak harus menyalakan kembali seluruh dunia yang mungkin sangat besar ukurannya.

Gagasan utamanya adalah membuat pembaruan ringan cepat, belum tentu lebih indah. Untuk peningkatan kinerja rendering ringan secara umum, seseorang dapat dengan mudah menambahkan SSAO selain yang seharusnya menghasilkan dunia yang jauh lebih baik.

Jawaban:


7

Pencahayaan di Minecraft dihitung secara tidak sinkron dan dimasukkan ke dalam geometri. Itu tidak dilakukan secara realtime.

Setiap voxel menyimpan pencahayaan untuk voxel itu, mungkin sebagai satu byte (atau 2, takik menggunakan pendekatan berlapis untuk memungkinkan siklus siang dan malam). Hanya ada 16 level cahaya. Untuk menerangi dunia, Minecraft melakukan 2 operan. Satu untuk sinar matahari, dan lainnya untuk menyebarkan atau membanjiri cahaya ke dalam gua dan semacamnya. Pencahayaan dilokalisasi karena sumber cahaya hanya dapat menyebarkan cahayanya paling banyak 16 blok jauhnya. Air dan lava bekerja dengan cara yang hampir sama.

Info lebih lanjut tersedia di blognya: http://notch.tumblr.com/post/434902871/per-request-this-is-how-the-new-lighting-will-work


Aku tahu. Saya pikir saya menulis di atas (minus kecerahan resolusi 4 bit).
Armin Ronacher

1

Tidak bisakah Anda menggunakan GPU Render untuk Tekstur & menggandakan buffer hasil Anda sehingga Anda selalu memiliki informasi pencahayaan yang tersedia untuk membaca kembali setiap frame?

Bagaimana Anda mengatur data ini untuk penerangan sepenuhnya terserah Anda, tetapi saya tidak melihat mengapa ini seharusnya tidak menjadi pilihan pertama untuk penyelidikan jika yang ingin Anda lakukan adalah meningkatkan kecepatan algoritma pencahayaan Anda ..?


Persis seperti yang kupikirkan. Hampir semua GPU, tidak seperti kebanyakan CPU DIRANCANG untuk latihan komputasi paralel masif semacam ini.
Grant Peters

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.