1 puan yazan GN⁺ 2024-04-19 | 1 yorum | WhatsApp'ta paylaş
  • Orijinal Xbox için Halo 2 HD yaması, çalıştırılabilir dosya değişiklikleri, konsol donanım modifikasyonları ve benchmark aracı geliştirmeyi bir araya getirerek 480p’nin ötesinde 720p ve 1080p render etmeyi denemiş bir projeydi
  • Mevcut Halo 2, 480p olarak belirtilmesine rağmen dahili olarak 640×480 back buffer’a çizip GPU’nun bunu 720×480’e upscale etmesiyle çalıştığından, HD desteği için D3D buffer’larının ve video modu işlemenin birlikte değiştirilmesi gerekiyordu
  • 720p’de çalıştırmak, standart 64MB RAM ile mümkün olmadığından 128MB RAM yükseltmesi ve kernel hot patch gerektirdi; GPU için bitişik fiziksel belleğin üst 64MB’den de ayrılabilmesi için kısıtlama aşıldı
  • Performans; triple buffering, texaccum render target tiling ve GPU’nun 233.33MHz’ten 300MHz’e overclock edilmesi gibi yöntemlerle iyileştirildi; Zanzibar benchmark sahnesi yaklaşık 19FPS’ten 27~28FPS seviyesine çıktı
  • Ek RAM, texture ve geometry cache’lerinin büyütülmesi ile HDD aktarım hızının iyileştirilmesinde de kullanıldı; nihai yama 720p’yi pratikte kullanılabilir hale getirdi, ancak 1080p daha çok ekran görüntüsü amaçlı bir bonus niteliğinde

Proje hedefi ve donanım varsayımları

  • Hedef, orijinal Xbox sürümü Halo 2’ye HD çözünürlük desteği eklemek ve modifiye edilmiş konsol donanımının nereye kadar dayanabileceğini görmekti
  • Çalışma kapsamına oyun yaması, Xbox konsol donanımı değişiklikleri ve performans benchmark’ı için özel araçlar yazmak dahildi
  • Projenin temelini oluşturan modifiye Xbox “god box” olarak adlandırılıyordu ve şu değişiklikleri içeriyordu
    • Standart 733MHz Pentium 3 CPU’nun, özel bir interposer kartıyla 1.4GHz Pentium 3 türevi CPU ile değiştirilmesi
    • CPU’nun yaklaşık 2GHz’e kadar overclock edilebilmesi
    • Ek RAM ve SSD kullanımı
    • Donanım modifikasyonlarını destekleyen özel kernel veya BIOS imajı kullanımı
  • Halo 2’nin desteklediği en yüksek video çözünürlüğü 480p’ydi; amaç 720p ve mümkünse 1080i desteği eklemekti
  • Çözünürlük artırıldığında pixel shader hesaplama miktarı artıp GPU yükü büyüdüğü için, çalışmanın buna değmesi için GPU overclock’unun mümkün olması gerektiği düşünüldü
    • Daha sonra GPU’da yaklaşık %15 overclock mümkün hale geldi ve “GENESIS-3” konsolu geliştirme için hazırlandı

Halo 2’nin 480p’si ve dahili render yapısı

  • Halo 2 kutu üzerinde 480p desteklediğini belirtse de, D3D present parameter’da D3DPRESENTFLAG_PROGRESSIVE ayarlanmamıştı ve ekran boyutu ölçeği de her zaman 1.0f idi
  • Dahili screen_bounds, video modundan bağımsız olarak 640×480 ayarlanıyordu
    • Orijinal Xbox’ta 480p, 720×480 olarak ele alınıyordu
    • Halo 2, 640×480 back buffer’a render ettikten sonra GPU bunu 720×480’e upscale edip video encoder’a gönderiyordu
  • Widescreen modunda, 1.33:1 anamorphic kamera kullanılarak aynı 640×480 yüzeye daha geniş görüntü sıkıştırılarak render ediliyordu
    • Bu yöntem, TV’nin stretch modunda yatay sıkıştırmayı telafi etmeyi amaçlıyor olabilir
    • Yamaya anamorphic scaling’i kapatan bir seçenek de eklendi

