1 điểm bởi GN⁺ 2024-04-19 | 1 bình luận | Chia sẻ qua WhatsApp
  • Bản vá Halo 2 HD cho Xbox nguyên bản là một dự án kết hợp chỉnh sửa tệp thực thi, cải tạo phần cứng console và xây dựng công cụ benchmark để thử đưa kết xuất vượt quá 480p lên 720p và 1080p
  • Halo 2 bản cũ, dù được ghi là 480p, thực tế vẽ vào back buffer 640×480 rồi để GPU upscale lên 720×480, nên để hỗ trợ HD thì cả bộ đệm D3D lẫn cách xử lý chế độ video đều phải thay đổi
  • Chạy ở 720p vượt quá khả năng của 64MB RAM mặc định, nên cần nâng cấp RAM lên 128MB và hot patch kernel để lách giới hạn cấp phát bộ nhớ vật lý liên tục cho GPU trong 64MB trên
  • Hiệu năng được cải thiện nhờ triple buffering, tiling render target texaccum và ép xung GPU từ 233.33MHz lên 300MHz; cảnh benchmark Zanzibar tăng từ khoảng 19FPS lên mức 27~28FPS
  • RAM bổ sung cũng được dùng để mở rộng cache texture·geometry và cải thiện tốc độ truyền HDD; bản vá cuối cùng đưa 720p lên mức dùng được, còn 1080p chủ yếu gần như một phần thưởng để chụp screenshot

Mục tiêu dự án và tiền đề phần cứng

  • Mục tiêu là bổ sung hỗ trợ độ phân giải HD cho phiên bản Halo 2 trên Xbox nguyên bản và kiểm tra xem phần cứng console đã được mod có thể chịu được đến đâu
  • Phạm vi công việc gồm vá game, chỉnh sửa phần cứng console Xbox và viết công cụ tùy biến để benchmark hiệu năng
  • Chiếc Xbox mod làm nền tảng cho dự án được gọi là “god box” và gồm các thay đổi sau
    • Thay CPU Pentium 3 733MHz mặc định bằng biến thể Pentium 3 1.4GHz thông qua một bo interposer tùy chỉnh
    • Có thể ép xung CPU lên khoảng 2GHz
    • Thêm RAM và dùng SSD
    • Dùng kernel tùy chỉnh hoặc ảnh BIOS hỗ trợ mod phần cứng
  • Độ phân giải video tối đa mà Halo 2 hỗ trợ là 480p, và mục tiêu là thêm hỗ trợ 720p cùng 1080i nếu có thể
  • Khi tăng độ phân giải, khối lượng tính toán của pixel shader tăng lên làm GPU nặng hơn, nên chỉ đáng làm nếu có thể ép xung GPU
    • Sau đó đã có thể ép xung GPU khoảng 15%, và console “GENESIS-3” được chuẩn bị cho việc phát triển

480p của Halo 2 và cấu trúc render nội bộ

  • Halo 2 trên vỏ hộp ghi hỗ trợ 480p, nhưng trong D3D present parameter không bật D3DPRESENTFLAG_PROGRESSIVE, và tỉ lệ kích thước màn hình luôn là 1.0f
  • screen_bounds nội bộ được đặt thành 640×480 bất kể chế độ video
    • Trên Xbox nguyên bản, 480p được xem là 720×480
    • Halo 2 render vào back buffer 640×480 rồi để GPU upscale lên 720×480 trước khi gửi đến bộ mã hóa video
  • Ở chế độ widescreen, game dùng camera anamorphic 1.33:1 để nén một khung hình rộng hơn vào cùng surface 640×480
    • Cách này có thể nhằm bù lại việc kéo giãn ngang ở chế độ stretch của TV
    • Bản vá cũng thêm tùy chọn tắt anamorphic scaling

