Bagaimana cara menerapkan efek distorsi seperti 3D palsu untuk gulir sisi 2D?

14

Saya tidak yakin dengan istilah yang tepat untuk mencari di atau bahkan di mana untuk memulai meskipun saya membayangkan itu adalah semacam efek pemrosesan pos.

Saya telah melihat game seperti I Wanna Be The Boshy dan You Have To Win the Game yang berhasil mengubah perspektif game 2D untuk memberikan semacam efek 3D kepada mereka (lihat gambar di bawah). Boshy pada dasarnya membuatnya tampak seperti Anda berada di dalam menara (silinder) sementara You Have To Win the Game mendistorsi gambar sehingga terlihat seperti Anda bermain di monitor CRT lama, khususnya tampilan yang agak membulat.

  • Apakah ada istilah untuk efek ini?
  • Apa cara standar untuk menerapkan efek ini (terminologi)?
  • Bagaimana saya akan menerapkan efek seperti itu di mesin / kerangka kerja tingkat tinggi seperti Unity atau XNA / Monogame dari tampilan 20.000 kaki? (kode terperinci diterima dengan senang hati tetapi tidak perlu - Saya menyadari detail implementasi yang tepat mungkin bervariasi tetapi detail tingkat tinggi tentang apa yang perlu dilakukan akan sangat dihargai)

Saya Ingin menjadi Boshy Saya ingin menjadi Boshy

Anda harus memenangkan permainan masukkan deskripsi gambar di sini

Spartan Donut
sumber
Ya. Saya selalu penasaran ingin tahu istilah yang tepat untuk teknik ini. Yang terbaik yang bisa saya pikirkan adalah "efek layar tv lama"
Tofu_Craving_Redish_BlueDragon
Persis! Dan itu hanya bekerja untuk contoh terakhir
SpartanDonut

Jawaban:

7

Ini dapat diimplementasikan sebagai jenis efek pasca pemrosesan. (Saat menggunakan Unity / XNA / Dx / OGL / ...)

Metode geometri

Mulailah dengan membuat mesh yang menyerupai efek distorsi yang ingin Anda capai. (mis. model setengah silinder (atau kerucut, bola, kubus, ...), pastikan untuk mengatur koordinat tekstur). Render game 2D Anda seperti biasa, tetapi render hasil akhirnya menjadi tekstur. Kemudian, render geometri distorsi dengan tekstur yang baru saja Anda buat. Anda dapat menggunakan dunia / tampilan / proyeksi atau memodifikasi koordinat geometri / tekstur yang sebenarnya untuk mengontrol kekuatan distorsi. (gambar 1 menunjukkan game 2D biasa, gambar 2 menunjukkan tekstur yang sama diproyeksikan ke bola)

Contoh game Contoh diproyeksikan ke bola (menggunakan blender)

Metode distorsi

Alat pemrosesan gambar sering menawarkan efek distorsi yang dapat meniru proyeksi (sedikit seperti ilusi optik). Misalnya, gambar 3 dihasilkan menggunakan filter tonjolan dari Paint.Net

Distorsi tonjolan.

(Anda dapat menemukan implementasi (OpenGL ES 2.0) dari efek distorsi ini dari proyek GPUImage - lihat GPUImageBulgeDistortionFilter)

Bergantung pada implementasinya, metode mana pun mungkin lebih cepat atau memberikan kecocokan yang lebih baik untuk hasil yang Anda inginkan. Karena kedua implementasi cukup sederhana, Anda dapat mencoba mengimplementasikan keduanya dan melihat mana yang paling cocok untuk Anda.

Miklas
sumber
Jawaban yang fantastis!
Tholle
1
Keduanya membutuhkan pemrosesan jumlah gambar yang sama. Proyeksi tidak akan pernah lebih cepat daripada tidak melakukan apa pun , dan biaya pemrosesan gambar juga sama. - Metode "Distorsi" lebih cepat karena Anda melewatkan transformasi vertex dan rasterisasi, juga Anda memberi pengemudi lebih banyak kebebasan untuk iterate piksel, di mana pendekatan poligon lebih spesifik tentang cara menggambar. Akhirnya, poligon menyimpan lebih sedikit informasi tentang efek yang Anda maksudkan, menggunakan solusi generik yang menekankan perangkat keras penyaringan tekstur dan menghasilkan perkiraan bukannya filter nyata.
MickLH
@MickLH: Verteks untuk proyeksi pasca-pemrosesan tersebut dapat dihitung secara offline atau saat memuat, menghasilkan pass-through vertex shader yang sangat murah. Untuk filter tonjolan, quad layar penuh harus dirender dan di-raster juga (kecuali jika SpartanDonut memiliki akses ke mis. Compute shaders), dan untuk setiap piksel offset harus dihitung alih-alih diinterpolasi. Oleh karena itu, saya percaya (tergantung pada alat yang tersedia dan implementasi) kedua metode bisa sama cepatnya. Saya telah memperbarui jawaban saya, terima kasih atas masukan Anda.
Miklas