HD render için D3D yaması

  • Çözünürlük desteği için üç fonksiyon ana değişiklik hedefi oldu
    • _rasterizer_detect_video_mode: 720p’de de progressive scan etkin olacak şekilde değiştirildi
    • _rasterizer_init_screen_bounds: video moduna göre 640×480, 720×480, 1280×720, 1920×1080 boyutlarını ayarlayacak hale getirildi
    • rasterizer_device_initialize: D3D back buffer ve present flag ayarları
  • 1080i modunda ekran genişliğinin 1920 olup olmadığı kontrol edildikten sonra D3DPRESENTFLAG_PROGRESSIVE kaldırılıp D3DPRESENTFLAG_INTERLACED ayarlandı
  • İlk değişikliklerden sonra ana menüde mavi filtre kayboldu; tekrarlayan çizgiler ve su geometrisinin kesilmesi sorunları ortaya çıktı
    • Sorunların bir kısmı back/front/depth buffer’lar için hardcoded 640×480 view kullanılmasından kaynaklanıyordu
    • Aynı belleği farklı genişliklerle gören texture/surface view’ları oluşuyor ve scan line yerleşimi kayıyordu

D3D belleği ve render target’ların yeniden yapılandırılması

  • Orijinal Xbox, CPU ve GPU’nun aynı RAM’i kullandığı unified memory mimarisine sahipti
    • PC’deki gibi VRAM üzerinde D3D allocation oluşturup GPU’nun yönettiği bir yapı değildi
    • CPU, texture, render target, vertex buffer gibi bellekleri oluşturup adresi doğrudan GPU’ya verebiliyordu
  • Halo 2 yaklaşık 25 render target kullanıyor, ancak gerçekten ayrı buffer allocation sayısı yalnızca 4~5 civarındaydı
    • Birçok render target aynı belleği farklı resource view’larıyla paylaşarak bellek tasarrufu sağlıyordu
  • rasterizer_primary_targets_initialize, D3D’nin oluşturduğu back/front/depth buffer’dan ek render target ve texture view’ları oluşturuyor, boyutu 640×480 olarak hardcode ediyordu
  • Yama, bu fonksiyonu hook ile sararak orijinal fonksiyon çalıştıktan sonra texture/surface boyutlarını mevcut back buffer çözünürlüğüne göre düzeltti
    • Tiled memory’nin pitch’i standart width * bpp değerinden farklı olabildiği için D3D_CalcTilePitch ile hesaplandı
    • Yanlış pitch özellikle 1080i’de çizgili efektler oluşturabiliyordu

texaccum render target boyutunun düzeltilmesi

  • Ana menüde su geometrisinin kesilmesi, texaccum render target’ının 640×480’e sabitlenmiş olmasından kaynaklanıyordu
  • Xbox DirectX implementasyonu, pixel shader pass başına yalnızca 4 texture örneklemesine izin veriyordu
    • 4’ten fazla input texture gerektiren nesneler birden çok pass ile render edilmeliydi
    • texaccum layer, önce detail texture’ları birleştiriyor, sonra lightmap pass’i için input olarak kullanılıyordu
  • rasterizer_targets_initialize, texaccum render target’ını 640×480 olarak ayırıyordu
  • _rasterizer_alloc_and_create_render_target, hook ile sarıldı ve target_index == 1 olan texaccum target’ının genişliği ve yüksekliği mevcut back buffer boyutuna değiştirildi
  • Bu değişiklikten sonra su geometrisi kesilmesi ortadan kalktı ve harita yüklenirken göze çarpan render sorunları da kalmadı
  • Mavi filtre sorunu basit bir boyut kontrolü güncellemesiyle çözüldü, ancak ayrıntılı süreç atlandı

720p çalıştırmayı engelleyen bellek sınırı

  • 720p’ye ayarlandığında oyun açılışta çöküyordu; sebep, büyüyen front/back/depth buffer ve rasterizer target’lar nedeniyle bellek yetersizliğiydi
  • Orijinal Xbox’ta tüketiciye yönelik 64MB RAM modeli ile geliştiricilere yönelik 128MB RAM dev kit/debug console bulunuyordu
    • Retail kartlarda da ek RAM çipleri için yer fiziksel olarak mevcuttu
    • RAM çipleri lehimlenip modifiye kernel kullanılırsa ek 64MB’ye erişilebiliyordu
  • 720p ve üzerini çalıştırmak için 128MB RAM yükseltmesi gerekiyordu
  • Normal 480p’nin de RAM yükseltmesi olmadan çalışması için oyunun bellek içi texture cache’inden bellek almak gerekiyordu; bu durumda texture pop-in artıyordu

