Membangun kota dengan mengklik mouse dengan Houdini dan Python



Dalam pengembangan game, jaringan pipa, algoritma, dan proses kecil terus-menerus dibuat dan diterapkan, yang menghemat banyak waktu dan upaya. Seringkali solusi ini sederhana namun elegan.

Artikel ini tentang ini. Penulis datang dengan metode membangun kota virtual, yang di masa depan ia ingin berubah menjadi alat lengkap desainer tingkat.

Pada artikel ini, saya akan membahas pengaturan dasar alat City Builder di Houdini, yang dapat membangun kota dengan klik mouse sederhana. Perhatikan bahwa ini hanya berfungsi di dalam Houdini menggunakan Python Viewer States.

Referensi


Inspirasi terbesar bagi saya adalah Oscar Stolberg . Karyanya sangat mengesankan, dan membuat saya bertanya-tanya apakah mungkin untuk mengulang ini di Houdini. Upaya saya juga dapat dianggap sebagai bukti bahwa cukup realistis untuk mereproduksi ide apa pun di perangkat lunak lain.



Pengaturan awal


Hal pertama yang harus dilakukan adalah kisi atau pesawat tempat rumah akan dibangun. Secara teoritis, itu bisa berupa apa saja, misalnya segitiga, segi enam, dan sebagainya. Cara termudah yang saya temukan adalah menggunakan quad mesher.

Mulai dengan simpul lingkaran dan tempatkan simpul mesh instan di bawahnya (itu dari alat Labs, jadi pastikan Anda telah menginstalnya).



Setelah itu tempatkan node mengusir - nanti akan digunakan untuk mengusir primitif yang dipilih oleh mouse.



Pengaturan akan diminimalkan dalam HDA, di dalamnya Anda akan membuat parameter untuk bekerja dengan kode Python. Dalam hal ini, Anda perlu mengontrol parameter grup untuk memperpanjang dan mengisi primitif yang diklik mouse.



Negara Penampil Python


Sekarang Anda dapat pergi ke kode Python. Jika Anda baru mengenal status viewer, maka saya sebelumnya menulis pengantar dasar untuk itu.

Buat status penampil baru dan mulai dengan templat kosong. Ini hanya akan menghasilkan potongan kode yang benar-benar dibutuhkan.



Ada beberapa hal untuk ditambahkan. Anda dapat membaginya menjadi 2 bagian:

  • Mendapatkan geometri untuk dilihat dengan klik mouse.
  • Menjadi primitif dengan klik mouse.

Untuk memulai, di bagian init, tambahkan variabel baru untuk geometri yang disebut self.geometry = Tidak ada. Kemudian tambahkan fungsi OnEnter - metode ini dipanggil ketika negara diaktifkan oleh pengguna membuat / memilih node dan menekan Enter di viewport.

Di sinilah geometri saat ini disimpan di self.geometry sendiri. Dilakukan menggunakan node.geometry ().



Sekarang ada koneksi dengan geometri.

Bagian selanjutnya adalah mendapatkan nomor primitif berdasarkan posisi mouse saat klik. Untuk melakukan ini, buat fungsi OnMouseEvent - ini adalah pemrosesan acara mouse (seperti klik atau posisi mouse).

Di awal acara mouse, buat variabel untuk berfungsi. Lalu dapatkan persimpangan dengan geometri menggunakan fungsi GeometryIntersector dan gunakan self.geometry.

Dari persimpangan ini Anda akan mendapatkan informasi yang Anda butuhkan, mencari tahu dan mencetak nomor primitif.



Jika semuanya dilakukan dengan benar, ini akan berubah menjadi ini:



Pengaturan terakhir adalah menggunakan nomor primitif di parameter grup, yang Anda lakukan di awal. Ganti string dengan yang baru, panggil parameter grup dan atur nomor primitif sebagai nilainya. Perhatikan bahwa itu juga dikonversi ke string, karena grup adalah parameter string.



Ini akan berubah menjadi ini:



Ini adalah gagasan utama yang dengannya saya mulai membuat alat. Mulai sekarang, Anda akan menyimpan informasi, bukan menulis ulang. Pengaturan ini akan memberikan dasar untuk memulai dan eksperimen lebih lanjut.

Detail


Setelah Anda memiliki kubus ini, Anda dapat melakukan apa saja dengan mereka. Jika Anda membutuhkan kota, buat generator rumah - ada banyak tutorial tentang topik ini di Internet. Sementara itu, contoh saya.

Dinding modular disalin di setiap sisi kubus.



Perbatasan yang miring dan dibuka dengan UV.



Kinerja sangat penting di sini. Agar alat bekerja dengan cepat dan ketika Anda menekan rumah muncul secara instan, Anda harus melakukan optimasi. Untuk melakukan ini, Anda dapat mencoba menggunakan jumlah simpul simpul dan simpul boolean minimum di jaringan.

Instrumen masa depan


Saya ingin melangkah lebih jauh dan menjadikannya alat untuk membuat level. Idenya adalah Anda dapat dengan cepat membuat prototipe level jadi dengan beberapa klik. Saya terinspirasi oleh Hob .



Akhirnya, demo kecil dari apa yang saya dapatkan saat ini:


All Articles