[เรื่องน่ารู้] Anti-aliasing เทคโนโลยีลบรอยหยักในเกม ที่เหล่าเกมเมอร์ควรรู้ !!

0

จริง ๆ เรื่องนี้คือข้อสงสัยที่ผมอยากรู้มานานแล้วว่า Anti-Aliasing แต่ละแบบในเกม มันแตกต่างกันอย่างไร วันนี้ผมจะพาเพื่อน ๆ ไปหาคำตอบพร้อมกันครับ

แต่ก่อนจะไปพูดถึง Anti-aliasing เราต้องมารู้จักเรื่องของพิกเซลก่อน ปกติแล้วการสร้างเกมหรืออะไรก็แล้วแต่ที่เกี่ยวข้องกับสีในคอมพิวเตอร์ เกิดจากเม็ดพิกเซลสี่เหลี่ยมที่นำมาต่อกันให้เกิดเป็นลวดลายขึ้น ถ้ามันต่อกันเป็นเส้นตรงในแนวตั้งหรือแนวระนาบคงไม่เกิดปัญหาอะไร แต่ถ้ามามันเริ่มโครงเริ่มเอียงตอนนั้นเราจะเริ่มเห็นขอบของเม็ดพิกเซล ขอบนี้ทำให้ภาพเกิดรอยหยัก เราเรียกมันว่า Aliasing

เพราะฉะนั้นการกำจัดรอยหยัก จึงต้องใช้เทคโนโลยี Anti-aliasing เข้ามาช่วย ซึ่งแบ่งออกเป็น 2 กลุ่มใหญ่ ๆ คือ

  1. Spatial anti-aliasing — คอนเซ็ปของวิธีนี้คือเรนเดอร์ภาพให้มีขนาดใหญ่กว่าความละเอียดจริง เพื่อให้เกิดเม็ดพิกเซลส่วนเกินขึ้นมา จากนั้นหดภาพกลับไปในความละเอียดที่ต้องการ ขอบของภาพจะดูเรียบขึ้น (เนื่องจากพิกเซลที่มันอัดกันแน่น ทำให้รอยหยักมันลดลง)
  2. Post-process anti-aliasing — คอนเซ็ปคือให้เกมเรนเดอร์ภาพออกมาก่อน จากนั้นทำการเบลอขอบที่มีรอยหยัก ข้อดีของการกำจัดรอยหยักด้วยวิธีนี้จะใช้กำลังการ์ดจอน้อยกว่ามาก

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

Spatial anti-aliasing

SSAA (Supersampling anti-aliasing)

เป็นวิธีการลบรอยหยักแบบโบราณ ให้ผลดีที่สุดแล้วล่ะ หลักการคงมันคงไว้ซึ่งรูปแบบของ Spatial สุดคลาสสิกไว้เลย สมมุติว่าเราเล่นเกมที่ความละเอียด 1920x1080p แล้วต้องการเปิด SSAA x4 เกมจะต้องเรนเดอร์ภาพออกมาที่ความละเอียด 7680x4320p แสดงว่าในแต่ละ 1 พิกเซลเดิม จะเกิดขึ้นมาเป็น 4 เม็ด จากนั้นตอนที่จะย่อภาพกลับไปยังความละเอียดเดิม พิกเซล 4 เม็ดจะนำสีมาถัวเฉลี่ย แล้วย่อให้กลายเป็นพิกเซลเดียวที่มีสีจางลง ลองดูภาพด้านล่างนะครับ

ปัญหาของ SSAA คือ กินสเปคมากกก (ก.ไก่อีกหลายตัว) เนื่องจากมันคือการเรนเดอร์ทุกพิกเซลในเกม จากตัวอย่างด้านบน แค่จะเล่นเกมที่ Full HD กลับต้องเรนเดอร์ให้ภาพใหญ่ขึ้นถึง 4 เท่า ต่อให้ภาพที่ได้มันสวยขึ้นจริง แต่แบบนี้ต่อให้การ์ดจอเทพ ๆ ก็ยังเอาไม่อยู่เลย จึงต้องคิดค้นวิธีใหม่ขึ้นมาอีกอย่าง คือ MSAA ครับ

จะเห็นว่า SSAA ทำเฟรมดรอปลงมากเมื่อเทียบกับ FXAA ที่ใช้วิธี post process

 

MSAA (Multi-Sampling Anti-Aliasing)

กระบวนการนี้ฉลาดขึ้นมาหน่อย MSAA จะพิจารณาในบริเวณที่เป็นรอยหยักเท่านั้น เมื่อมันเจอขอบปุ๊ป มันจะเรนเดอร์เม็ดพิกเซลตรงนั้นให้ใหญ่ขึ้นตามจำนวนเท่าหรือตัวคูณที่เรากำหนดไว้ (x2, x4, x8, x16 ก็ว่ากันไป ยิ่งเยอะยิ่งลบรอยหยักได้ดี) แล้วย่อกลับมาเป็นแบบเดิม

แม้ว่า MSAA จะกินสเปคเครื่องน้อยลงกว่า SSAA แต่ยังมีข้อจำกัดอยู่บ้าง โดยตัวมันจะสามารถจัดการได้เฉพาะเม็ดพิกเซลเท่านั้น ในส่วนของ Texture หรือส่วนที่เป็นภาพโปร่งใส จะไม่ค่อยสวยหรือยังพบรอยหยักอยู่ ถึงกระนั้นก็นับว่าเป็นวิธีที่นิยมใช้กับเครื่องที่สเปคแรง ๆ ครับ

 

