- Khi chạy game toàn màn hình trên MacBook, phần lớn game bị render mờ do vấn đề với notch màn hình
- Cơ chế chọn độ phân giải của hệ thống không tính đến vùng notch, dẫn đến chọn sai vùng đầu ra
- Chọn độ phân giải 16:10 là biện pháp tạm thời, nhưng nguyên nhân gốc rễ là thiết kế API và hướng dẫn còn thiếu của Apple
- Vấn đề được tái hiện ở các game tiêu biểu (Shadow of the Tomb Raider, No Man’s Sky, v.v.); một số game mới hơn như Cyberpunk 2077 xử lý đúng
- Apple cần cải thiện hướng dẫn cho nhà phát triển và hỗ trợ thông qua cập nhật HIG và API
Problem: Nguyên nhân render mờ khi chơi game toàn màn hình trên Mac
- Vấn đề này đã được gửi tới Apple từ tháng 9/2023 dưới mã FB13375033
- Khi chạy game toàn màn hình trên màn hình MacBook, phần lớn game không xử lý đúng vùng notch, dẫn đến lỗi render
- Nhiều game lấy danh sách độ phân giải được hệ thống hỗ trợ rồi chọn mục đầu tiên trong danh sách đó (độ phân giải của toàn bộ vùng hiển thị), nhưng trên thực tế vùng toàn màn hình có thể dùng được trong AppKit lại bị giới hạn ở phần bên dưới notch
- Nếu game xuất hình ở độ phân giải toàn bộ màn hình, vùng thực sự có thể vẽ nhỏ hơn, khiến khung hình bị nén theo chiều dọc và dẫn đến hiện tượng làm mờ
Cấu trúc vùng hiển thị trên màn hình Mac
- Màn hình Mac có notch có ba vùng chính
- Biên toàn bộ màn hình hiển thị (bao gồm notch và thanh menu)
- Safe area (phần bên dưới notch)
- Vùng toàn màn hình có thể dùng trong AppKit (bên dưới thanh menu)
- Danh sách độ phân giải do hàm
CGDisplayCopyAllDisplayModes trả về trộn lẫn giữa độ phân giải toàn bộ màn hình và độ phân giải bên dưới thanh menu (thường là tỷ lệ 16:10)
- Phần lớn game dùng mục đầu tiên trong danh sách, nên xuất hình không chính xác
- Ví dụ: Shadow of the Tomb Raider mặc định khởi chạy ở độ phân giải toàn màn hình (3456x2234), nhưng vùng thực sự có thể vẽ chỉ là 3456x2160 (chênh 74 pixel, khiến hình bị nén và render mờ)
Solution: Chọn độ phân giải đúng và biện pháp tránh tạm thời
- Người dùng: khi chạy game toàn màn hình trên màn hình Mac có notch, cần tự chọn độ phân giải 16:10 (game không tự căn đúng)
- Nhà phát triển: cần lọc danh sách độ phân giải tinh vi hơn bằng thuộc tính
safeAreaInsets của NSScreen
- Có cung cấp một thuật toán bằng mã để chỉ lọc các độ phân giải phù hợp với safe area (dù có tác dụng phụ là lọc quá mức một số độ phân giải như 4:3)
- Về bản chất, vẫn cần Apple cải thiện ở cấp nền tảng
Affected Games: Các game bị ảnh hưởng và tình trạng xử lý
- Shadow of the Tomb Raider, Control Ultimate Edition, No Man’s Sky, Riven, Stray, v.v. phần lớn đều gặp hiện tượng render bị nén và mờ do độ phân giải mặc định sai
- Control: tự gán độ phân giải theo cách riêng nhưng không khớp với độ phân giải thực trên Mac
- No Man’s Sky: cung cấp cả tỷ lệ sai lẫn các độ phân giải thuộc safe area và không thuộc safe area
- Riven, Stray: mặc định render ở độ phân giải bị nén
- Cyberpunk 2077 chọn độ phân giải đúng theo tỷ lệ 16:10 (không công khai cách lọc nội bộ)
- World of Warcraft: có thể vẽ tới cả vùng notch bằng API cũ, nên dùng độ phân giải toàn màn hình vẫn hoạt động đúng
What Apple could do: Sự cần thiết Apple phải xử lý
- Cần bổ sung vào tài liệu HIG (Human Interface Guidelines) phần xử lý độ phân giải và hướng dẫn cho màn hình có notch
- Cần cập nhật
CGDisplayMode trong AppKit/Cocoa để việc lọc độ phân giải trở nên dễ dàng hơn
- Cần thiết kế API mới dành riêng cho tối ưu game (giảm rắc rối với danh sách độ phân giải và boilerplate)
- Có thể cân nhắc khuyến nghị nhà phát triển tự tính danh sách độ phân giải thay vì truy vấn trực tiếp, hoặc dùng cách tiếp cận “render scale”
- Nếu áp dụng các cải tiến này, Apple cũng cần đồng thời cập nhật tài liệu chính thức và mã mẫu
Chưa có bình luận nào.