Bagaimana saya bisa membuat medan yang sangat besar di Unity? Sepertinya saya bisa mengatur lebar dan panjang ke nilai besar. Tetapi resolusi Heightmap hanya mencapai 4097 dan resolusi Detail hanya mencapai 4048.
Ada ide?
unity
optimization
terrain-rendering
terrain
heightmap
Daniel Pendergast
sumber
sumber
Jawaban:
Pisahkan medan menjadi "bongkahan" persegi, muat orang-orang yang Anda sayangi (kebanyakan: Mereka yang berada di dekat kamera yang aktif) di Perbarui () dan - jika Anda kekurangan ruang (kemungkinan besar akan terjadi), bongkar yang tidak diperlukan jauh .
Gunakan model poli-rendah yang dihitung sebelumnya untuk LoD medan jauh, kecuali Anda tidak memiliki jarak pandang yang rendah. Selain itu, jika Anda memerlukan peta ketinggian terain dari medan jauh untuk apa pun (seperti gerakan NPC atau simulasi lainnya), buat varian resolusi rendah atau variabel yang bervariasi untuk terain di memori Anda; jangan gunakan data terain lengkap untuk itu. Ini bisa dilakukan secara otomatis saat memuat game, tetapi umumnya merupakan ide yang lebih baik untuk membuat alat yang membuat data pra-dihasilkan ini selama pembuatan atau paket.
Akhirnya: Untuk menghindari masalah presisi floating point, Anda harus memposisikan ulang seluruh adegan setiap kali kamera utama Anda bergerak menjauh (0.0f, 0.0f, 0.0f).
Pertanyaan yang mungkin relevan tentang Unity Answers http://answers.unity3d.com/questions/17225/dynamic-terrain-loading.html
sumber
Anda harus memecah medan dalam potongan, yaitu. beberapa medan yang lebih kecil. Anda harus 'saling melipat' satu sama lain (dengan naskah) sehingga tidak akan ada 'lubang' di antara mereka, tetapi jika tidak, Anda bisa langsung mulai melakukannya.
Anda mungkin ingin tahu juga bahwa karena Unity3D ~ 3.0 Anda tidak dapat memindahkan item (baca medan dan item) terlalu jauh (seperti +/- 100000 langkah IIRC) sehingga ini akan memengaruhi ukuran maksimum dunia Anda.
Saya menggunakan ini dalam game RPG online saya (dengan pengecualian bahwa saya hanya menggunakan Unity3D untuk desain level, bukan untuk game yang sebenarnya).
Hanya karena saya ingin tahu, apakah Anda ingin berbagi info tentang game Anda (seperti peningkatan, jenis, grafik, gaya, dll.)?
sumber
Kami benar-benar mengimplementasikan medan besar di Unity5 dengan memproses data SRTM untuk seluruh bumi menjadi peta ketinggian untuk
TerrainData
objek dengan Level Detail yang berbeda [1]. Ada beberapa hal yang perlu dipertimbangkan:Bagian paling tepi dari peta ketinggian harus tumpang tindih dengan setidaknya satu sampel dan Anda perlu mengatur posisi medan Anda dengan tepat.
Terrain.SetNeighbors
tidak akan menghubungkan jala, hanya akun untuk berbagai tingkat detail yang dilakukan oleh Unity.Anda, tentu saja, membutuhkan 2 ^ n + 1 sampel tinggi per
TerrainData
objek, jika tidak Unity hanya akan menetapkan tinggi 0 ke bagian yang belum disetel.Jika Anda memiliki kurang dari 2GB
TerrainData
, Anda dapat menggunakannya dengan Aset di folder Sumber Daya danResource.Load
saat runtime. Jika Anda memiliki lebih dari 2GB pendekatan ini tidak lagi berfungsi karena tidak ada lebih dari 2GB sumber daya dengan Unity builds. Dalam hal ini Anda harus membangun AssetBundles dan memuatnya secara asinkron denganWWW
objek. Ini memiliki efek samping yang tidak diinginkan dari panggilanShader.Parse
untuk masing-masing dengan overhead sekitar 500ms. Saya melaporkan ini di forum [2] dan masih menunggu balasan. Saya akan mengirimkan laporan bug pada akhirnya.Jangan berpikir untuk menggunakan
AssetDatabase.LoadAssetAtPath
, itu hanya tersedia di editor dan bukan di Unity builds.[1] https://www.youtube.com/watch?v=2UsyVuWoFbQ
[2] http://forum.unity3d.com/threads/shader-parse-delays-loading-of-assetbundle-containing-no-shader 0,358235 /
sumber
Ada solusi pihak ketiga.
kode ini dapat membuat medan seluas 99.999 meter, pegunungan adalah formula kebisingan apa pun, tetapi Anda dapat mencampur 100 rumus kebisingan ke dalam satu peta jika Anda mau. misalnya, di medan ini, jumlah total segitiga yang tersedia di peta adalah antara 66 juta, resolusi rendah, dan 200 juta resolusi menengah. di sini adalah peta segitiga 66 juta, di mana segitiga 0,7 juta diperbarui di sekitar kamera. medan raksasa unityplayer, WASD dan Space
sumber
Saya akan merekomendasikan memuat medan Anda dalam potongan. Dengan menggunakan medan yang lebih kecil, dan mungkin skrip Anda dapat memeriksa apakah Anda berada dalam jarak tertentu ke medan Anda dengan menggunakan transform.position - terrain.transform.position. Saya benar-benar menulis posting blog tentang cara mengoptimalkan game Anda secara keseluruhan, dan saya berbicara tentang chunk loading. Semoga ini membantu.
sumber