Post-process anti-aliasing

MLAA (Morphological anti-aliasing) และ FXAA (Fast approximate anti-aliasing)

หลักการของ 2 อย่างนี้จะคล้าย ๆ กัน คือมันจะมีการเบลอหลังเกมเรนเดอร์ออกมาเรียบร้อย โดยจะมีการตรวจหาขอบของภาพในเกม หากเจอขอบมันจะทำการเบลอให้ทันที ข้อดีคือมันทำงานได้เร็วมาก คุณภาพก็ดีในระดับหนึ่ง แต่ข้อจำกัดของมันคือเรื่องการตรวจหาขอบนี่แหละ เพราะจะต้องอาศัยความต่างของสีระหว่างพิกเซลที่ขอบและสิ่งแวดล้อม ถ้าสีไม่ค่อยต่างกัน มันอาจจะไม่เบลอให้ และโดยเฉพาะเวลาที่เป็นภาพเคลื่อนไหวรวดเร็ว มันจะเกิด Motion blur ค่อนข้างเยอะเลยทีเดียว

นอกจากนี้ยังมี TXAA (Temporal anti-aliasing) ที่ใช้วิธีทั้ง Supersampling ผสมกับการเบลอภาพ ซึ่งจะเร็วขึ้นกว่าแบบ Spatial หน่อย แต่ก็ยังกินสเปคอยู่พอสมควร เกมในปี 2020 ไม่ค่อยมีใช้กันแล้วล่ะ

ส่วน SMAA (Subpixel morphological anti-aliasing) พัฒนาขึ้นโดย Jorge Jimenez นักศึกษามหาวิทยาลัยเดอซาราโกซา ใช้หลักการคล้าย ๆ กับ TXAA โดยจะให้มีการเรนเดอร์และเบลอภาพก่อน จากนั้นใช้ Supersampling เพื่อปรับคุณภาพของภาพทั้งหมดอีกที (โดยทาง HP ดันเทคโนโลยีนี้มากเลยนะ จากที่ผมเห็นในเว็บของเขา) ภาพที่ได้จะสวยกว่า FXAA/MLAA

DLSS

สำหรับเทคโนโลยีใหม่ล่าสุด ขอแยกไว้อีกพวกหนึ่งเลยละกัน DLSS มาจากคำว่า Deep learning super sampling พูดง่าย ๆ มันคือการทำ Supersampling แบบหนึ่ง โดยไม่ต้องอาศัยพลังงานจากแกนประมวลผลกราฟฟิกโดยตรง แต่ใช้แกนประมวลผลด้าน Deep learning เรียกว่า Tensor Core จากการ์ดจอ RTX-series แทน

วิธีการที่ใช้คือ ถ้าผู้ผลิตเกมต้องการให้เกมของตนเองมี DLSS จะต้องส่งเกมไปให้ NVIDIA จากนั้น NVIDIA จะใช้ Supercomputer เรนเดอร์เกมให้มีความละเอียดขนาดสูงมากและหดกลับไปยังความละเอียดที่ต้องการ (เหมือน SSAA ที่กล่าวมาข้างต้นเลย) จากนั้นเก็บข้อมูลนี้ไว้ให้กับ Tensor Core ในไดรเวอร์

เมื่อเกมนั้นถูกเปิดใช้งานในความละเอียดที่ทำไว้ Tensor Core จะเรียนรู้จากข้อมูลที่อยู่ในไดรเวอร์ แล้วจัดการทำ Supersampling ให้กับภาพในเกม อย่างไรก็ตาม DLSS ยังมีข้อบอกพร่องตรงที่ว่า ถ้า NVIDIA ไม่ได้เก็บข้อมูลมาไว้อย่างละเอียดมากพอ (เช่น หมุนกล้องไม่ครบทุกฉาก ทำให้บางฉากไม่ถูก sampling) และ/หรือ มีข้อมูลในความละเอียดที่เราเล่นน้อยเกินไป (เช่น NVIDIA เน้นทำใน 4K มากกว่า 1080p) ภาพและสีที่ได้จะเกิดความเพี้ยนไปจากเดิมได้ คาดว่าใน DLSS 2.0 จะมีการปรับปรุงเรื่องนี้มาแล้วล่ะ

ข้อสรุปในการใช้นะครับ หากการ์ดจอเราเเรงหน่อย อาจจะเลือกใช้ Anti-aliasing แบบ MSAA (สมัยนี้ไม่น่ามี SSAA ใช้กันแล้วล่ะ) ถ้าการ์ดจอรุ่นกลาง ๆ อาจเลือกเป็น SMAA ก็ได้ แต่ถ้าการ์ดจอระดับล่างแนะนำให้เลือก FXAA/MLAA จะดีกว่าครับ

ส่วนถ้าใครใช้การ์ดจอ RTX-series และเล่นเกมที่รองรับ DLSS ผมแนะนำว่าให้ลองเปิดดูนะ ทำออกมาได้สวยใช้ได้เลยทีเดียว

ขอขอบคุณข้อมูลจาก

https://store.hp.com/us/en/tech-takes/what-is-anti-aliasing

https://www.gamingscan.com/what-is-anti-aliasing/

https://www.sapphirenation.net/anti-aliasing-comparison-performance-quality