Bản vá D3D cho render HD

  • Để hỗ trợ độ phân giải mới, ba hàm là mục tiêu chỉnh sửa chính
    • _rasterizer_detect_video_mode: sửa để progressive scan được bật cả ở 720p
    • _rasterizer_init_screen_bounds: đặt kích thước 640×480, 720×480, 1280×720, 1920×1080 tùy chế độ video
    • rasterizer_device_initialize: thiết lập back buffer D3D và present flag
  • Ở chế độ 1080i, sau khi xác nhận chiều rộng màn hình là 1920, bản vá gỡ D3DPRESENTFLAG_PROGRESSIVE và bật D3DPRESENTFLAG_INTERLACED
  • Sau thay đổi ban đầu, bộ lọc xanh ở menu chính biến mất, đồng thời xuất hiện lỗi sọc lặp và cắt xén hình học mặt nước
    • Một phần nguyên nhân là do view 640×480 bị hardcode cho back/front/depth buffer
    • Khi texture/surface view nhìn cùng một vùng nhớ với chiều rộng khác nhau, cách sắp xếp scan line bị lệch

Bộ nhớ D3D và tái cấu trúc render target

  • Xbox nguyên bản dùng kiến trúc bộ nhớ hợp nhất, nơi CPU và GPU dùng chung RAM
    • Nó không giống PC, nơi cấp phát D3D nằm trong VRAM và do GPU quản lý
    • CPU có thể tạo vùng nhớ cho texture, render target, vertex buffer rồi đưa trực tiếp địa chỉ cho GPU
  • Halo 2 dùng khoảng 25 render target nhưng thực tế chỉ có 4~5 vùng đệm được cấp phát duy nhất
    • Nhiều render target chia sẻ cùng một vùng nhớ dưới dạng các resource view khác nhau để tiết kiệm bộ nhớ
  • rasterizer_primary_targets_initialize tạo thêm render target và texture view từ back/front/depth buffer mà D3D tạo ra, và nó đang hardcode kích thước 640×480
  • Bản vá bọc hàm này bằng hook, để sau khi hàm gốc chạy xong thì sửa kích thước texture/surface theo độ phân giải back buffer hiện tại
    • Pitch của bộ nhớ tiled có thể khác công thức thông thường width * bpp, nên phải tính bằng D3D_CalcTilePitch
    • Pitch sai có thể tạo hiệu ứng sọc, đặc biệt ở 1080i

Sửa kích thước render target texaccum

  • Lỗi cắt xén hình học mặt nước ở menu chính xảy ra vì render target texaccum bị cố định ở 640×480
  • Triển khai DirectX trên Xbox chỉ cho phép lấy mẫu tối đa 4 texture trong mỗi pixel shader pass
    • Những object cần hơn 4 texture đầu vào phải render qua nhiều pass
    • Lớp texaccum sẽ trộn trước các detail texture rồi dùng làm đầu vào cho pass lightmap
  • rasterizer_targets_initialize đang cấp phát render target texaccum ở 640×480
  • Bản vá bọc _rasterizer_alloc_and_create_render_target bằng hook để đổi chiều rộng và chiều cao của target texaccum khi target_index == 1 theo kích thước back buffer hiện tại
  • Sau thay đổi này, lỗi cắt xén hình học mặt nước biến mất, và khi load map cũng không còn thấy lỗi render rõ rệt
  • Vấn đề bộ lọc xanh được giải quyết bằng cách cập nhật kiểm tra kích thước đơn giản, nhưng không nêu chi tiết quá trình

Giới hạn bộ nhớ chặn việc chạy 720p

  • Khi đặt 720p, game bị crash ngay lúc khởi động; nguyên nhân là thiếu bộ nhớ do front/back/depth buffer và rasterizer target lớn hơn
  • Xbox nguyên bản có mẫu thương mại 64MB RAM và bộ dev kit/debug console 128MB RAM
    • Trên bo mạch retail vẫn có sẵn vị trí để gắn thêm chip RAM
    • Nếu hàn chip RAM và dùng kernel đã chỉnh sửa thì có thể truy cập thêm 64MB đó
  • Để chạy ở 720p trở lên, cần nâng cấp RAM lên 128MB
  • Ngay cả để chạy 480p bình thường mà không nâng cấp RAM, cũng phải lấy bớt bộ nhớ từ cache texture trong RAM của game, khiến texture pop-in tăng lên

