"bir yazılımcının not defteri.."

3 Ocak 2018 Çarşamba

UE4 - Camera Kullanımı

UE4 de bir kamera doğrudan level içine konumlandırılabilir veya bir Blueprint in bir parçası olabilir; örneğin bir uçak uçtuğunda, araba sürerken veya karakteri kontrol ederken perspektif örneği sağlayan bir Blueprint.

Camera Actor ü level e eklemek Modes Menüsünden bir Camera level e sürükleyerek yapılır.



bulmanın kolay yolu olarak sol taraftan All Classes kısmında geçilerek Search Bar da kullanılabilir.

veyahutta, Level Viewport a sağ tıklayıp açılan Context menüden Place Actor -> Camera Actor seçilebilir.



Level imize bir Camera Actor konumlandığında sembolik bir kamera ikonu olarak onun varlığını sahnede (scene) görebiliriz.

Camera nın adı aynı zamanda pencerenin bir köşesindeki mini pencerede de görünür. Bu pencerenin sol alt tarafındaki iğne ikonuna basarak kamera kapandığında da pencerenin ekranda kalması sağlanabilir.



Bir Camera seçili iken, Details panelinin Camera ile ilgili ayarlarla doldurulduğunu göreceksiniz;



şimdi bunları biraz inceleyelim:


Transform
Camera nın world içindeki location ve rotation bilgileri.


Camera Settings
burada Camera nın kullandığı bazı önemli ayarlamalar mevcut: 
Projection Type (Perpective, Orthographic), 
FOV (field of View) (yani görüş genişlik açısı), 
Aspect Ratio (yani çerçeve nin en boy oranı; tıpkı yeni televizyonların yanlamasına geniş olması bu oranın daha büyük olduğunu gösterir, tam kare görüntüde bu oran 1 dir, yani en boy aynıdır.) ve post process blending ayarlamaları yapılabilir.


Auto Player Activation
Varolan herhangi bir Player Controller etkin olduğunda, bu Kamerayı bu otomatik olarak kullanması gerektiğini belirtir.


Film
bu kısım bazı film renk efektlerini kamera görüntüsüne vermek için kullanılır; örneğin: Tint, Saturation, veya Contrast. Detaylı bilgiyi buradan alabiliriz: Film




Scene Color
bu da kemara görüntüsüne başka bir renk efekti vermek için kullanılır; Film Efekti gibi ama daha farklı çalışır; detaylı bilgi buradan edinebiliriz: Scene Color.


Bloom
Bu, parlak nesneleri izlerken gözün algıladığı etkileri taklit eder. detaylı bilgi için bakabilirsiniz: Bloom.




Light Propagation Volume
Gerçek Zamanlı (real rtime) olarak Küresel (Global) Aydınlatma (GI) elde etmek için kullanılır. detaylı bilgi için Light Propagation Volumes.


Ambient Cubemap
Verilen bir image den sahneyi aydınlatır. Detaylı bilgi için: Ambient Cubemap.




Auto Exposure
Bu, parlak / karanlık alanlara alışan insan gözünü taklit eder. Yani bir süre sonra karanlığa veya parlak ışığa adapte olan insan gözünü ışık değişimleri ile taklit eder; detaylı bilgi için: Auto Exposure.


Lens Flares
Bu, kamera merceklerinde bulunan kusurlar aracılığıyla parlak nesneleri izlerken ışığın saçılmasını simüle eder; detaylı bilgi için: Lens Flares.


Ambient Occlusion
Bu, occlusion nedeniyle ışığın zayıflamasını yaklaşık olarak belirten bir etkidir. Detaylı bilgi için: Ambient Occlusion.


Global Illumination
Bir sahnenin brightness, color, veya tint değiştirmek için Lightmass'dan gelen dolaylı ışık katkısını etkilemek için kullanılır. Detaylı bilgi için: Global Illumination.


Depth Of Field
Bu, odak noktasının önündeki veya arkasındaki mesafeye dayalı olarak bir sahneye bir bulanıklaştırma (blur) efekti uygulamak için kullanılır. Detaylı bilgi için: Depth Of Field.




