1 คะแนน โดย GN⁺ 2025-08-16 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เมื่อรันเกมแบบเต็มหน้าจอบน MacBook เกมส่วนใหญ่จะเรนเดอร์ภาพเบลอเนื่องจากปัญหา รอยบากบนจอแสดงผล
  • กลไกการ เลือกความละเอียด ของระบบไม่ได้คำนึงถึงพื้นที่รอยบาก ทำให้เลือกพื้นที่แสดงผลผิดพลาด
  • การเลือก ความละเอียด 16:10 เป็นเพียงทางแก้ชั่วคราว แต่ต้นตอจริง ๆ คือการออกแบบ API และคำแนะนำของ Apple ที่ยังไม่เพียงพอ
  • ปัญหานี้เกิดซ้ำได้ในเกมยอดนิยมหลายเกม (เช่น Shadow of the Tomb Raider, No Man’s Sky); ขณะที่บางเกมใหม่กว่าอย่าง Cyberpunk 2077 จัดการได้ถูกต้อง
  • Apple ควรปรับปรุง HIG และ API เพื่อยกระดับแนวทางและการรองรับสำหรับนักพัฒนา

ปัญหา: สาเหตุของการเรนเดอร์ภาพเบลอในเกมแบบเต็มหน้าจอบน Mac

  • ปัญหานี้ถูกส่งให้ Apple แล้วตั้งแต่เดือนกันยายน 2023 ในชื่อ issue FB13375033
  • เมื่อรันเกมแบบเต็มหน้าจอบนจอ MacBook เกมส่วนใหญ่ไม่ได้คำนึงถึง รอยบาก (notch) อย่างถูกต้อง จึงเกิด ข้อผิดพลาดในการเรนเดอร์
  • หลายเกมดึงรายการความละเอียดที่ระบบรองรับมาใช้ แล้วเลือกค่าตัวแรกจากรายการนั้น (ความละเอียดของพื้นที่จอทั้งหมด) แต่ในความเป็นจริง พื้นที่เต็มหน้าจอที่ AppKit ใช้งานได้จะถูกจำกัดให้อยู่ใต้รอยบาก
  • เมื่อเกมแสดงผลที่ ความละเอียดเต็มจอทั้งหมด พื้นที่ที่วาดได้จริงจะเล็กกว่า ทำให้เฟรมถูกบีบในแนวตั้งและนำไปสู่ปัญหา ภาพเบลอ

โครงสร้างพื้นที่ของจอแสดงผลบน Mac

  • จอ Mac ที่มีรอยบากมีพื้นที่หลักอยู่สามส่วน
    • ขอบเขตของจอทั้งหมด (รวมรอยบากและเมนู)
    • Safe area (ใต้รอยบาก)
    • พื้นที่เต็มหน้าจอที่ AppKit ใช้งานได้ (ใต้แถบเมนู)
  • รายการความละเอียดที่ฟังก์ชัน CGDisplayCopyAllDisplayModes ส่งกลับมานั้นปะปนกันระหว่าง ความละเอียดเต็มจอทั้งหมด กับ ความละเอียดใต้แถบเมนู (โดยมากเป็นอัตราส่วน 16:10)
  • เกมส่วนใหญ่มักใช้ค่ารายการแรก (พื้นที่เต็มหน้าจอทั้งหมด) จึงทำให้แสดงผลไม่ถูกต้อง
  • ตัวอย่าง: Shadow of the Tomb Raider เริ่มต้นด้วยความละเอียดเต็มจอทั้งหมด (3456x2234) แต่พื้นที่ที่วาดได้จริงคือ 3456x2160 เท่านั้น (ต่างกัน 74 พิกเซล ทำให้ภาพถูกบีบและเรนเดอร์ออกมาเบลอ)

วิธีแก้: การเลือกความละเอียดที่ถูกต้องและแนวทางเลี่ยงปัญหาชั่วคราว

  • ผู้ใช้: เมื่อเล่นเกมเต็มหน้าจอบน Mac ที่มีจอรอยบาก ควรเลือก ความละเอียด 16:10 ด้วยตนเอง เพราะเกมมักไม่ปรับให้อัตโนมัติ
  • นักพัฒนา: ควรใช้พร็อพเพอร์ตี safeAreaInsets ของ NSScreen เพื่อ กรองรายการความละเอียดให้ละเอียดขึ้น
    • มีการให้โค้ดอัลกอริทึมสำหรับกรองเฉพาะความละเอียดที่ตรงตามเกณฑ์ของ Safe area (แต่มีผลข้างเคียงคืออาจกรองความละเอียดบางแบบ เช่น 4:3 ออกมากเกินไป)
    • อย่างไรก็ตาม โดยแก่นแล้วจำเป็นต้องมีการปรับปรุงจากฝั่ง Apple
    โฆษณา

