Blog Dunia 3D: https://3dworldgen.blogspot.com
3DWorld adalah 3D Game Engine berbasis OpenGL lintas platform yang telah saya kerjakan sejak saya mengambil kursus komputer grafis CS184 di UC Berkeley pada tahun 2001. Ia memiliki beberapa fitur berikut:
Fungsi grafik 3D, kelas, dan pembungkus di sekitar OpenGL
Generator/prosesor shader dengan hot reload
Pembuatan konten prosedural untuk medan, vegetasi, kota, interior dan eksterior bangunan, dll.
Generator alam semesta prosedural dengan galaksi, bintang, planet, bulan, dll.
Pembuatan medan 3D voxel prosedural dengan pengeditan pengguna waktu nyata
Generator medan termasuk berbagai fungsi kebisingan, erosi, pengeditan pengguna waktu nyata, baca/tulis peta ketinggian
Bangunan prosedural (interior dan eksterior), jalan, dan pembangkitan kota
Simulasi fisika untuk tipe objek primitif dan lainnya (> 10K objek dinamis)
Siklus siang/malam waktu nyata dengan cuaca (hujan, salju, hujan es, angin, kilat)
Bahan berbasis fisik dengan pemantulan dan pembiasan
Bayangan dinamis, oklusi ambien, hingga 1024 sumber cahaya dinamis, efek pascapemrosesan
Animasi kerangka dan animasi prosedural
Game penembak orang pertama bawaan "smiley killer"
Game kolonisasi pesawat luar angkasa + planet bawaan
Membangun koleksi item dunia terbuka dan mode gameplay zombie
AI komputer untuk pemain dalam game FPS, membangun gameplay, dan dikirimkan dalam game semesta
Importir untuk file objek Lightwave, format 3DS, dan Assimp untuk format file lainnya
Dukungan membaca untuk tekstur: JPEG, PNG, BMP, TIFF, TGA, DDS
Dioptimalkan untuk pemuatan cepat dan rendering model besar secara real-time (> 1GB data verteks/tekstur)
Saya mengonversi proyek dari svn ke git di commit 6607. Sebagian besar kode ditulis dalam C++, dengan GLSL untuk shader. Ini dimaksudkan untuk menjadi proyek lintas platform. File proyek Microsoft Visual Studio 2022 disertakan. Makefile linux/gcc juga disertakan, tetapi lebih eksperimental. Lihat README.linux untuk lebih jelasnya. Proyek ini seharusnya dibangun di bawah gcc di linux dengan beberapa pekerjaan, tetapi sudah lama sejak saya mencobanya. Saya mempunyai makefile lama yang sudah kadaluwarsa, namun mungkin tidak memerlukan banyak usaha untuk memperbaikinya dan membuatnya dapat digunakan.
Berhati-hatilah, ini adalah repositori yang besar, saat ini sekitar 1GB. Saya telah menyertakan kode sumber, file konfigurasi, tekstur, suara, model kecil, file pencahayaan, data pemandangan, peta ketinggian, dan file proyek. Repo ini tidak berisi file model besar yang digunakan dalam beberapa adegan, Anda harus mengunduhnya secara terpisah. Ini berarti beberapa file konfigurasi adegan tidak akan berfungsi karena tidak dapat menemukan data referensinya. Daftar dependensi saat ini adalah:
OpenGL 4.5 (Harus disertakan dengan driver grafis terbaru Windows 8/10/11)
OpenAL 1.1 (opsional) (Pemasangan Sistem: https://www.openal.org/downloads/ atau Anda dapat mencoba openal-soft yang lebih baru: https://github.com/kcat/openal-soft)
freeglut-2.8.1 (Versi 3.0 saat ini mungkin berfungsi: https://sourceforge.net/projects/freeglut/)
freealut-1.1.0 (opsional) (Satu versi ada di sini: https://github.com/vancegroup/freealut)
zlib-1.2.11 (Anda dapat mengunduh versi terbaru dari sini: https://zlib.net/)
glew-2.0.0 (2.1.0 mungkin juga berfungsi: http://glew.sourceforge.net/)
gli (Versi terbaru: https://github.com/g-truc/gli / hanya header, termasuk dalam direktori dependensi)
glm-0.9.9.0 (Versi terbaru: https://glm.g-truc.net/0.9.9/index.html atau https://github.com/g-truc/glm / header saja, termasuk dalam direktori dependensi )
libpng-1.2.20 (opsional) (Versi saya sangat lama; Versi terbaru: https://libpng.sourceforge.io/index.html); Dapat diganti dengan stb_image pada sebagian besar kasus, kecuali untuk ekspor gambar peta.)
libtiff-4.3.0 (opsional) (Versi terbaru: http://www.simplesystems.org/libtiff/)
Assimp (opsional) (Lihat petunjuk pembuatan di https://github.com/assimp/assimp/blob/master/Build.md ; Petunjuk pembuatan vcpkg mungkin yang paling mudah.)
libtarga (termasuk sumber)
Header STB: stb_image, stb_image_write, stb_dxt (termasuk sumber)
Saya telah menyertakan versi sederhana dari sebagian besar perpustakaan ini di direktori dependensi. Saya menghapus semua file besar yang tidak diperlukan oleh 3DWorld, dalam beberapa kasus bahkan contoh/tes/dokumentasi. Ini dibuat dengan Komunitas MS Visual Studio 2022 di Windows 11. Jika Anda ingin menggunakannya, Anda harus menyalin direktori ke direktori root dan membangun kembali perpustakaan apa pun yang diperlukan untuk versi Windows atau Visual Studio lainnya. Jika Anda mengkloning/menginstal vcpkg, levelnya harus sama dengan direktori 3DWorld.
Perhatikan bahwa banyak dari dependensi ini sudah lama dan dapat diganti dengan perpustakaan yang lebih baru. Saya telah berkonsentrasi untuk menambahkan konten dan saya tidak terlalu tertarik dengan hal ini. Freeglut mungkin harus diganti dengan SDL, dan perpustakaan gambar dengan STB atau DevIL. (STB digunakan sebagai cadangan tetapi tidak mendukung semua gambar yang digunakan.)
Jika Anda ingin membangun 3DWorld, Anda dapat menggunakan proyek di folder dependencies/, atau mengunduh dan membangunnya sendiri dan mengubah pengaturan proyek untuk menggunakannya. Saat ini saya menggunakan target build Komunitas x64 MS Visual Studio 2022 untuk 3DWorld, tetapi target build win32 juga berfungsi. Proyek MSVS 2019 3DWorld_msvs2019.vcxproj saat ini sudah kedaluwarsa tetapi mungkin dapat berfungsi. Ini harus dikompilasi dan dijalankan dalam mode 32-bit jika Anda menyalin DLL dari folder lib64/ ke root repo dan membuat beberapa perubahan pengaturan proyek lainnya.
Jika Anda memiliki linux, Anda dapat mencoba membangun menggunakan makefile yang disediakan. File README.linux akan membantu. Saya telah membangun 3DWorld dan sebagian besar dijalankan di Ubuntu 18.04 dengan gcc 7 dan Ubuntu 20.04 dengan gcc 9.
3DWorld mengambil nama file konfigurasi pada baris perintah. Jika tidak ditemukan, ia akan membaca defaults.txt dan menggunakan file konfigurasi apa pun yang tercantum di sana. Beberapa file konfigurasi ini menyertakan model seperti Sponza Atrium, Stanford Dragon, mobil sport, dll. File-file ini terlalu besar untuk disimpan di repo git. Saya telah mencoba membuat 3DWorld menghasilkan kesalahan nonfatal jika modelnya tidak dapat ditemukan. Banyak model yang lebih besar dapat ditemukan di McGuire Computer Graphics Archive: http://casual-effects.com/data/
Saya telah mengemas model 3D yang terlalu besar untuk repo GitHub dan menaruhnya di Google Drive di sini (hingga v6 sekarang): https://drive.google.com/file/d/1crN9rqT-LSvYyTZTw5wtkhwsubE651ex/view? usp=sharing Beberapa model ini disimpan dalam format internal 3DWorld dan tidak boleh digunakan kembali di proyek lain. Lainnya berasal dari situs web seperti Mixamo. Ada juga direktori tekstur dengan tekstur tambahan yang digunakan dengan interior bangunan yang dapat digabungkan dengan direktori tekstur proyek.
Persyaratan sistem:
jendela 8/10/11; Linux saat menggunakan makefile dengan gcc.
Microsoft Visual Studio 2019 atau 2022. Versi profesional atau komunitas diperlukan untuk dukungan OpenMP. Anda juga dapat mencoba menggunakan gcc di linux.
GPU Nvidia atau AMD generasi yang relatif baru (Berjalan di laptop saya dengan grafis Intel, tetapi pada 12-20 FPS)
Setidaknya memori sistem 8GB untuk pemandangan yang lebih besar
Setidaknya memori GPU 4GB untuk pemandangan yang lebih besar; GPU saya memiliki memori 12GB
Pemecahan masalah: Sepertinya beberapa sistem (khususnya kartu AMD) memerlukan konteks inti OpenGL. Ini dapat dipilih dengan menambahkan "use_core_context 1" di file konfigurasi. Ini juga dapat diaktifkan di scene_config/config_post.txt, yang merupakan file yang diterapkan setelah membaca semua file konfigurasi tingkat atas lainnya. Dalam beberapa situasi (beberapa kartu Nvidia), penggunaan konteks inti bisa lebih lambat, itulah sebabnya saya tidak mengaktifkannya secara default.
Kunci yang Berguna (lihat readme-keys.txt untuk pengikatan kunci lainnya):
a,s,d,w: Gerakan
q,e: Ganti senjata (mode permainan)
'spasi': Lompat/tembak
'esc': Keluar
'tab': Menu di layar (navigasi dengan tombol panah dan 'X' untuk berpindah menu)
b: Mengaktifkan objek/fisika/AI (untuk gameplay mode darat dan mode alam semesta)
F1: Beralih antara mode medan tanah/alam semesta/ubin
F2: Beralih mode permainan
m: Beralih ke mode layar penuh
h: Mengalihkan pergerakan penerbangan
v: Ubah mode kamera (bola kristal/orbit vs. orang pertama)
V: Alihkan tampilan mouse
K: Alihkan mode peta overhead
x: Jeda
Kiri Mouse: Putar/Aksi
Mouse Kanan: Api
Saat ini saya memiliki repo ini untuk tujuan pendidikan di bawah lisensi GPLv3. Beberapa sub-modul tersedia dengan lisensi lain yang kompatibel dengan penggunaan komersial di akun GitHub saya. Ini tidak dimaksudkan sebagai alat komersial dan saya tidak mencoba menghasilkan uang di sini. Saya juga tidak mencari orang lain untuk mengerjakan proyek ini pada tahap ini, meskipun saya menerima masukan, laporan bug, dan saran. Mungkin segalanya akan berubah jika saya memutuskan untuk membuat game nyata dari ini. Jika Anda ingin menggunakan sesuatu di sini untuk proyek Anda, beri tahu saya.
Tidak ada dokumentasi lebih lanjut untuk 3DWorld. Namun, saya memiliki blog yang berisi deskripsi algoritma dan banyak tangkapan layar: https://3dworldgen.blogspot.com
Berikut beberapa tangkapan layar yang ditautkan dari blog saya:
Berikut adalah area ritel sebuah bangunan dengan rak-rak rak. Bangunan dapat berisi puluhan ribu objek interaktif yang dapat dibawa dan dibawa oleh pemain. (config_heightmap.txt)
Kamera yang ditempatkan di ruangan lain menunjukkan umpan video waktu nyata pada monitor keamanan. (config_heightmap.txt)
Zombi (dengan pencarian jalur dan perilaku AI lainnya) berjalan-jalan dan jatuh ke dalam kolam dalam ruangan. Permukaan air memiliki riak, percikan, pantulan, dan pembiasan. (config_heightmap.txt)
Garasi parkir dengan mobil yang diparkir dan pipa sprinkler diarahkan ke langit-langit. (config_heightmap.txt)
Ruang bawah tanah bangunan prosedural dengan orang-orang, penerangan tidak langsung, dan pipa-pipa yang disalurkan di sepanjang langit-langit. (config_heightmap.txt)
Lingkungan pemukiman prosedural dengan gedung perkantoran di belakangnya. Ada mobil dan orang-orang baik di trotoar maupun di dalam gedung. (config_heightmap.txt)
Interior bangunan prosedural - perpustakaan dengan buku-buku yang dihasilkan secara prosedural. (config_heightmap.txt)
Rumah dan gedung perkantoran yang dihasilkan secara prosedural dengan interior lengkap. (config_heightmap.txt)
Bola reflektif (logam), bias (kaca), emisif, dan tembus cahaya dalam pemandangan malam hari dengan pencahayaan tidak langsung. Digambar secara real-time; bola dapat dipindahkan secara interaktif. (config_white_plane.txt)
Kota prosedural dengan bangunan, jalan, mobil, dan pejalan kaki. (config_heightmap.txt)
Kota prosedural di malam hari dengan jembatan di latar depan. (config_heightmap.txt)
Kota prosedural awal dengan pohon pinus.
Kota prosedural awal.
Medan menggunakan domain warp noise dengan simulasi erosi hidrolik sebelum kota ditempatkan. (config_heightmap.txt)
Mode medan ubin dengan sungai, pepohonan, rumput, dll. (config_t.txt)
Simulasi kebakaran/asap destruktif interaktif real-time yang melibatkan pepohonan, tanaman, dan rumput. (config_trees.txt)
Tata surya alam semesta prosedural dengan sabuk asteroid. (alam semesta/config_universe.txt)
Pemandangan atrium Crytek Sponza dengan sumber cahaya penghasil bayangan dinamis dan pencahayaan tidak langsung. (sponza/config_sponza2.txt)
10.000 contoh model museum yang sangat detail ditempatkan dalam mode medan ubin (Peta ketinggian Puget Sound) dan digambar secara realtime dengan bayangan dan pencahayaan tidak langsung. (config_museum_tt_model.txt)
Atrium Crytek Sponza dengan lantai reflektif dan 200 sumber cahaya titik dinamis secara realtime. (sponza/config_sponza2.txt)
Banyak bola dan kubus reflektif/bias dengan redaman cahaya berbasis kepadatan di halaman gedung perkantoran. (mapx/config_mapx.txt)
Pemandangan San Miguel dengan hujan salju dinamis dan peta cakupan salju yang dilacak jalurnya dirender dengan shader khusus. (config_san_miguel.txt)
Adegan San Miguel ditampilkan secara realtime dengan jalur yang dilacak pencahayaan tidak langsung yang telah dihitung sebelumnya, peta normal, dan permukaan reflektif yang dipetakan kubus. (config_san_miguel.txt)
2 juta pohon pinus yang dihasilkan secara prosedural + ditempatkan (500 ribu terlihat) digambar secara realtime dalam mode medan ubin menggunakan papan reklame instan. (config_t.txt)
Penumpukan interaktif 10.000 kotak dinamis dalam adegan mapx. Tumpukan dapat dipindahkan dan dijatuhkan, dan adegan dapat disimpan/dimuat ulang/diedit. (mapx/config_mapx.txt)
Planet yang dihasilkan secara prosedural dengan cincin berisi asteroid kecil. (alam semesta/config_universe.txt)
Sabuk asteroid dengan 10.000 asteroid dinamis (berputar dan mengorbit), 100.000 titik partikel sprite, dan awan papan iklan volume untuk debu. (alam semesta/config_universe.txt)
Mode medan berubin, menampilkan berbagai bentuk vegetasi yang dihasilkan secara prosedural, termasuk rumput, bunga, pohon pinus, pohon palem, dan pohon gugur. Ini sebenarnya adalah model poligon yang menghasilkan bayangan. (config_t.txt)
Cahaya dinamis dan real-time menembus asap volumetrik berbasis kebisingan di adegan Crytek Sponza. (sponza/config_sponza2.txt)
Lantai metalik reflektif dalam adegan Crytek Sponza, dengan pencahayaan matahari + langit tidak langsung. (sponza/config_sponza2.txt)
Bola reflektif, torus, dan kubus digambar secara realtime dalam pemandangan dinamis menggunakan tekstur refleksi peta kubus di lobi gedung perkantoran. Material merupakan campuran logam dan dielektrik dengan menggunakan model berbasis fisik. (mapx/config_mapx.txt)
Pemandangan museum dengan pencahayaan tidak langsung, permukaan reflektif, dan pemetaan bayangan. Model ini bertekstur secara prosedural. (config_museum.txt)
Adegan rumah bersalju dihasilkan dengan menjatuhkan satu miliar partikel salju dan mengumpulkan salju. Salju telah dihitung sebelumnya tetapi dapat dirender secara realtime. (rumah/config_house_winter.txt)
Simulasi dan rendering hujan, termasuk deteksi tabrakan untuk setiap tetesan hujan dan permukaan basah/reflektif. (rumah/config_house.txt)
Pencahayaan tidak langsung dan bayangan dari lampu sorot yang tumpang tindih diterapkan pada objek dinamis. (mapx/config_mapx.txt)
Simulasi air dengan gelombang menggunakan tesselasi perangkat keras dalam mode medan berubin. (config_t.txt)
Gua es voxel 3D yang dihasilkan secara prosedural dengan pencahayaan tidak langsung. Medan ini dapat diedit secara realtime dengan kuas dan tembakan senjata. (config_ice_caves.txt)
Planet yang dihasilkan secara prosedural digambar seluruhnya dalam shader fragmen tanpa tekstur. Ini termasuk pembentukan medan (es, salju, batu, hutan, gurun, tanah), air, awan, dan atmosfer. (alam semesta/config_universe.txt)