Halo 2 bellek yöneticisi yaması

  • Halo 2, başlangıçta kullanılabilir 64MB’nin yaklaşık 48.9MB’ını tek büyük runtime data alanı olarak ayırıyordu
    • Bu alan level metadata, texture, geometry, animation, sound cache, rasterizer target, network/simulation resource’ları gibi bölümlere ayrılarak kullanılıyordu
  • Bellek kullanımını görselleştirmek için XboxImageGrabber yazıldı
    • Page table entry’leri gezilerek RAM kullanım durumu bitmap olarak görselleştiriliyordu
  • Runtime data alanı 0x80061000 adlı hardcoded adrese ayrılıyordu
    • map dosyasındaki tag data bu temel adrese göre serialize edildiğinden, bu verinin her zaman aynı adreste bulunması gerekiyordu
    • Diğer runtime data taşınabiliyordu
  • Taşınacak alanlar olarak rasterizer target, texture cache ve geometry cache seçildi
    • Belirli allocation çağrıları hook edilerek debug memory region’a taşındı
    • Yeni level yükleme gibi serbest bırakma zamanlarında uygun free çağrıları eklendi
    • Runtime data alanı boyutu da küçültülerek israf azaltıldı
  • physical_memory_malloc derleyici tarafından inline edildiği için her call site için ayrı patch gerekiyordu

Xbox kernel hot patch’i ve üst 64MB fiziksel bellek

  • GPU’ya verilen bellek adresleri fiziksel adres olmalıydı ve ilgili bellek aralığının bitişik olması gerekiyordu
    • GPU’da page table veya sanal adres çevirisi kavramı yoktu
  • 128MB RAM kernel’inde bile varsayılan olarak fiziksel bitişik allocation yalnızca ilk 64MB içinde mümkündü; sanal allocation ise 128MB’nin tamamında yapılabiliyordu
  • Üst 64MB page table entry’lerini elle kullanarak GPU belleği gibi kullanma testi başarılı oldu
    • Üst 64MB’de GPU için fiziksel bellek kullanılamaması donanımdan değil, kernel’deki yazılım kısıtlamasından kaynaklanıyordu
  • MmAllocateContiguousMemoryEx içinde MAX_USABLE_PFN kontrolü vardı
    • Mevcut değer 0x83FE0000 idi; bu da 64MB - 128KB’ye karşılık geliyordu
    • Üst 128KB, 64KB GPU scratch alanı ve 64KB CPU page table için ayrılmıştı
  • Yama, oyun boot sırasında konsolda 128MB RAM olup olmadığını kontrol ettikten sonra MmAllocateContiguousMemoryEx içinde mov edx, 0x3FDF değerini bulup 128MB yapılandırmasına uygun yeni değerle değiştirdi
  • Daha sonra MmAllocateContiguousMemoryEx ve MmFreeContiguousMemory kullanılarak 128MB’nin tamamında bitişik fiziksel bellek ayrılıp serbest bırakıldı
  • Yan etkileri de vardı
    • Oyundan çıktıktan sonra cold reboot olmadan dashboard’a dönmek veya DVD tray eject gibi warm reboot yapmak, bir sonraki uygulama/oyunda ciddi grafik artifact’lerine ve çökmelere yol açabiliyordu
    • Bunu gizlemek için oyundan çıkışta cold reboot’u zorunlu kılan ek bir yama eklendi

720p/1080p render sonuçları ve performans darboğazı

  • 720p render görsel olarak iyileşti, ancak ağır sahnelerde FPS 10’un altına düşecek kadar performans düşüktü
  • 1080p’de native render mümkündü, fakat Xbox konsol çıkışı yalnızca 1080i sinyal verebiliyordu
    • D3D back buffer doğrudan dump edildiğinde GPU’nun video encoder için half frame’e dönüştürmesinden önceki 1080p ekran görüntüsü alınabiliyordu
  • Performans ölçümleri standart Xbox, yalnızca CPU’su overclock edilmiş god box ve CPU+GPU overclock edilmiş god box olmak üzere üç yapılandırmayı karşılaştırdı
  • Zanzibar’daki ağır nokta “zanzibar benchmark scene” olarak kullanıldı
  • İlk ölçümlerde üç yapılandırmanın FPS’i neredeyse aynıydı ve performans grafiğinde sebebin swap stall olduğu görüldü
    • Halo 2, vsync on ve double buffering kullanıyordu
    • GPU’nun vblank bekleyip swap chain rotasyonunu gerçekleştirememesiyle stall oluşuyordu