เกมที่ได้รับผลกระทบ: ตัวอย่างเกมหลักและสถานะการจัดการ

  • Shadow of the Tomb Raider, Control Ultimate Edition, No Man’s Sky, Riven, Stray และอีกหลายเกมมีอาการเรนเดอร์ถูกบีบและเบลอ เพราะ ค่าเริ่มต้นความละเอียดไม่ถูกต้อง
    • Control: กำหนดความละเอียดเองภายใน แต่ไม่ตรงกับความละเอียดจริงของ Mac
    • No Man’s Sky: แสดงทั้งความละเอียดที่มีอัตราส่วนไม่ถูกต้อง รวมถึงความละเอียดของ safe area และ non safe area
    • Riven, Stray: ตั้งค่าเริ่มต้นให้เรนเดอร์ด้วยความละเอียดที่ถูกบีบ
  • Cyberpunk 2077 เลือก ความละเอียดที่ถูกต้อง ในอัตราส่วน 16:10 (ไม่ได้เปิดเผยวิธีกรองภายใน)
  • World of Warcraft: ใช้ legacy API ที่สามารถวาดไปถึงบริเวณรอยบากได้ จึงใช้ความละเอียดเต็มจอได้อย่างถูกต้อง

สิ่งที่ Apple ควรทำ: ความจำเป็นที่ Apple ต้องจัดการ

  • ควรเพิ่ม แนวทางและคำอธิบายเรื่องการจัดการความละเอียด สำหรับจอมีรอยบากลงในเอกสาร HIG (Human Interface Guidelines)
  • ควรปรับปรุง CGDisplayMode ใน AppKit/Cocoa เพื่อให้ การกรองความละเอียด ทำได้ง่ายขึ้น
  • ควรออกแบบ API ใหม่ สำหรับการปรับแต่งเกมโดยเฉพาะ เพื่อลดปัญหารายการความละเอียดและ boilerplate
  • สำหรับนักพัฒนา ควรพิจารณาแนะนำให้คำนวณรายการความละเอียดเองแทนการ query ความละเอียดจากระบบ หรือใช้แนวทาง “render scale”
  • หากมีการปรับปรุงเหล่านี้ Apple ก็ควรอัปเดตเอกสารทางการและ sample code ควบคู่กันไปด้วย

