Halo 2 HD yang menembus batas Xbox orisinal
Posting blog ini membahas semua pekerjaan yang dilakukan untuk menambahkan dukungan resolusi HD ke Halo 2 versi Xbox orisinal. Mulai dari patch game, modifikasi perangkat keras konsol Xbox, hingga penulisan alat kustom untuk benchmarking performa, tujuan proyek ini adalah melampaui batas keduanya dan melihat seberapa jauh hal itu bisa didorong.
- Teman saya, "doom", selama beberapa tahun terakhir telah melakukan reverse engineering dan penelitian terhadap perangkat keras dan perangkat lunak Xbox orisinal
- Dengan menggunakan papan interposer CPU kustom miliknya, ia dapat mengganti CPU Pentium 3 bawaan dengan varian Pentium 3 1.4Ghz dan melakukan overclock hingga sekitar 2Ghz
- Ia juga menulis patch kustom untuk kernel Xbox guna menambal perhitungan timing game secara real-time agar sesuai dengan CPU yang lebih cepat
- Dikombinasikan dengan upgrade perangkat keras lain seperti RAM dan SSD, perangkat ini mulai disebut sebagai "god box"
- doom menginginkan seseorang yang bisa membuat patch resolusi HD yang layak untuk game-game populer pada 720p, lalu meminta saya melakukannya
- Saya menerima tawaran itu dengan syarat GPU-nya di-overclock, dan ia melakukannya serta menyediakan konsol "GENESIS-3"
Merender dalam HD
- Ukuran front/back buffer D3D perlu diubah
- Fungsi
_rasterizer_detect_video_mode,_rasterizer_init_screen_bounds, danrasterizer_device_initializeperlu dimodifikasi - Saat 720p aktif,
g_progressive_scan_enabledharus diatur, lalu variabelscreen_boundsdanframe_boundsharus ditetapkan sesuai mode video - Bergantung pada apakah mode video bersifat progressive atau interlaced, perlu ditetapkan flag tambahan pada parameter presentasi D3D
Menggunakan memori D3D secara efisien
- Xbox menggunakan arsitektur memori terpadu di mana CPU dan GPU berbagi RAM yang sama
- Halo 2 membuat render target secara manual, bukan menggunakan fungsi yang disediakan oleh D3D
- Halo 2 menggunakan sekitar 25 render target yang berbeda, tetapi demi menghemat memori hanya mengalokasikan 4-5 buffer unik
- Fungsi
rasterizer_primary_targets_initializemenggunakan dimensi 640x480 yang di-hardcode untuk membuat render target tambahan dan texture view - Karena itu, setelah ukuran back/front/depth buffer diubah, fungsi ini harus di-hook dan dimensinya diperbaiki
Mengubah ukuran target rasterizer
- Render target texture accumulator (
texaccum) harus cocok dengan resolusi back buffer - Fungsi
rasterizer_targets_initializemeng-hardcode dimensi texture accumulator - Fungsi
_rasterizer_alloc_and_create_render_targetdi-hook untuk mengubah dimensinya agar sesuai dengan ukuran back buffer
Opini GN⁺
- Proyek ini merupakan tantangan teknis yang sangat sulit, tetapi menjadi mungkin berkat pemahaman mendalam Ryan terhadap engine Halo 2 dan keahlian doom tentang perangkat keras Xbox
- Hot patch pada kernel Xbox untuk patch HD dan overclock adalah solusi yang sangat mengesankan dan kreatif. Ini adalah cara yang baik untuk mengatasi keterbatasan fisik perangkat keras
- Hasil akhirnya sangat baik, tetapi masih ada ruang untuk perbaikan, terutama dalam pengurangan texture pop-in dan peningkatan waktu muat
- Konfirmasi bahwa rendering bersifat GPU-bound merupakan wawasan penting. RAM tambahan dapat digunakan untuk cache tekstur yang lebih besar guna mengurangi bottleneck
- Ada beberapa cara untuk lebih mengoptimalkan engine rendering, seperti menyesuaikan sudut FOV kamera, mengoptimalkan sistem LOD, dan menggunakan kompresi model/tekstur yang lebih efisien
- Melakukan reverse engineering pada level ini untuk game konsol lama sangat mengesankan. Ini adalah pencapaian besar bagi komunitas game retro
Belum ada komentar.