Triple buffering ve GPU darboğazının doğrulanması

  • Çözüm olarak back buffer count 2’ye çıkarıldı; 1 front buffer ve 2 back buffer olmak üzere toplam 3 buffer kullanan triple buffering uygulandı
  • D3DPRESENT_PARAMETERS içinde BackBufferCount = 2, D3DSWAPEFFECT_DISCARD, D3DPRESENT_INTERVAL_ONE ayarlandı
  • Halo 2’nin render motoru double buffering varsayımıyla back/front buffer pointer’larını her frame’de değiştirdiğinden, swap hook ve primary target initialize hook da düzeltilmek zorunda kaldı
    • İki primary render surface ve texture view’ın her zaman mevcut back buffer’ı referans etmesi sağlandı
    • Oyun dahili olarak iki pointer’ı swap etse bile aynı belleği işaret ettikleri için fiilen no-op hale geldi
  • Zanzibar benchmark sahnesinde standart GPU ile FPS yaklaşık 22FPS oldu
    • Öncekine göre yaklaşık 3FPS artış
    • 30FPS cap’e göre yaklaşık %10 artış
    • swap stall ortadan kalktı ve GPU kullanımı maksimuma çıkarak darboğazın GPU olduğu doğrulandı

GPU ve RAM overclock’u

  • texaccum render target’ını tiled memory’ye çevirerek ek 1~2FPS elde edildi
    • Zanzibar benchmark sahnesi yaklaşık 19FPS’ten 23~24FPS’e iyileşti
  • god box’ın GPU overclock durumunda Zanzibar benchmark sahnesi 27~28FPS kaydetti
    • Haritada dolaşırken çoğunlukla 30FPS korunuyordu, yalnızca bazı ağır bölgelerde düşüş oluyordu
  • BIOS’u yeniden flashlama gereksinimini önlemek için GPU clock generator’ın memory-mapped IO register’ı oyun başlangıcında doğrudan ayarlandı
  • GPU clock hesaplaması, NVPLL_COEFF içindeki M, N, P değerleri ve 16.6667MHz base clock’a dayanıyordu
    • Varsayılan N değeri 28, 233.33MHz GPU clock üretiyordu
    • N değeri değiştirilerek yaklaşık 8MHz aralıklarla ayarlanabilir hale getirildi ve ini dosyasıyla yapılandırılabildi
  • 300MHz GPU overclock’u, Zanzibar benchmark’ında standart GPU’ya kıyasla yaklaşık 3FPS ek artış sağladı
  • GPU’ya göre overclock sınırı çipten çipe değişiyordu
    • 1.0~1.4 revision konsolların GPU’larında sınır çoğu zaman low 300MHz aralığında görülüyordu
    • 1.6 revision konsol GPU’sunun 400MHz üzerinde stabil çalıştığı örnekler vardı
  • RAM clock da test edildi
    • Xbox memory bus teorik maksimum bant genişliği 6.4GB/s, pratik kullanılabilir değer ise yaklaşık %70’i olan 4.5GB/s olarak ele alındı
    • RAM varsayılan olarak 200MHz’e yakın olduğundan yaklaşık 10MHz artırmak bile kararsızlığa yol açabiliyordu
    • Yaklaşık 208MHz ayar testinde 0.7FPS artış gözlemlendi
    • 250MHz destekli RAM çipleri de sipariş edildi, ancak yazı yazıldığı sırada kurulum ve ek test yapılmamıştı

