Saya harus mengatakan jalan, bukan jalan karena saya berpikir lebih seperti abad pertengahan. Juga, tidak mencari realisme. Jawaban yang saya cari adalah agar sesuai dengan cetakan yang saya gambarkan daripada realisme.
Saya mencari metode untuk menghasilkan jalan prosedural / sungai dengan gaya melengkung, tapi saya ingin melakukannya untuk sistem tipe medan tak terbatas. Sama seperti bagaimana perlin noise menghasilkan gumpalan, saya ingin menghasilkan segmen garis panjang acak (mungkin panjang tak terbatas).
Saya menyadari strategi seperti jawaban yang disarankan ditemukan di sini , namun itu bergantung pada titik awal dan akhir yang ditentukan untuk bekerja, saya tidak memiliki titik awal dan titik akhir yang ditentukan. Saya ingin dapat memanggil fungsi menggunakan koordinat arbitrer dan mengembalikannya apakah koordinat spesifiknya adalah bagian dari sungai / jalan.
Saya tidak ingin memerlukan medan yang akan dihasilkan sebelumnya. Itu termasuk peta ketinggian (seperti yang digunakan untuk simulasi curah hujan atau serupa). Saya juga tidak ingin memerlukan titik awal / akhir.
Apakah ada algoritme atau perubahan pada algoritme kebisingan yang mungkin diketahui seseorang untuk mencapai apa yang saya coba jelaskan?
Yang paling dekat dengan saya sejauh ini adalah fraktal multi-ridged, jika saya menggunakan nama dengan benar. Saya hanya mengambil nilai absolut dari nilai noise (dengan asumsi diskalakan menjadi -1 hingga +1) dan menetapkan ambang batas. Masalah utama saya dengan ini adalah garis yang tumpang tindih terlalu sering, kebanyakan melingkar, kadang-kadang bertemu untuk membentuk danau besar yang rapi tetapi tidak diinginkan, dan sering kali ketebalan garis terlalu banyak bervariasi.
Berikut adalah gambar dari apa yang saya miliki sejauh ini dalam 2D, tetapi pada frekuensi yang sangat tinggi untuk menunjukkan lebih detail:
sumber
Jawaban:
Hanya ide saya untuk mengarsipkan ini apa yang Anda inginkan tanpa (banyak) perhitungan dan kemungkinan untuk dunia tanpa batas.
Bagian pertama dari algoritma adalah penggunaan Voronoi-Diagramms . Anda membagi dunia Anda menjadi kisi-kisi, setiap kisi memiliki alamat dalam bentuk (xgrid, ygrid). Untuk setiap sel di mana Anda perlu membuat jalan, Anda meletakkan variabel xgrid dan ygrid ke fungsi hash yang mengembalikan nomor CellSeed . Anda menggunakan CellSeed sebagai seed untuk generator angka acak yang menghasilkan koordinat poin untuk Diagram Voronoi.
Sekarang Anda perlu mencari tepi diagram dan node di mana banyak sisi bertabrakan. Anda juga dapat menyimpan informasi ke dalam grafik untuk akses yang lebih mudah.
Setelah langkah ini, Anda dapat mencari jalur melalui jaringan yang valid.
Untuk jalur yang valid, Anda sekarang dapat membuat jalan (mereka memiliki tepi tajam).
Catatan : Anda juga perlu membuat koordinat diagram Voronio untuk semua sel neightbor sehingga Anda tidak memiliki batas di tepi sel.
Jika Anda tidak ingin sharph edge, Anda dapat menghitung titik tengah dari setiap koneksi dan menggunakan arah sebagai garis singgung untuk interpolasi bezier antara dua tepi dalam grafik.
Tentang penggunaan Voronoi-Diagramms
Untuk mengarsipkan kota seperti struktur jalan, titik-titik dari fungsi pseudo acak dapat disejajarkan pada kisi, sehingga jalannya berbentuk persegi panjang.
Untuk lebih banyak county seperti jalan, poin harus lebih teratur.
Tentang fungsi Acak Pseudo untuk menghasilkan posisi titik untuk Diagram-Diono
Ini bisa berupa fungsi acak normal atau himpunan Hammersley untuk distribusi poin yang tidak rumpun yang lebih seragam.
sumber
Untuk pembuatan jalan (dan kota), makalah terbaik yang saya temukan adalah makalah ini:
Pemodelan Prosedural Kota oleh Y Parish dan P Müller
Ini menggunakan L-System dan dapat menghasilkan pola jalan AS dan UE. Jika Anda tidak ingin membuat jalan untuk seluruh kota, Anda bisa menghasilkan jalan utama. Ini dapat mengambil peta ketinggian, peta air dan peta kepadatan populasi dalam input.
sumber
http://vterrain.org/Culture/Roads/ bagian "Menghasilkan Jalan 3D" memiliki beberapa informasi tentang pembuatan jalan .
Masalah dengan jalan adalah mereka menghubungkan landmark (meskipun mereka sering mengikuti medan bukannya langsung dari A ke B).
Secara pribadi, saya akan menghasilkan medan, kemudian menempatkan sungai (mungkin menggunakan erosi, lihat http://vterrain.org/Water/ bagian "hidrogeologi"), lalu letakkan kota di tempat-tempat yang masuk akal (misalnya dekat sungai atau lainnya sumber air, atau di tempat di mana air dapat diangkut menggunakan saluran air atau menara air dan pipa) dan akhirnya menghasilkan jalan antar kota.
Untuk membuat ini lebih mudah digunakan dalam dunia prosedural, Anda dapat membuat titik-titik perantara di medan di mana jalan paling mungkin terjadi ketika dihasilkan di tempat itu, lalu sambungkan titik-titik perantara jika sebuah jalan benar-benar dibuat di tempat itu.
sumber
Pertama, sungai dan jalan sangat berbeda. Jalan cenderung mengikuti isolasi (ketinggian yang sama / serupa) - alasannya adalah lebih mudah untuk melakukan perjalanan di jalan yang tidak naik atau turun jauh. Sungai, sebaliknya, bergerak tegak lurus terhadap isoline / isoclines (menuruni bukit). Sungai terbentuk di cekungan (kumpulan gunung yang semuanya mengalir ke bawah ke lembah tertentu) dan cenderung membentuk struktur seperti pohon. Selain itu, jalan sering melakukan perjalanan tegak lurus ke sungai, untuk membentuk jembatan logis. Ide terbaik adalah pertama-tama menghasilkan sungai, dan kemudian membuat jalan logis (yaitu jalan antar kota). Sayangnya saya tidak punya waktu untuk membahas lebih detail, tetapi mudah-mudahan ini akan membawa Anda ke jalur yang benar.
Ini mungkin tampak jelas, tetapi lihatlah peta Google di berbagai jenis medan dan jalan; Anda akan mendapatkan pemahaman yang lebih baik tentang bagaimana penampilan mereka.
sumber