CLICK HERE FOR BLOGGER TEMPLATES AND MYSPACE LAYOUTS »

Kamis, 03 Juni 2010

Membuat Alam Dari Bola - Bola dan Kubus

Mari kita mulai membuat beberapa planet! Sekarang, saat ini mulai sebagai ide semacam acak proyek, jelas dari awal bahwa saya benar-benar perlu melakukan banyak pekerjaan rumah untuk ini. Sebelum aku bisa di mana saja, saya perlu untuk mendefinisikan apa yang saya bertujuan untuk.
Langkah pertama dalam ini adalah untuk toko sekitar untuk beberapa seni inspirasi dan referensi gambar. Meskipun ada banyak ruang seni dapat ditemukan secara online, dalam hal ini, tidak ada yang bisa menggantikan hal yang nyata. Jadi aku fokus pencarian saya pada gambar yang nyata, baik dari lanskap (terran atau sebaliknya) maupun dari ruang angkasa. Saya menemukan gambar berkelas seperti ini:











 Mudah-mudahan saya akan bisa membuat sesuatu yang sama dalam beberapa saat. Pada saat yang sama, aku bersemangat melahap semua kertas saya bisa menemukan pada teknik rendering dari satu dekade terakhir, beberapa ditujukan untuk rendering real-time, beberapa cukup tua untuk menjadi real-time saat ini.
Dari semua ini, aku cepat-cepat diselesaikan pada tujuan saya:
    Merupakan surgawi tubuh bulat atau kental dari asteroid ke matahari.
    Dengan realistis melihat topografi dan fitur.
    Dapat melihat di semua skala dari permukaan ke angkasa.
    Pada flight-simulator tingkat detail.
    Diberikan dengan suasana meyakinkan, air, awan, kabut.
Untuk sebagian besar dari titik-titik ini, saya menemukan satu atau lebih makalah yang menjelaskan teknik yang berguna aku bisa menggunakan atau beradaptasi. Pada saat yang sama, masih banyak yang belum diketahui saya akan perlu mengetahui di sepanjang jalan, belum lagi jumlah signifikan fudging dan eksperimen.
 
Kisi - Kisi Bola

Untuk memulai saya butuhkan untuk membangun geometri tertentu, dan untuk itu saya perlu mencari tahu apa yang saya harus menggunakan geometri. Setelah meninjau beberapa pilihan, aku segera diselesaikan pada peta biasa perpindahan bola (AKA heightmap a). Yaitu, dimulai dengan lingkup halus, bergerak setiap titik permukaan atas atau bawah, tegak lurus ke permukaan, untuk menciptakan daerah di permukaan.
Jika perpindahan vertikal sangat kecil dibandingkan dengan jari-jari bola, ini dapat mewakili permukaan planet khas (seperti Bumi) di tingkat detail yang saya cari. Jika perpindahan dari tatanan sama dengan jari-jari bola, Anda bisa merusak ke dalam bentuk seperti kentang-sangat tidak beraturan. Satu-satunya hal yang heightmaps tidak bisa lakukan adalah gua, terowongan, overhang dan jenis lain dari lubang, yang baik untuk saat ini.
Pertanyaan besar adalah, bagaimana seharusnya dibagi permukaan bola dan diwakili? Dengan bola, ini bukan pertanyaan yang mudah, karena tidak ada cara yang jelas tunggal untuk membagi permukaan bola ke bagian reguler atau grid. Berbagai teknik ada, masing-masing dengan keuntungan mereka sendiri dan kasus penggunaan khusus, dan aku menghabiskan beberapa waktu melihat ke dalamnya. Berikut adalah perbandingan antara empat tesselations yang berbeda:

Perhatikan bahwa tesselation berlabel ECP hanyalah biasa geografis lintang-bujur grid.
Fitur-fitur utama yang saya cari adalah kecepatan dan kesederhanaan, sehingga aku menetap di 'quadcube'. Di sinilah Anda memulai dengan sebuah kubus yang wajahnya telah dibagi ke dalam grid reguler, dan proyek setiap titik permukaan luar dari tengah ke melampirkan bola. Hal ini menghasilkan sebuah bola sempurna mulus, dibangun dari 6 peluru bulat identik dengan tepi melengkung. Susunan ini lebih dikenal sebagai peta kubus 'dan sering digunakan untuk menyimpan pandangan panorama 360 derajat sewenang-wenang.
Berikut adalah proyeksi kubus dan bola :
 Pinggiran kubus diproyeksikan akan ditandai dengan warna merah. Perhatikan bahwa bola yang dihasilkan sempurna mulus dan bulat, walaupun grid memiliki tampilan bulgy.