Motion Blur
objeleri hareketlerine bağlı olarak bulanuk göstern Motion Blur effect i uygular, detaylı bilgi için: Motion Blur.




Misc
bu adına Blendables denen ekran bildirimlerini uygulamak için kullanılır, Anti-Aliasing metodunu veya kamera için "Screen Percentage" değerlerini ayarlar. Bunlara da bakabilirsiniz:  Blendables , Screen PercentageAA Method.


Screen Space Reflections
Bu, varsayılan olarak, Materyalin yüzeyindeki nesnelerin görünümünü değiştiren bir efekttir. Detaylı bilgi için: Screen Space Reflection.


Activation
bu ayar Kamera nın otomaitk olarak aktif (enabled) olup olmayacağına karar verir. 


Tags
Actor ün üzerine Tag lar (etiketler) yerleştirmene izin verir.


Actor
bu da malum Camera Actır ün kendisi ile ilgili bilgilerdir.


Blueprint
Actor e Event ler ve ila diğer kodlamalar eklemek için. 


bir kamerayı sinematik amaçlar için kullanmak istiyorsanız Matinee How-To  dökümantasyonunun Camera kısmına bakabilirsiniz.

burada basitçe kamera actör lerini level e eklemekten ve bşraz da özelliklerini incelemekten başka birşey yapmadık; ancak devam eden örneklerde Camera bakış açısını  (Camera viewpoint) bir oyuncu için nasıl ayarlayacağımızı görecek ve aralarında geçişler yapacağız; Dahası Camera Component ile birlikte çalışan  Spring Arm Component i de inceleyeceğiz; ve birlikte nasıl Third Person perspektifi yarattıklarını göreceğiz.





Statik Camera Kullanımı
Static kamera da oyun sırasında bir oyuncunun perspektifi için kullanılan static (sabit) bir kamera açısı vardır. 

Hemen bir örnek yapalım;  Blueprint Third Person Template project ini Starter Content dahili şekilde başlatın;

Modes menüsünden Camera Actor ü bulup level içine sürükleyin;



level deki Camera Actor ü oyuncularınızın görüş perspektifi olmasını istediğiniz yere yerleştirin;

oyuncunun sahip olacağı bakış (view) hakkında daha iyi bir fikir edinmek için Viewport 'u Camera Actor üne kilitleyerek ve Pilot moduna girerek, First Person Perspektifini Kameranın Görünüm Noktasından (Viewport Point) alabilirsiniz.

Şöyleki, level içinde kamera seçili iken ona sağ tıklayıp context menü içinden Pilot 'CameraActor seçin,



şimdi sol veya sağ mouse buttonunu basılı iken yön tuşları veya WASD tuşları ile Viewport etrafında gezinebilirsiniz.

Level de uçarken Camera nın pozisyonu da değişecek ve gameplay esnasında vereceği perspective hakkında kolayca bir fikir edinmenizi sağlayacaktır.

Unlock button una basarak kamera kilidini kaldırın.



Camera, onu unlock ettiğiniz andaki son pozisyonda kalacaktır.

Unlock un yanındai simge oyun içi (in-game) kamera görünümünü (view) veya level editörü view i arasında geçiş yapmanızı sağlar.



şimdi programlamaya başlayalım,

Level içindeki Camera Actor seçili iken Toolbar daki Blueprints buttonuna tıklayarak Open Level Blueprint deyin.



Level Blueprint i içinde graph ektanında boşluğa sağ tıklayın ve Create a Reference to CameraActor deyin.



böylece Level editörü içindeki seçili olan kameranın (seçili Camera Actor ün) Blueprint ortamında onu refere eden bir ikonuna sahip olduk; ve böylece Blueprint hangi kamera actor ünden bahsettiğiizi biliyor olacak; çünkü levelde bi çok kamera actör ü de olabilirdi.

graph a tekrar sağ tıkların ve Event Begin Play nodunu ekleyin;



bu bir kez koşturulacak olan BeginPlay event kod bloğudur, oyun tam başladığında koşacak olan blok;

tekrar sağ tıklayıp Set View Target ismi ile arama yapın ve Set View Target with Blend nodunu da grapha ekleyin;



