Tüm yazılar
Eğitimler · 7 min read

Ortam sanatı için performans bütçeleri: güzellikten önce sayılar

Ortam sahneleri için bir performans bütçesi nasıl belirlenir: sistem başına kare-zaman dilimleri, draw call ve bellek tavanları, üç kameralı ölçüm yöntemi, inceleme temposu ve bir sahne aştığında çekilecek kaldıraç sırası.

Illustration of a performance gauge above stacked millisecond budget bars

Kısaca: "sonda optimize et", projelerin sertifikasyonda öldüğü yoldur. Bir performans bütçesi (içerik oluşturulmadan önce üzerinde anlaşılan kare-zaman ve bellek tavanları) optimizasyonu bir krizden rutin bir kontrole dönüştürür. Poligon değil milisaniye bütçele, kareyi bir pasta gibi böl, üç sabit kamerada ölç, sayıları işin olduğu yerde görünür kıl ve bir sahne kırmızıya döndüğünde kaldıraçları maliyet-etkinlik sırasıyla çek. Bu yazı tüm sistemi, uyarlayabileceğin başlangıç sayılarıyla verir.

Katman katman puslara karışan ormanlık sırtlar Manzara her zaman faturadır: azami çizim mesafesi, ekranda aynı anda her sistem, aktif her LOD halkası. Bu görünüm için bütçele. Koridor kendi başının çaresine bakar.

Poligon değil, kare-zaman bütçele

Poligon bütçeleri bir kalıntıdır, çünkü modern GPU'lar ham üçgenlerden çok önce draw call, overdraw, gölge ve bellek bant genişliğinde tıkanır. Gerçekten ölçtüğünü bütçele: sistem başına, görünüm başına milisaniye.

