Menghasilkan jerat pohon 3d

16

Saya belum menemukan pertanyaan pada baris ini, koreksi saya jika saya salah.

Pohon (dan fauna secara umum) adalah hal biasa dalam permainan. Karena sifat mereka, mereka adalah kandidat yang baik untuk generasi prosedural.

Ada SpeedTree , tentu saja, jika Anda mampu membelinya; sejauh yang saya tahu, itu tidak memberikan kemungkinan menghasilkan jala pohon Anda saat runtime. Lalu ada SnappyTree , generator pohon berbasis webgl online berdasarkan proctree.js yang merupakan sekitar 500 baris javascript.

Orang dapat menggunakan salah satu dari yang di atas (atau generator pohon lain yang belum saya temui) untuk membuat beberapa lusin pohon sebelumnya - atau memodelkan mereka dari awal dalam modeller 3d - dan kemudian secara acak mirror / skala mereka untuk beberapa varian lagi ..

Tetapi saya lebih suka memiliki generator mesh pohon yang dapat dihubungkan gratis.

Solusi yang memungkinkan:

  • Port proctree.js ke c ++ dan berurusan dengan lisensi open source (tampaknya tidak gpl, jadi bisa dilakukan; penulis juga mungkin bersedia bekerja sama untuk membuat lisensi lebih bebas lagi).
  • Gulung sendiri berdasarkan L-sistem.
  • Jangan ganggu, cukup gunakan pohon yang dibuat secara offline.
  • Gunakan beberapa metode lain yang belum saya temukan.

Pembaruan 2015 : berakhir dengan porting proctree.js ke c ++ https://github.com/jarikomppa/proctree

Jari Komppa
sumber
5
Untuk pengguliran Anda sendiri, saya akan merekomendasikan buku 'keindahan algoritmik tanaman' oleh Prusinkiewicz dan Lindenmeyer, yang tersedia di algoritmikbotany.org/papers/#abop . Buku dan situs tersebut juga mencantumkan banyak makalah penelitian tentang generasi botani virtual.
Exilyth
Saya telah membuat alat online yang disebut 3DFlora dengan WebGL. Ini memiliki lebih dari 80 parameter dan membiarkan Anda mengunduh hasilnya sebagai file obj. Anda dapat membuat hampir semua jenis tanaman dengan itu. Lihat di sini: 3dflora.sina-s.com
user2002741

Jawaban:

12

Saya telah melakukan sedikit pekerjaan yang adil di bidang ini, meskipun sebagian besar demo saya lebih tua:

(flash 2010)
http://genesisbbs.com/appstem.html (klik dan seret mouse)
http://genesisbbs.com/appstem2.html
(directX 2006)
http://vimeo.com/5206795

Saya sangat menyarankan Anda untuk menggulung sendiri, jika Anda melakukan ini untuk bersenang-senang. Anda hampir pasti perlu bekerja dengan Quaternions . Memahami mereka sangat sulit, tetapi Anda tidak perlu terlalu dalam untuk menggunakannya. Pikirkan angka empat sebagai vektor dengan komponen tambahan: rotasi. Jika Anda ingin tanaman Anda berputar dan berbelok saat tumbuh, mereka akan membutuhkan angka empat.

Hal-hal lain yang perlu dipelajari:
Angka Lichtenberg,
Pertumbuhan Laplacian,
Diagram Voronoi,
Algoritma Tetangga Terdekat (google)