arama yaparken Context Sensitive checkbox ındaki ticki kaldırmanız gerekebilir; böylece büyük küçük harf ayırımı olmaksızın aradığınız listede görünecektir.


şimdi aynı yolla , graph a sağ tıklayıp bir Get Player Controller nodu ekleyelim.



nodları aşağıdaki şekilde bağlantılayın.



burada Event Begin Play oyun başladığında başlangıç olarak tetikleniyor, sonra o nodun bağlı olduğu Set View Target with Blend noduna gidiyor; bu, Index 0 daki Player Controller için Camera Actor nod bakış / görüş açısını ayarlayan bir noddur; bu aynı zamanda default Player Controller dir.

Set View Target with Blend nodundaki diğer seçenekler (options), zaman içindeki geçişler (Blend) yapmanızı sağlamasıdır; yani View Target in değişmesini sağyacaktır; kullanılan Blend tipini belirtin, veya Blend i kontrol etmek için başka unsurlar verin; giden (outgoing) View Target i Blend için kilitlemeniz de mümkündür; biz bunları default değerlerinde bırakacağız.

Compile ederek Blueprint i tamamlayın.



Play diyip editör içinden oynayalım.

Sonuç:
oyun başlar başlamaz oyuncunun (player) bakışının (view) bizim kullandığımız Camera Actor e atandığını göreceksiniz; ayrıca view in letterboxed (yani siyah çerçeveli) olduğunun da farkına varacaksınız; bunu Details panel içinde Camera Actor özelliklerinen Constrain Aspect Ratio seçeneğini kaldırarak disable edebilirsiniz.






Camera Component leri ile çalışmak:
şimdi level imizde (playable) oynanabilir veya oynatılmayan (none-playable) karakterler için third person perspektifleri oluşturmak için kullanılabilecek bir Blueprint'e bir Kamera Bileşeni eklemeye çalışalım.

Burada, bir Karakter Blueprint'e bir Camera Component ekleme sürecini inceleyeceğiz; ve bir karakter için iki farklı view arasında geçiş yapma yeteneği kazanmış olacağız.

bu örnekte biz Blueprint Third Person Template ve Starter Content dahili bir şekilde bir proje kullanacağız.

projeniz açık iken karakteri seçin ve delete ye basarak onu kaldırın.



bu karakter Blueprint template i ile gelen default karakter idi; zaten onada attach lenmiş bir camera component vardı. ve onu karakterle oynarken nasıl bir görüntü olacağını anlamak için preview penceresinden görebiliriz. 


şimdi yeni bir karakter kurulumu yapacağız;

önce Content Browser içinden Add New buttonuna tklayın ve Blueprint Class ı seçin.




gelen pencereden Character class tipini seçin ve adına da MyCharacter deyin.



ardından Blueprint yeni yarattığımız class için otomatik olarak açılacaktır.

şimdi karakteirmize yeni itemler eklemeye başlayalım; Details panel den Components kısmına ve oradan da CapsuleComponent i seçip ekleyelim; Capsule Half Height özelliğin i 64 olarak değiştirelim.



Capsule Component, karakter için çarpışmaları belirleyici (Collision Detection) olarak iş görecektir; yani görünürde bir şey olmayacak ama bu component sayesinde karakter collision (çarpışma) simüle edecektir.

şimdi karakterimize görsel bir temsilci atayalım; bunun için yine Details Panel içindeki Components window kısmından, Add Component button una basın ve gelen listeden Static Mesh component deyin.



şimdi eklediğimiz Static Mesh in bazı özelliklerini ayarlayalım bunun için Details panel içinden kendisini seçili hale getirip Z location değerini -60 olarak değiştirelim ve Static Mesh property sini de Shape_NarrowCapsule olarak atayalım.



Copsule lokasyonunu ayarlamak için Z lokasyon value sini ayarlayarak, göreceğiz ki Static Mesh CapsuleComponent içine düşecek / girecek.

şimdi bir Cameracomponent ekleyelim ve üzerinde ayarlamalar yapalım, Blueprint editöründe Components window da, Add Component button una tıklayalım ve Cameracomponent i seçerek ekleyelim;



