Giải mã Additive Blending trên Nintendo 64: Tại sao hiệu ứng trên PS1 lại đẹp hơn?

Phần cứng15 tháng 5, 2026·3 phút đọc

Bài viết phân tích kỹ thuật lý do các hiệu ứng nổ và ánh sáng trên PlayStation trông ấn tượng hơn Nintendo 64 do vấn đề về "additive blending". Tác giả đã tìm ra giải pháp sử dụng bộ đệm 32-bit kết hợp tối ưu hóa RSP để khắc phục hạn chế phần cứng của N64.

Bạn có bao giờ tự hỏi tại sao các vụ nổ và hiệu ứng đặc biệt trong game trên PlayStation gốc lại trông "ngầu" hơn nhiều so với Nintendo 64 (N64)?

Lý do nằm ở kỹ thuật additive blending (pha trộn cộng)! Hay chính xác hơn, là sự thiếu hụt tính năng này trên N64. Mặc dù N64 thực sự hỗ trợ additive blending, nhưng tính năng này gần như không thể sử dụng được do một lỗi thiết kế phần cứng.

Vấn đề của N64: Thiếu cơ chế Clamping

PlayStation (PSX) hỗ trợ 4 chế độ hòa trộn khác nhau để điều chỉnh cách sprite và hình học được pha vào bộ đệm khung hình (frame buffer) hiện có. Chế độ phổ biến nhất cho hiệu ứng nổ là src + dst — tức là màu của sprite được cộng thêm vào màu nền. Điều này làm cho hình ảnh trở nên sáng hơn, hoàn hảo cho vụ nổ, tia plasma hoặc phép thuật. Quan trọng nhất, GPU của PSX sẽ tự động clamp (giới hạn) giá trị màu về mức tối đa (255) nếu tổng vượt quá ngưỡng.

Trong khi đó, bộ xử lý hiển thị "Reality Display Processor" (RDP) của N64 có cơ chế điều khiển hòa trộn linh hoạt hơn thông qua "Color Combiner". Tuy nhiên, vấn đề nằm ở chỗ RDP không thực hiện clamping kết quả. Khi cộng màu, nếu giá trị vượt quá giới hạn, nó sẽ bị "quay vòng" (wrap-around), tạo ra các hiện tượng lạ (artifacts) xấu xí thay vì màu trắng sáng mong muốn.

Giải pháp: Bộ đệm 32-bit và sức mạnh của RSP

Thay vì vẽ trực tiếp vào bộ đệm 16-bit tiêu chuẩn của N64, tác giả đã đề xuất một giải pháp sáng tạo: Sử dụng bộ đệm 32-bit RGBA 8888 để vẽ, nhưng giữ các sprite ở định dạng 16-bit RGBA 5551.

Bằng cách chia giá trị RGB của sprite cho 8 (dịch phải 3 bit) ngay trong Color Combiner, hình ảnh sẽ trở nên tối hơn rất nhiều. Điều này tạo ra "đầu dư" (headroom) lớn để thực hiện additive blending mà không bị tràn giá trị.

Sau khi vẽ xong ở 32-bit, chúng ta cần sao chép dữ liệu này trở lại bộ đệm 16-bit để hiển thị và giới hạn các thành phần màu 8-bit về phạm vi 5-bit.

Việc xử lý này trên CPU sẽ quá chậm (khoảng 70ms cho một khung hình 320×240). Đây là lúc đồng xử lý vector RSP (Reality Signal Processor) phát huy tác dụng. Với sự hỗ trợ của các hướng dẫn vector 128-bit xử lý 8 pixel cùng một lúc, quá trình này chỉ mất khoảng 3.1ms cho cả khung hình.

Công cụ phát triển hiện đại

Một điểm thú vị là công cụ phát triển cho N64 hiện nay đã phi thường. Chúng ta không còn phải viết mã assembly MIPS bằng tay. HailToDodongo đã phát triển một ngôn ngữ giống C gọi là RSPL, biên dịch trực tiếp sang mã assembly cho RSP.

Kỹ thuật này tuy tốn băng thông bộ nhớ (điểm yếu của N64) vì phải xử lý gấp đôi lượng dữ liệu, nhưng kết quả mang lại là các hiệu ứng additive blending hoàn hảo mà không bị lỗi hình ảnh.

Một dự án demo đơn giản cho kỹ thuật trên có thể được tìm thấy trên GitHub: github.com/phoboslab/n64_addblend.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