1 ความคิดเห็น

 
GN⁺ 2025-08-16
ความคิดเห็นบน Hacker News
  • มีแค่ผมหรือเปล่าที่รู้สึกว่าหน้าจอที่มีมุมโค้งกับรอยบากมันดูแปลกมาก หลังจากต้องทนกับเรขาคณิตเพี้ยน ๆ ของจอ CRT มาหลายสิบปี ในที่สุดจอสี่เหลี่ยมผืนผ้าที่สมบูรณ์แบบก็กลายเป็นมาตรฐานทั่วไป แล้วกลับมาทำให้มันเสียอีกเพราะอยากให้ดูเท่ ก็น่าเสียดายเหมือนกัน
    • ถ้ามองว่ารอยบากไม่ใช่สิ่งโง่ ๆ ที่มาแย่งพื้นที่หน้าจอ แต่เป็นองค์ประกอบที่ช่วยเพิ่มขนาดหน้าจอรวมด้วยการลดขอบจอ ก็จะเข้าใจได้มากขึ้น และเมื่อมุมของหน้าจอมาอยู่ใกล้รอยบาก ถ้าตัวเครื่องโน้ตบุ๊กมีทรงโค้ง หน้าจอก็ควรโค้งตามด้วยถึงจะดูเป็นธรรมชาติ ถ้าเป็นหน้าจอสี่เหลี่ยมอยู่ในมุมเครื่องโน้ตบุ๊กที่โค้งจะดูแปลก แต่ก็ขึ้นอยู่กับสถานการณ์ เช่น เวลาเล่นวิดีโอบน Mac หน้าจอจะกลับเป็นสี่เหลี่ยมผืนผ้าและเล่นอยู่ใต้รอยบาก ในการใช้งานจริงได้จอใหญ่ขึ้น ตอนทำงานก็มีมุมโค้ง รอยบากในแถบเมนูก็ไม่ค่อยรบกวน เวลาเล่นวิดีโอหรือเกมก็กลับเป็นหน้าจอสี่เหลี่ยมผืนผ้า สรุปคือด้วยข้อดีหลายอย่างและความยืดหยุ่น ก็ไม่จำเป็นต้องมองว่าแย่เสมอไป
    • ด้วยเทคโนโลยีปัจจุบันมีตัวเลือกได้สามแบบ 1) ไม่มีกล้องหน้าและทำจอไร้ขอบเพื่อให้จอใหญ่ที่สุด 2) มีกล้องหน้าแต่ยังไร้ขอบ ทำให้จอสั้นลง 5 มม. และพื้นที่ด้านบน 5 มม. ใช้งานอะไรไม่ได้เลย 3) มีกล้องหน้าและใช้ขอบจอ/รอยบาก ทำให้มี "dead space" ตรงกลาง แต่ใช้พื้นที่ด้านข้างได้ และเพราะโดยมากเมนูกับตัวบอกสถานะจะอยู่ด้านบนอยู่แล้ว ส่วนตรงกลางก็ว่าง รอยบากจึงเท่ากับช่วยเพิ่มพื้นที่จริงให้แอป เกมเองไม่ว่าจะเป็นแบบ #2 หรือ #3 ก็มี dead space อยู่ดี เลยแทบไม่ต่างกันในทางปฏิบัติ สุดท้ายรอยบากไม่ได้กินพื้นที่ตรงกลางจอจริง ๆ แต่เหมือนเพิ่มพื้นที่ด้านซ้ายขวาให้มากกว่า เพียงแต่ผมคิดว่าวิธีรายงานความละเอียดมีปัญหาอยู่พอสมควร (ถ้าค่าที่ส่งให้แอปไม่ตรงกับของจริงมันทำให้สับสน)
    • ผมใช้ MacBook รุ่นที่มีรอยบากอยู่ และแทบไม่รู้สึกถึงการมีอยู่ของมันจริง ๆ ผู้ใช้ MacBook ส่วนใหญ่แทบไม่สนใจรอยบากเลย มีบางคนที่ไม่พอใจบ้าง แต่เป็นส่วนน้อยมาก
    • อยากรู้ว่าหน้าจอเป็น OLED หรือเปล่า สมาร์ตโฟนทุกวันนี้ก็เป็น OLED กันหมด ผมเองคิดว่ารอยบากจริง ๆ ก็ไม่ได้มีประโยชน์อะไร แต่ยังไงก็จำเป็นเพราะตำแหน่งของกล้องหน้า ถ้าเป็น OLED ก็แค่ปิดพิกเซลเวลาต้องการ มันก็จะดูเหมือนขอบจออยู่ดี สุดท้ายก็ไม่ต่างจากทางเลือกแบบมีขอบจอเดิมมากนัก
    • ผมชอบฟอนต์แบบไม่มี anti-aliasing บน LCD มากกว่า เพราะขอบพิกเซลที่คมเป็นเหลี่ยมดูสะอาดดี แต่ถึงอย่างนั้นหลายคนก็ชอบเอฟเฟกต์ anti-aliasing แบบนุ่ม ๆ มากกว่า คงเพราะมันให้ความรู้สึกแบบ CRT
  • World of Warcraft มีตัวเลือกให้ UI หลีกเลี่ยงรอยบาก โดยภายในจะเรียก safe region จาก C_UI แล้วปรับ UIParent ให้เข้ากับพื้นที่นั้น ทำให้ภาพเกมยังใช้เต็มจอได้ แต่ UI จะถูกจัดให้อยู่ใต้รอยบาก
    • WoW ปฏิบัติต่อ macOS ในฐานะแพลตฟอร์มชั้นหนึ่งมาโดยตลอด จึงน่าเสียดายมากที่ Blizzard เลิกซัพพอร์ต macOS ในเกมใหม่ ๆ ช่วงหลัง
  • สถานการณ์นี้แสดงให้เห็นว่า Apple ไม่ได้ใส่ใจกับการเล่นเกมบน Mac จริง ๆ ผมเองก็ลงทุนกับ MBP, Mac Studio และอีกหลายอย่างไปมาก แต่สุดท้ายข้อจำกัดกลับไม่ได้มาจากฮาร์ดแวร์ แต่มาจากการดูแลซอฟต์แวร์สำหรับเกมที่น่าอนาถ ซึ่งเบื้องหลังคือ Apple เก็บค่าธรรมเนียม 30% จากเกมบน Mac แบบเดียวกับ iOS ไม่ได้ สุดท้ายก็ทำให้นึกถึงคำพูดของครูเก่าว่า "ถึงภายนอกจะดูเหมือนไม่ใช่เรื่องเงิน แต่สุดท้ายทุกอย่างก็เป็นเรื่องเงิน"
    • ปัญหาที่ใหญ่กว่าจริง ๆ คือคุณภาพเอกสารของ Apple มันแย่มาก มีแค่รายการฟังก์ชันซิกเนเจอร์ แต่ถ้าจะรู้วิธีใช้จริงต้องไปไล่ดูเซสชัน WWDC เมื่อหลายปีก่อน และก็ยังไม่แน่ใจด้วยว่าสิ่งที่พูดไว้ในนั้นยังถูกต้องอยู่ไหม
    • Apple ไม่ได้ใส่ใจกับเกมจริง ๆ นั่นแหละ แต่ปัญหาแบบรอยบากพวกนี้ก็เป็นผลจากความย้อนแย้งของการพยายามให้ "abstraction แบบมหัศจรรย์" ทางเทคนิคด้วย เขาบอกว่าซอฟต์แวร์จะจัดการให้เอง แต่ในความเป็นจริง แอปหรือเกมที่ต้องควบคุมหน้าจอละเอียด ๆ ต่างก็ต้องมีการแฮ็กหรือแพตช์แยกกันอยู่ดี มันเป็นวังวนเดิม ๆ ของข้อจำกัดทางเทคนิคกับภาวะกลืนไม่เข้าคายไม่ออกของ abstraction
    • การที่ Apple ไม่สนใจตลาดเกมบน Mac ก็เพราะมองว่าธุรกิจเกมเป็นธุรกิจที่กำไรต่ำโดยเนื้อแท้ ปกตินักเล่นเกมจะไวต่อฮาร์ดแวร์มาก จึงอ่อนไหวกับต้นทุนชิ้นส่วนและมาร์จิน โดยเฉพาะราคา SSD หรือ RAM ซึ่งต่างจากตลาดสายครีเอทีฟหรือองค์กรที่ Apple ทำกำไรได้สูงมากโดยสิ้นเชิง
    • ผมใช้ M3 Ultra Mac Studio ราคา $4,000 แต่พอจะสตรีมอะไรก็ตามด้วย StreamLabs (ต่อให้ไม่ได้เปิดเกม) การบันทึกกลับกระตุกและหน่วง ผมไม่เข้าใจจริง ๆ ว่าทำไมเรื่องแบบนี้ถึงเกิดขึ้น
    • ข้ออ้างที่ว่า Apple ทำแบบนี้เพราะเก็บ 30% บน Mac ไม่ได้ ฟังไม่ค่อยขึ้น เพราะเกม Mac ส่วนใหญ่ในบทความก็อยู่บน App Store อยู่แล้ว Apple ก็เก็บค่าธรรมเนียมได้เต็ม ๆ จาก Control Ultimate Edition, Shadow of the Tomb Raider, Riven, Cyberpunk 2077 Ultimate, Stray ด้วย นี่จึงดูไม่ใช่การขัดขวางอย่างมีเจตนา แต่ใกล้เคียงกับความไร้ความสามารถและความไม่ใส่ใจมากกว่า
  • เกมเก่าอย่าง WoW สามารถใช้ legacy fullscreen API ของ CoreGraphics เพื่อวาดภาพเข้าไปในพื้นที่รอยบากได้อย่างอิสระ ผมไม่ค่อยรู้เรื่อง Mac มากนัก แต่คิดว่าถ้าเกมจะวาดเต็มจอรวมถึงรอยบากเพื่อเพิ่มความดื่มด่ำ แล้วให้ UI กับการเล่นจริงใช้แค่ safe area ก็ดูน่าจะเหมาะ ไม่แน่ใจว่าเกมอย่าง Control ที่แทบไม่สนใจเรื่องนี้แล้วตั้งความละเอียดแบบตามใจเอง เป็นเพราะขี้เกียจหรือเปล่า
    • วิธีจัดการของแต่ละเกมไม่เหมือนกัน แต่พื้นที่เหนือรอยบากมักจะถูกทำให้เป็นสีดำ หรือไม่ก็เข้าถึงไม่ได้เลย (แม้แต่เคอร์เซอร์ก็เลื่อนไปไม่ได้) มันทำงานเหมือนกับว่าส่วนนั้นหายไปจากหน้าจอ เหมือนตอนใช้ M1 Air ที่ไม่มีรอยบากทุกอย่าง
  • นี่ไม่ใช่ปัญหาเฉพาะของ Apple เพราะบน Xbox 360 ก็เคยมีปัญหาเรื่อง TV overscan ตั้งแต่ปี 2008 แล้ว ต้องวาดภาพให้เล็กกว่าความละเอียดจริงถึงจะอยู่ใน safe area ซึ่งนักพัฒนาต้องจัดการเองเสมอ XNA ทำให้ดีขึ้นหน่อยเพราะมี safe area rect ให้ และตอนนี้ก็ยังกำหนดขนาด backbuffer ได้อิสระ เวลาใช้ DLSS หรือเทคโนโลยีคล้ายกัน ทางที่ดีที่สุดก็คือทำให้ safe area เป็น 1:1 สรุปแล้วนักพัฒนาต้องเข้าใจให้ชัดว่าความละเอียดจอกับความละเอียดในการเรนเดอร์อาจไม่เท่ากัน และเรื่องนี้ก็เหมือนกันไม่ว่าจะใช้ wgpu, vulkan, AppKit, SDL หรือ glfw
    • โดยแก่นแล้ว สิ่งที่คุณพูดคือการจงใจเรนเดอร์ภาพให้เล็กลงเพื่อประหยัดทรัพยากรประมวลผล แต่สุดท้ายตอนส่งออก HDMI มันก็ยังถูกอัปสเกลกลับไปเป็น 1080p อยู่ดี และถ้ายังมี TV overscan ซ้อนเข้ามาอีก ปัญหาก็ยิ่งหนักกว่าเดิม จริง ๆ แล้วปัญหา TV overscan แก้ได้ด้วยตัวเลือกปรับ FoV แบบกำหนดเองกับขนาด GUI เท่านั้นก็พอ ผมเลยคิดว่าไม่จำเป็นต้องย่อทั้งหน้าจอเลย
  • ผมแปลกใจที่บทความนี้โฟกัสแค่ส่วนที่เรนเดอร์เบลอ เพราะจริง ๆ แล้วมันยังกระทบถึงตำแหน่งเมาส์พอยน์เตอร์ด้วย ในแต่ละเกมต้องเข้าเมนูของระบบปฏิบัติการทุกครั้งเพื่อบังคับให้โหมดย้าย fullscreen ลงมาอยู่ใต้รอยบาก เรื่องแบบนี้ควรเป็นตัวเลือกการช่วยการเข้าถึงระดับทั้งระบบมากกว่า แต่กลับไม่เป็นแบบนั้นก็น่าสงสัย
  • สถานการณ์นี้เป็นตัวอย่างที่ดีว่าตลาดเกมบน Mac มีขนาดเล็กแค่ไหน ซึ่งน่าเสียดายมาก
    • ส่วนแบ่งของ Mac ตามผลสำรวจฮาร์ดแวร์ของ Steam มีเพียง 1.88% เท่านั้น น้อยกว่า Linux เสียอีก เพราะอย่างนั้นนักพัฒนาส่วนใหญ่เลยไม่สนใจมันตั้งแต่แรก
  • เหตุผลที่ผมตั้งใจซื้อ M3 MacBook Pro ก็เพราะมันเล่นเกมไม่ดี ผมต้องการโน้ตบุ๊กที่ไว้ใจได้สำหรับเรียนปริญญาโทด้านความมั่นคงปลอดภัยไซเบอร์ และถ้าผมซื้อโน้ตบุ๊กแรง ๆ ฝั่ง Windows ก็คงเผลอเล่นเกมมากเกินไปเลยเลือกแบบนี้ เครื่องตอนนี้ยอดเยี่ยมมากโดยรวม แต่เวลาเล่นเกมมันร้อนเกินไปจนกังวล สุดท้ายเลยเลิกเล่นเกมไปเลย
  • ฟอนต์ของเว็บไซต์นี้ บางส่วนของตัวอักษรบางตัวบางเกินไปมาก
    • สำหรับผม ส่วนบนของตัวอักษรทุกตัวบางเกินไป รู้สึกเหมือนกำลังอ่านข้อความที่พิมพ์จากเครื่องพิมพ์ที่หมึกใกล้หมด (ขอฝากฟีดแบ็กตามธรรมเนียมของ Hacker News)
  • อยากรู้ว่าจะมีวิธีแก้เรื่องนี้โดยไม่ทำให้ซอฟต์แวร์เดิมพังได้ยังไง การจัดเรียงรายการใหม่เหรอ
    • เหมือนที่ Windows เคยทำ ถ้าแอปที่กำลังรันเป็นเกมแบบ legacy ระบบปฏิบัติการก็สามารถส่งข้อมูลระบบแบบ "หลอก" เพื่อให้ภาพออกมาถูกต้องได้ วิธีคิดแบบนี้เป็นหนึ่งในเหตุผลสำคัญที่ทำให้ Windows ประสบความสำเร็จในฐานะแพลตฟอร์มเกม ทุกวันนี้ก็ยังไม่หายไปเสียทีเดียว แต่เมื่อก่อนพบวิธีแบบนี้บ่อยกว่ามาก