60 fps'lik bir oyun kare başına 16,6 ms'ye sahiptir; 30 fps'te 33,3 ms. Bu, her şeyin paylaştığı tüm bütçedir: oynanış, fizik, yapay zekâ, VFX, UI ve ortam. Ortamın dilimi render ve oynanışla bir müzakeredir. Ama bir sayı olmalı, üzerinde anlaşılmış ve yazılmış, yoksa bir sahnenin "çok pahalı" olup olmadığına dair her tartışma zevke ve kıdeme çöker. Kare-zamanın yanında, onu bağlayan niceliklere tavanlar ver:

  • görünüm başına draw call (GPU dolmadan çok önce CPU'yu bağlarlar),
  • akış bölgesi başına doku ve mesh belleği (akış mı yaparsın yoksa takılır mısın kararını veren sayı),
  • görünümde gölge düşüren ışıklar,
  • overdraw sıcak noktaları: bitki örtüsü ve VFX her zamanki şüpheliler.

Kesin tavanlar platform ve motora bağlıdır; tavanlara sahip olma disiplini, gönderdiğin her projeye taşınan şeydir. Yanlış olabileceğin bir sayı, ancak üzerine tartışabileceğin bir sezgiyi yener.

Kareyi bir pasta gibi böl, milisaniyeyle

Her departmana bir dilim ver (oynanış, VFX, UI, ortam), sonra ortam dilimini tekrar böl: arazi, bitki örtüsü, prop, su. "Bu orman çok pahalı mı?" nesnel bir soru olur.

60 fps'lik bir başlık için işleyebilir bir başlangıç bölünmesi, proje başına yeniden müzakere edilmek üzere: ortam toplam 6–8 ms, bundan arazi ~1,5, bitki örtüsü ~2–2,5, prop ve yapılar ~1,5, su ve atmosfer ~1. Mesele bu kesin sayılar değil: mesele, orman 2,5 ms'lik dilime karşı 4 ms ölçtüğünde, konuşmanın "kimin suçu" yerine "hangi kaldıracı çekiyoruz" olması.

Dilimler ayrıca aşırı optimizasyona karşı da korur, ki bu gerçek ve pahalı bir başarısızlıktır. Diliminin çok altında oturan bir sistem, kenar payını kaliteye harcamaya bir davettir, savunulacak bir kupa değil. Dilimsiz ekipler en gürültücü mühendisin fark ettiğini optimize etmeye eğilimlidir, ki bu nadiren gerçek darboğazdır. Pasta grafiği milisaniyelerin gerçekte nereye gittiğini söyler.

Üç sabit kamerada ölç

Ortalama için değil, en kötü gerçekçi görünüm için bütçele: harita başına üç sabit "bütçe kamerası" seç (en kötü manzara, en yoğun savaş alanı, en hareketli iç mekân) ve tam orada ölç, her seferinde.

Rastgele uçuşlar rastgele sayılar ve yanlışlanamaz argümanlar üretir. Sabit kameralar trend çizgileri üretir: aynı görünüm, haftalık ölçülünce, bir gerilemenin tam ne zaman ve nerede indiğini ve kime sorulacağını gösterir. En kötü manzara başrolü hak eder çünkü her şeyi bir kerede yığar: azami çizim mesafesi, her LOD halkası, arazi, su ve gökyüzü aynı anda. Manzarasında bütçeyi tutan bir harita onu neredeyse her yerde tutar; koridorlar seni pohpohlar, manzaralar gerçeği söyler.

Kamera konumlarını haritaya kaydet ki herkes tam çekimi yeniden üretebilsin. "Bir açıdan makinemde iyi çalışıyor" veri değildir; "bütçe kamerası 2, minimum spec'te 9,2 ms ölçüyor, geçen haftaki 7,8'den yukarı" şüphelisi olan bir hata raporudur.

Bütçeyi işin olduğu yerde görünür kıl

Wiki'deki bir bütçe ölüdür: giydirme sırasında istatistik bindirmeleri, içerik merge'lerinden önce tavanlara karşı bir kontrol ve bir pişirmenin instance sayısını aşacağı durumlar için uyarılar olarak yaşar.

Sanatçılar geri bildirim anında olduğunda bütçeleri seve seve tutar, ve iş gönderildikten üç ay sonra bir hata bileti olarak geldiğinde onlara içerler. Araç tarafı burada sessiz ama belirleyici bir biçimde önemlidir: scatter ve blending motor-yerel primitiflere pişirdiğinde (Numivo'nun yaptığı gibi sıradan instance edilmiş meshler ve foliage), mevcut profiler'ın onlar hakkında rötuşsuz gerçeği söyler, sayıları bulandıran bir eklenti runtime'ı olmadan, ve her standart kaldıraç (cull mesafeleri, LOD'lar, instance sayıları) değişmeden uygulanır. Yalnız bir kara kutu üzerinden ölçebildiğin bir bütçe, sessizce güvenmeyi bırakacağın bir bütçedir.

Tutan inceleme temposu

Üç bütçe kamerasının haftalık yakalamaları (beş dakika), içerik merge'lerinde otomatik bir tavan kontrolü ve tavanların kendisinin aylık incelemesi. Bütçeler tahmindir, ve dürüst revizyon sessiz ihlali yener.

  • Haftalık: üç kamerayı istatistikler açıkken ekran görüntüle; kare-zamanı ve belleği paylaşılan bir sayfaya kaydet. Trendler bir ay içinde belirir, ve bir sıçrama belirli bir haftanın işine işaret eder.
  • Merge'de: otomatik bir kontrol sahneyi tavanlarla karşılaştırır. Kırmızı sayılar bir konuşma açar, bir build kırığı değil. Amaç farkındalık, bürokrasi değil, ve sert bir engel insanları kontrolü kandırmaya eğitir.
  • Aylık: dilimlerin kendisini yeniden gözden geçir. Proje ortası gerçeklik her zaman ön-üretim tahminlerinden farklıdır; bütçeyi açıkça ayarlamak onu inandırıcı tutar. Herkesin sessizce görmezden geldiği bir bütçe hiç olmamasından beterdir, çünkü ekibe tavanların tiyatro olduğunu öğretir.

Sayılar kırmızıya döndüğünde

Kaldıraçları maliyet-etkinlik sırasıyla çek: önce cull mesafeleri ve gölge ayarları (dakikalar, devasa kazançlar), sonra LOD'lar ve impostorlar, sonra instance sayıları, ve ancak en son sanatın kendisi.

Bir binanın açığa çıkmış beton iskeletiyle yıkım sahası Optimizasyon triyajdır, yıkım değil. Sanatı en son yık: bütçeyi aşan manzaraların çoğu, bir oyuncunun görebileceği bir şeyi silmen gerekmesinden çok önce, görünmez ayar değişikliklerinden yeşile döner.

Pahalı hata, doğrudan "ağaçların yarısını sil"e atlamaktır. Yoğunluk en görünür kaldıraçtır ve genellikle en ucuzu değil. 2 ms bütçe aşan bir manzara tipik olarak yalnızca gölge-mesafesi ve cull-mesafesi ayarıyla yeşile döner, ikisi de oyunculara görünmez. İçerik silmek son çaredir tam da oyuncuların görebileceği tek kaldıraç olduğu için; merdivende onun üstündeki her basamak sanat açısından bedavadır. Merdiveni aşağı in ve milisaniyeleri geri kazanırken görünümü koru; alttan yukarı çık ve bedava kazançları denemeden oyunu çirkinleştir.

Çalmaya değer saha rakamları

  • 60 fps'te kare: 16,6 ms, ortamlar tipik olarak 6–8 ms müzakere eder
  • İşleyebilir bir ortam alt-bölünmesi: arazi 1,5 / bitki örtüsü 2–2,5 / prop 1,5 / su ve atmosfer 1 (ms)
  • Harita başına bütçe kameraları: 3 (manzara, savaş, iç mekân), haritaya kaydedilmiş
  • Haftalık ölçüm maliyeti: ~5 dakika; değer: tartışmalar yerine trend çizgileri
  • Kırmızıda kaldıraç sırası: culling → gölgeler → LOD'lar → instance'lar → sanat

Mini-SSS

Ortam bütçesi kime aittir? Adı belli bir kişi (genellikle bir tech artist) ölçümün sahibidir; tavanlar render ile ortak sahiplenilir. Sahibi olmayan bütçeler bir ay içinde folklora bozulur, çünkü "herkes sorumlu" hiç kimse ölçmüyor demektir.

Bütçeler dinamik günün-saatiyle nasıl çalışır? Her kamerada en güzel değil, en kötü aydınlatma koşulunu ölç. Uzun, sıyıran gölgelerle şafak çoğu zaman öğlenin iki katına mal olur; yalnız öğlende tutan bir bütçe yarım bütçedir, ve oyuncular pahalı saati bulur.

Bunların hepsine küçük bir bağımsız proje için ihtiyacım var mı? Küçült, kaldırma. Bir bütçe kamerası, bir tavan (minimum spec makinende kare-zaman), haftalık kontrol edilen. Beş dakikalık alışkanlık, son ayı kurtaran şeydir. Ekip boyutundan bağımsız olarak başarısızlık modu aynıdır: maliyeti, düzeltmesi pahalıyken keşfetmek.

Peki bellek karşısında kare-zaman? Farklı başarısızlık modları olan farklı bütçelerdir: kare-zaman FPS'ini düşürür, bellek akışını takılmaya ya da çökmelere düşürür. İkisini de bütçele; konsolda bellek çoğu zaman daha sert tavandır, ve yalnızca kötü hissettirmek yerine sertifikasyonu geçemeyen odur.

Bütçe, sanatçılığa bir sınır değildir: güzel sahnenin, oyuncuların gerçekten sahip olduğu donanımda 60 fps'te hâlâ güzel görünmesinin sebebidir. Performansı paylaşılan bir tasarım kısıtı olarak gören ekipler, onu bir final patronu gören ekiplerden daha güzel oyunlar gönderir.