Bagaimana cara saya meniru efek warp dari Geometry Wars?

12

Saya mencoba untuk mencapai efek warp yang Anda lihat dalam game seperti Geometry Wars .

Cuplikan layar Geometry Wars termasuk efek warp

Dapatkah seseorang membantu menjelaskan apa yang sedang terjadi di sini? Saya merasa seperti sumbu z grid dimanipulasi dalam beberapa cara, dengan cara apa pun, oleh programmer, tetapi apakah mungkin ada beberapa persamaan matematika yang dikenal untuk benar-benar mendapatkan efek warping yang benar?

Sunting: Untuk lebih spesifik, maksud saya warping dari grid. Bagaimana semuanya terlihat ditarik ke arah sumbu z negatif dan kemudian memantul.

Joey Green
sumber
1
Apakah Anda mengacu pada latar belakang yang ditekuk? Karena ini adalah Geometry Wars , ada banyak kekacauan dalam tangkapan layar, yang telah membuat saya menggaruk-garuk kepala untuk sementara waktu untuk mencoba dan memberi tahu apa yang Anda maksud.
Grace Note
Ya latar belakang membungkuk.
Joey Green

Jawaban:

12

Implementasi 10 menit dari sistem pegas sederhana (atau begitulah katanya di blog - nya ;)). Sistem ini dapat menangani beberapa lungsin dan hal-hal lain yang merusak grid.

Diperbarui untuk menambahkan beberapa detail tambahan kecil:

Beberapa detail lainnya. Dari sebuah wawancara yang dulu di-host di situs Aneh Ciptaan (situs itu sekarang telah hilang karena penutupan perusahaan) ada pertanyaan:

T: Salah satu fitur grafis baru yang paling mencolok dalam permainan adalah area bermain "grid gravitasi". Bagaimana Anda membuat ini terlihat sangat keren; apakah setiap objek dalam game benar-benar memiliki gravitasi sendiri? Grid itu sendiri terdiri dari 60.000 poin, masing-masing memberikan sedikit kekuatan pada tetangganya. Simulasi itu sendiri berada di ujung stabilitas yang menyebabkannya berayun begitu banyak ketika salah satu objek game memberinya dorongan kecil! Hanya beberapa jenis objek yang memengaruhi grid. Karena sistem grid agak mahal untuk dihitung, sebenarnya berjalan pada inti kedua bersama dengan sistem audio, (inti pertama didedikasikan untuk gameplay dan partikel, yang ketiga digunakan untuk membuat audio).

Roger Perkins
sumber
1

Saya tidak tahu apakah ada cara yang "benar" untuk melakukannya, tetapi kemungkinan itu hanya transformasi linear yang menyenangkan secara estetika yang diterapkan dengan falloff yang dihitung dari jarak ke titik.

Jadi untuk elemen apa pun yang bekerja dengan Anda, Anda akan:

  • temukan jarak ke pusat warp (d)
  • menghitung 1 - d / jarak maksimum efek yang Anda inginkan (i untuk intensitas)
  • jepit itu ke [0-1]
  • mengubah elemen dengan lerp (identitas, transform, i)

Namun, perang Geometri menerapkannya sebagai belokan yang menyimpang ke beberapa elemen, sedangkan elemen lain seperti partikel hanya dipengaruhi oleh "kekuatan", tanpa terdistorsi. Anda bisa menerapkan distorsi dalam vertex shader, dengan anggapan Anda memiliki cukup simpul untuk sampel efek dengan lancar. Sebagai alternatif, Anda dapat merender semua yang perlu mempengaruhi buffer offscreen terlebih dahulu, dan kemudian memberikan hasilnya ke quad tessellated baik yang Anda gunakan distorsi, sebelum menambahkan semua elemen yang tidak terdistorsi di atas.

Sedangkan untuk transformasi, penskalaan akan memberikan Anda tampilan yang menarik. Jika saya ingat dengan benar, ada beberapa putaran yang terjadi, yang hanya akan sedikit rotasi.

Anda bisa menjadi semakin keren dengan perhitungan faktor intensitas untuk mendapatkan efek yang terlihat lebih aneh. Anda bisa, misalnya, menghitung sudut (a) bahwa suatu elemen relatif terhadap pusat, dan faktor yang masuk. Ambil cos (a) dan Anda dapat membuat gelombang radial dalam efeknya. Yang ingin Anda lakukan adalah mengatur diri Anda dengan kode perancah yang diperlukan dan kemudian pergi ke kota bereksperimen dengan berbagai kombinasi faktor.

Chris Subagio
sumber
Keren terima kasih saya akan mencoba ini. Apakah algoritma yang Anda gambarkan pada dasarnya adalah efek pegas?
Joey Green
Tidak, saya tidak menjelaskan bagaimana itu akan berubah seiring waktu, jadi bukan pegas. Saya baru saja menjelaskan cara mendapatkan bentuk distorsi yang Anda cari. Animasi dalam gaya GW akan membutuhkan penambahan faktor lain di sana, memodulasi saya dari waktu ke waktu. Coba terapkan semuanya dan akan menjadi jelas bagi Anda bahwa Anda dapat mengukur saya untuk bersantai atau meningkatkan efek Anda. Lewati gelombang sinus melalui nilai modulasi itu, atau pantulkan seperti pegas 1D dan Anda akan secara efektif memantulkan semuanya. Sekali lagi, setelah Anda memiliki harness dengan sekelompok variabel yang beredar, eksperimen akan menjadi teman Anda.
Chris Subagio