Konsol Geliştirici Raporu #3

Bu hafta çeşitli LOD (Ayrıntı Düzeyi) tiplerini açıklayacağız, LOD'nin anlamı ve performans açısından önemi üzerinde duracağız.

Herkese merhaba,

Yeni bir Konsol Geliştirici Raporu bölümüyle karşınızdayız! Bu hafta çeşitli LOD tiplerini açıklayacağız, LOD’nin anlamı ve performans açısından önemi üzerinde duracağız.

LOD (Level of Detail), Ayrıntı Düzeyi anlamına gelir ve PUBG’de çok sayıda nesne için farklı LOD’ler mevcuttur. Mümkün olan en iyi oyun deneyimini elde etmek amacıyla performans ile görsel kalitesi arasında optimum dengeyi yakalamak için koşullara bağlı olarak daha az ya da daha çok ayrıntı sergileyen bir LOD kullanılır. PUBG’de duruma göre genellikle 3 farklı LOD seviyesi kullanılır; bunlar LOD 2, LOD 1 ve bu 3 seviyenin en ayrıntılısı olan LOD 0’dır. Ne kadar ayrıntılı bir LOD kullanılırsa, performans maliyeti de o kadar artar. Performans önemli olmakla birlikte, daha az ayrıntılı bir LOD kullanmamız ve böylece mümkün olduğu ölçüde oyun deneyimini olumsuz etkilememeye çalışmamız da son derece önemlidir.

LOD’leri aktif halde görmenin muhtemel olduğu örneklerden biri, paraşütle iniş yaparken uzaktaki bazı binaları “oyun hamuru” gibi görmendir. Bu, görüntülenen ilk LOD’dir ve ayrıntı seviyesi en düşük olandır. Bir maçın başında, yakın mesafedeki binalar da böyle görünebilir. Bunun sebebi, aynı anda işlenmesi gereken çok sayıda farklı nesne olmasıdır. Bu görünüm mümkün olan en kısa zamanda LOD 0’a (en yüksek ayrıntı seviyesi) yükselecektir ancak bu işlemin hızı büyük ölçüde kullanmakta olduğun donanıma bağlıdır.

Karakterlere de üç farklı LOD tipi uygulanır: Ağ LOD’si, Kemik LOD’si ve AnimNode LOD’si. Önce Ağ LOD’si ve Kemik LOD’si hakkında biraz bilgi verecek, daha sonra da bu Konsol Geliştirme Raporunun ana konusu olan AnimNode LOD’sine odaklanacağız.

Ağ LOD’si ve Kemik LOD’si

Ağ LOD’si karakter modelinin LOD’sini belirler. Bir karakter sana yakın olduğunda LOD 0 (en yüksek ayrıntı seviyesi) olarak işlenir, bir karakterden uzaklaştığında da karakter modelinin işleneceği LOD’nin ayrıntı seviyesi düşer. Bu işlem aşamalı olarak gerçekleşir; LOD 2, LOD 1 ve LOD 0 şeklinde ilerler. Geçişleri genellikle fark etmezsin çünkü bunlar karakterlerin ekranda oldukça küçük göründüğü uzak mesafelerde gerçekleşir.

Kemik LOD’si de aynı şekilde işlemekle birlikte, karakter animasyonları esnasında etkin olacak kemik sayısını belirler. Bu da oyunun, uzak mesafelerde ayrıntılı animasyonları işleme zorunluluğundan kurtulması ve böylece performansta düşüş yaşanmaması anlamına gelir. Daha düşük bir LOD, işlenmesi gereken daha az sayıda köşe ve daha az kemik verisi olması demektir. Bu da, optimum LOD’lerin kullanılmaması durumuna kıyasla performansta büyük bir gelişme ortaya koyar.

İlave LOD seviyeleri (3, 4 vb.) kullanmak, CPU üzerindeki performans maliyetini düşürerek mutlaka performansı yükseltecektir ancak maalesef bellek, IO (giriş-çıkış) vb. üzerinde oluşan ekstra zorlanma, konsol donanımı için fazla yüksektir ve bu aşamada etkili şekilde uygulanabilecek bir yöntem değildir.

AnimNode LOD’si

Animasyonlarda ayrıca AnimNode LOD’leri adı verilen LOD’ler de kullanılır ancak görsel değişikliklerin son derece dikkat çekici olması nedeniyle bunları Ağ LOD’si veya Kemik LOD’sinde olduğu kadar geniş ölçüde uygulayamıyoruz.

Koşma, yan tarafa bakma veya nişan alma gibi animasyonların tamamı, karakterinin iskelet kontrolüyle ilgilidir. Karakter iskeletiyle ilgili animasyonların tamamı, vücudun bölümleri temelinde hesaplanır ve kollar, bacaklar, boyun vb. için bağımsız hesaplamaların ve animasyonların yapılması gerekir.

