gohud

Dễ đọc là thứ đo được

← Theme

"Đẹp" là chuyện gu; "dễ đọc" thì đo được. Chữ xám nhạt trông ổn trên màn hình tốt và biến mất trên điện thoại giữa ban ngày — chọn bằng mắt thì sớm muộn cũng dính.

python3 addons/gohud/tools/check_contrast.py
Cái gìMức yêu cầu
Chữ thân bài4.5 : 1
Chữ lớn (từ 24px trở lên)3 : 1
Viền và biểu tượng màu nhấn3 : 1
Viền trang trí2 : 1 — WCAG không áp quy tắc 3:1 cho phần trang trí
Hai bề mặt kề nhau1.12 : 1 — đủ để một tấm thẻ đọc ra là tách khỏi nền của nó

Chữ cùng tông trên nền pha cùng tông

Cái bẫy này xuất hiện ba lần trong chính mã nguồn này — nút đang bấm (tấm nền màu nhấn, nhãn màu nhấn), nút nguy hiểm, và chip. Nó trông đẹp trong một ô màu mẫu rồi sụp đổ ngay khi bị đo, vì hai bên chung một tông màu nên chẳng chênh nhau chút độ sáng nào.

Vì vậy màu nhãn không được chọn bằng tay. Trình dựng theme và GoSkin mỗi bên đều đẩy độ sáng — và chỉ độ sáng thôi — cho tới khi vượt ngưỡng trên đúng tấm nền mà chữ thật sự nằm lên. Tông màu và độ bão hòa được giữ nguyên, nên bảng màu giữ được cá tính và đổi nó thì độ tương phản vẫn còn.

Màu đọc như chữ và màu tô như mảng muốn hai điều ngược nhau

Trên theme sáng, màu cảnh báo phải tối đi mới đọc được khi làm chữ (#96500A). Khi phần tô của thanh kế thừa màu đó, thanh kinh nghiệm hóa nâu. Riêng màu thì không cứu được: vàng vốn dĩ đã sáng, nên nó vượt 3:1 dù rãnh chẳng xám chút nào, còn làm rãnh tối đi lại khiến mọi thứ tệ hơn (1.52 → 1.06).

Nên hai thứ được tách ra. Màu thì giữ nguyên độ rực — bảng màu mang theo các màu chỉ dùng để tô như warning_vivid. Phần viền gánh lấy độ tương phảnGoSkin vẽ một đường viền 1dp lên bất kỳ phần tô nào không đạt nổi 3:1 so với rãnh của nó, để câu hỏi "đầy đến đâu rồi" vẫn đọc được.

MY_LIGHT = dict(
    warning=hexc("9A5407"),         # đọc như chữ
    warning_vivid=hexc("F2A007"),   # tô lên thanh
)
Bỏ sót thì sẽ bị báo. Thiếu một màu *_vivid, một phần tô ra quá tối sẽ khiến trình dựng in ra the bar looks drab — add warning_vivid to the palette (thanh trông xỉn màu — hãy thêm warning_vivid vào bảng màu). Một chỗ trước đây âm thầm xuống cấp thì nay lên tiếng.

Một tấm nền nổi không thể biết phía sau nó là gì

HUD được vẽ đè lên game — một cánh đồng tuyết, hay một hang động. Nếu tấm nền của nó bán trong suốt, thứ nằm sau sẽ lộ qua và đổi luôn màu của tấm nền, kéo độ tương phản của chữ tụt theo. Ở mức đục 82%, chữ mờ nhạt của các theme tối rơi xuống 3.74:1 trên nền sáng — dưới mức tối thiểu.

Nên các tấm nền bán trong suốt được đo với nền trắng tinh và nền đen tuyền phía sau; đó là những gì tệ nhất mà một cảnh game có thể bày ra. Tấm nền HUD của các theme kèm theo đủ đục để vượt ngưỡng (92%) mà vẫn giữ được vẻ trong như kính.

Cũng vì lý do đó mà màu biểu tượng cũng không cố định. Hình vẽ trong ô nhanh từng bị gán cứng màu trắng và đo ra 1.11:1 trên một theme sáng — giờ nó đi theo tấm nền mà nó nằm lên, đúng như các nhãn chữ.

Hai bộ kiểm tra, hai tầm với. check_contrast.py đọc các file theme; còn những màu mà một skin trộn ra lúc đang chạy (chip, ô nhanh) thì được đo trong mục skin contrast của bộ kiểm thử chạy bên trong Godot.