karaktere atadığmız bu kamera bize ne sağlayacak? elbette third person perspectifi sağlayacak :) kameranın işi bu.

Bu örnek oynanabilir (playable) bir karaktere odaklanmış olsa da, herhangi bir Blueprint'e bir Kamera bileşeni (Camera component) ekleyebilirsiniz, örneğin bir oyuncunun bakması için bir görünüm oluşturan bir güvenlik kamerası oluşturabilirsiniz.

şimdi Camera Component in kendileri seçili iken bir iki ayarını girelim, Details panel içinden lokasyonu için X : -120 ve Z : 20 olarak ayarlayalım.



bu değerleri camera yı capsule component in arkasında konumlandırmak için kullandık; siz biraz daha istediğiniz yere koyabilirizisiz;

tekrar Add Component button una tıklayın ve bu defa Arrow component i seçin;



burada karakterin sadece third person perspektifini kullanmasını sağlamış olmuyoruz; aynı zamanda oyuncunun bir tuşa basarak omuz üstü kamera görünümüne almasını da sağlamış olacağız.

biz bu Arrow component ini buttın a basıldığında veya serbest bırakıldığında kameraya nereye hareket edeceğini söyler.

Details panel içinden Arrow component için bazı lokasyon bilgisi ayarlamaları yapalım,



bu, button sertbest bırakıldığında dönmek isteyeceğiniz default camera konumuna (location) bir referanstır.

Add Component button una basın ve başka bir Arrow component seçerek onun da Location bilgisini aşağıdaki şekilde düzenleyin:



X değerini -40 olarak set ettik, ve Y değerini da 40 olarak ayarladık aşağıdaki örnekteki gibi yani,



bunun dışında, Arrow component lern pozisyonlarını istediğiniz şekilde ayarlayabilirsiniz;

Event Graph tab ına geçelim ve graph a sağ tıklayalım, ve arama kutusuna “right mouse button“ girelim,



Event Graph kamerayı hareket ettirmek için gerekli fonksyonelliği / işlevselliği sağlayacak.

şimdi My Blueprint penceresinin içinde, Ctrl a basılı tutarak sol mouse buttonu ile Camera component i graph a sürükleyin.



bu bize camera comoınent i programatik referans ve görsel sembolize eden bir ikonu graph a koymamızı sağlayacak.

şimdi aynı yolla elimizdeki Arrow component leri de grapha a ekleyelim;

şimdi graph içinde iken Camera node unun out nodundan kol çıkarıp arama kutusuna SetRelativeLocation yazarak bu nodu da ekleyelim.



bu bize camera yı istenen lokasyona taşımamızı sağlayacaktır.

şimdi Arrow 2 den kol çıkarıp aynı yolla Get Relative Location nodunu ekleyelim, ardından aşağıdkai gibi node bağlantılarını yapalım;



yapacağımız şey, mouse in sol tuşuna basıldığındakamera nın Relative Location, Relative Location özelliğinin değerine omuz hizasındaki kamera pozisyonunu simgeleyen Arrow 2 component Relative Location değerini atayacağız. Bir sonraki aşamada kamerayı default lokasyonuna geri getirmemiz gerekecek, bunu da Arrow 1 ile simgelemiş idik, aynı şekilde yapacağımız işlem, mouse buttonu bırakıldığında, aşağıdaki şekilde olacak:




şimdi scriptimizie derleyelim,




karakterimiz var fakat halen projemize oyun başladığında bizim yarattığımız karakteri default karakter olarak kullanmasını söylememiz gerekmekte.

Bunu ypamak için World Settings den Game Mode kısmına giriyoruz.




ve orada da Default Pawn Class özelliğini açarak kendi yarattığımız karakterimizi seçiyoruz.





daha sonra tool bar dan Play buttonuna basarak PIE (Play in Editor) modunda gözatabiliriz.

Sonuç Olarak,

editör içinde oynadığımızda iki kemera pozisyonu arasında geçiş yapabildiğimizi göreceğiz; bunu atamış olduğumuz (assigned) camera component ile yapıyoruz, olan şey aslında bu component in lokasyon bilgisini değiştirmekten ibaret; bu lokasyon bilgilerini de Arrow component lerden alıyoruz.