Peta Cube yang besar, karena mereka sangat mudah untuk menghitung dan tidak memerlukan trigonometri rumit. Secara terbalik, pemetaan poin sewenang-wenang bola kembali ke kubus ini bahkan lebih sederhana dan pada kenyataannya native didukung oleh GPU sebagai fitur pemetaan tekstur.
Hal ini penting, karena aku akan menghasilkan medan permukaan dan tekstur dinamis dan akan perlu indeks dan akses setiap permukaan 'pixel' efisien. Menggunakan peta kubus, saya hanya mengidentifikasi wajah yang sesuai, dan kemudian menggunakan indeks x / y koordinat di grid wajah itu.
Kelemahan dari peta kubus adalah bahwa jarak dan area antara titik bervariasi sepanjang grid, yang membuat lebih sulit untuk melakukan operasi tertentu pada permukaan yang sama. Namun, daerah distorsi jauh lebih kecil daripada misalnya kotak lat-lama, di mana jarak grid benar-benar mendekati nol dekat kutub. Bahkan, distorsi yang dibuat oleh sebuah peta kubus adalah berlawanan dengan mereka yang Anda peroleh dengan proyeksi perspektif biasa. Hal ini memudahkan untuk membuat ke dalam peta kubus, yang akan berguna untuk generasi tekstur.

Tingkat Detail

Ada alasan lain aku memilih pendekatan peta kubus, dan yang berhubungan dengan tingkat persyaratan detail. Tujuan saya adalah untuk membuat sebuah planet yang dapat dilihat dari tanah, udara maupun dari ruang angkasa. Ini akan sangat lambat untuk selalu memberikan segalanya di detail maksimum, jadi aku harus adaptif menambah dan menghapus rincian sebagai pemirsa semakin dekat ke permukaan.
Namun, meningkatkan tingkat detail merata di seluruh wilayah tidak cukup, karena saya hanya ingin memberikan detail dimana pemirsa akan melihatnya. Untuk penampil di tanah, sebagian besar planet ini disembunyikan oleh cakrawala, dan mesin harus dapat secara efektif memotong bagian-bagian yang tak terlihat, sehingga tidak ada proses pemborosan terjadi.
Di sinilah saya mendapat manfaat besar dari peta tata letak kubus dari bola, karena memungkinkan saya menerapkan bidang penelitian baik dari grid berbasis rendering daerah datar dengan hanya sedikit penyesuaian. Secara khusus, saya menggunakan 'pendekatan chunked LOD'. Setiap wajah peta kubus menjadi Quadtree, dengan masing-masing tingkat pemisahan empat cara untuk membentuk tingkat berikutnya dengan lebih terinci:
Bekas untuk berbagai tingkat potongan detail semua dimuat ke memori GPU, siap diakses setiap saat. Tetapi untuk daerah yang harus diberikan, mesin berjalan menuruni quad-pohon, menentukan tingkat-detail yang tepat untuk setiap bagian, dan output daftar potongan yang akan diberikan untuk kerangka tertentu. Kemudian, GPU melakukan tugasnya, peledakan melalui masing-masing potongan pada kecepatan yang terik, meninggalkan CPU untuk melakukan hal-hal lain.
Karena semua data sudah di memori, mengubah tingkat detail hanya berarti rendering yang berbeda-beda potongan. Setiap potongan memiliki kompleksitas geometri yang sama, dan kinerja berbanding lurus dengan berapa banyak yang ditampilkan di layar. detail lebih berarti potongan lebih, tapi itu biasanya juga berarti Anda dapat memotong bagian dari daerah yang jauh.
Pendekatan chunked juga sangat mudah untuk bekerja dengan, karena tidak ada ketergantungan data antara potongan-potongan yang berbeda. bingkah Masing-masing memiliki salinan data sendiri titik, yang berarti potongan individu dapat paged masuk dan keluar dari memori GPU di akan. Hal ini penting untuk menjaga penggunaan memori down sementara masih bisa untuk skala untuk ukuran besar.

0 komentar: