Unreal Engine’da İşleme
Oyun Motorlarında İşlemeye Giriş
Görüntü işleme (rendering), bir sahnedeki objelerden ekrandaki son görüntüyü (kare) oluşturma işlemini ifade eder.
Bir kareyi işlemek için kullanılan yazılıma işleme motoru adı verilir ve bu motorlar genellikle aşağıdaki kategorilere ayrılır:
Çevrimdışı işleme: Kaliteyi işleme süresinden öncelikli tutan yüksek kaliteli işleme için tasarlanmıştır. Bunlar genellikle son işlenmiş karenin kalitesiyle karşılaştırıldığında işleme süresinin önemli olmadığı uygulamalarda kullanılır.
Gerçek zamanlı işleme: Performans düşünülerek tasarlanmıştır ve kareleri hızla işler. Tipik gerçek zamanlı kare hızı hedefleri 30 (33 ms), 60 (16 ms) ve 120 (8 ms) kare/saniyedir (FPS) ancak gerçek kare hızları birkaç faktöre bağlı olarak zaman içinde değişebilir. Gerçek zamanlı işlemeyle geliştirilen projeler, tutarlı kare hızlarını sürdürmek için performans ile kalite arasında bir denge bulmalıdır. Gerçek zamanlı işleme motorları genellikle video oyunları, simülasyonlar ve mimari görselleştirme gibi interaktif ortamlar için kullanılır.
Unreal Engine, mobilden güçlü masaüstü bilgisayarlara kadar çeşitli platformların gereksinimlerini karşılamak amacıyla gerçek zamanlı işleme için tasarlanmış güçlü bir araç grubudur. Unreal Engine yüksek kaliteyi hem gerçek zamanlı hem de çevrimdışı işlemeyle sunabilir. Unreal Engine kullanarak mobil, konsol ve masaüstü platformlarında interaktif 2D ve 3D deneyimlerden film ve televizyon yapımları için son kareleri işlemeye kadar her şeyi oluşturabilirsiniz.
Piyasadaki diğer gerçek zamanlı motorların aksine Unreal Engine, spesifik olarak gerçek zamanlı ve performans özelliği göz önünde bulundurularak tasarlanmış çok sayıda kendine özgü özellik sunar. Amaç, geliştirme işindeki karmaşıklığı azaltıp sonuçları daha hızlı elde ederken yüksek kalite ve performansı korumaktır.
Lumen Global Aydınlatma ve Yansımalar sistemi, Nanite Sanallaştırılmış Geometrisi ve Sanal Gölge Haritaları gibi özellikler, konsol ve masaüstü uygulamaları için “sorunsuzca çalışan” özelliklerle geliştirme sırasında karmaşıklığı azaltma hedefine ulaşmakta önemli adımlardır. Mobil platformlar, aydınlatmayı dokulara ön işlemenizi gerektiren dinamik aydınlatma ve önceden hesaplanmış aydınlatma iş akışlarını destekler.
Unreal Engine’da İşlemeye Giriş
Oyun motorları, ekrana bir görseli (veya kareyi) işlemek için genellikle İşleme Çalışma Hattı adı verilen bir dizi adım gerçekleştirir. Bu bölümde Unreal Engine’in varsayılan ertelenmiş işleme (deferred rendering) yolunu kullanarak bunu nasıl yaptığı açıklanmakta ve uygun olduğunda adımlar, Unity’nin ertelenmiş işleme yolu ile karşılaştırılmaktadır.
Unity motoru, üç farklı işleme çalışma hattı içerir: Built-In (Tümleşik), Universal (Evrensel) ve High Definition (Yüksek Çözünürlük). Her çalışma hattı, belirli kullanım örnekleri için tasarlanmıştır ve genellikle yeni bir proje başlatmadan önce seçilir.
Unreal Engine, el tipi ve mobil cihazlardan geçerli konsol ve PC nesillerine kadar hedef çeşitli platformlara göre bağımsız özellikleri ölçeklendiren bir birleşik işleme çalışma hattı içerir. Bu özellik sayesinde tek bir yola kilitli kalmadan projenize en uygun işleme yolunu ve desteklenen özellikleri seçebilirsiniz.
Unreal Engine’ın işleme çalışma hattı, varsayılan ertelenmiş işleme yoluyla birlikte kullanılabilir veya bir ileriye işleme yolunda çalışacak şekilde yapılandırılabilir. Ayrıca Vulkan Mobil İşleyici dahil olmak üzere düşük güçle çalışan cihazlara uyum sağlamak için mobil işleme yolunu etkinleştirebilirsiniz. Her bir işleme yolu için desteklenen işleme özellikleri hakkında daha fazla bilgi edinmek için Supported Features by Rendering Path (İşleme Yoluna Göre Desteklenen Özellikler) dokümantasyonuna bakın.
Aşağıdaki görüntüde Unreal Engine’ın ertelenmiş işleme yolunu kullanarak bir son görüntüyü işlemek için her bir karede gerçekleştirdiği adımların ayrıntılı bir görselleştirmesi yer almaktadır:
İşlem soldan sağa ilerlemekte ve 2 ile 5 arasındaki adımlar birbirine paralel gerçekleşmektedir.
Aşağıda, işleme çalışma hattındaki bu adımların her biri ve her kareyi işlemenin ne kadar sürdüğü hakkında daha fazla bilgi edineceksiniz.
Sahne Hazırlığı ve Oklüzyon
Unreal Engine’de üç birincil iş parçacığı bulunur: Oyun (CPU), Çizim ve GPU iş parçacıkları.
İşleme işlemine başlamadan önce Oyun (veya CPU) iş parçacığı, sahnedeki tüm objelerin dönüşümlerini toplar. Bu aşamaya, her bir objenin son dönüşümünü toplamadan önce bütün animasyonları, fizik simülasyonlarını ve yapay zekâyı (AI) işlemek dahildir.
Dönüşüm bilgileri daha sonra CPU üzerindeki Çizim iş parçacığına geçirilir. Çizim iş parçacığı görünürlük işlemini gerçekleştirerek geçerli kamera görünümündeki görünür objelerin bir listesini oluşturur ve kamerada görünmeyen diğer tüm objeleri kaldırır. Bu objelerin çizilmesi gerekli değildir bunların işlenmemesi performansı artırır.
Bu işlem aşağıdaki adımları gerçekleştirir (sırayla):
Mesafe Görünürlüğü: Kameraya belirli bir mesafeden daha uzak olan tüm objeleri kaldırır.
Kesit Görünürlüğü: Kameranın kesiti (görüş alanı) içinde görünmeyen objeleri kaldırır.
Oklüzyon Görünürlüğü: Sahnede kalan tüm objelerin görünürlük durumunu doğru bir şekilde kontrol eder. Bu metot maliyetli olduğu için oklüzyon işleminin sonunda uygulanır. Bu aşamada geriye kalan görünür objeler, diğer objeler tarafından oklüzyona uğrayıp uğramadıklarını görmek için daha ayrıntılı test edilir.
Görünür objelerin son listesi, işleme işlemine başlamak üzere GPU iş parçacığına geçirilir.
Unity Eşdeğeri
Unity, işleme çalışma hattı sırasında frustum ve oklüzyon ayırma gerçekleştirir. Ayrıca CullingGroup API’siyle mesafe görünürlüğü gerçekleştirebilir. Bu tekniklerin birleşimi, sahnedeki son görünür obje listesini oluşturur.
Geometri İşleme
Bu adımda Unreal Engine, sahnedeki görünür objelerin listesini kontrol eder ve objeleri, 3D verteks verilerini ekranda gösterilen piksel verilerine dönüştürdüğü bir sonraki adım için hazırlar.
Verteks Gölgelendiriciler
Gölgelendirici (shader), doğrudan GPU üzerinde çalışan ve bir dizi hesaplama gerçekleştirmek için kullanılan bir kod parçasıdır. Verimlidir ve GPU birbirine paralel çok sayıda gölgelendirici hesaplaması çalıştırabilir.
Verteks gölgelendiricisi aşağıdaki adımları gerçekleştirir:
Yerel verteks konumlarını dünya konumuna dönüştürür: Obje verteks verileri yerel alanda depolanır ancak obje dünyaya yerleştirildikten sonra verteks bilgileri dünya alanı koordinatlarına dönüştürülmelidir.
Verteks gölgelendirme ve renklendirme gerçekleştirir: Verteks gölgelendirici, verteks düzleştirmenin yanı sıra obje içindeki verteks renk verilerini işler.
Verteks konumlarına ilave ofsetler uygulayabilir: Verteks gölgelendirici, belirli efektler elde etmek için ekrandaki herhangi bir verteksin konumunu saptırabilir. Bu işlem, objenin materyali üzerinden yapılır ve dünya pozisyonu ofseti olarak adlandırılır.
Derinlik Geçişi
Unreal Engine bağımsız objeleri işlemeden önce bir derinlik geçişi veya erken Z geçişi gerçekleştirerek objelerin birbirine göre konumunu belirler. Bunun yapılması, Unreal Engine’in ekranda aynı pikselleri birden çok kez işlemesini önler. Buna aşırı çizim denir ve performansı önemli ölçüde etkileyebilir. Motor bunu yapmaktan olabildiğince kaçınmaya çalışır.
Çizim Çağrıları
Derinlik geçişinden sonra GPU, aynı anda aynı özellikleri paylaşan örgüler ve materyaller gibi tüm poligonları çizerek her bir objeyi işler. Buna çizim çağrısı denir.
Bir objenin aynı materyal atanmış tüm poligonları aynı çizim çağrısı olarak sayılır. Ancak her farklı materyal kendi ayrı çizim çağrısını gerektirir. Örneğin, ekrandaki her obje en az bir çizim çağrısı gerektirir ancak objeye atanmış materyal sayısına bağlı olarak daha fazla da olabilir.
Unreal Engine’ın Nanite Sanallaştırılmış Geometrisi, belirli bir materyale sahip tüm objeler için tüm poligonları aynı anda işler. Kare bütçeleri artık poligon sayıları, çizim çağrıları veya örgü bellek kullanımı ile kısıtlı değildir.
Unity Eşdeğeri
Unity’nin işleme çalışma hattı benzer adımları uygulayarak bir derinlik geçişi yapar ve çizim çağrılarını kullanarak sahnedeki objeleri çizer.
Pikselleştirme ve Geometri Arabelleği
Pikselleştirme işlemi 3D verteks verilerini ekranınızda gösterilen 2D piksel verilerine dönüştürür. Bu işlem, verteks gölgelendiricisi tüm verilerini işlemeyi tamamladıktan sonra yapılır.
Unreal Engine’ın Geometri Arabelleği (GBuffer), sahnedeki geometriye ilişkin bilgileri depolayan bir dizi görüntü içerir. Bu görüntüler genellikle sahnedeki temel renk, dünya normali, metalik, pürüzlülük ve yansımalı aydınlatma bilgileri gibi şeyleri içerir. GBuffer’daki bu görüntüler, ekranınızda gördüğünüz son görüntüyü oluşturmak üzere derlenir.
Oluşturulan bu görüntüleri dönüştürme işlemi, işlenen her kare ve verteks verilerine dönüştürülen her çizim çağrısı için gerçekleştirilir ve görüntülerin doğru kısımlarını GBuffer’a çizer.
Unity Eşdeğeri
Unity’nin ertelenmiş işleme yolu, sahne hakkındaki kritik bilgileri depolamak için de bir GBuffer kullanır. Unity’de GBuffer, sahne hakkında farklı adlar verilen benzer bilgileri depolar: objelerin albedo, yansımalı, normal ve ışıklı/aydınlatma bilgileri.
Dokuları İşleme
Unreal Engine, dokuların sahneye yüklenmesini iyileştirmek için dokuları doku akışı kullanarak işler. Doku akışı sistemi doku mipmap’lerini kullanır. Bunlar, aynı dokunun farklı çözünürlüklerdeki görsellerinin önceden hesaplanmış bir dizisidir. Bunu örgülerin değil de dokuların ayrıntı seviyeleri (LOD) olarak düşünebilirsiniz. Motor bu mipmap’leri, her görüntü bir öncekinin çözünürlüğünün yarısı olacak şekilde otomatik olarak oluşturur.
Unreal Engine, kameradan uzaklığa göre oynanış sırasında dokunun mipmap akışını yapar. Bu akış, bant genişliğini ve bellek kullanımını en iyi duruma getirmenin yanı sıra gürültüyü kameradan uzaklaştırmak amacıyla otomatik olarak yapılır.
Mipmap’leri alabilmek için doku boyutları 2’nin katları olmalıdır. Yaygın doku boyutları 3840 x 2160 piksel (4K) ve 1920 x 1080 pikseldir (HD). Dokuların belirli bir orana sahip olması zorunlu değildir; 1920 x 480 piksellik bir doku da mipmap alır.
Unity Eşdeğeri
Unity’nin Mipmap Streaming sistemi, çalışma zamanında doku akışı yapmak için doku mipmap’leri kullanır. Unreal Engine’e benzer şekilde bu sistem de kamera uzaklığına ve açısına göre uygun doku mipmap’ini otomatik olarak akış yapar.
Piksel Gölgelendiriciler ve Materyaller
Objeler GBuffer’a tamamen işlendikten sonra Unreal Engine ekrandaki her bir objenin materyal özelliklerini kullanarak ekrandaki her objeyi gölgelendirmeye başlar.
Piksel gölgelendiricisi, ekrandaki bir pikselin rengini değiştirmek için bir dizi hesaplama yapar. Piksel gölgelendiricileri GPU üzerinde çalışır ve son derece verimlidir. Unreal Engine’ın materyal sistemini yönlendirirler ve aydınlatma, sis, yansıma ve son işleme efektleri hesaplanırken kullanılırlar.
Materyal sistemi, Yüksek Seviye Gölgelendirici Dili (HLSL) gölgelendirici şablonlarıyla birlikte Materyal Editörü’nü kullanarak ekrandaki objelere uygulanan son materyalleri oluşturur. Bu materyaller her bir objenin görünümünü tanımlamak için dokular vb. parametreleri kullanır.
Unity Eşdeğeri
Unity, projenizin gölgelendiricilerini yazmak için Shader Graph (Gölgelendirici Grafiği) ile birlikte hazır gölgelendiricileri (Unreal Engine’daki materyallere eşdeğerdir) kullanır. Unreal Engine Materyal Editörü, Unity’nin Shader Graph özelliğine karşılık gelir.
Reflections
Sahnedeki tüm objeler gölgelendirildikten sonra Unreal Engine, obje yansımalarını materyal özelliklerine göre işlemeye başlar.
Unreal Engine, sahnedeki yansımaları işlemek için dört sistem kullanır. Bu sistemler aşağıdaki sırayla yürütülür:
Yansıma Yakalamaları: Önceden hesaplanır ve belirli bir konumda statik bir küp haritasında depolanır.
Düzlemsel Yansımalar: Bir düzlemden gelen ve düzleme giden yansımaları yakalar.
Ekran Alanı Yansımaları (SSR): Objeler için gerçek zamanlı olarak doğru yansımaları çizmek için mevcut ekran bilgilerini kullanır.
Lumen Yansımaları: Sahnedeki tüm pürüzlülük değer aralığı için yansımaları çözer. Bu yansımalar gökyüzü ışığı, şeffaf kaplamalı materyaller, yarı saydamlık ve hatta tek katmanlı su materyalleri için destek sunar.
Unreal Engine, ekran alanı yansımalarına öncelik vererek, ardından düzlemsel yansımalara geri dönerek ve son olarak da yansıma yakalamalarına dönerek üç metodu birlikte kullanır. Son yansıma sonucu, GBuffer’da pürüzlülük bilgileri, yansıtmalar ve metalik görüntülerle birleştirilir.
Lumen Global Aydınlatma kullanıyorsanız Lumen yansımaları otomatik olarak kullanılır. Ancak Lumen yansımalarını Lumen GI olmadan da kullanabilirsiniz. Bu durumda Unreal Engine, Lumen yansımalarıyla birlikte ön işlenmiş aydınlatma kullanır.
Unity Eşdeğeri
Unity’nin Reflection Probes (Yansıma Sondaları) özelliği benzer bir işlevsellik sunar ve sahnenizin yansıma verilerini önceden hesaplamak için kullanılır.
Statik Aydınlatma ve Gölgeler
Yansımalar işlendikten sonra Unreal Engine, sahnedeki tüm objeler için statik aydınlatmayı ve gölgeleri işler.
Unreal Engine, sahnenin aydınlatma bilgilerini önceden hesaplamak için Lightmass Global Aydınlatma sistemini kullanır. Aydınlatma ve gölge bilgileri bir ışık haritası UV dokusunda depolanır ve bu doku, obje sahnede işlenirken objenin temel rengiyle karıştırılır.
Bu sistem son derece hızlıdır ancak daha fazla bellek gerektirir ve sahnede yapılan her değişiklik için önceden hesaplanması gerekir.
Lightmass Global Aydınlatma sistemi, mobil ve düşük güçle çalışan cihazlara yönelik projeler için iyi bir seçenektir.
Unity Eşdeğeri
Unity’nin Progressive Lightmapper (Progresif Işık Haritası Oluşturucu) ve Enlighten Baked Global Illumination (Ön İşlenmiş Global Aydınlatma) sistemleri de sahnenizin aydınlatmasını önceden hesaplarken benzer işlevsellikler sağlar.
Dinamik Aydınlatma ve Gölgeler
Statik aydınlatma işlendikten sonra Unreal Engine, dinamik global aydınlatma sistemi olan Lumen’i kullanarak dinamik (gerçek zamanlı) aydınlatma ve gölgeleri işler.
Lumen, yeni nesil konsollar ve üst seviye PC’ler için tasarlanmış, eksiksiz bir dinamik global aydınlatma ve yansıma sistemidir. Sistem, global aydınlatma ve yansımaları uygun ölçekte çözmek için birden fazla ışın izleme metodu kullanır.
Lumen, sonsuz dağınık sıçramalar sağlar ve Nanite Sanallaştırılmış Geometri ile sorunsuz çalışır. Ayrıca sistem yüksek çözünürlüklü, gerçek zamanlı yumuşak gölgeler oluşturmak için Sanal Gölge Haritaları ile bir arada çalışır.
Lumen, sahnedeki tüm pürüzlülük değer aralığı için yansımaları çözen Lumen yansımaları sağlar. Bu yansımalar gökyüzü ışığı, şeffaf kaplamalı materyaller, yarı saydamlık ve hatta tek katmanlı su materyalleri için destek sunar.
Lumen, sahnede kullanıldığında ekran alanı yansımalarının yerine geçer.
Unity Eşdeğeri
Unity, sahnede dinamik aydınlatma sağlamak için Enlighten Realtime Global Illumination (Gerçek Zamanlı Global Aydınlatma) kullanır. Bu sistem, çalışma zamanında dolaylı ışık sekmesini hesaplamak için ışık haritalarıyla birlikte önceden hesaplanmış görünürlük bilgilerini kullanarak gerçek zamanlı global aydınlatma sağlar.
Bu davranış Lumen’den farklıdır çünkü Lumen, dolaylı ışık sekmesi sağlamak için önceden hesaplanmış bir veri gerektirmez.
Sis ve Saydamlık
Dinamik aydınlatma ve gölgeler işlendikten sonra Unreal Engine sis ve saydamlık efektlerini işler.
Unreal Engine, sis efektlerini Üstel Yükseklik Sisi sistemiyle işler. Bu sistem, sis yoğunluğunu kameradan yüksekliğe ve mesafeye göre işler. Ayrıca sistem hacimsel sis oluşturabilir.
Saydam objeler bir yarı saydam materyal kullanır ve işlemin bu aşamasında işlenir. Unreal Engine, ertelenmiş işleme yolunu kullanırken saydamlığı işlemek için GBuffer’da mevcut olan bilgileri kullanır. Alternatif olarak, materyali daha doğru bir saydamlık efekti üretmesi için ileriye işleme yolunu kullanacak şekilde yapılandırabilirsiniz.
Unity Eşdeğeri
Unity, sahnede doğrusal, üstel ve üstel kare sis efektlerini destekler.
Son İşleme Efektleri
Sis ve saydamlık işlendikten sonra Unreal, görüntü üzerine ilave efektler uygulayabilir. Bu efektlere son işleme efektleri adı verilir çünkü son görsel işlendikten sonra uygulanırlar. Efektler piksel gölgelendiricisine bağımlıdır ve GBuffer’da bulunan bilgileri kullanır.
Yaygın son işleme efektlerinden bazıları ışık parlama efekti, alan derinliği, ışık huzmeleri, ton haritalama ve hareket bulanıklığıdır.
Unreal Engine, bu son işleme adımının bir parçası olarak Zamansal Süper Çözünürlük (TSR) uygulayabilir. TSR, farklı platformlarla çalışabilen ve Unreal Engine’ın güzel 4K görüntüler işlemek için kullandığı bir zamansal ölçek büyütücüdür. Görüntüler, çok sayıda karede yapılan maliyetli işleme hesaplamalarını dağıtarak son derece düşük bir maliyetle üretilir.
İşleme zincirinde Zamansal Süper Çözünürlük, alan derinliğinden sonra gerçekleşir ve hareket bulanıklığı, parlama efekti gibi ondan sonra gelen her şey yukarı ölçeklenir.
Bu efektler GBuffer’a uygulandıktan sonra Unreal Engine ekranda son görüntüyü işler.
Yukarıda açıklanan adımlar, ekranda tek bir kare oluşturur. Bu adımlar genellikle oyunun hedef kare hızına bağlı olarak saniyede 30 ila 60 kez tekrarlanır.
Unity Eşdeğeri
Unity, seçilen işleme çalışma hattına bağlı olarak son işleme çözümleri sunar. Kullanılabilir efektlerin birçoğu, Unreal Engine’de mevcut olanlarla benzerdir.
Unity 6 ayrıca yüksek kaliteli ve kenar yumuşatmalı bir görsel üretmek için mekânsal ve zamansal yukarı örnekleme tekniklerini kullanan bir yerel yazılım tabanlı ölçekleyici olan Spatial-Temporal Post-processing (Mekânsal Zamansal Son İşleme -STP) özelliğine sahiptir.
Unreal Engine’daki İşleme Özelliklerine Genel Bakış
Artık Unreal Engine’in ekrandaki bir kareyi işlemek için hangi adımları uyguladığını öğrendiğinize göre motorla birlikte sunulan spesifik işleme özelliklerini öğrenmeye hazırsınız.
Lighting the Environment (Ortamı Aydınlatma) dokümantasyonunu okuyarak Unreal Engine’ın işleme özellikleri hakkında daha fazla bilgi edinin.