Dynamic Depth of Field TR

Rate this Article:
0.00

Approved for Versions:4.0 to 4.7.5

Genel Bakış

DoF 5.jpg

Dinamik Odak Derinliği FPS oyunlarında şarjör değiştirirken veya gez & arpacıktan nişan alırken(ironsight) görüş alanının kalanının netliğini düşürmeye yarayan bir efekttir. Oyun dışında sahnelerinizde screenshot alırken veya animasyon kaydederken de sürekli post process değerleriyle uğraşmanıza gerek kalmadan odaklama yapmanızı sağlar.

Aşağıda bu efekti TP_FirstPersonBP örnek projesinin oyuncu kamerasına nasıl entegre edebileceğinizi anlatacağım. Sonra buradan yola çıkarak sistemi istediğiniz kameraya uygulayabilirsiniz.

Blueprint Hazırlama

Hazırlayacağımız Blueprint kodunun tamamı şu şekilde olacak:

DoF 6.JPG


Şimdi detaya girelim.


Eventler

DoF 7.JPG


Event Tick ve Input(Right Mouse Button) olmak üzere iki adet event kullanacağız. Bu efektin sürekli aktif olmasını istemediğimiz için sağ fare tuşunu(Right Mouse Button) kullanarak kameradan doğrusal bir çizgi(line trace) ateşleyeceğiz, bu da bize odak noktasında bir obje varsa hangi obje ve nerede olduğunu verecek. Sağ fare tuşunu bıraktığımızda ise Timeline'ı geriye sararak odaklama efektini durduracak. Takip eden bölümlerde göreceğimiz üzere Event Tick aynı zamanda kameranın post process ayarlarını güncelleyecek.

Trace Distance isimli node kalabalık olmasın diye daraltılmış(Collapse) bir gruptur. Açılmış halini aşağıda görebilirsiniz:

Collapsed TraceDistance.JPG


Return Value 1 kameranın konumu, 5000 ise takip edeceğimiz(Line Trace ile) maksimum uzaklıktır.


Trace Hit Sonucu ve Odak Mesafesi

DoF 8.JPG


0.0'dan 0.5'e yükselen float track'i olan 1 saniye uzunluğunda bir Timeline kullanacağız. Bu aynı zamanda efekti açıp kapatmaya yarayacak. Her tick(işlemci zamanı) yaptırdığımız Line Trace bize bir boolean değişkeni verir. Boolean doğru(True) ise Blueprint'teki işlemlerimiz devam eder, yanlış(False) ise efekti durdurmak için Timeline başa sarılır.

Eğer Line Trace bir objeye isabet ederse çıkan sonucu açarız(Break Hit Result) ve oradan temas konumunu(Hit Location) alırız. Kamera ve temas noktası arasındaki mesafeyi hesaplamak için aşağıda görmüş olduğunuz makroyu kullanacağız:

FocusDistance Macro.JPG


Veya Vector Length node'unu kullanabilirsiniz. Kameranın konumunu odak noktasının konumundan çıkartın(Vector > Subtract) ve çıkan sonucu Vector Length'e bağlayın. Böylece yine aynı mesafeyi elde edebilirsiniz.

Şimdi istediğimiz verilere sahip olduğumuza göre bu verileri kameranın odak derinliği(depth of field) ayarlarını değiştirmek için kullanabiliriz.


Post Process Ayarları

DoF 9.JPG


Önce kameranın post process ayarlarını alacağız, bu da odak mesafeleri arasındaki fark fazla ise yumuşak bir geçiş olmasını sağlayacak son odak mesafesi(last focal distance) değerini verecek.

Break/Make post process node'larını çıkartmak için;

  1. Önce kameranızın değişkenini çağırın. Get First Person Camera
  2. Kamera değişkeninin çıkışından imleci sürükleyip açılan menüden post process ayarlarını alın. Get Post Process Settings
  3. Post process ayarlayından sürükleyin ve Break and Make PostProcessSettings node'larını göreceksiniz.

Şimdi Break Postprocesssettings node'unun Details panelinden sadece Depth of Field Focal Distance ayarını etkinleştirin. Node üzerinde daha rahat çalışabilmeniz için bütün ayarları kapatıp(Details panelinden) sadece ihtiyacınız olanları etkinleştirmeniz iyi olur. Depth of Field Focal Distance değerini alıp Last Focus isimli bir değişkene dönüştürdüğümüz saman(Set) bu değer son odak mesafemiz olacaktır. Son olarak, son odak mesafesi ve temas noktası arasında yumuşak bir geçiş elde etmek için FInterp To node'unu kullanacağız.


Sonuç ve Notlar

Anlatılan ve gördüğünüz herşeyi yaptığınızda sağ fare tuşuna her basışınızda şöyle bir efekt göreceksiniz:

Final Result


Bu fonksiyona sahip karakter Blueprinti olan örnek bir projeyi buradan indirebilirsiniz.


Notlar:

  • Interp Speed(geçiş hızı) değerini kullanmak isteğe bağlıdır ama kullanılmasını tavsiye ederim.
  • Near ve Far Transition değerlerini istdiğiniz gibi belirleyebilirsiniz. Daha yumuşak bir geçiş için değere ekleyin(Add), keskin bir geçiş için değerden çıkartın(Subtract.)