Belum lama ini, kami membuat sistem pembuatan bulan. Tujuan kami adalah untuk membuat bulan dengan ukuran dan komposisi yang sama dengan yang ada di tata surya kita. Kesulitan utama adalah mendapatkan permukaan yang luas dari bulan-bulan dan bagian dalamnya, sehingga sementara itu mereka tetap menarik. Selain itu, kami membutuhkan bulan untuk dirender dengan detail yang jelas, terlepas dari jarak ke mereka.
Sistem mengasumsikan bahwa bulan memiliki basis bulat. Penciptaan mesh geodesik diterapkan pada bola dasar, yang menjamin area yang sama dari semua bagian permukaan. Sistem menerapkan struktur ini hanya sebagai grid komputasi untuk generasi prosedural, permukaan nyata bulan akan jauh lebih halus daripada grid generasi.
Bola geodesikUntuk mendapatkan bulan bergerigi kecil, bentuk geometris dasar terdistorsi oleh noise 3D frekuensi rendah.
Sphere Survey terdistorsi kebisinganDimulai dengan fondasi ini, sistem menggunakan serangkaian cangkang konsentris. Setiap sel menentukan karakteristik volumetrik dari kulit konsentris berikutnya. Kulit terluar mendefinisikan sifat permukaan bulan.
Cangkang konsentrisSetiap kelongsong dapat terdistorsi oleh noise 3D frekuensi rendah yang unik untuk kelongsong itu. Jika Anda memilih opsi generasi ini, maka cangkang bagian dalam mungkin lebih besar dari cangkang luar.
Distorsi shellDalam diagram di atas, jarak antara cangkang dan jumlah distorsi dibesar-besarkan untuk lebih jelas menunjukkan proses konstruksi. Dalam praktiknya, cangkang akan jauh lebih dekat satu sama lain, dan besarnya distorsi mereka akan lebih kecil secara proporsional.
Di bawah ini kita akan berbicara tentang cara membuat shell terluar. Prinsip yang sama berlaku saat membuat kulit dalam, jadi kami tidak akan mempertimbangkannya secara rinci.
Sistem bulan prosedural membutuhkan komponen waktu nyata dan komponen offline. Komponen waktu nyata berjalan di komputer pemain. Komponen offline berjalan di komputer pengembang game. Komponen pembuatan offline membuat informasi yang dapat dengan cepat ditambahkan dengan komponen real-time.
Setiap dhuwur dalam cangkang bulat diklasifikasikan sebagai salah satu bioma terpisah. Bioma adalah seperangkat sifat permukaan, termasuk: tinggi, distribusi bahan, penempatan spesimen, dan pewarnaan bahan.
Contoh BiomaInformasi bioma mengandung sifat kaya entropi, seperti kawah, laut kering, retakan permukaan yang disebabkan oleh pasang surut gravitasi.
Kawah besar terekam dalam informasi biomaDefinisi bioma juga berisi aturan untuk penempatan objek yang menentukan lokasi, frekuensi, dan pengacakan bagian kecil - batu, batu bulat, tepian, dll.
Instance RockSetiap bioma dibuat dari unsur-unsur yang ditempatkan oleh ubin (ubin) sehingga komponen real-time dapat menerapkan informasi yang sama di berbagai bagian bulan, serta pada bulan-bulan lainnya. Informasi bioma harus dihasilkan sedemikian rupa sehingga distorsi dan penataan ulang yang cepat dimungkinkan, sehingga mengurangi jumlah pola lingkungan yang berulang dan dapat diprediksi.
Sistem ini menggunakan dua jenis ubin bioma: transisi dan terisolasi.
Informasi transisi dari bioma terjadi di daerah-daerah di mana bioma berpindah ke bioma yang berdekatan. Informasi bioma yang terisolasi terjadi di area di mana sistem menjamin tidak adanya bioma yang bertetangga.
Kedua mode terpisah ini diperlukan karena beberapa elemen bioma, misalnya, kawah, hanya dapat ditempatkan di area di mana bioma tidak berpindah ke bioma lain, karena transisi antar bioma dapat memengaruhi profil tinggi dan penampilan elemen relief.
Di bawah ini adalah contoh sederhana dari bulan, yang menggunakan tiga bioma yang berbeda: kutub, tropis dan khatulistiwa, masing-masing berwarna, merah, biru dan hijau.
Bulan dengan tiga biomaDaerah dengan bioma terisolasi memiliki warna seragam, di daerah dengan bioma transisi, warna bercampur.
Sistem ini menggunakan seperangkat kebisingan yang telah dihitung untuk memperkenalkan variabilitas ke dalam zona transisi antar bioma, menciptakan transisi unik dan menarik dari satu bioma ke bioma lainnya.
Kebisingan prosedural diterapkan pada transisi antar biomaPada gambar di atas, ukuran setiap bagian bioma dilebih-lebihkan relatif terhadap ukuran bulan, agar lebih jelas menunjukkan teknik pembuatan bioma. Situs bioma terpisah akan mencakup area sekitar 10 kali 10 km. Bulan dengan radius 1.500 km akan memiliki luas permukaan 30.000.000 km
2 . Untuk menutupi permukaan ini akan membutuhkan hampir 300.000 area seperti itu.
Resolusi grid bioma untuk bulan dengan radius 1.500 kmResolusi grid bioma dapat menyebabkan sejumlah besar situs bioma. Sistem tidak akan melacak masing-masing secara individual, karena lokasi setiap situs dapat dihitung secara analitis. Bioma untuk sebagian besar situs dapat ditetapkan dari peta bioma tingkat tinggi.
Peta bioma tingkat tinggi menentukan karakteristik kunci bulan jika dilihat dari jarak yang sangat jauh. Sistem ini menggunakan peta ini untuk menghasilkan detail tambahan dalam bentuk yang lebih dekat, menjaga keseragaman definisi bulan saat melihat dari jarak yang berbeda.
Peta bioma tingkat tinggi adalah gambar 2D yang dapat ditempatkan di permukaan bulan menggunakan parameterisasi 2D. Setiap titik peta berisi pengidentifikasi numerik bioma yang berlaku di lokasi yang sesuai dari permukaan atau kulit bagian dalam.
Peta bioma 2DGambar di atas menunjukkan peta dengan empat jenis bioma (biru, merah, kuning, dan putih). Gambar ditumpangkan ke bola menggunakan parameterisasi 2D. Satu kemungkinan parameterisasi ditunjukkan di bawah ini:
Parameterisasi 2D untuk peta ID biomaSelain peta pengenal bioma, sistem memungkinkan penggunaan peta lain, misalnya, berisi ketinggian dan warna permukaan.
Jarak jauh rindang dan render bulanSatu piksel dalam setiap gambar dapat mencakup 4 km
2 , membuat kreasi mereka hemat biaya. Tinggi dan peta warna seperti itu dapat dihasilkan secara prosedural atau digambar oleh seniman. Dalam sebuah proyek yang hanya menggunakan selusin bulan dan di mana setiap bulan harus memiliki sifat alami yang kaya dan unik, yang terbaik adalah menggunakan karya seniman pada tahap ini.
Gambar di bawah ini menunjukkan proses menghasilkan ketinggian permukaan selubung dan properti lainnya:
Tiga skala digunakan untuk membangun bulanBulan akan terdiri dari setidaknya satu cangkang bola. Jika ada beberapa cangkang, sistem akan mengekstrusi cangkang bagian dalam berdasarkan jari-jari maksimum dan fungsi ketinggian cangkang, yang diperoleh dengan melakukan proses dengan skala yang berbeda seperti dijelaskan di atas.
Untuk setiap cangkang, perancang bulan membuat peta tingkat tinggi distribusi bioma, definisi bioma untuk bioma yang ditemukan di peta ini, dan definisi bahan yang ditemukan dalam bioma ini.
Sistem menganggap udara sebagai bahan yang dapat diterima, sehingga dapat digunakan untuk membuat rongga di kulit apa pun.
Potongan melintang relief bulan, di mana berbagai kerang terlihatShell yang terpisah juga bisa menjadi objek volumetrik, yang kedalamannya diatur oleh tumpukan material. Informasi tumpukan disimpan dalam bioma.
Tumpukan bahan yang terdiri dari enam bahanKarena bahan bawah tanah jarang muncul ke permukaan, mereka dapat dideskripsikan dengan resolusi yang jauh lebih rendah daripada bahan permukaan bioma, dan penggunaan suara prosedural lokal akan tetap tidak terlihat oleh pemain.
Fungsionalitas tumpukan material mungkin cukup untuk tata letak, karena beberapa bahan di tumpukan bisa sangat langka. Perancang bioma dapat menyesuaikan prevalensi dan pola bahan apa pun pada tumpukan.
Generasi prosedural dilakukan oleh GPU shaders dan algoritma CPU voxel.
Shader menghitung warna fragmen untuk masing-masing dari tiga skala dan mencampur sampel ini tergantung pada jarak antara kamera dan fragmen.
Semua bagian yang terlalu kecil untuk mendaftar dalam geometri. tetapi masih mempengaruhi kompleksitas yang dirasakan dari permukaan, mereka direkam dalam peta normal yang dihasilkan dalam waktu nyata berdasarkan pada penentuan prosedural bahan, bioma, atau peta tingkat tinggi bulan. Karena ini, sejumlah kecil poligon dipertahankan di tempat kejadian.
Anda harus membayar harga untuk ini, selama bulan terlihat di kamera, bioma dan peta definisi tinggi harus disimpan dalam GPU. Anda dapat menggunakan pemuatan selektif hanya dari tekstur mip yang diperlukan untuk rendering skala bulan saat ini. Jumlah total memori GPU yang diperlukan dikurangi seminimal mungkin karena pemuatan streaming dan pembongkaran dari GPU saat mengubah posisi pengamat.
Ketika, karena kedekatannya dengan kamera, elemen individu menjadi cukup besar, mereka mulai muncul dalam output geometri menggunakan generasi voxel real-time. Hal yang sama berlaku untuk semua bagian bulan yang terraform atau digali oleh pemain. Jika perubahannya cukup besar dan dapat diamati dari orbit, manajer adegan adaptif Voxel Farm meningkatkan tingkat detail (LOD) dari semua area, perubahan yang dianggap penting oleh aplikasi.