Bir 2D yan kaydırma oyunu için sahte 3D gibi bozulma efektleri nasıl uygulanır?


14

Arama işlemi için uygun terimlerden emin değilim, hatta nereden başlayacağımı tahmin ediyorum.

Ben gibi oyunlar gördüğüm ı Wanna Boshy Be ve Sen Have To Win Oyun (aşağıdaki resimlere bakınız) onlara 3D etkisi bir tür vermek için 2D oyunların perspektifini değiştirmek yönetmek. Boshy temelde bir kulenin (silindir) içinde olduğunuzu gösterirken Oyunu Kazanmanız Gerekir, görüntüyü bozar, böylece eski bir CRT monitörde, özellikle hafif yuvarlak bir görünümde oynadığınız gibi görünür.

  • Bu etki için bir terim var mı?
  • Bu etkiyi (terminoloji) uygulamanın standart yolu nedir?
  • Böyle bir etkiyi 20.000 fitlik bir bakış açısıyla Unity veya XNA / Monogame gibi üst düzey bir motorda / çerçevede uygulamaya nasıl başlayabilirim? (ayrıntılı kod mutlulukla kabul edildi, ancak gerekli değil - kesin uygulama ayrıntılarının değişebileceğini, ancak yapılması gerekenlerle ilgili üst düzey ayrıntıların büyük ölçüde takdir edileceğini anlıyorum)

Boshy olmak istiyorum Boshy olmak istiyorum

Oyunu Kazanmalısınız resim açıklamasını buraya girin


Evet. Her zaman tekniğin tam terimini bilmek isterdim. Düşünebileceğim en iyi şey "old tv screen effect"
Tofu_Craving_Redish_BlueDragon

Kesinlikle! Ve bu sadece son örnek için işe yarıyor
SpartanDonut

Yanıtlar:


7

Bu, işlem sonrası bir tür etki olarak uygulanabilir. (Unity / XNA / Dx / OGL / ... kullanırken)

Geometri yöntemi

Başlamak istediğiniz bozulma efektine benzeyen bir kafes oluşturarak başlayın. (örneğin yarım silindiri modelleyin (veya koni, küre, küp, ...), doku koordinatlarını ayarladığınızdan emin olun). 2D oyununuzu her zamanki gibi işleyin, ancak nihai sonucu bir dokuya dönüştürün. Ardından, yeni oluşturduğunuz doku ile bozulma geometrisini oluşturun. Bozulmanın gücünü kontrol etmek için dünyayı / görünümü / projeksiyonu kullanabilir veya gerçek geometri / doku koordinatlarını değiştirebilirsiniz. (Resim 1 normal 2D oyunu gösterir, Resim 2 bir küreye yansıtılan aynı dokuyu gösterir)

Oyun örneği Bir küreye yansıtılan örnek (blender kullanarak)

Bozulma yöntemi

Görüntü işleme araçları genellikle projeksiyonu taklit edebilecek bozulma efektleri sunar (optik yanılsamalara benzer). Örneğin, resim 3 Paint.Net'teki çıkıntı filtresi kullanılarak oluşturuldu

Çıkıntı bozulması.

(Bu bozulma efektinin bir uygulamasını (OpenGL ES 2.0) GPUImage'dan bulabilirsiniz projesinden bulabilirsiniz - bkz. GPUImageBulgeDistortionFilter)

Uygulamaya bağlı olarak, her iki yöntem de daha hızlı olabilir veya istediğiniz sonuca daha iyi bir uyum sağlayabilir. Her iki uygulama da oldukça basit olduğundan, her ikisini de uygulamayı deneyebilir ve hangisinin sizin için en uygun olduğunu görebilirsiniz.


Harika cevap!
Tholle

1
Her ikisi de aynı miktarda görüntünün işlenmesini gerektirir. Yansıtma hiçbir şey yapmamaktan daha hızlı olmayacak ve görüntü işleme her iki şekilde de aynı olacak. - "Bozulma" yöntemi daha hızlıdır çünkü köşe dönüşümü ve rasterleştirmeyi atlıyorsunuz, ayrıca sürücüye çokgen yaklaşımının hangi sırayı çizeceği konusunda daha spesifik olduğu pikselleri yinelemek için daha fazla özgürlük veriyorsunuz. Son olarak, çokgenler amaçladığınız etki hakkında daha az bilgi sahibi olmak, doku filtreleme donanımını vurgulayan ve gerçek filtre yerine bir yaklaşım üreten genel bir çözüme başvurmaktır.
MickLH

@MickLH: Bu tür işlem sonrası projeksiyon için tepe noktaları, çok ucuz bir doğrudan geçişli gölgelendirici sağlayarak çevrimdışı veya yükte hesaplanabilir. Bir çıkıntı filtresi için, tam ekran dörtlü de işlenmeli ve rasterleştirilmelidir (SpartanDonut'un örneğin hesaplama gölgeleyicilerine erişimi varsa) ve her piksel için enterpolasyon yerine ofset hesaplanmalıdır. Bu nedenle, (mevcut araçlara ve uygulamaya bağlı olarak) her iki yöntemin de eşit derecede hızlı olabileceğine inanıyorum. Cevabımı güncelledim, girişiniz için teşekkürler.
Miklas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.