Karakterimize daha detaylı hareket fonksyonaliteleri eklemek istersek yarattığımız karakterin Blueprint ini editleyebiliriz.



yukarıdaki scriptte karakterin dolaşabilmesi (move around), zıplaması (jump), ve kamera bakış açısını değiştirebilmesi için çeşitli fonksyonalite şu anda bulunuyor.

Camera component
eklemennin hemen ardından genellikle bir de Spring Arm Component eklemek isteriz; ve Camerayı bu Spring Arm Componentine attach ederiz;

Spring Arm Component, kameranın dar alanlara girerken engellenmesini veya bir nesne karakter ile kamera arasında hareket etmesini önlemeye yardımcı olur.





Spring Arm Component Kullanımı
Kendisine atanmış bir Kamera bileşeni (Camera component) olması koşuluyla, bu örnekte de kendi karakterinizi kullanabilirsiniz.

burada, bir Spring Arm component ekliyoruz ve ona bir Camera component ekleyerek (attach ederek) camera ya parent yapıyoruz; böylece Kamera mız gameplay anındaki durumlara göre esnek hareketler yapacak, duruma göre genişleyecke veya daralacak.

3.kişi perspektifi (third person perspective) yaratmak için karaktere bir Camera component eklediğimizde genellikle Spring Arm ı da eklemek isteriz; böylece kamera nın level içi geomeriler ve çeşitli bazı durumlarda engellendiğinde yapılması gereken geçişler otomatik olarak kontrol edilerek ayarlanır.



spring arm, yaptığınız ayarlamalara (setting) bağlı olarak, kısıtlı bir duruma geldiğinde yumuşak geçişler için daha uzak camera pozisyonları ayarlayacak ve kısıtlı durum ortadan kalktığında ayarlardaki default kamera pozisyonunu döndürdürerek değeri kısaltacaktır.


şimdi Character Blueprint ini açalım,


şimdi Components penceresinden Add Component button una basarak Spring Arm Component i seçelim,




Components penceresinin içinde iken Camera Component i Spring Arm component inin içine sürükletin, böylece Camera Component Spring Arm Component e attach lanacaktır.





aşağıda görüldüğü gibi Spring Arm için kullanılan pek çok ayar mevcuttur.





Sockets
bu ayar bize bir Spring Arm ı istekelt sistemi (Skeletal Mesh) veya bir soket (Socket) üzerindeki bir kemik (Bone) e Parent yapmamıza izin verir.

Camera
burada eğer hiçbir collision (çarpışma) yok ise Spring Arm ın kaydırma uzunluklarını ayarlayabiliriz.

Camera Collision
çarpışmaları (collisions) kontrol edip etmemeyi ayarlar, ve collision u kontrol etmenin ne kadar büyük bir sorgu olduğunu tanımlar.

Camera Settings
Pitch, Yaw, or Roll değerlerini Parent nesne den miras alınıp alınmayacağını veya kullanılan Pawn Control Rotation un mu kullanılacağı ?



Lag
Camera hedef pozisyonun (target position) gerisinde mı kalıp kalmaması nın ayarlanması, ve gecikme ile ilgili ayarlardır.


biz burada Target Arm Length değerini 100 olarak ayarlıyoruz ve Enabled Camera lag check box ını tikliyoruz,



bu bize default ayarlardan daha kısa bir uzunluk (length) verir ve hareket ederken Camera gecikmesini bir miktar artırır.

şimdi Compile derlim ve Play buttonuna basarak PIE modda oynayalım. 


Sonuç olarak,

karakteri hareket ettirirken kamera hareketlerinin karakterin arkasından artık yumuşak geçişler şeklinde olduğunu fark edeceksiniz; bir duvarın kenarından döndüğüzde kameranın da en yakın yerden dönerek hareket ettiğini göreceğiz; buna karşın engeller ortadan kalktığında kameranın default ayarlarındaki uzaklıklarına geri döndüğünü de göreceğiz.