Bản vá bộ quản lý bộ nhớ của Halo 2

  • Khi khởi động, Halo 2 cấp phát khoảng 48.9MB trong 64MB khả dụng thành một vùng dữ liệu runtime lớn duy nhất
    • Vùng này được chia cho metadata của level, texture, geometry, animation, cache âm thanh, rasterizer target, tài nguyên mạng/mô phỏng v.v.
  • Để trực quan hóa việc dùng bộ nhớ, tác giả đã viết XboxImageGrabber
    • Công cụ này duyệt page table entry để trực quan hóa tình trạng sử dụng RAM dưới dạng bitmap
  • Vùng dữ liệu runtime được cấp phát tại địa chỉ hardcode 0x80061000
    • Tag data trong file map được tuần tự hóa theo địa chỉ gốc này, nên phần dữ liệu đó luôn phải nằm đúng địa chỉ cũ
    • Các dữ liệu runtime khác thì có thể di chuyển
  • Những vùng được chọn để di chuyển là rasterizer target, texture cache và geometry cache
    • Một số lệnh gọi cấp phát cụ thể được hook để chuyển sang debug memory region
    • Khi giải phóng, như lúc load level mới, các lệnh free phù hợp cũng được thêm vào
    • Kích thước vùng dữ liệu runtime cũng được giảm để bớt lãng phí
  • physical_memory_malloc đã bị compiler inline, nên phải vá riêng từng call site

Hot patch kernel Xbox và bộ nhớ vật lý ở 64MB trên

  • Địa chỉ bộ nhớ đưa cho GPU phải là địa chỉ vật lý và vùng đó phải liên tục
    • GPU không có khái niệm page table hay dịch địa chỉ ảo
  • Ngay cả trên kernel 128MB RAM, việc cấp phát vật lý liên tục mặc định vẫn chỉ khả dụng trong 64MB đầu, còn cấp phát ảo thì dùng được toàn bộ 128MB
  • Việc thử thủ công dùng page table entry của 64MB trên như bộ nhớ GPU đã thành công
    • Hạn chế không dùng được bộ nhớ vật lý cho GPU ở 64MB trên là giới hạn phần mềm của kernel, không phải giới hạn phần cứng
  • Bên trong MmAllocateContiguousMemoryEx có kiểm tra MAX_USABLE_PFN
    • Giá trị cũ là 0x83FE0000, tương đương 64MB - 128KB
    • 128KB trên cùng được dành cho vùng scratch 64KB của GPU và page table 64KB của CPU
  • Bản vá kiểm tra xem console có 128MB RAM khi game khởi động hay không, rồi tìm lệnh mov edx, 0x3FDF trong MmAllocateContiguousMemoryEx và sửa sang giá trị mới phù hợp với cấu hình 128MB
  • Sau đó dùng MmAllocateContiguousMemoryExMmFreeContiguousMemory để cấp phát/giải phóng bộ nhớ vật lý liên tục trên toàn bộ 128MB
  • Cũng có tác dụng phụ
    • Nếu thoát game rồi quay lại dashboard hoặc eject khay DVD bằng warm reboot thay vì cold reboot, app/game kế tiếp có thể gặp artifact đồ họa nặng và crash
    • Để che điều này, một bản vá bổ sung ép cold reboot khi thoát game đã được thêm vào

Kết quả render 720p/1080p và nút thắt hiệu năng

  • Render 720p nhìn đẹp hơn rõ rệt, nhưng hiệu năng rất thấp ở những cảnh nặng, có lúc FPS tụt xuống dưới 10
  • 1080p có thể render native, nhưng đầu ra của console Xbox chỉ hỗ trợ tín hiệu 1080i
    • Nếu dump trực tiếp D3D back buffer thì có thể lấy screenshot 1080p trước khi GPU đổi nó thành half frame cho bộ mã hóa video
  • Việc đo hiệu năng so sánh ba cấu hình: Xbox gốc, god box chỉ ép xung CPU, và god box ép xung cả CPU lẫn GPU
  • Một điểm nặng trong Zanzibar được dùng làm “zanzibar benchmark scene”
  • Ở đo đạc ban đầu, FPS của ba cấu hình gần như giống nhau, và biểu đồ hiệu năng cho thấy nguyên nhân là swap stall
    • Halo 2 dùng vsync on và double buffering
    • Có tình huống GPU phải chờ vblank nên không thể xoay swap chain, gây stall