Saya (secara pribadi) akan mencegah penggunaan L-Systems, selain untuk mungkin mendikte tata bahasa untuk apa yang tumbuh di mana, yaitu [benih -> [root] / [batang-> cabang -> [bunga / daun]]. Sistem L tidak baik untuk menanggapi rangsangan lingkungan seperti arah sinar matahari, gravitasi, hambatan, dll.

Mengenai masalah kecepatan, satu pohon dapat dihasilkan secara realtime. Namun, untuk keperluan memori dan kinerja, Anda mungkin hanya ingin menghasilkan sekumpulan pohon kecil dan contohnya sedikit jika Anda berhadapan dengan hutan.

Kebanyakan generator pohon yang ada tidak begitu bagus (IMHO), selain yang high-end digunakan untuk Maya dan semacamnya.

Saya juga sangat, sangat merekomendasikan menggunakan voxels untuk menghasilkan pohon (kemudian kulit dengan mesh jika diperlukan). Keuntungan voxels adalah Anda dapat dengan mudah mensimulasikan algoritma pertumbuhan menggunakan hal-hal seperti pertumbuhan Laplacian dan berbagai automata (bukan permainan kehidupan Conway, tetapi aturan lain menghasilkan hasil yang menarik).

Gavan Woolery
sumber
3

Secara pribadi saya mungkin akan mulai dengan pohon-pohon yang dihasilkan sebelumnya dan hanya sekali saya akan memiliki mesin rendering hutan kick-ass - lengkap dengan semak-semak, rumput, jamur dan barang-barang - saya akan mulai mencari jika saya membutuhkan lebih banyak jerat pohon variabel.

Yang sedang berkata, Anda bisa melihat ngPlant . Ini termasuk aplikasi pemodel pohon prosedural GPL, tetapi perpustakaan yang melakukan semua pekerjaan berat adalah lisensi BSD. Itu ditulis dalam C ++.

Untuk rendering hutan, ada Paged Geometry ( mesin berlisensi) untuk mesin rendering Ogre .

Tapio
sumber
3

Masalah utama dengan pohon prosedural bukanlah menghasilkannya, tetapi merendernya semua setiap frame saat runtime. Ini adalah alasan Anda akan melihat banyak pohon identik di game AAA, bukan karena mereka tidak dapat mengimplementasikan atau menulis teknologi yang membuat pohon unik, itu berarti Anda harus memotong banyak fitur lain untuk permainan untuk berlari.

Jika Anda memiliki banyak pohon yang identik, Anda dapat memutarnya dan mungkin menskalakannya secara seragam untuk membuatnya terlihat berbeda dari setiap sudut, dan karena mereka identik, Anda dapat membuat mereka untuk menghemat milidetik berharga setiap frame.

Hanya memikirkan masalah ini sebentar, mungkin ada media yang membahagiakan - bagaimana jika Anda menghasilkan beberapa bagian pohon, batang, cabang, daun dll. Tetapi yang semuanya cocok secara modular, seperti lego pohon. Maka Anda bisa memiliki banyak kombinasi dan beberapa pohon yang cukup unik, tetapi Anda juga bisa membuat instance dari semua bagian untuk gim yang berjalan lebih cepat.

SirYakalot
sumber
Terlepas dari gagasan sambungan, jawaban ini tidak benar-benar menambahkan sesuatu yang baru.
Jari Komppa
3
selalu menyenangkan ketika OP sangat menghargai. Untuk situs Qanda posting Anda memiliki kekurangan pertanyaan. Selain itu jawaban ini langsung membahas poin-poin Anda.
SirYakalot
Ya, pernah ke sana sendiri, permintaan maaf.
Jari Komppa
1

Saya menemukan pohon [d] beberapa waktu lalu ... Saya menggunakannya hanya untuk sedikit waktu untuk menguji suatu proyek, tetapi itu hanya karena saya menghentikan pengembangan - alat ini memberi Anda berbagai pilihan generator untuk dimainkan dan , dari yang saya ingat, cukup cepat. Tautan di bawah.

The downside adalah bahwa itu bukan generator pohon yang dapat Anda masukkan. Anda harus membuat beberapa pohon sebelumnya dan kemudian memodifikasi data saat menempatkannya pada saat run-time untuk mengubah keunikannya.

Yang terbaik dari semua TreeD adalah bebas untuk digunakan, dan Anda dapat memasukkan pohon yang Anda buat dalam proyek Anda sendiri, komersial atau gratis, selama mereka bukan paket model, paket tekstur, generator model 3D, atau generator tekstur.

Dalin Seivewright
sumber
Senang melihat generator gratis lainnya, bahkan jika itu dalam format perpustakaan.
Jari Komppa
1

Ini adalah solusi kecil yang rapi, dan saya telah menggunakannya dalam sebuah proyek dan dapat memberitahu Anda bahwa ini cukup cepat untuk membuat pohon dengan cepat mengapa permainan ini berjalan. Ini tentu saja tidak rinci, tetapi jika Anda menyingkirkan papan iklan itu bisa sangat rapi.

http://ltrees.codeplex.com/

Mike
sumber
Sepertinya solusi yang bagus untuk pengguna XNA.
Jari Komppa