Çoklu Sabit Kameralar Arasında Geçiş Yapma
burada level imize bir çok Camera Actor ekleyeceğiz ve aralarında oyuncu (player) gerekli tetiklemeyi Trigger Volume lerden yaptıkça geçişler yapacağız.

bu örnek için Starter Content in dahil edildiği bir Blueprint Third Person Template projesi oluşturalım.

Modes mensünden Basic kısmı altındaki bir kaç Camera Actor ü level içine sürükleyin, kaç tane arasında geçiş yapmak istiyorsak o kadar sürükleyin.



biz örneğimizde üç farklı görüş açısına sahip üç farklı kamera kullanacağız.

yime Modes menüsünün altındaki yine Basic kısmından bir kaç Box Trigger level imize ekleyelim, kamera sayımız ile uyumlu olmasını istediğimizden onu da yine üç adet ekleyeceğiz örneğimizde.



eklediğiniz Box Trigger ları oyuncunun içinden geçtiği an kemeranın değişmesini istediğiniz yerlere konumlandırın.

Box Trigger seçili iken W a baslın, böylece Translation moda girersiniz, E ye basarak Rotation a girin veya R ile scale moduna geçin, yani camera actor leri istediğiniz konumlara aldıktan sonra üzerlerinde istediğiniz Translation işlemlerini de yapın.

şimdi her üç kamerayı da seçip ardından Blueprints button una basarak Open Level Blueprint diyelim ve Level Blueprint scripine girelim,



ardından graph a sağ tıklatıp Create References to selected Actors deyin, böylece editörde seçili olan her actor için bir temsilci oluşacak;



bizim durumumuzda bunlar 3 adet kamera olacak tabiki;  

aynı şekilde editöre dönüp 3 Box Trigger in üçünü de seçin ve tekrar Level Blueprint e dönerek yine graph a sağ tıklayın;

açılan menden Add Event for Selected Actors kısmının altınan Collision kısmının da altından, AddOnActorBeginOverlap komutunu seçin;



bu bize her bir Box Trigger için birer Event ekleyecektir, böylece oyuncu (player) içine girdiğinde bu event ler tetiklenecek.

şimdi neye ihtiyacımız var ? elbette şu ünlü Player Controller a, hemen onu da yaratalım, graph a sağ tıklayalım, ve Get Player Controller nodunu ekleyelim.



ihtiyacımız olacak olan bir başka node ise Set View Target with Blend dir, onu da yine sağ tıklayarak arama kutusndan bulabiliriz, daha kolay bulmak için Context Sensitive check ini kaldırın.



bağlantıları aşağıdaki şekilde düzenleyin;



şu anda ilk trigger volume a girildiği anda kullanılacak ilk kamera nın bakış açısını düzenleyen kodu yarattık;

aynı işlemleri diğer trigger ve kameralar için de yapın;



her bir kamera nın değişimi sırası ile trigger box larına bağlanmış oldu;

ekranımızdaki aktif kamera nın yine Player Controller tarafınan belirlendiğinin farkında olun; çünkü Player yani oyuncu biziz ve ekranda gördüğimiz görüntü de Playe ile ilgili; görüntüyü veren de Camera olduğuna göre ekrana verilecek olan aktif kamerayı da Player Kontroller belirliyor;

yine Compile edelim ve Play ile oynalalım,



Sonuç Olarak

her bir trigger box a girdiğimizde oyunun kamera bakışının değiştiğini göreceğiz, bu, çoklu kamera destekli oyunlara bir başlangıç olarak basit bir örnek gibi düşünülebilir. Muhtemelen Player yani oyuncu kameraların bakış açılarının dışında olduğu durumları ve de player input girdilerinin cameralara göre ayarlanmasını ayarlamak / hesaplamak, isteyeceksiniz. 



evet, 

kameralar konusunda minik bi resital oldu; 

bu bu kamera olayı her tarafta geçiyor ve onlarla neler yapabileceğimizi başlarda pek de bilmeyince insanın kafasında kavram kargaşası olabiliyor;  bu yazı ile teorik bilgi aşısı almış olduk; 

başka bir yazıda görüşmek üzere hoşçakalın..

Hiç yorum yok: