qukla

Unreal MVP
16 Tem 2015
381
90
0
(35) İzmir
Merhabalar, şu oyun boyutu olayını bir türlü çözemedim. Bu hususta bir kaç şey sormak istiyordum :

1-) İlk olarak oyundaki bir mesh in boyutu var. Misal: Bir duvar 1 mb diyelim ( texturesız), ben bu duvarı her kullandığımda bu oyun boyutuna ekleniyor mu? Örneğin bir ev yaptım 100 duvar mesh i kullandım haliyle 100 mb lık duvar kullanmış mı olacağım ?

2-) Aynı soru texture ve materyal içinde geçerli. Az önceki örnekten yola çıkarak; 100 tane duvarı 2 mblık texture ile kapladım diyelim, 200 mb texture mı kullanmış olacağım? Yoksa hepsi tek texture ile mi kaplanmış olacak?

3-) Oyun boyutunu incelerken farkettim; en çok yeri Terrain kaplıyor. Benim projemde (dünyavi) 1 dönüm bir alan vardı ve 400 mb sadece terrrain idi. Terrain'in büyüklüğü de oyun içinde kapladığı boyut ile paralel mi gidiyor ? Bu durumda ben 10 dönüm bir terrain yapsam oyunun 4gb ı sadece terrain ile gidecek. İnsanlar nasıl 1-2 gb a open world oyun yapıyor ? Gözden kaçırdığım bir şey mi var?

4-) Gördüğüm kadarıyla oyunlarda  texture lar çok yer kaplıyor. Ben genelde bir materyalin base+diffuse+normal+Specular texture ları kullanarak yapıyorum. Yanlış mı yapıyorum? Sadece Base ve Normal mi kullanmalıyım acaba?

5-)Bir de sık sık gördüğüm, sadece bir yüzü olan nesneler var. Misal bir duvar yapmışlar ancak duvarın içi var, arkadan bakınca boş. Bu oyun boyutunu düşürmekle için mi yapılıyor? Ben de mi mesh ler için bu şekilde çalışmalıyım?

6-) Son olarak ışıklar, reflection cube, Post process Volume gibi volumler oyun içinde yer kaplıyor mu? bir level e onlarca ışık onlarca reflection cube, her odaya lightmap koymam oyunun boyutunu arttırır mı?

Biraz uzun oldu ama ... Şimdiden teşekkürler : )
 
Bittirdiğiniz oyunu paketlediğinizde yapmış olduğunuz level'leri paketliyorsunuz. O yüzden paketlenmiş oyun boyutu = haritalar + motorun oyunu çalıştırması gereken kendi dosyaları. Yani tek bir haritadan oluşan bir oyun yapıyorsanız onun paketlenmiş boyutu aşağı yukarı o haritanın boyutu kadar olur. Hesaplamalarınızı buna dayanarak yapabilirsiniz.

- Objeler blueprintler ile Instanced Static mesh veya Foliage olarak kapladığından daha fazla yer kaplıyor, ama bahsettiğiniz gibi 1*100=100MB şeklinde değil.

- Materyal ve texture'larda ise durum farklı. Bir texture harita içinde 100 farklı yerde de kullanılsa motor 1 tane texture kullanır. Ama bunu farklı materyaller içinde kullanırsanız oyun sırasında draw call denilen zamana eklenir, bu da daha çok mobil platformlarda üstüne düşmeniz gereken bir durum. Drawcall miktarını düşürmek için sihay&beyaz maske dokularını tek bir texture'ın r,g,b ve alfa kanallarında toplayıp 4 texture'ı bir materyal ile çağırabilirsiniz, yalnız mecbur kalmadıkça alfa kanalını kullanmayın. Her ne kadar sadece bir kanal fazlalık gibi görünse de bir texture'ın alfa kanalını dolu olarak tanıtırsanız motora o texture'ın boyutu 2 katına çıkar.

