Unity İçin Toplu Mesh Optimizasyon Aracı

Bir prefab klasöründeki tüm mesh'leri toplu optimize eden, canlı önizleme sunan ve LOD kurulumunu bozmadan uygulayan bir Unity Editor aracı geliştirdik.

VR ve mobil projelerde aynı işi elle tekrar tekrar yapıyorduk: ağır bir prop’u açıp bir mesh simplifier’dan geçiriyor, sonucu gözle kontrol ediyor, klasördeki bir sonraki mesh için aynısını tekrarlıyorduk. Bu gözle kontrolü üstlenen ve sonucu hiçbir şeyi bozmadan uygulayan bir Editor aracı yazdık. Adı Mesh Optimizer. Şimdi bir build bir başlığa ya da telefona gitmeden önce ilk açtığımız araç bu.

Hazır araçlar neden yetmedi

UnityMeshSimplifier basitleştirme matematiğini iyi yapıyor, onu değiştirmedik. Eksik olan, tüm bir prefab klasörü üzerinde çalışan bir iş akışıydı: hangi mesh hangi prefab’a ait, iki prefab aynı mesh’i paylaşıyor mu, altındaki LOD grubu neyi bekliyor, bir önceki prop’ta işe yarayan ayarlar bu prop için de doğru mu. Bunların hepsini kafamızda tutuyorduk. Bu tür bir muhasebe tam olarak bir aracın işi.

Araç ne yapıyor

Bir prefab klasörünü gösteriyorsunuz, araç bir kuyruk kuruyor: o prefab’ların kullandığı her mesh, üçgen sayısıyla birlikte listeleniyor. Böylece önemsiz mesh’leri baştan atlayabiliyorsunuz. Bir mesh seçtiğinizde orijinal ve optimize edilmiş hâli yan yana canlı önizlemede görünüyor. Simplifier’ın tüm ayar seti ve prefab’ın LOD kurulumu aynı pencerede duruyor. Üretim ayrı bir worker thread’de çalışıyor, bir slider’ı bıraktığınızda başlıyor. Bir ayarı ince ayarlarken editör kilitlenmiyor.

Apply & Next optimize edilmiş mesh’i yazıyor, prefab’ı ona yönlendiriyor ve sıradaki mesh’e geçiyor. İki prefab aynı kaynak mesh’i kullanıyorsa mesh bir kez üretiliyor ve paylaşılıyor. Yeniden ayarlamak aynı asset’in üzerine yazıyor, arkasında _opt_opt zinciri bırakmıyor. İlerleme prefab’ın GUID’ine bağlı olarak ProjectSettings/MeshOptimizer.json içinde tutuluyor. Pencereyi kapatmak, prefab’ı yeniden adlandırmak ya da klasöre bir hafta sonra dönmek bu ilerlemeyi bozmuyor.

Her şeyi sessizce belirleyen iki ayar

Preserve UV Seam Edges, bir mesh’in küçülmeyi reddetmesinin en sık rastlanan sebebi. Her yüzeyi ayrı UV’lenmiş sert yüzeyli bir prop’ta neredeyse her kenar seam sayılıyor, kaliteye çalışacak alan kalmıyor. Pencere artık bu durumu tanıyor ve kilidi açmayı öneriyor. Preserve Border Edges düzlemleri, çitleri ve kart şeklindeki nesneleri koruyor. Kilidini açmak bu nesnelerin siluetini bozuyor. Tangent’ları varsayılan olarak yeniden hesaplıyoruz, normal’lere dokunmuyoruz; çünkü normal’leri yeniden kurmak sert kenarların ortalamasını alıyor ve sert yüzey gölgelendirmesini düzleştiriyor.

En çok nerede işe yarıyor

Poligon bütçesi en çok bağımsız VR başlıklarında ve orta segment telefonlarda hissediliyor. Masaüstü GPU’da sorunsuz çalışan bir sahne, stereo için iki kez render edildiğinde ya da pil için kısıldığında kare düşürüyor. Hacettepe Üniversitesi ile yürüttüğümüz VR rehabilitasyon projesinde bu ayarlama cihaz başına tekrarlanan bir süreç. Aracı tam bunun için, prefab başına tekrar eden bu işi özümsesin diye kurduk.

Hâlâ eksik olanlar

Bu iç kullanım için geliştirdiğimiz, kendini kanıtlamış ama bitmemiş bir araç. İki script hâlâ uzun; bir kod ayrıştırma geçişi planlıyoruz. Bir mesh’in istenmeyen bir alt parçasını (bir araba modelindeki teker ya da yan ayna gibi) basitleştirmeden önce silme imkânı henüz yok. İkisi de listemizde.

Kaynak kodu GitHub’da. Unity Asset Store listelemesi hazırlanıyor.

Düz bir oyununuzu bir başlığa taşıyorsanız ya da build’iniz gerçek cihazda kare bütçesini tutturamıyorsa, projenizi bize iletin. Bir çözüme karar vermeden önce üçgenlerin nereye gittiğini beraber görelim.

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir