Patlamadan Gerçekçi Kamera / Ekran Sarsıntısı


36

Bir patlama sırasında kamerayı biraz sallamak istiyorum ve onu sallamak için birkaç farklı işlev denedim ve hiçbir şey gerçekten 'vay, ne kadar da bir patlama!' Gibi görünmüyor. aradığım duyguyu yazın. Bir miktar doğrusal zayıflamanın yanı sıra kare dalga tipi bir deseni rastgele göreceli olarak yüksek frekanslı sinüs dalga paternleri denedim. Sadece bir ekseni, ikiyi ve üçünü taşımayı denedim (bu durumda dolly etkisi zar zor farkedilse de).

İyi bir kamera titreyen paterni bilen var mı?


2
Patlamalardan sonra kamera titremeleri ile ilgili bir film görüntüsü bulmaya çalışın ve kameranın nasıl sallandığını ve kodunuzu buna nasıl dayandığını görmek için ağır çekimde izleyin.
Skizz

Ben de aynı sorunu yaşıyorum - yalpalama çok düzgün görünüyor
Iain

Bir kamera sarsıntısı uygularken karşılaştığım en büyük sorun kamera yerine oyuncu karakterinin (kameranın odaklandığı) hareket ettiği görünüyor. İşin garibi, kamera hareket eden, fark ettiğiniz çevreye bakarsanız, ancak oyuncu karakterine odaklandığınızdan beri algınız bozuluyor. Bunu hala çözmeye çalışıyorum - muhtemelen kamera oynatıcıya doğru / uzaklaştığında görüş alanını değiştirerek.
Kaj

Yanıtlar:


35

Kamera yönüne Perlin gürültüsü uygulayarak iyi kamera sarsıntısı var. Size daha yüksek frekanslı çalkalama yerleşik, iyi bir sarsıntı verir ve gerçekten iyi görünebilir.

http://mrl.nyu.edu/~perlin/doc/oscar.html , gürültü üretmek için daha fazla ayrıntı ve örnek kod içerir.


3
Oh, gürültü, neden bunu düşünmedim ... Sonunda bir patlama hemen hemen kısa bir gürültü patlaması, değil mi ... Mükemmel bir fikir!
falstro

iyi fikir, çözmek için perlin gürültüsünü kullanamayacağınız bir şey var mı? : P
Cubed2D,

1
Gürültü kesinlikle gidilecek yoldur, peşinizdeki etkiyi bile hayal ederseniz, rastgele hareketlerdeki kısa değişimleri farklı yönlerde görebilirsiniz. Ama bu bir spazm olamaz, bu yüzden kısa bir üniforma bölümlerine ihtiyacınız var. Perlin gürültüsü için mükemmel bir kullanım gibi görünüyor.
deceleratedcaviar

17

