Dostlar, bugün sizlere "optimizasyon" denen şeyin ne olduğunu, onu nasıl hiçe saydığımı ve sonunda nasıl yüzüme çarptığını anlatacağım. Her şey, Unreal Engine 5'in o büyülü Lumen (gerçek zamanlı global aydınlatma) özelliğine "Hadi bir bakalım şuna!" deyip tıklamamla başladı.
"Aman Canım, Bilgisayarım Kaldırır" Safsatası
Projemde birkaç test sahnesi vardı, basit geometriler, birkaç tane Static Mesh. "Lumen açık, dünya güzel" moduna geçtim. Editor'de ilk 5 saniye... her şey harika görünüyordu. Işıklar yumuşacık, gölgeler tertemiz. Sonra faremi biraz oynattım.
Evet, yanlış okumadınız. Tek haneli FPS'ler. Fanlarım, sessiz sedasız çalışan o masum fanlarım, bir anda F-16 kalkışına hazırlanıyormuş gibi uğuldamaya başladı. İşlemcim ve ekran kartımın ısıları, o anki ruh halimi yansıtır gibiydi: Panik.
Sorun Nerede? Debug Çılgınlığı
Önce suçu kendi kodlarıma attım. Acaba bir for loop mu sıkıntılı? Blueprint'lerim mi verimsiz? Performans profiler'ını (Stat Unit) açtım. GameThread ve DrawThread fena değildi ama GPU satırı... o satır kıpkırmızıydı ve neredeyse 33ms (yani saniyede 30 kare bile zor) gösteriyordu. Suçlu belliydi: Lumen'in ekran alanı yansımaları (Screen Space Reflections) ve yüzey örneklemesi, benim mütevazı GTX 1660 Super'ımı resmen ezip geçiyordu.
Meğerse Lumen, DirectX 12 ve Shader Model 6.6 gibi modern API'leri ve donanım özelliklerini (özellikle RT çekirdekleri) ciddi şekilde kullanıyormuş. Benim kartım ise bu iş için "yetersiz" değil, "uygunsuz" kategorisindeymiş. StackOverflow'da bile doğrudan çözüm yoktu, çünkü çözüm donanımsaldı.
Çaresizlikten Doğan Çözüm (Ya da Teslimiyet)
Yapabileceğim iki şey vardı: Ya Lumen'i kapatıp eski, baked lightmap dünyasına geri dönecektim (ki bu UE5'in en büyük vaadinden vazgeçmek demekti), ya da projemi "ileriye dönük" olarak tanımlayıp, minimum sistem gereksinimlerine bir RTX 20/30/40 serisi kartı yazacaktım. İkincisini seçtim.
Şimdi proje açıklamasında şöyle yazıyor: "Not: Gerçek zamanlı global aydınlatma (Lumen) için NVIDIA RTX serisi bir ekran kartı önerilir." İçim acıyarak yazdım. Demek ki o güzel grafiklerin bir bedeli varmış ve bu bedel, kullanıcıların cüzdanına dokunmakmış.
Siz de UE5 ile uğraşıp, Lumen veya Nanite açtığınızda benim gibi tek haneli FPS'lerle selamlaştınız mı? Yoksa bu işin daha akıllıca bir optimizasyon yolu var mı? GTX kartla Lumen çalıştıran var mı aramızda, sır nedir?
Projemde birkaç test sahnesi vardı, basit geometriler, birkaç tane Static Mesh. "Lumen açık, dünya güzel" moduna geçtim. Editor'de ilk 5 saniye... her şey harika görünüyordu. Işıklar yumuşacık, gölgeler tertemiz. Sonra faremi biraz oynattım.
C++:
FPS: 14... 12... 9...
Evet, yanlış okumadınız. Tek haneli FPS'ler. Fanlarım, sessiz sedasız çalışan o masum fanlarım, bir anda F-16 kalkışına hazırlanıyormuş gibi uğuldamaya başladı. İşlemcim ve ekran kartımın ısıları, o anki ruh halimi yansıtır gibiydi: Panik.
Önce suçu kendi kodlarıma attım. Acaba bir for loop mu sıkıntılı? Blueprint'lerim mi verimsiz? Performans profiler'ını (Stat Unit) açtım. GameThread ve DrawThread fena değildi ama GPU satırı... o satır kıpkırmızıydı ve neredeyse 33ms (yani saniyede 30 kare bile zor) gösteriyordu. Suçlu belliydi: Lumen'in ekran alanı yansımaları (Screen Space Reflections) ve yüzey örneklemesi, benim mütevazı GTX 1660 Super'ımı resmen ezip geçiyordu.
Meğerse Lumen, DirectX 12 ve Shader Model 6.6 gibi modern API'leri ve donanım özelliklerini (özellikle RT çekirdekleri) ciddi şekilde kullanıyormuş. Benim kartım ise bu iş için "yetersiz" değil, "uygunsuz" kategorisindeymiş. StackOverflow'da bile doğrudan çözüm yoktu, çünkü çözüm donanımsaldı.
Yapabileceğim iki şey vardı: Ya Lumen'i kapatıp eski, baked lightmap dünyasına geri dönecektim (ki bu UE5'in en büyük vaadinden vazgeçmek demekti), ya da projemi "ileriye dönük" olarak tanımlayıp, minimum sistem gereksinimlerine bir RTX 20/30/40 serisi kartı yazacaktım. İkincisini seçtim.
Şimdi proje açıklamasında şöyle yazıyor: "Not: Gerçek zamanlı global aydınlatma (Lumen) için NVIDIA RTX serisi bir ekran kartı önerilir." İçim acıyarak yazdım. Demek ki o güzel grafiklerin bir bedeli varmış ve bu bedel, kullanıcıların cüzdanına dokunmakmış.
Siz de UE5 ile uğraşıp, Lumen veya Nanite açtığınızda benim gibi tek haneli FPS'lerle selamlaştınız mı? Yoksa bu işin daha akıllıca bir optimizasyon yolu var mı? GTX kartla Lumen çalıştıran var mı aramızda, sır nedir?