Pop-in azaltma ve cache genişletme

  • Halo 2’de başlangıçta da texture ve geometry pop-in sorunları vardı; 2000’lerin başındaki mekanik HDD kullanan konsollarda bu daha belirgindi
  • Ek RAM kullanılarak texture cache ve geometry cache genişletildi
    • Varsayılan geometry cache single-player haritalarda 6.5MB, multiplayer haritalarda 7MB idi
    • texture cache harita boyutuna göre değişiyor; tag data’nın arkası ile low detail texture cache’in önündeki boş alanı kullanıyordu
  • Cache’ler LRU yöntemiyle çalışıyordu
    • Her 30 frame’de, son 30 frame boyunca kullanılmamış veriler kaldırılıyordu
    • Cache dolduğunda çağıran taraf zorla eviction belirtiyor ya da load isteği başarısız olup sonraki frame’de yeniden deneniyordu
  • Texture’ların low/medium/high LOD buffer’ları olabiliyordu
    • high LOD yükleme başarısız olursa medium veya low LOD deneniyordu
    • Önce düşük LOD görünüp sonra yüksek LOD’ye geçilmesiyle pop-in oluşabiliyordu
  • Haritalar ayrıca 2×2’den en fazla 8×8 boyutuna kadar emergency low detail texture cache içeriyordu
    • Normal texture yükleme başarısız olsa bile modeli geçici olarak ekranda çizmek için kullanılıyordu
    • Xbox Live arkadaş menüsü açılıp kapatıldığında arazinin aşırı düşük çözünürlüklü texture’larla görünmesi, bu cache’in kullanımıyla ilişkiliydi
  • Bungie debug build’inin grafik görselleştirme özelliği yeniden oluşturularak cache kullanımı doğrudan izlenip boyut ayarı yapıldı
  • Nihai ayarda geometry cache 20MB’ye, texture cache ise sabit 30MB’ye çıkarıldı
    • Her iki cache de varsayılan ayarlara göre neredeyse iki kat büyüdü
    • Outskirts açılış cutscene’inde Master Chief hemen yüksek çözünürlüklü texture ile gösteriliyor ve cache’te boş alan da kalıyordu
  • Kalan pop-in’i azaltmak için HDD aktarım hızı da artırıldı
    • Varsayılan UDMA 2 yaklaşık 33.3MB/s
    • UDMA 3 yaklaşık 44.4MB/s
    • 80 pin IDE kablosu varsa UDMA 5 ile yaklaşık 100MB/s’ye kadar ayarlanabiliyordu
    • Standart IDE kablosunda yaklaşık %10, yükseltilmiş IDE kablosunda teorik olarak %300’e kadar aktarım hızı artışı sağlıyordu
  • Nihai 720p bellek profili, 128MB RAM’in %75’inden fazlasını kullanıyordu
    • 1080p modunda swap chain ve rasterizer target bellek kullanımı çok büyük olduğundan cache boyutlarının küçültülmesi gerekiyordu ve pratikte 128MB’nin çoğu kullanılıyordu

Sonuç

  • Genel olarak 720p yaması oynanabilir seviyeye kadar iyileştirildi; 1080p desteği ise daha çok ekran görüntüsü amaçlı bir bonus niteliğinde
  • Performans ve bellek değişikliklerinde hâlâ iyileştirme alanı olsa da, bu sonuç Halo 2 ve Xbox konsolunun sınırlarını ciddi biçimde zorladı
  • Halo 2 HD yama indirmesi ve kaynak kodu GitHub üzerinde yayımlandı

