gohud

ความอ่านง่ายเป็นเรื่องที่วัดได้

← ธีม

"สวย" เป็นเรื่องรสนิยม แต่ "อ่านออก" วัดได้ ตัวอักษรสีเทาจาง ๆ ดูดีบนจอมอนิเตอร์ดี ๆ แล้วหายไปเลยบนมือถือกลางแดด — เลือกด้วยตาเปล่าเมื่อไร ก็รับประกันว่าเจอปัญหานี้เข้าสักวัน

python3 addons/gohud/tools/check_contrast.py
อะไรเกณฑ์ที่ต้องผ่าน
เนื้อความ4.5 : 1
ตัวอักษรขนาดใหญ่ (24px ขึ้นไป)3 : 1
เส้นขอบและไอคอนที่ใช้สีเน้น3 : 1
เส้นขอบเพื่อการตกแต่ง2 : 1 — WCAG ไม่บังคับใช้กฎ 3:1 กับงานตกแต่ง
พื้นผิวที่อยู่ติดกัน1.12 : 1 — พอให้การ์ดดูแยกออกจากพื้นหลังของมัน

ตัวอักษรสีเดียวกันบนพื้นย้อมสีเดียวกัน

กับดักนี้โผล่มาแล้ว สามครั้ง ในโค้ดเบสนี้ — ปุ่มขณะถูกกด (พาเนลสีเน้น ป้ายข้อความสีเน้น) ปุ่มอันตราย และชิป มันดูดีเวลาอยู่บนแผ่นตัวอย่างสี แล้วพังทันทีที่ถูกวัด เพราะทั้งสองใช้เฉดสีเดียวกัน จึงไม่มีความต่างของความสว่างเลย

สีของป้ายข้อความจึงไม่ได้ถูกเลือกด้วยมือ ตัวสร้างธีมและ GoSkin ต่างก็ดัน ความสว่าง — และดันเฉพาะความสว่างเท่านั้น — จนผ่านเกณฑ์บนพาเนลที่ข้อความนั้นวางอยู่จริง เฉดสีและความอิ่มตัวยังอยู่ครบ จานสีจึงรักษาบุคลิกของมันไว้ได้ และการเปลี่ยนจานสีก็ยังรักษาคอนทราสต์ไว้ได้ด้วย

สีที่ถูกอ่านเป็นตัวอักษรกับสีที่ถูกระบายเป็นพื้นที่ ต้องการคนละอย่าง

บนธีมสว่าง สีเตือนต้องเข้มลงเพื่อให้ยังอ่านออกในฐานะตัวอักษร (#96500A) พอสีเติมของแถบสืบทอดค่านั้นไป แถบค่าประสบการณ์ก็กลายเป็นสีน้ำตาล การแก้ด้วยสีอย่างเดียว ไม่ได้ผล: สีเหลืองสว่างโดยธรรมชาติ มันจึงผ่าน 3:1 แม้ไม่มีรางสีเทาอยู่เลย และการทำให้รางเข้มลง ยิ่งแย่กว่าเดิม (1.52 → 1.06)

ทั้งสองอย่างจึงถูกแยกออกจากกัน สียังคงความสด — จานสีบรรจุสีที่ใช้เติมอย่างเดียวไว้ เช่น warning_vivid ส่วนขอบเป็นตัวแบกคอนทราสต์GoSkin วาดเส้นขอบ 1dp ให้กับสีเติมทุกสีที่ทำคอนทราสต์ 3:1 กับรางของมันไม่ได้ คำถามที่ว่า "เต็มแค่ไหน" จึงยังอ่านออก

MY_LIGHT = dict(
    warning=hexc("9A5407"),         # อ่านในฐานะตัวอักษร
    warning_vivid=hexc("F2A007"),   # ระบายลงบนแถบ
)
ถ้าลืมใส่ ระบบจะรายงานให้ทราบ เมื่อไม่มี *_vivid สีเติมที่ออกมาทึมจะทำให้ ตัวสร้างพิมพ์ข้อความ the bar looks drab — add warning_vivid to the palette (ภาษาเกาหลี: "แถบดูทึม — เพิ่ม warning_vivid ลงในจานสี") จุดที่เคยเสื่อมคุณภาพอย่างเงียบ ๆ ตอนนี้พูดออกมาแล้ว

พาเนลที่ลอยอยู่ไม่มีทางรู้ว่าข้างหลังมันคืออะไร

HUD ถูกวาดทับฉากเกม — อาจเป็นทุ่งหิมะ หรือถ้ำมืด ถ้าพาเนลของมันกึ่งโปร่งใส สิ่งที่อยู่ข้างหลัง จะทะลุออกมาและเปลี่ยนสีของพาเนล ลากคอนทราสต์ของตัวอักษรลงไปด้วย ที่ความทึบ 82% ตัวอักษรโทนจางของธีมมืดตกลงไปเหลือ 3.74:1 เมื่อพื้นหลังสว่าง — ต่ำกว่าเกณฑ์ขั้นต่ำ

พาเนลกึ่งโปร่งใสจึงถูกวัดโดยมีสีขาวล้วนและดำล้วนอยู่ข้างหลัง เพราะนั่นคือสิ่งที่เลวร้ายที่สุด ที่ฉากเกมจะยัดเยียดให้ได้ พาเนล HUD ของธีมที่แถมมามีความทึบมากพอจะผ่าน (92%) ขณะที่ยังคงลุคใสแบบกระจกไว้

ด้วยเหตุผลเดียวกัน สีของไอคอนก็ไม่ได้ถูกตรึงไว้เช่นกัน สัญลักษณ์ในควิกสล็อตเคยถูกฮาร์ดโค้ด เป็นสีขาวและวัดได้ 1.11:1 บนธีมสว่าง — ตอนนี้มันเดินตามพาเนลที่มันวางอยู่ เหมือนกับที่ป้ายข้อความทำเป๊ะ ๆ

ตัวตรวจสองตัว เอื้อมถึงคนละที่ check_contrast.py อ่านจากไฟล์ธีม ส่วนสีที่สกินผสมขึ้นขณะรัน (ชิป สล็อต) ถูกวัดโดยหัวข้อ skin contrast ของชุดทดสอบที่รันอยู่ใน Godot