1 điểm bởi GN⁺ 2025-08-16 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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độ 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

1 bình luận

 
GN⁺ 2025-08-16
Ý kiến Hacker News
  • Không biết có phải chỉ mình tôi thấy màn hình với các góc bo tròn và phần tai thỏ trông cực kỳ kỳ cục không; sau hàng chục năm chịu đựng hình học lưng chừng của màn CRT, cuối cùng màn hình hình chữ nhật hoàn hảo mới trở nên phổ biến, vậy mà giờ lại phá hỏng nó chỉ để trông cho ngầu thì thật đáng tiếc
    • Đừng nghĩ tai thỏ là thứ ngớ ngẩn cướp mất diện tích màn hình; hãy xem nó là yếu tố giúp tăng kích thước tổng thể của màn hình khi viền mỏng đi, và khi góc màn hình tiến sát phần tai thỏ thì việc màn hình cũng bo tròn theo sẽ tự nhiên hơn vì thân máy laptop vốn đã bo tròn, còn nếu màn hình vuông nằm trong các góc máy bo tròn thì nhìn mới lạ, tuy vậy còn tùy tình huống: khi phát video trên Mac thì màn hình lại chuyển thành hình chữ nhật và phát bên dưới tai thỏ; trong sử dụng thực tế thì bạn có màn hình lớn hơn, lúc làm việc thì có góc bo tròn, có tai thỏ trong thanh menu cũng không gây khó chịu, còn khi xem video và chơi game thì lại chuyển về màn hình chữ nhật, nên xét cho cùng đây không hẳn là điều xấu vì có nhiều ưu điểm và độ linh hoạt
    • Với công nghệ hiện tại thì có ba lựa chọn: 1) tối đa hóa màn hình với viền siêu mỏng nhưng không có camera trước, 2) có camera trước nhưng vẫn viền siêu mỏng nên màn hình thấp hơn 5mm và phần 5mm phía trên hoàn toàn vô dụng, 3) kết hợp camera trước với viền/tai thỏ, tạo ra một vùng “chết” ở giữa nhưng vẫn tận dụng được hai bên; mà phần lớn thời gian thì menu và chỉ báo luôn nằm phía trên còn giữa để trống, nên khu vực tai thỏ thực ra giúp dành thêm không gian cho ứng dụng, với game thì cả cách #2 lẫn #3 đều là vùng chết nên thực tế không khác gì, rốt cuộc tai thỏ không chiếm phần giữa màn hình mà là thêm không gian ở hai bên trái phải, chỉ là tôi nghĩ cách báo cáo độ phân giải có vấn đề (nếu giá trị đưa cho ứng dụng khác với thực tế thì sẽ gây rối)
    • Tôi đang dùng MacBook có tai thỏ và thật sự gần như không cảm nhận được sự tồn tại của nó; đa số người dùng MacBook cũng hầu như không để ý đến tai thỏ, có người không thích nhưng là thiểu số rất nhỏ
    • Tôi tò mò không biết màn hình có phải OLED không; điện thoại giờ gần như đều là OLED, theo tôi thì tai thỏ thật ra chẳng hữu ích mấy nhưng dù sao vẫn cần vì vị trí camera trước, nếu là OLED thì có thể chỉ cần tắt pixel khi cần và nó sẽ trông như viền đen, nên rốt cuộc cũng gần như phương án viền truyền thống
    • Tôi từng thích font không có anti-aliasing trên LCD hơn vì các cạnh vuông của pixel trông rất gọn gàng, thế mà nhiều người vẫn thích hiệu ứng anti-aliasing mượt hơn; chắc là vì nó gợi cảm giác giống CRT
  • World of Warcraft có tùy chọn để UI tránh phần tai thỏ, bên trong họ lấy safe region từ C_UI rồi điều chỉnh UIParent theo đó, nên hình ảnh game dùng toàn bộ màn hình còn UI thì được căn xuống dưới tai thỏ
    • WoW từ trước tới nay luôn đối xử với macOS như một nền tảng hạng nhất, nên thật đáng tiếc khi Blizzard gần đây ngừng hỗ trợ macOS cho các tựa game mới
  • Tình huống này cho thấy Apple không thực sự quan tâm đến gaming trên Mac; tôi cũng đã đầu tư rất nhiều vào MBP, Mac Studio các kiểu, nhưng thứ giới hạn lại không phải phần cứng mà là cách quản lý tệ hại của phần mềm chơi game, và đằng sau đó là việc Apple không thể lấy 30% hoa hồng từ game Mac như trên iOS, thành ra tôi lại nhớ câu thầy giáo cũ từng nói: “dù bề ngoài có vẻ phi tiền bạc thì cuối cùng mọi chuyện vẫn là vì tiền”
    • Vấn đề lớn hơn thật sự là mức độ tài liệu hóa của Apple quá tệ; chỉ có danh sách chữ ký hàm, còn cách dùng thực tế thì phải đi lục các buổi WWDC từ mấy năm trước, mà cũng chẳng rõ thông tin ở đó còn đúng không
    • Đúng là Apple không quan tâm nhiều đến game, nhưng bản thân các vấn đề như tai thỏ lại là kết quả của một kiểu mâu thuẫn khi họ nói sẽ cung cấp “lớp trừu tượng kỳ diệu” về mặt kỹ thuật; họ bảo phần mềm sẽ tự xử lý, nhưng thực tế các ứng dụng/game cần điều khiển màn hình chi tiết đều phải tự hack hoặc vá riêng, và kiểu tiến thoái lưỡng nan giữa giới hạn kỹ thuật và trừu tượng hóa này cứ lặp đi lặp lại
    • Việc không chú ý đến thị trường game trên Mac có lẽ vì gaming vốn được xem là ngành kinh doanh biên lợi nhuận thấp; nói chung game thủ rất nhạy với phần cứng nên rất quan tâm đến giá linh kiện và biên lợi nhuận (đặc biệt là SSD hay RAM), hoàn toàn khác với thị trường sáng tạo/doanh nghiệp nơi Apple kiếm lời cao
    • Tôi đang dùng M3 Ultra Mac Studio, máy $4,000, mà cứ thử stream bất cứ gì bằng StreamLabs (kể cả không mở game) là ghi hình bị khựng và giật; tôi thật sự không hiểu tại sao chuyện đó lại xảy ra
    • Lập luận rằng Apple làm vậy vì không lấy được 30% trên Mac không thuyết phục, vì phần lớn game Mac trong bài đều có trên App Store nên Apple hoàn toàn vẫn thu được hoa hồng, Control Ultimate Edition, Shadow of the Tomb Raider, Riven, Cyberpunk 2077 Ultimate, Stray đều có mặt; đây có vẻ không phải là hành vi phá hoại ác ý của Apple mà gần với sự bất tài và thờ ơ hơn
  • Các game cũ như WoW có thể dùng API toàn màn hình legacy của CoreGraphics để vẽ tự do cả vào vùng tai thỏ; tôi không rành Mac lắm nhưng nghĩ rằng game có thể vẽ fullscreen bao gồm cả tai thỏ để tăng độ nhập vai, còn UI và phần gameplay thì chỉ dùng safe area mới là hợp lý, nên tôi tự hỏi các game như Control, vốn chẳng để tâm mà chỉ đặt độ phân giải tùy tiện, có phải đơn giản là vì lười không
    • Tùy từng game mà cách xử lý khác nhau, nhưng vùng phía trên tai thỏ thường либо là màu đen hoặc hoàn toàn không thể truy cập được (con trỏ cũng không di chuyển vào đó), tức là hệ thống hành xử như thể phần đó không tồn tại trên màn hình, có thể xem như giống hệt lúc dùng máy không có tai thỏ như M1 Air
  • Đây không chỉ là vấn đề của Apple; trên Xbox 360 cũng từng có chuyện TV overscan vào năm 2008, phải vẽ nhỏ hơn độ phân giải thực để vừa safe area, nên nhà phát triển lúc nào cũng phải xử lý riêng, XNA có cung cấp safe area rect nên đỡ hơn phần nào, giờ thì còn có thể tự do chỉ định kích thước backbuffer, khi dùng DLSS v.v. thì tốt nhất vẫn là để safe area theo tỉ lệ 1:1, cuối cùng thì nhà phát triển phải nhận thức rõ rằng độ phân giải hiển thị và độ phân giải render có thể khác nhau, và điều đó cũng đúng khi dùng nhiều công cụ như wgpu, vulkan, AppKit, SDL, glfw
    • Về bản chất điều bạn nói là cố tình render màn hình nhỏ hơn để tiết kiệm tài nguyên tính toán, nhưng cuối cùng khi xuất qua HDMI thì nó vẫn bị upscale lại lên 1080p, rồi còn chồng thêm vấn đề TV overscan nên có thể còn tệ hơn, thật ra chuyện TV overscan chỉ cần có tùy chọn FoV tùy chỉnh và chỉnh kích thước GUI là giải quyết được, nên tôi nghĩ chẳng cần phải thu nhỏ cả màn hình làm gì
  • Tôi ngạc nhiên vì bài này chỉ tập trung vào phần render bị mờ; thực tế nó còn ảnh hưởng cả vị trí con trỏ chuột nữa, với từng game bạn lại phải vào menu hệ điều hành để ép fullscreen xuống bên dưới tai thỏ mỗi lần, mấy thứ này lẽ ra phải là tùy chọn trợ năng ở cấp toàn hệ thống, nên tôi không hiểu vì sao lại không có
  • Tình huống này là ví dụ rất rõ cho quy mô thị trường game trên Mac: rất nhỏ và đáng tiếc
    • Thực tế thị phần Mac theo khảo sát phần cứng Steam chỉ là 1.88%, còn thấp hơn cả Linux, nên đa số nhà phát triển đơn giản là không quan tâm
  • Tôi cố tình mua M3 MacBook Pro vì nó không chơi game tốt; tôi cần một chiếc laptop đáng tin cậy cho chương trình thạc sĩ an ninh mạng, và nếu mua laptop Windows hiệu năng cao thì có lẽ tôi sẽ sa đà vào game, nên mới chọn như vậy, thiết bị hiện tại nhìn chung rất tuyệt, nhưng lúc chơi game thì nóng quá mức khiến tôi lo ngại, nên thôi tôi bỏ luôn chuyện chơi game
  • Font của trang này có vài phần của một số ký tự quá mảnh
    • Cá nhân tôi cảm thấy phần trên của mọi chữ đều quá mảnh, đúng kiểu như đang đọc thứ gì đó được in bằng máy in sắp hết mực vậy (để lại phản hồi đúng truyền thống Hacker News)
  • Tôi tò mò không biết có thể sửa chuyện này mà không làm hỏng phần mềm cũ bằng cách nào, kiểu sắp xếp lại danh sách chăng?
    • Giống như những gì Windows đã làm, nếu ứng dụng đang chạy là game legacy thì mã của OS có thể cung cấp thông tin hệ thống “giả” để hình ảnh hiển thị đúng; kiểu tiếp cận như vậy là một trong những lý do lớn khiến Windows thành công với tư cách nền tảng gaming, đến giờ nó chưa biến mất hẳn nhưng trước đây kiểu này còn phổ biến hơn nhiều