Triple buffering và xác nhận nút thắt GPU

  • Giải pháp là tăng số back buffer lên 2 để dùng triple buffering gồm 1 front buffer và 2 back buffer, tổng cộng 3 buffer
  • Trong D3DPRESENT_PARAMETERS, thiết lập BackBufferCount = 2, D3DSWAPEFFECT_DISCARD, D3DPRESENT_INTERVAL_ONE
  • Vì engine render của Halo 2 vốn giả định double buffering và hoán đổi con trỏ back/front buffer mỗi frame, nên hook swap và hook khởi tạo primary target cũng phải sửa theo
    • Hai primary render surface và texture view được đổi để luôn tham chiếu đến back buffer hiện tại
    • Dù game vẫn swap hai con trỏ nội bộ, chúng thực chất trỏ tới cùng một vùng nhớ nên gần như trở thành no-op
  • Ở cảnh benchmark Zanzibar, FPS với GPU mặc định đạt khoảng 22FPS
    • Tăng khoảng 3FPS so với trước
    • Tăng khoảng 10% nếu lấy mốc cap 30FPS
    • Swap stall biến mất và mức sử dụng GPU chạm tối đa, xác nhận GPU là nút thắt

Ép xung GPU và RAM

  • Đổi render target texaccum sang bộ nhớ tiled mang lại thêm 1~2FPS
    • Cảnh benchmark Zanzibar được cải thiện từ khoảng 19FPS lên 23~24FPS
  • Khi god box ép xung GPU, cảnh benchmark Zanzibar ghi nhận 27~28FPS
    • Khi chạy quanh map, phần lớn giữ được 30FPS và chỉ tụt ở một số khu vực nặng
  • Để tránh phải flash lại BIOS, game tự chỉnh trực tiếp memory-mapped IO register của bộ tạo xung GPU khi khởi động
  • Việc tính xung GPU dựa trên các giá trị M, N, P của NVPLL_COEFF và base clock 16.6667MHz
    • Giá trị N mặc định là 28 tạo ra xung GPU 233.33MHz
    • Tác giả điều chỉnh giá trị N để đặt được theo bước khoảng 8MHz và cho phép cấu hình bằng file ini
  • Mức ép xung GPU 300MHz tăng thêm khoảng 3FPS ở benchmark Zanzibar so với GPU mặc định
  • Giới hạn ép xung khác nhau tùy từng GPU
    • GPU trên các console revision 1.0~1.4 thường chạm giới hạn ở vùng low 300MHz
    • Có trường hợp GPU của console revision 1.6 chạy ổn định trên 400MHz
  • Xung RAM cũng được thử nghiệm
    • Băng thông lý thuyết tối đa của bus nhớ Xbox là 6.4GB/s, còn mức sử dụng thực tế khoảng 70%, tức 4.5GB/s
    • RAM mặc định đã gần 200MHz, nên chỉ cần tăng thêm khoảng 10MHz cũng có thể mất ổn định
    • Khi thử khoảng 208MHz, quan sát thấy tăng 0.7FPS
    • Tác giả cũng đã đặt mua chip RAM có thể chạy 250MHz, nhưng đến thời điểm viết bài vẫn chưa lắp và thử thêm

