Bazı Oyun Güncellemelerinin Boyutu Neden Oyunun Kendisi Kadar Büyük Olabiliyor?

Oyun 80 GB iken, onun güncelleme dosyası nasıl oluyor da 75 GB olabiliyor mesela?
Bazı Oyun Güncellemelerinin Boyutu Neden Oyunun Kendisi Kadar Büyük Olabiliyor?

üç satırlık bir oyun güncellemesi neden 80 gb indirtebiliyor?

120 gb’lık oyuna güncelleme geliyor. yama notlarında üç madde var: bir çökme sorunu giderildi, iki silahın hasarı değiştirildi, bir görevde açılmayan kapı düzeltildi. indirme ekranında ise 78 gb yazıyor. insan ister istemez “kapının menteşesini mi değiştirdiniz, oyunu baştan mı yaptınız?” diye düşünüyor.

net cevap şu: 78 gb’lık güncelleme, oyuna 78 gb yeni içerik eklendiği anlamına gelmez. güncellemenin boyutunu yapılan değişiklik kadar, o değişikliğin oyun dosyalarının içinde nasıl paketlendiği belirler. küçücük bir düzeltme bazen içinde bulunduğu dev veri paketinin önemli bölümünü yeniden indirtir.

modern oyunlar; haritaları, kaplamaları, karakter modellerini, sesleri ve animasyonları binlerce bağımsız dosya halinde bırakmaz. bunların büyük bölümü daha hızlı okunabilmeleri ve kolay dağıtılabilmeleri için “pak”, “pack” veya benzeri adlar taşıyan büyük arşivlerde toplanır. bunu yüzlerce eşyanın birkaç büyük valize doldurulması gibi düşünmek mümkün.

yapımcı bir karakterin kaplamasını değiştirdiğinde bilgisayar o görselin valizin neresinde bulunduğunu bilmek zorunda. arşivin başındaki adres tablosunda her parçanın konumu yazılıdır. değiştirilen kaplama eskisinden biraz daha büyük olursa arkasındaki verilerin konumları kayabilir; adres tablosu ve arşivin farklı bölümleri de değişmiş görünmeye başlar.

steam’in içerik sistemi steampipe, dosyaları yaklaşık 1 mb’lık parçalara ayırıyor. yeni sürüm hazırlanırken eski sürümle aynı kalan parçaları bulup yalnızca değişenleri indirmeye çalışıyor. sistem düzgün paketlenmiş bir oyunda oldukça verimli: 100 gb’lık oyundaki 200 mb’lık değişiklik için bütün oyunu yeniden indirmeniz gerekmiyor.

fakat arşivin içindeki dosyaların sırası değişirse, bir parçanın büyümesi kendisinden sonrakileri kaydırırsa veya sıkıştırma işlemi veriyi farklı biçimde yeniden dizerse eski 1 mb’lık parçaların çoğu yeni sürümle eşleşmeyebilir. steam dokümanında verilen örnek oldukça acımasız: büyük bir paket dosyasının içindeki birkaç baytlık değişiklik bile sonraki adresleri etkileyerek kullanıcıya dosyanın yarısından fazlasını yeniden indirttirebilir.

unreal engine tarafında da benzer bir sınır var. epic’in kendi dokümanına göre yama hazırlanırken değiştirilebilen en küçük içerik birimi tek bir paket; bir .uasset veya .ulevel paketinde herhangi bir şey değiştiğinde paketin tamamı yamaya ekleniyor. görevdeki tek kapının davranışı düzeltilmiş olabilir ama kapı, nesneler ve bölüm verisi büyük bir paket içinde birlikte duruyorsa gönderilen şey yalnızca birkaç satır kod olmayabilir.

sıkıştırma da durumu büyütebiliyor. büyük bir arşiv tek parça halinde sıkıştırılmışsa başlara eklenen küçük veri, kendisinden sonra gelen sıkıştırılmış baytların görünümünü değiştirebilir. insan gözüyle içeriğin çoğu aynıdır; güncelleme sistemi açısından eşleşmeyen çok sayıda yeni blok ortaya çıkmıştır. valve bu yüzden geliştiricilere arşivleri daha küçük tutmalarını, içerikleri bölüm veya özellik bazında ayırmalarını ve dosya sırasını gereksiz yere değiştirmemelerini öneriyor.

elbette bazı yamalar gerçekten büyüktür. yeni haritalar, yüksek çözünürlüklü kaplamalar, ses paketleri, ara sahneler ve sezon içerikleri doğrudan yeni veri getirir. motor sürümünün değişmesi ya da bütün kaplamaların farklı biçimde sıkıştırılması da oyunun büyük bölümünün yeniden hazırlanmasına yol açabilir. üç maddelik yama notu ise çoğu zaman değişen her dosyanın dökümü değildir; oyuncunun göreceği yeniliklerin kısa listesidir.

bir de “indirilen veri” ile “diskte işlenen veri” birbirine karıştırılıyor. steam bazen yalnızca 2 gb indirirken ekranda 80 gb’lık disk işlemi gösterebilir. bunun sebebi eski arşivdeki sağlam parçaları okuyup yeni arşivi yan tarafta yeniden kurmasıdır. valve’ın açıklamasına göre 25 gb’lık bir paket içinde yalnızca 10 bayt değişse bile istemci yeni 25 gb’lık dosyayı oluşturmak için eski paketin neredeyse tamamını kopyalamak zorunda kalabilir. internet kullanımı durmuşken disk yüzde 100 çalışıyorsa oyun yeniden inmiyor; arşiv sökülüp kuruluyordur.

aynı yüzden güncelleme sırasında oyunun boyutuna yakın miktarda boş alan istenebilir. işlem güvenli biçimde tamamlanana kadar eski paket korunur, yenisi yanında hazırlanır; kontrol bittikten sonra eskisi silinir. 80 gb güncelleme yapan 120 gb’lık oyun işlem sonunda 200 gb olmak zorunda değildir. yeni verinin büyük kısmı eskisinin yerini alır.

oyuncunun gördüğü o üç satırlık yama notu doğru olabilir. fakat düzeltilen kapının bulunduğu dosya tek başına durmuyorsa, kapıyla beraber bütün katın valizi açılıp yeniden hazırlanır.

kaynaklar:

https://partner.steamgames.com/…uploading?l=english

https://dev.epicgames.com/…a-patch-in-unreal-engine

https://dev.epicgames.com/…th-patches-after-release

https://docs.godotengine.org/…t/exporting_pcks.html