- Eski projelerimden birisinde 8k'lık(neredeyse 100km* lik bir alan) bir landscape'e sahip harita bulunmakta ve haritanın dosya boyutuna baktığımda 400 küsür MB görünüyor. Şu anki ekran kartım kaldırmadığı için elleşemiyorum artık o çaptaki landscapelere o yüzden fazla bilgi veremeyecem ama sizi kendiniz de test edip görebilirsiniz. Bu arada bu zamanda 1-2GB'lık open world oyun yaparsınız ama o kadarlık kısıtlama ile ne araziye istediğiniz detayı verebilir ne de haritayı adam gibi doldurabilirsiniz.(AC2 ve STALKER gibi eski oyunların bile boyutuna bakıp kıyaslama yapabilirsiniz)

- Normal şartlarda Base, Roughness/Metallic ve Normal maplere ihtiyacınız var. Elinizde Specular var ise o da sorun değil; specular map'i kullanıp roughness'ı tek bir constant olarak da girebilirsiniz. Texture boyutu oyunu çıkartmak istediğiniz platforma ve oyunun türüne göre değişir. Mesela PC için FPS yapıyorsanız 4k texture kullanabileceğiniz yerler de olabilir ama mobil uygulama yapıyorsanız normalde 1k'nın üstüne çıkmamanız gerek.
 
Bittirdiğiniz oyunu paketlediğinizde yapmış olduğunuz level'leri paketliyorsunuz. O yüzden paketlenmiş oyun boyutu = haritalar + motorun oyunu çalıştırması gereken kendi dosyaları. Yani tek bir haritadan oluşan bir oyun yapıyorsanız onun paketlenmiş boyutu aşağı yukarı o haritanın boyutu kadar olur. Hesaplamalarınızı buna dayanarak yapabilirsiniz.

- Objeler blueprintler ile Instanced Static mesh veya Foliage olarak kapladığından daha fazla yer kaplıyor, ama bahsettiğiniz gibi 1*100=100MB şeklinde değil.

- Materyal ve texture'larda ise durum farklı. Bir texture harita içinde 100 farklı yerde de kullanılsa motor 1 tane texture kullanır. Ama bunu farklı materyaller içinde kullanırsanız oyun sırasında draw call denilen zamana eklenir, bu da daha çok mobil platformlarda üstüne düşmeniz gereken bir durum. Drawcall miktarını düşürmek için sihay&beyaz maske dokularını tek bir texture'ın r,g,b ve alfa kanallarında toplayıp 4 texture'ı bir materyal ile çağırabilirsiniz, yalnız mecbur kalmadıkça alfa kanalını kullanmayın. Her ne kadar sadece bir kanal fazlalık gibi görünse de bir texture'ın alfa kanalını dolu olarak tanıtırsanız motora o texture'ın boyutu 2 katına çıkar.

- Eski projelerimden birisinde 8k'lık(neredeyse 100km* lik bir alan) bir landscape'e sahip harita bulunmakta ve haritanın dosya boyutuna baktığımda 400 küsür MB görünüyor. Şu anki ekran kartım kaldırmadığı için elleşemiyorum artık o çaptaki landscapelere o yüzden fazla bilgi veremeyecem ama sizi kendiniz de test edip görebilirsiniz. Bu arada bu zamanda 1-2GB'lık open world oyun yaparsınız ama o kadarlık kısıtlama ile ne araziye istediğiniz detayı verebilir ne de haritayı adam gibi doldurabilirsiniz.(AC2 ve STALKER gibi eski oyunların bile boyutuna bakıp kıyaslama yapabilirsiniz)

- Normal şartlarda Base, Roughness/Metallic ve Normal maplere ihtiyacınız var. Elinizde Specular var ise o da sorun değil; specular map'i kullanıp roughness'ı tek bir constant olarak da girebilirsiniz. Texture boyutu oyunu çıkartmak istediğiniz platforma ve oyunun türüne göre değişir. Mesela PC için FPS yapıyorsanız 4k texture kullanabileceğiniz yerler de olabilir ama mobil uygulama yapıyorsanız normalde 1k'nın üstüne çıkmamanız gerek.