Giảm pop-in và mở rộng cache

  • Halo 2 vốn đã có vấn đề pop-in texture và geometry, và điều này càng dễ thấy hơn trên console dùng HDD cơ học đầu những năm 2000
  • RAM bổ sung được dùng để mở rộng texture cache và geometry cache
    • Geometry cache mặc định là 6.5MB cho map chơi đơn và 7MB cho map multiplayer
    • Texture cache thay đổi theo kích thước map, dùng phần không gian còn lại sau tag data và trước low detail texture cache
  • Cache hoạt động theo cơ chế LRU
    • Cứ mỗi 30 frame, dữ liệu không được dùng trong 30 frame gần nhất sẽ bị loại bỏ
    • Nếu cache đầy, bên gọi có thể yêu cầu eviction cưỡng bức, hoặc yêu cầu load sẽ thất bại và được thử lại ở frame kế tiếp
  • Texture có thể có các buffer LOD low/medium/high
    • Nếu không load được high LOD thì game thử medium hoặc low LOD
    • LOD thấp có thể hiện trước rồi mới chuyển sang LOD cao hơn, gây pop-in
  • Trong map còn có emergency low detail texture cache với kích thước từ 2×2 đến tối đa 8×8
    • Nó được dùng để tạm thời vẽ model trên màn hình khi việc load texture thường thất bại
    • Hiện tượng địa hình hiện texture cực thấp khi mở rồi đóng menu bạn bè Xbox Live có liên quan đến cache này
  • Tác giả tái dựng chức năng trực quan hóa biểu đồ trong debug build của Bungie để quan sát trực tiếp lượng cache sử dụng và điều chỉnh kích thước
  • Cấu hình cuối cùng tăng geometry cache lên 20MB và cố định texture cache ở 30MB
    • Cả hai cache đều gần như lớn gấp đôi cấu hình mặc định
    • Trong cutscene mở đầu của Outskirts, Master Chief hiện ngay với texture độ phân giải cao và vẫn còn dư không gian cache
  • Để giảm thêm pop-in, tốc độ truyền HDD cũng được tăng lên
    • UDMA 2 mặc định đạt khoảng 33.3MB/s
    • UDMA 3 đạt khoảng 44.4MB/s
    • Nếu có cáp IDE 80 pin thì có thể đặt UDMA 5 ở khoảng 100MB/s
    • Với cáp IDE mặc định, tốc độ truyền tăng khoảng 10%; với cáp IDE nâng cấp, mức tăng lý thuyết tối đa là 300%
  • Profile bộ nhớ 720p cuối cùng sử dụng hơn 75% trong 128MB RAM
    • Ở chế độ 1080p, bộ nhớ cho swap chain và rasterizer target quá lớn nên phải giảm kích thước cache, và thực tế dùng gần như toàn bộ 128MB

Kết quả

  • Nhìn chung, bản vá 720p đã được cải thiện đến mức có thể chơi được, còn hỗ trợ 1080p chủ yếu gần như phần thưởng thêm để chụp screenshot
  • Vẫn còn dư địa để tối ưu thêm về hiệu năng và thay đổi bộ nhớ, nhưng đây là kết quả đã đẩy giới hạn của Halo 2 và console Xbox đi rất xa
  • Bản tải về của Halo 2 HD patch và mã nguồn được công khai trên GitHub