Patlamadan gelen bu titrek perde sallanmasından bahsediyorsanız, prototip oyunumda bunu uygulamaya çalıştım (2d ama oldukça iyi bir şekilde 3d'ye çevirmeli, bence). Youtube videosuna bir göz atın ve aradığınız şey olup olmadığına bakın - ekran sarsıntısı yaklaşık 1:35

Her neyse, elde ettiğim yol, sceen için bir bakış açısı oluşturmak ve merkez noktayı ( centre) depolamaktı .

Bir patlama başladığında radius, ~ 30px'lik bir rasgele yaratırım . Daha sonra görüntüleme centreçerçevesini bu kadar pikselden rasgele bir yönde kaydırdım.

Daha sonraki her güncelleme için (ekrana çizme arasında), radius% 10-20 oranında azaltıyorum ve görüntü alanını centretekrar bu kadar piksel kadar dengeliyorum. Bununla birlikte, bu sapma için rastgele bir açı seçmek yerine, önceki bakış açısı açısını alıp centre180 +/- 60 derece ekledim.

Temel olarak, her güncelleme (veya 10-20ms ya da öylesine), centreekran penceresinden azalan sayıda pikselle görünümünüzü dengeliyorum .

İşte bazı sahte kod:

viewportCentre = (400,300) //Lets say screen size is 800 x 600
radius = 30.0
randomAngle = rand()%360
offset = ( sin(randomAngle) * radius , cos(randomAngle) * radius) //create offset 2d vector
viewport.setCentre(viewportCentre + offset) // set centre of viewport
draw()  

while(true)  //update about every 10-20ms
{ 
    radius *=0.9 //diminish radius each frame
    randomAngle +=(180 +\- rand()%60) //pick new angle 
    offset = (sin(randomAngle) * radius , cos(randomAngle) * radius) //create offset 2d vector
    viewport.setCentre(viewportCentre + offset) //set centre of viewport
    draw() //redraw
}

Yarıçap 2.0 değerinin altına düştüğünde genellikle ekran titremesini durdururum, bu noktada görüntü portunu tekrar sıfırlarım centre.


4
Bu uygulamayı çok seviyorum, küçük 2D oyunlar için mükemmel çalışıyor. Bir yorum olarak, randomAngle += (150 + rand()%60)+/- sorunlardan kurtulmak için yapmak eşdeğerdir .
Krøllebølle

2
Videonuz kapalı.
Tara,

Ne tür bir "+/-" hesaplaması? Bu tür şeyleri hiç görmedim.
Yoo Matsuo

4

Bir kameranın titremesini sağlamak için “doğru hissetmek” doğru hareket yönü ve ivme eğrileri hakkında daha azdır.

Kamera sarsıntıları animasyon alemine dalıyor ve tüm aksiyon / tepki kuralları geçerli. Eğer bir noktadan diğerine doğrusal bir şekilde hareket ediyorsanız, pürüzsüz ve düzgün hissedecek ve bir etki yaratmayacaktır.

Başınızı ileri geri sallarsanız, ortasındaki en hızlı şekilde değişen yönler arasında hareket ettiğini fark edersiniz ve ilk önce yavaşlamanız ve ardından yeni yöne başlamanız gerektiğinden her iki tarafta yavaşlar.

İşte hareketinize uygulamak için çeşitli hareket hızı fonksiyonlarının bir listesi . Biraz daha ani hissettirmek için ilk hareketi yalnızca EaseOut'a, sonra da kafa / kamera hareketini simüle etmek için kalanı EaseInOut'a bırakmak isteyebilirsiniz.


1
Bence hareket hızı hala çok pürüzsüz hale gelir. Perlin gürültüsü iyi bir fikir gibi görünüyor, aksi halde solmaya neden olmak için zaman içinde sıfıra azalan rastgele aralıkta rastgele bir düzlük gibi görünüyor (azalan yarıçapta farklı hareket fonksiyonlarını denemeyi tercih ediyorum, hareketi kolaylaştırmak kameranın kendisi ilkbaharda gibi hissetmesini sağlar, deneyimlerime göre kamera titremesinde doğru hissetmez).
Kaj

3

wkerslake haklı, kamera titremesi düşündüğünüzden daha karmaşık görünüyor.

Sallanan bir kamerayı taklit ederken, ne tür bir kamerayı (operatör) taklit etmek istediğinizi düşünmeniz gerekir. Kameranın ağırlığı ataleti etkiler, örn. ağır kameralar küçük “rastgele” hareketleri yumuşatır. Raylı veya arabadaki bir kamera operatörü ek sesler ekler.

Perlin veya Simplex gürültüsünü kullanmak kesinlikle bir seçenektir, o zaman hepsi farklı gürültü oranları arasında doğru dengeyi bulmakla ilgilidir. Ancak değerler arasındaki enterpolasyonu kullanmanın daha az hesaplama yoğun olduğunu ve aynı derecede etkili olabileceğini gördüm.

Bir süre önce, pek çok şeyi doğru buluyor gibi görünen bir Maya senaryosu buldum. Sen bir göz sürebilir o .

Ayrıca, Gran Turismo'ya (5) bir göz atmak isteyebilirsiniz , takımları oyunda tekrar oynatırken çeşitli gerçek zamanlı kamera titremeleri yaparken etkileyici bir iş çıkardılar.


2

Dinamik nesne fiziğine sahipseniz (muhtemelen doğru kelime değil, ne demek istediğimin türünden), sabit olmayan herhangi bir nesnenin patlama tarafından 'havaya uçurulması' durumunda, kameranın böyle bir nesne olarak etkilenmesini sağlayabilirsiniz.
Tek fark, sadece kameranın dönüş / adım / yalpa / yuvarlağını değiştirmek olacaktır, pozisyonu değil.
Bunun dışında, rastgele bir sayı dizisi oluşturabilir ve bunları bir şekilde rotasyona dönüştürebilir mi? Yükseklik haritası, gri tonlamalı öğelerin bir örnek olabileceğini düşünün; Tamamen farklı değiller ama rastgele.


+1 ilginç fikir, sanırım gürültü hareketini deneyeceğim, ve o koşuyu açtığımda, sanki kamera bir yaya bağlı ve geriye doğru bastırılmış gibi daha yumuşak bir dolly efekti eklemeye çalışacağım şok tarafından.
falstro
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.