- Modellerin görünmeyen yerlerindeki poligonların silinmesi boyut düşürmekten çok oyun sırasındaki performansı arttırmak için yapılan birşey. Ekran kartının render ettiği her karede poligon sayısı ne kadar az ise o kadar iyi.

- Son olarak bahsettiklerinizden sadece Lightmapler etkiler paket boyutunu. Bir haritanın statik ve dinamik aydınlatma ile iki farklı versiyonunu kaydedip boyutlarına bakabilirsiniz. Open world tarzı oyunlarda dinamik aydınlatma kullanılmasının nedenlerinden birisi de budur.

Günlük cevap kotamı da bu post ile doldurmuşumdur herhal. ;P
 
Silkroad diye bir oyun var belki biliyorsunuzdur. Oyun açık dünyaya sahip ve gerçekten zamanın en iyi grafiklerine sahip. Asıl garip olansa böyle açık dünyaya sahip bir oyunun boyutu nasıl 1.3 GB olabileceği? Şuan yeni güncellemelerle harita dahada büyüdü ve buna rağmen 2 GB ye yakın bir boyuta yükseldi. Bu konuda ne yapabiliriz acaba? Yaptığımız oyunun düşük bir boyuta sahip olması için yapabileceğimiz birşeyler olmalı UE4 gerçekten kaliteli ama çok fazla boyutta oyunlar çıkarıyor gibime geldi :S
 
Jacky Süpersin teşekkürler :)

Bende kendim 11 proje ile Landscape i ve Static Mesh leri test ettim. Sonuçlar çok İlginç :

Starter Contentsiz FPS MAP açtım.
Boş Harita : 367 MB

LANDSCAPE

502 X 502 Boş ( texture sız ) :  370 MB
2017 X 2017 Boş ( texture sız ) : 296 MB ( çok ilginç landscape büyüdü ama boyut epey küçüldü )
2017 X 2017 Texture lı ( 2 layer çim + kar ) biraz da dağ tepe yaptım : 337 MB

MESHLER

Boş haritaya (370 MB idi) 352 MB lık bir paket yükledim Cook Yapınca : 632 MB oldu ( 100 mb gitti )

2 tane static mesh ile test ettim.
A=  4349 Tris. / 304 KB
B= 12637 Tris / 1.134 KB

90 tane A olan harita : 632 MB
180 tane A , 400 tane B olan harita : 608 MB ( çok garip)
270 tane A, 600 tane B olan harita : 608 MB

Sonuç olarak benim çıkardığım. Landscape in boyutu, oyunun boyutunu etkilemiyor. Hatta nedense devasa bir Landscape yaptım küçük olandan daha az yer kapladı.

2. olarak da bir static mesh i oyuna ekledikten sonra kaç kere kullandığının bir önemi yok. İster 1 kere kullan ister 1.000.000 kere oyun boyutu aynı oluyor.

Şimdi Foliage ve Texture olayını da test edeceğim ama bence:
Esas boyut sorunu Matinee lerden ve ses dosyalarından kaynaklanıyor. Ben önüme gelen ses dosyasını oyuna atıyordum sonra bir baktım sadece ses dosyaları 400 mb a yakın.
Matinee ler ne kadar yer kaplıyor bilmiyorum ancak az olmadığını düşünüyorum. Ben oyunumda toplam 26 tane matinee kullandım. Çoğu kısa ancak giriş matinee i yaklaşık 3 dakika. Şimdi bir de onları kontrol edeceğim.

Son ve En Önemli Tespitim : Oyun içinde mümkün olduğunca az level kullanmak. Aynı meshleri kullandıkça levelin boyutu çok büyümüyor, ama 2 adımda bir level yapınca her level için boyut 2 katına çıkıyor. : )

Yakın zamanda daha ayrıntılı bir rapor çıkarıp paylaşmaya çalışırım : )