1 bình luận

 
GN⁺ 2024-04-19
Ý kiến trên Hacker News
  • Liên kết video ở cuối bài: https://www.youtube.com/watch?v=O_nk21389u8
    Video có phần so sánh song song giữa bản gốc được upscale 480p và 720p, và từ khoảng phút thứ 7 giải thích cần những gì để đạt 720p trong khi vẫn duy trì gameplay khoảng 30fps
    Bài viết cũng rất hay, nhưng video tóm tắt các thay đổi cần thiết để có độ phân giải cao hơn cũng tốt

  • Chuyện 720×480 không phải độ phân giải 16:9 hay không phải “480p thật” thực ra nên phàn nàn với phía chuẩn hóa ITU từ thập niên 1970: https://tech.ebu.ch/docs/techreview/trev_304-rec601_wood.pdf
    Trong một bản ghi nhớ tháng 2 năm 1980, người ta nói rằng để bao quát mọi khoảng thời gian dòng quét hữu hiệu của các chuẩn châu Âu, số mẫu trên mỗi dòng hữu hiệu phải lớn hơn 715,5; về sau 720 mẫu được dùng trong Rec. 601 và SMPTE 125 đã trở thành giá trị đầu tiên “hoạt động được”
    Rec. 601 cung cấp 720 mẫu trên mỗi dòng hữu hiệu cho kênh độ chói, và 360 mẫu cho mỗi tín hiệu sắc sai; khi định nghĩa HDTV, người ta nhân đôi độ phân giải ngang của hệ TV hiện có này và áp dụng tỷ lệ khung hình 16:9, dẫn tới 1920 mẫu/dòng và 1080 dòng
    Hệ thống quét tuần tự 1280×720 cũng thuộc cùng họ 720 pixel này, và phần lớn các hệ thống TV số, DVD, MPEG đều được phái sinh từ định dạng chuẩn cơ sở 4:2:2 đó

    • Tôi cứ nghĩ DVD chỉ hỗ trợ video anamorphic 4:3 dùng pixel không vuông để có tỷ lệ hiển thị phát lại đúng
  • Bản thân “tinh thần hacker” thì hoàn toàn chính đáng, nhưng tôi tò mò liệu có lý do riêng nào để bỏ công thêm bộ nhớ cho console và ép xung GPU để chơi Halo 2 theo cách này thay vì bản PC không

    • Bản port PC của Halo 2 ngày trước cũng như bây giờ đều nổi tiếng là tệ, thậm chí còn tệ hơn những gì Gearbox đã làm với Halo 1
      Có nhiều video phân tích chi tiết các lỗi ở nhiều cấp độ
      https://youtu.be/03K2Uz3s1hg?si=zaFO1XdzMcFvI1F6
    • Khi một thiết bị cũ bị cho là không phù hợp để làm việc gì đó, việc khiến nó làm được đúng việc ấy thường mang lại cảm giác rất đã
      Nó giống như chứng minh rằng điều đó hoàn toàn khả thi, hoặc thậm chí còn tốt hơn
      Có lẽ gần như là một rào cản tâm lý, nhưng nhìn chung là kiểu nhẹ nhàng và vui, như mặt đối lập với nỗi ám ảnh phải mua mẫu mới nhất của một thiết bị phổ biến trước mọi người
      Cả hai đều đem lại một dạng cảm giác vượt trội
    • Đơn giản là tinh thần hacker thôi
      Hiện nay vẫn có thể chơi Halo 2 qua lobby online hoặc campaign, và cũng có thể chọn đồ họa gốc của 343 hoặc đồ họa HD remaster
    • Vẫn là 30fps nên với cá nhân tôi thì tự động bị loại
  • Trong bài có đoạn: “hệ thống dữ liệu tag được thiết kế linh hoạt và nhanh nhất có thể, còn cách hoạt động bên trong thì rất ấn tượng về mặt kỹ thuật. Tôi có thể viết hẳn một bài chỉ để nói vì sao nó khiến Blam trở thành một trong những engine linh hoạt nhất, nhưng điều đó không liên quan đến bài này”; nếu bài đó thật sự được viết thì tôi rất muốn đọc

    • Nếu bạn từng tự viết về nội dung kiểu này, hoặc biết ai đã viết, mong bạn chia sẻ
    • Hồi nhỏ tôi từng mod Halo 2 nhưng gần như không biết lập trình, và những khái niệm tôi thấy trong đó thật sự gây choáng
      Tôi quá mới nên khó theo kịp cách nó hoạt động, và nó quá động đến mức tôi về căn bản không hiểu nổi rằng một cấu trúc như vậy có thể tồn tại
      Tôi không hiểu làm sao vị trí người chơi lại có thể nằm trong cùng ngữ cảnh với một vũ khí có các thiết lập, rồi cả hiệu ứng cũng nằm trong cùng một danh sách
      Rốt cuộc, nhiều thứ tôi quan tâm hiện nay vẫn cứ xoay quanh các khái niệm như thế
  • Tôi ước thời kỳ mod Xbox và Halo 2 sẽ quay trở lại trong thời hiện đại
    Giai đoạn đó đã ảnh hưởng lớn đến lựa chọn nghề nghiệp của tôi, và đến giờ tôi vẫn tin Halo 2 là trò chơi online mang tính cách mạng nhất mọi thời đại
    Khi đó chỉ cần mua một công cụ đơn giản để tải game save là có thể softmod Xbox trong vài phút, còn console ngày nay thì kích hoạt e-fuse, chặn downgrade, và có nhiều lớp bảo mật hơn rất nhiều
    Cùng với dự án Insignia bắt đầu hỗ trợ Halo 2, đây thật sự là thời điểm rất tốt cho Halo 2 cổ điển

    • Dù tốt hay xấu, có vẻ các nhà phát triển trong 10 năm qua ở nhiều khía cạnh đã đạp đổ chiếc thang mà chính họ từng leo lên
      Một trong những lý do tôi trở thành kỹ sư phần mềm ngày nay là vì khi đó có thể dễ dàng nhìn vào cách một trang web hoạt động, nghịch bộ nhớ chương trình, mở phần cứng ra để xem bên trong
      Thời Halo PC, tôi học được rất nhiều về những gì cấu thành một trò chơi khi mod level, và việc biết “BSP” là gì có thể chỉ là kiến thức vụn vô dụng, nhưng nó cho tôi sự tự tin rằng mình có thể hiểu thêm nhiều thứ
      Ngày nay vẫn có thể bước vào và học công nghệ, nhưng con đường đi qua việc tự tay mày mò thật sự thì khó thấy hơn
      Phần mềm đã khó crack hay debug hơn nhiều; không phải là bất khả thi, nhưng rào cản gia nhập đã cao hơn rất nhiều
      Trang web thì vẫn có thể soi được, nhưng nhiều trang hiện nay đã trở thành đống div chỉ để chống đỡ những con quái vật JavaScript bị minify và obfuscate, còn game thì ngày càng phụ thuộc vào việc stream nội dung từ server nên nhiều trường hợp gần như không thể
      Phần cứng cũng phải đối mặt với các quy trình bảo mật có thể biến thiết bị thành cục gạch, súng khò nhiệt để mở viền bezel dán keo, và nguy cơ hư hại vĩnh viễn
      Mỗi thay đổi như vậy hẳn đều có lý do, nhưng trong quá trình đó phần lớn niềm vui cũng biến mất, và dù công cụ ngày nay tốt hơn về mặt kỹ thuật, mod game không còn như xưa nữa
    • Xbox thời đó gần với một chiếc PC làm từ linh kiện thương mại hơn là phần cứng tùy biến, nên softmod bằng công cụ game save rất dễ
      Ngày nay vẫn có thể mày mò thoải mái với PC hoặc các console dựa trên PC như Steam Deck, nên tôi không hiểu vì sao phải đấu với những console độc quyền được thiết kế để khóa chặt
      Ngoài việc có được quyền truy cập vào phần cứng x86 tùy biến có thể mua rẻ trên thị trường, cũng không rõ còn thu được gì
    • Câu “Halo 2 là trò chơi online mang tính cách mạng nhất mọi thời đại” gần như là một chân lý tuyệt đối hiếm hoi được đồng thuận gần như hoàn toàn và ít gây tranh cãi trong bối cảnh game online
    • Tôi tò mò Halo 2 chính xác đã mang tính cách mạng nhất mọi thời đại ở điểm nào với tư cách là một trò chơi online
      Các FPS online cạnh tranh có cộng đồng mod mạnh đã rất sôi động trên PC hơn 10 năm trước đó rồi
    • Tôi vẫn thường chơi Halo 2 trên PC, cả multiplayer
      Nhờ Project Cartographer mà vẫn có cộng đồng hoạt động: https://halo2.online/home/
    1. Hàn lại RAM để nâng VRAM từ 64MB lên 128MB, 2) hàn CPU mới vào console rồi phát hiện nghẽn cổ chai ở GPU, 3) bật overclock GPU trên Xbox gốc nhưng lại vấp phải giới hạn băng thông bộ nhớ, 4) reverse engineer mã nguồn Halo 2 để đặt scaling ở 720p hoặc 1080p (đầu ra là 1080i interlace), 5) tăng tốc cả ổ cứng để tải texture nhanh hơn
      Người này có vẻ tận tâm với Halo 2 hơn cả mức Bungie ngày nay dành cho IP của chính họ
    • Bungie không còn liên quan đến Halo nữa
      IP thuộc sở hữu của Microsoft và việc phát triển do 343 Industries đảm nhiệm
      Bungie hiện có Destiny/Destiny 2 và tựa extraction shooter Marathon sắp ra mắt
    • Sức mạnh của hoài niệm rất lớn
      Tôi đã đổ vào trò chơi đó thật sự rất nhiều thời gian, và thật vui khi có người khác cũng bị cuốn vào thứ ma thuật ấy như tôi
    • Đây đúng là một thành tựu kỹ thuật đáng kinh ngạc, nhưng nếu biết rằng có thể mua Xbox Series X giá 500 đô la để chơi bản remaster ở 4K 120fps thì có lẽ khó mà tự mình làm vậy
      Dù thế, mức độ tận tâm này vẫn rất đáng khâm phục
  • Nghe có thể quá hoài nghi, nhưng bản thân dự án thật sự rất tuyệt
    Tuy nhiên, tôi tự hỏi liệu có thể nói rằng việc thay CPU và overclock, tăng RAM, thêm bộ lưu trữ thể rắn, rồi overclock cả GPU là đang đẩy giới hạn của Xbox gốc hay không
    Đến thời điểm đó thì về cơ bản nó có vẻ không còn là Xbox nữa

    • Việc đó có còn là Xbox hay không có thể tranh luận, nhưng xét theo chủ đề này và mục đích của bài viết thì phần lớn chỉ gần như là tranh cãi ngữ nghĩa
      Khi nói độ hàng loạt động cơ và hệ thống treo cho Honda Civic rồi đẩy nó đến giới hạn, việc hỏi “nhưng nó có thật sự còn là Civic không?” có thể đúng về mặt kỹ thuật nhưng nghe giống bắt bẻ câu chữ
      Tác giả có quyền đặt tiêu đề mình muốn, và ta chỉ cần đọc trong đầu thành kiểu “mod OG Xbox đến sát ngưỡng chết” là được
    • Ở đây, trong bối cảnh mod Xbox, “original Xbox” nên được hiểu là không phải Xbox 360
      Vì Halo 2 có thể chạy ở độ phân giải cao hơn trên 360, nên việc nói rõ đây là dự án mod nhắm vào Xbox gốc là hữu ích
      Không phải nói theo nghĩa đen về một chiếc Xbox chưa chỉnh sửa, mà là đối tượng được mod là Xbox gốc
    • Tôi nghĩ việc dùng cùng bo mạch chủ vẫn có ý nghĩa
    • Nhìn vào kho GitHub thì có nói rằng vẫn dùng được patch này ngay cả khi không có console nâng cấp CPU, và trong thử nghiệm cũng không đo được cải thiện hiệu năng bổ sung
      Họ cũng nói trên console dùng cáp IDE mặc định thì tốc độ truyền tăng 10%, còn nếu dùng cáp IDE đã nâng cấp thì về lý thuyết có thể tăng tối đa 300%
      Nếu có 128MB RAM, có thể tận dụng phần RAM bổ sung để bật các chế độ video 720p và 1080i, đồng thời tăng cache bộ nhớ texture và geometry để gần như loại bỏ pop-in
      Nếu chỉ muốn 480p thì chỉ cần overclock GPU trên console nguyên bản và dùng cáp IDE khác
      Cách diễn đạt liên quan đến SSD có vẻ đã vô tình gây hiểu nhầm, và có lẽ ý là tổ hợp cáp 80 chân với SSD
      CPU overclock là không cần thiết và CPU cũng không phải nút thắt cổ chai; RAM tăng thêm chỉ cần khi muốn từ 720p trở lên
      Phản hồi này đã được chuyển đi, nên bài blog có thể sẽ được cập nhật để làm rõ hơn phần này
    • Việc vắt kiệt tối đa từ phần cứng hiện có tự thân đã là một mục tiêu theo đuổi
      Giới máy tính retro là như vậy, và độ xe cũng tương tự
      Có người muốn một chiếc Corvette hoàn hảo đúng trạng thái xuất xưởng, có người lại muốn một chiếc Model A gắn động cơ mới hơn 50 năm
      Bẻ cong một thứ quen thuộc và đã biết theo ý mình là một việc rất ngầu
  • Khối lượng công việc cực lớn
    Cũng thú vị là người bạn “doom” không muốn tiết lộ danh tính của mình

    • Chúng ta không nhất thiết phải xem các phỏng đoán là nghiêm túc, thậm chí cũng không cần phỏng đoán, nhưng nếu làm trong một ngành khiến bạn phải nghĩ lại trước khi gắn danh tính ngoài đời với dịch ngược Xbox, thì điều đó hoàn toàn có thể hiểu được
    • Tôi đã nghĩ đến Doom9
    • Gần như chắc chắn là grimdoomer