Karakter modeli boyutunun bütün ekrana olan oranı temelinde ilave bir LOD yöntemi geliştirdik. Ardından, yalnızca görsel değişikliği fark edemeyeceğin kadar uzakta olan karakter modelleri için daha az ayrıntılı bir AnimNode LOD’sini otomatik ve dinamik şekilde seçecek parametreler uyguladık. Bu, oyun deneyimi veya görsel deneyim üzerinde fark edilebilir düzeyde olumsuz etki yaratmadan performansın yükselmesi anlamına geliyor.

Bu Geliştirici Raporunun aşağıdaki kısımlarında gösterilen görsel örneklerde, işleyişi daha iyi anlatmak amacıyla AnimNode LOD’si değişikliklerinin çok yakın mesafelerde gerçekleştiğine lütfen dikkat et. PUBG oynarken, AnimNode LOD’si yalnızca uzak mesafelerde etki gösterir.

AnimNode LOD’sinin oyun içinde nasıl işlediğini gösteren ilk örnek:

(Yukarıda kullanılan görüntü, geliştirme ortamından alınmış olup yalnızca örnek sunma amacıyla kullanılmıştır; PUBG oynarken AnimNode LOD’si yalnızca çok uzak mesafelerde devre dışıdır)

Yukarıdaki görüntüde, AnimNode LOD’sinin etkin ve devre dışı olmasının yarattığı farkları görebilirsin.

AnimNode LOD’si tamamen devre dışı bırakıldığında, karakter tarafından gerçekleştirilen animasyonlar devre dışı kalır ve model tarafından yansıtılmaz, bu da daha iyi performans sağlar. Ancak bir oyuncu çömeldiğinde, vücudun alt kısmı için AnimNode LOD’si etkin olmalıdır, yoksa oyunca ayakta durur halde görünür.

Sonraki örnekte, AnimNode LOD’si devre dışı kaldığında ne olduğunu daha rahat anlayabilmen için, geliştirme ortamımızda karakter modeli bütün ekranın %10’unu kapladığında AnimNode LOD’sini devre dışı kalacak şekilde ayarladık.

Oyun içinde AnimNode LOD’si, yalnızca karakter modeli, bu değişiklikleri göremeyeceğin kadar küçük göründüğünde devre dışı kalacaktır.

(Yukarıda kullanılan görüntü, geliştirme ortamından alınmış olup yalnızca örnek sunma amacıyla kullanılmıştır; PUBG oynarken AnimNode LOD’si yalnızca çok uzak mesafelerde devre dışıdır)

“Dürbünle uzaktaki bir düşmana baktığımda ne olacak?” diye merak ediyor olabilirsin.

Uzaktaki bir oyuncuya dürbünle baktığında, baktığın karakter modeli ekranın daha fazla kısmını kaplayacak ve AnimNode LOD’si karakter modeli boyutunun bütün ekrana oranı temelinde dinamik olarak etkinleşecek, bu sırada oyun deneyimi üzerinde olumsuz etki yaratmamaya dikkat edilecektir.

Aşağıda, gelişme ortamımızda kullanılan ve neler olduğuna dair daha net bir örnek sunmak amacıyla, karakter modeli bütün ekranın %10’unu kapladığında devre dışı kalacak şekilde kodlanan görsel bir AnimNode LOD’si örneği yer almaktadır.

(Yukarıda kullanılan görüntü, geliştirme ortamından alınmış olup yalnızca örnek sunma amacıyla kullanılmıştır; PUBG oynarken AnimNode LOD’si yalnızca çok uzak mesafelerde devre dışıdır)

PUBG oynarken bu değişiklikler yine, yalnızca karakter modelinin, senin değişiklikleri fark edemeyeceğin kadar uzakta bulunup bütün ekranın küçük bir parçasını kapladığında etki gösterecektir.

AnimNode LOD’si Performansı

Aşağıdaki grafik, etrafta 10 karakter göründüğünde AnimNode LOD’si etkin halde (mavi) ve AnimNode LOD’si devre dışı halde (kırmızı) yapılan ölçümleri göstermektedir. AnimNode LOD’si devre dışı olduğunda performansta yaklaşık %10’luk gelişme elde edilmektedir.

* Xbox One X ile ölçülmüştür

Bölgede AnimNode LOD’sinin devre dışı bırakılabileceği ne kadar çok karakter modeli varsa, AnimNode LOD’sinin etkin olduğu duruma kıyasla o kadar çok performans kazancı elde edilir.

Bu bölümü özetleyecek olursak, karakter modelleri gerçekleşen değişikliği fark etmeyeceğin kadar uzakta olduğunda, bu karakter modellerinin bazı animasyon efektleri devre dışı bırakılır veya daha düşük seviyeye alınır. Bu da kullanılan kaynağı azaltır ve performansı yükseltir.

Okuduğun için teşekkürler! Konsol Geliştirici Raporu için bundan sonra sunacağımız ilavelerde görüşmek üzere!

PUBG Konsol Takımı

Makaleyi Yorumla
Makaleyi Ara