1 yorum

 
GN⁺ 2024-04-19
Hacker News yorumları
  • Yazının altındaki video bağlantısı: https://www.youtube.com/watch?v=O_nk21389u8
    Videoda orijinalin yükseltilmiş 480p hâli ile 720p’nin yan yana karşılaştırması yer alıyor; yaklaşık 7. dakikadan itibaren de 720p elde ederken yaklaşık 30 fps oynanışı korumak için nelerin gerektiği açıklanıyor.
    Yazı da harika, ancak daha yüksek çözünürlük için gereken değişiklikleri özetleyen video da iyi.

  • 720×480’in 16:9 çözünürlük olmadığı ya da “gerçek 480p” olmadığı yönündeki şikâyetler aslında 1970’lerdeki ITU standartlaştırması tarafına yöneltilmeli: https://tech.ebu.ch/docs/techreview/trev_304-rec601_wood.pdf
    Şubat 1980 tarihli bir notta, Avrupa standardının tüm etkin tarama çizgisi sürelerini karşılamak için etkin satır başına örnek sayısının 715,5’ten büyük olması gerektiği belirtilmişti; daha sonra Rec. 601 ve SMPTE 125’te kullanılan 720 örnek, “çalışan” ilk değer olarak yerleşti.
    Rec. 601, parlaklık kanalı için etkin satır başına 720 örnek, renk farkı sinyallerinin her biri için 360 örnek sağlıyordu; HDTV tanımlanırken de bu mevcut TV sisteminin yatay çözünürlüğü ikiye katlanıp 16:9 en-boy oranı uygulanarak satır başına 1920 örnek ve 1080 satıra ulaşıldı.
    1280×720 aşamalı tarama sistemi de aynı 720 piksel ailesine dahildir ve dijital TV, DVD ve MPEG tabanlı sistemlerin çoğu bu 4:2:2 temel standart biçiminden türemiştir.

    • DVD’nin, doğru oynatma en-boy oranı için kare olmayan pikseller kullanan yalnızca 4:3 anamorfik videoyu desteklediğini sanıyordum.
  • “Hacker ruhu”nun kendisi tamamen meşru, ama konsola bellek ekleyip GPU’yu overclock etme zahmetine girerek Halo 2’yi bu şekilde oynamanın PC sürümü yerine ayrıca bir nedeni var mı merak ediyorum.

    • Halo 2’nin PC portu hem eskiden hem de şimdi kötü şöhretli derecede berbattı; Gearbox’ın Halo 1’e yaptığından bile daha kötüydü.
      Kusurları çeşitli seviyelerde ayrıntılı ele alan birçok video da var.
      https://youtu.be/03K2Uz3s1hg?si=zaFO1XdzMcFvI1F6
    • Eski bir cihazın bir işi yapmak için uygun olmadığı düşünüldüğünde, ona tam da o işi yaptırabilmek genelde iyi hissettirir.
      Yeterince mümkün olduğunu, hatta belki daha iyi olduğunu kanıtlıyormuşsun gibi olur.
      Belki psikolojik bir engele yakın bir şeydir, ama çoğunlukla hafif ve eğlenceli taraftadır; popüler bir cihazın en yeni modelini herkesten önce alma takıntısının karşı ucu gibi.
      İkisi de bir tür üstünlük hissi verir.
    • Sadece hacker ruhu işte.
      Halo 2 bugün hâlâ çevrimiçi lobilerde ya da campaign modunda oynanabiliyor; ayrıca 343’ün orijinal grafiklerini veya remaster HD grafiklerini seçmek de mümkün.
    • Hâlâ 30 fps olduğu için benim açımdan otomatik olarak eleniyor.
  • Metinde “tag veri sistemi mümkün olduğunca esnek ve hızlı olacak şekilde tasarlandı; iç işleyişi mühendislik açısından muazzam. Blam motorunu en esnek motorlardan biri yaptığını düşünmemin tek başına nedenleri üzerine bir yazı yazabilirim, ama bu yazıyla ilgili değil” denmiş; o yazı gerçekten yazılırsa kesinlikle okumak isterim.

    • Böyle bir şeyi bizzat yazdıysanız ya da yazan birini biliyorsanız paylaşırsanız iyi olur.
    • Çocukken Halo 2 modlama yapmıştım ama programlamayı neredeyse hiç bilmiyordum; orada gördüğüm kavramlar gerçekten sarsıcıydı.
      O kadar acemiydim ki nasıl çalıştığını takip etmek bile zordu; o kadar dinamiktikti ki böyle bir yapının mümkün olmasını temelde anlayamıyordum.
      Oyuncu konumunun, ayarları olan bir silahla aynı bağlamda yer alması ve efektlerin bile aynı listenin içinde bulunması nasıl mümkün, anlayamıyordum.
      Bugün ilgimi çeken birçok şey de eninde sonunda bu kavramların etrafında dönüp duruyor.
  • Xbox ve Halo 2 modlama döneminin günümüzde geri dönmesini isterdim
    O dönem kariyer seçimimi ciddi biçimde etkiledi ve hâlâ Halo 2’nin tüm zamanların en yenilikçi çevrim içi oyunu olduğuna inanıyorum
    Oyun kayıtlarını yükleyen basit bir araç satın almak, birkaç dakika içinde soft mod yapılmış bir Xbox elde etmeye yetiyordu; ama bugünün konsolları e-fuse patlatıyor, downgrade’i engelliyor ve çok daha fazla güvenlik sertleştirmesi içeriyor
    Insignia’nın Halo 2 desteğini başlatma projesiyle birlikte, klasik Halo 2 için gerçekten harika bir dönem

    • İyi ya da kötü, son 10 yılın geliştiricileri birçok açıdan çıktıkları merdiveni tekmelemiş gibi görünüyor
      Bugün yazılım mühendisi olmamın nedenlerinden biri, bir web sayfasının nasıl çalıştığını kolayca inceleyebilmem, program belleğiyle oynayabilmem ve donanımı açıp içine bakabilmemdi
      Halo PC döneminde seviyeleri modlarken bir oyunun içine nelerin girdiğini çok öğrendim; “BSP”nin ne olduğunu bilmek işe yaramaz bir trivia olabilir ama daha fazlasını anlayabileceğime dair güven verdi
      Bugün de teknolojiye başlamak ve öğrenmek mümkün, ama bunu gerçekten kurcalayarak yapmanın yolu pek görünmüyor
      Yazılımları kırmak ya da debug etmek çok daha zorlaştı; imkânsız değil ama giriş bariyeri çok yükseldi
      Web sayfaları hâlâ incelenebiliyor, ancak günümüzde birçok site küçültülmüş ve obfuscate edilmiş JavaScript canavarını ayakta tutan div yığınlarına dönüştü; oyunlarda ise içerikleri sunucudan stream etme bağımlılığı arttığı için çoğu zaman bu baştan zorlaşıyor
      Donanımda da cihazı tuğlaya çevirebilecek güvenlik prosedürleri, yapıştırılmış çerçeveleri açmak için sıcak hava tabancası ve kalıcı hasar riskini göze almak gerekiyor
      Bu değişikliklerin her birinin bir nedeni vardı elbette, ama süreç içinde eğlencenin büyük kısmı da kayboldu; bugünün araçları teknik olarak daha iyi olsa da oyun modlama eskisi gibi değil
    • O dönemin Xbox’ı özel donanımdan çok piyasadaki standart parçalarla yapılmış bir PCye yakın olduğu için, yalnızca oyun kaydı aracıyla soft mod yapmak kolaydı
      Bugün de PC veya Steam Deck gibi PC tabanlı konsollarla yeterince kurcalama yapılabiliyor; kilitli olacak şekilde tasarlanmış kapalı konsollarla neden uğraşmak gerektiğini pek anlamıyorum
      Piyasadan ucuza alınabilen özel x86 donanıma erişim kazanmak dışında ne elde edildiği de belirsiz
    • “Halo 2 tüm zamanların en yenilikçi çevrim içi oyunu” ifadesi, çevrim içi oyun bağlamında neredeyse tek oybirliğine yakın ve pek tartışmasız mutlak önerme gibi
    • Halo 2’nin tam olarak hangi açıdan tüm zamanların en yenilikçi çevrim içi oyunu olduğunu merak ediyorum
      Güçlü modlama topluluklarına sahip rekabetçi çevrim içi FPS’ler PC’de zaten 10 yılı aşkın süredir aktifti
    • PC’de de, çok oyunculu dâhil Halo 2’yi hâlâ sık oynuyorum
      Project Cartographer sayesinde aktif bir topluluk var: https://halo2.online/home/
    1. RAM’i yeniden lehimleyip VRAM’i 64 MB’den 128 MB’ye yükseltmek, 2) konsola yeni CPU lehimledikten sonra GPU darboğazını fark etmek, 3) orijinal Xbox’ta GPU overclock’unu açmak ama bellek bant genişliği sınırına takılmak, 4) Halo 2 kaynak kodunu tersine mühendislikle çözerek ölçeklemeyi 720p veya 1080p’ye ayarlamak (çıkış 1080i interlaced), 5) dokuların daha hızlı yüklenmesi için sabit diski bile hızlandırmak
      Bu kişi, günümüzde Bungie’nin kendi IP’sine gösterdiğinden daha fazla Halo 2’ye adanmış gibi
    • Bungie artık Halo ile ilgilenmiyor
      IP’nin sahibi Microsoft, geliştirmeyi ise 343 Industries üstleniyor
      Bungie’nin şu anda Destiny/Destiny 2’si ve yakında çıkacak Marathon extraction shooter’ı var
    • Nostaljinin gücü büyük
      O oyuna inanılmaz çok zaman harcadım; benim gibi o büyüye kapılmış başka birinin daha olduğunu görmek güzel
    • Muazzam bir mühendislik başarısı olduğu kesin; ama 500 dolarlık bir Xbox Series X alıp remaster sürümü 4K 120fps oynayabileceğimi bilince bunu kendim yapmam zor olurdu
      Yine de bu düzeyde adanmışlık saygı uyandırıyor
  • Fazla sinik gelebilir ama projenin kendisi gerçekten harika
    Yine de CPU’yu değiştirip overclock etmek, RAM’i artırmak, katı hâl depolama eklemek ve GPU’yu da overclock etmiş bir durumu orijinal Xbox’ın sınırlarına kadar zorlamak diye adlandırmak doğru mu, emin değilim
    O noktada aslında artık Xbox değil gibi

    • Bunun Xbox olup olmadığı tartışılabilir; ama bu konu ve yazının amacı açısından çoğu şey anlam bilimi tartışmasına yakın
      Bir Honda Civic’e motor ve süspansiyon modifikasyonları yığıp sınırlarına kadar zorladığını söylerken “ama gerçekten hâlâ Civic mi?” diye sormak teknik olarak doğru olabilir, fakat laf ebeliği gibi de duyulabilir
      Yazarın istediği başlığı koyma hakkı var; zihinde bunu “OG Xbox’ı ölmeden hemen önceki noktaya kadar modlamak” gibi okuyabilirsiniz
    • Burada Xbox modlama bağlamında “original Xbox”, Xbox 360 değil anlamında okunmalı
      Halo 2, 360’ta daha yüksek çözünürlükte çalışabildiği için bunun orijinal Xbox’ı hedefleyen bir modlama projesi olduğunu netleştirmek faydalı
      Kelimenin tam anlamıyla modifiye edilmemiş Xbox’tan değil, modlama hedefinin orijinal Xbox olduğundan söz ediliyor
    • Aynı anakartı kullanmanın yine de anlamlı olduğunu düşünüyorum
    • GitHub deposuna bakınca, CPU yükseltilmiş konsol olmasa da bu yamanın kullanılabildiği ve testlerde ek performans artışının ölçülemediği yazıyor
      Standart IDE kablolu konsolda aktarım hızının %10 arttığı, yükseltilmiş IDE kablosu kullanılırsa teoride %300’e kadar artabileceği de belirtilmiş
      128 MB RAM varsa ek RAM’den yararlanarak 720p ve 1080i video modlarını açabiliyor, doku ve geometri bellek önbelleğini artırarak pop-in’i neredeyse ortadan kaldırabiliyorsunuz
      Sadece 480p istiyorsanız stok konsolda GPU’yu overclock edip farklı bir IDE kablosu kullanmanız yeterli
      SSD ile ilgili ifade istemeden yanlış anlaşılmaya yol açmış gibi; muhtemelen 80 pin kablo ve SSD kombinasyonu kastedilmiş olabilir
      Overclock edilmiş CPU gerekli değil ve CPU darboğaz da değil; artırılmış RAM ise yalnızca 720p ve üzerini istediğinizde gerekiyor
      Bu geri bildirimi ilettim, blog yazısı bu kısmı daha net hâle getirecek şekilde güncellenebilir
    • Mevcut donanımdan mümkün olan en fazlasını çıkarmanın kendisi başlı başına bir uğraş
      Retro bilgisayar sahnesi böyle; otomobil modifikasyonu da benzer
      Kimi insan fabrikadan çıktığı hâliyle kusursuz bir Corvette ister, kimi de 50 yıl daha yeni bir motor takılmış Model A ister
      Tanıdık ve bilinen bir şeyi kendi isteğine göre bükmek harika bir şey
  • İş yükü muazzam
    Arkadaşı “doom”un kimliğini açıklamak istememesi de ilginç

    • Spekülasyonları ciddiye almamız ya da hiç spekülasyon yapmamız gerekmiyor; ama gerçek kimliğinizi Xbox tersine mühendisliği ile ilişkilendirmeden önce bir kez daha düşünmenize yol açacak bir sektörde çalışıyorsanız bu oldukça anlaşılır
    • Aklıma Doom9 geldi
    • Neredeyse kesinlikle grimdoomer gibi görünüyor