ไขข้อสงสัย Anti-Aliasing ลูกเล่นลบรอยหยักภายในเกม

head

คงจะไม่เกินเลยไปถ้าจะกล่าวว่า Anti-Aliasing (AA)เป็นลูกเล่นด้านกราฟิกที่เกมเมอร์คุ้นเคยกันมากที่สุดและอยู่มานานมากที่สุด โดยทั่วไปแล้ว Anti-Aliasing หมายความว่ากระบวนการลดรอยหยักที่เกิดขึ้นบริเวณขอบของวัตถุที่ประกอบขึ้นมาจากพิกเซลเม็ดเล็กๆ ซึ่งสำหรับนักเล่นเกมพีซีแล้วก็หมายถึงภาพที่เราได้รับการจากเล่นเกมนั้นจะสวยงามและน่าดึงดูดมากกว่าเดิม

ถึงแม้อาจจะฟังดูเข้าใจง่าย แต่เอาเข้าจริงแล้วกลับไม่ได้ง่ายดายอย่างนั้น เพราะในช่วง 4-5 ปีที่ผ่านมา ลูกเล่น AA ได้รับการพัฒนาไปมาก อีกทั้งผู้ผลิตการ์ดกราฟิกแต่ละค่ายต่างพัฒนา AA เฉพาะตัวออกมาซึ่งสร้างความปวดหัวให้กับผู้ใช้งานเพิ่มขึ้นไปอีก ดังนั้นสำหรับบทความนี้ผมจะขออาสาพาเพื่อนๆ ไปไขข้อสงสัยของลูกเล่น AA แต่ละแบบกันอย่างคร่าวๆ เพราะเนื้อที่มีจำกัดครับ ส่วนใครที่ทราบดีอยู่แล้วก็ถือเป็นการทวนความรู้ไปก็แล้วกันนะ

AA 101 พื้นฐานที่ควรทราบ

ภาพ 1: แสดงให้เห็นผลของการใช้เอ็ฟเฟ็ค Anti-Aliasing
ภาพ 1: แสดงให้เห็นผลของการใช้เอ็ฟเฟ็ค Anti-Aliasing

โดยทั่วไปแล้ว ภาพที่ปรากฏขึ้นบนหน้าจอนั้นประกอบด้วยเม็ดพิกเซลขนาดเล็กหลายๆ ชิ้นอยู่รวมกัน ซึ่งเจ้ารอยหยักที่เกิดขึ้นนี่เองที่เป็นผลพลอยได้ (ที่ไม่ค่อยจะดีนัก) ของการใช้พิกเซลเป็นพื้นฐานการแสดงผล โดยจากภาพ 1 ที่เป็นรูปเส้นเฉียงอยู่บนพื้นหลังสีขาวนั้นจะเห็นได้อย่างชัดเจนที่สุด โดยเฉพาะเมื่อซูมเข้าไปใกล้ๆ ซึ่งนี่เองเมื่อเกิดขึ้นกับกราฟิกภายในเกมนั้นจะดูน่าเกลียดเป็นอย่างมาก ยิ่งถ้าใครเล่นด้วยความละเอียดหน้าจอที่ต่ำแล้วจะยิ่งเห็นได้ชัดเจนมากขึ้นเพราะมีจำนวนเม็ดพิกเซลน้อยลง ฉะนั้นหน้าที่หลักขอ ง AA ก็คือการทำให้รอยหยักนี้ดูนุ่มนวลมากขึ้นด้วยการผสานสีที่อยู่บริเวณขอบของวัตถุกับสีของพื้นหลังเพื่อให้ทั้งสองอย่างดูกลืนกัน ปัจจุบันประเภทของ AA ที่รู้จักมีอยู่สองแบบด้วยกันคือ Supersampling และ Multisampling

Supersampling คุณภาพที่ต้องแลกมาด้วยราคา

ประเภทแรกของ AA ที่จะขอกล่าวถึงคือ Supersampling Anti-Aliasing (SSAA) ซึ่งเป็น AA ที่ให้คุณภาพของภาพดีที่สุด และเป็นวิธีที่เก่าแก่ที่สุดที่ยังคงใช้กันมาจนถึงปัจจุบัน วิธีการทำงานคือการ์ดกราฟิกจะทำการเรนเดอร์เฟรมภาพแต่ละเฟรมให้ใหญ่กว่าความละเอียดหน้าจอที่ตั้งไว้ก่อน จากนั้นค่อยลดความละเอียดลงให้เหลือเพียงที่เราตั้งไว้ ผลที่ได้คือขอบวัตถุรวมทั้งพื้นผิวจะมีความนุ่มนวลมากขึ้น ยกตัวอย่างเช่น สมมติความละเอียดหน้าจอที่ตั้งไว้คือ 1280 x 800 แล้วเราเลือกทำ SSAA ที่ 4x หรือสี่เท่า การ์ดกราฟิกจะพรีเรนเดอร์เฟรมแต่ละเฟรมที่ความละเอียด 5120 x 3200 ไว้ก่อนเพื่อเก็บข้อมูลสีภายในเม็ดพิกเซลสี่จุดเพื่อรวมให้เหลือเพียงจุดเดียว

ถึงแม้ภาพที่ได้จากวิธีนี้จะดูดีเพียงใดก็ตาม SSAA กินกำลังกราฟิกเป็นอย่างมาก เพราะต้องพรีเรนเดอร์ภาพที่ความละเอียดสูงเกินหน้าจอก่อนในทุกๆ เฟรม เพราะฉะนั้นจึงไม่แปลกใจเลยที่เฟรมเรทที่ได้หลังจากเปิดลูกเล่นนี้จะลดน้อยลงอย่างมาก

Multisampling ความสวยงามที่ลงตัว?

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

ในปัจจุบันเทคนิค MSAA เป็นที่ยอมรับมากที่สุด ดังจะเห็นได้จาก NVIDIA ได้ตัด SSAA ทิ้งไปจากตัวเลือกในไดรเวอร์ของตนแล้ว และ AMD เองรองรับ SSAA เฉพาะในเกมที่ใช้ DirectX 9 เท่านั้น แต่อย่างไรก็ตาม MSAA ก็ไม่สมบูรณ์แบบเสียทีเดียว เพราะยังมีจุดด้อยตรงที่ไม่ได้เพิ่มความสวยงามให้กับพื้นผิวเลย ซึ่งหมายความว่าพื้นผิวที่มีรอยหยัก โดยเฉพาะพื้นผิวโปร่งแสง เช่นประตูลูกกรงถี่ๆ ในคุก หรือตาข่าย ก็จะยังคงมีรอยหยักอย่างนั้นอยู่ต่อไป นี่เองเป็นเหตุผลที่ทำให้ผู้พัฒนาการ์ดกราฟิกแต่ละค่ายสร้าง AA เฉพาะของตนขึ้นมา

การลดรอยหยักบนพื้นผิวโปร่งแสง

เนื่องจาก MSAA ไม่ได้ทำการลดรอยหยักบนพื้นผิวโปร่งแสงไปด้วย และ SSAA นั้นก็กินกำลังเครื่องมากเกิน จึงได้มีการคิดค้นกรรมวิธีใหม่เพื่อรองรับความต้องการนี้โดยเฉพาะจากทั้งสองค่ายผู้ผลิตการ์ดกราฟิก โดย NVIDIA เรียกคุณสมบัติตรงนี้ว่า Transparency Adaptive Anti-Aliasing (TAAA) ซึ่งแบ่งได้เป็นสองแบบคือ ชนิดที่ใช้กระบวนการ Multisampling ในการลดรอยหยักบนวัตถุโปร่งแสง หรือ TrMSAA และชนิดที่ใช้ SuperSampling หรือ TrSSAA โดยภายใน Control Panel ของไดรเวอร์จะมีให้เลือกว่าจะลดรอยหยักบนพื้นผิวโปร่งแสงโดยใช้ Multisampling เช่นเดียวกับส่วนที่เหลือในฉาก หรือจะใช้ Supersampling 2x, 4x หรือ 8x กับพื้นผิวโปร่งแสง ในขณะที่ส่วนอื่นที่เหลือในฉากใช้เทคนิค Multisampling ไปตามปกติ สำหรับการ์ดกราฟิก Radeon นั้นจะเรียกเทคนิคนี้ว่า Adaptive Anti-Aliasing (AAA) ซึ่งจะต่างจากของคู่แข่งตรงที่จะจำกัดการใช้งานเฉพาะ Supersampling เท่านั้น

เหนือขึ้นไปอีกขั้นกับวิธีการ Coverage Sampling

ภาพนี้แสดงให้เห็นวิธีการเก็บข้อมูลสีแบบสุ่มโดยรอบด้วยวิธีการ Coverage Sampling
ภาพนี้แสดงให้เห็นวิธีการเก็บข้อมูลสีแบบสุ่มโดยรอบด้วยวิธีการ Coverage Sampling

นับตั้งแต่ Geforce ซีรีย์ 8 เป็นต้นมา NVIDIA ได้แนะนำขั้นตอนการทำ AA แบบใหม่ที่เรียกว่า Coverage Sampling Anti-Aliasing (CSAA) ซึ่งมีหลักการทำงานเหมือนกับ MSAA ดั้งเดิมเด๊ะ เพียงแต่มีการเก็บข้อมูลสีแบบสุ่มรอบเม็ดพิกเซลเพิ่มขึ้นจากเดิมเท่านั้น ส่งผลให้การ์ดกราฟิกสามารถเกลี่ยสีได้เนียนมากกว่าเดิมและรอบหยักดูนวลขึ้น ในขณะที่ไม่กินกำลังเครื่องมากเกินไป สำหรับฟาก Radeon นั้นก็มีเทคนิคนี้กับเขาด้วยเหมือนกันแต่เปลี่ยนชื่อเป็น Enhanced Quality Anti-Aliasing (EQAA) แต่โชคร้ายหน่อยที่มีแต่การ์ด Radeon 6900 เท่านั้นที่รองรับ แต่ฟาก NVIDIA นั้น CSAA รองรับตั้งแต่รุ่น Geforce 8000 ไล่มาจนถึงซีรีย์ 500 ในปัจจุบันครับ

อย่างไรก็ดี สำหรับ NVIDIA แล้ว ขั้นตอนการเปิดใช้งานอาจดูยุ่งยากไปนิด เพราะตั้งชื่อชวนสับสนมากเหลือเกิน โดยทั่วไปแล้วโหมดใดที่มีตัวเลขอย่างเดียวตามด้วย x นั้นควรหมายความถึงระดับการเปิดใช้งาน Multisampling อย่างเดียว และโหมดไหนที่มี Q ต่อท้ายนั้นควรจะหมายถึงมีการใช้ Coverage Sampling เข้าร่วมด้วย แต่เอาเข้าจริงกลับไม่เป็นแบบนั้น ยกตัวอย่างในโหมด 8xQ นั้นจะหมายถึงมีการเปิดใช้งาน Multisampling 8x เพียวๆ ไม่มี Coverage Sampling เข้าร่วมด้วย แต่พอในโหมด 16xQ กลับกลายเป็นการเปิดใช้งาน Multisampling 8x ร่วมกับการเปิด Coverage Sampling 8 จุด!? แต่กับการ์ด Radeon ไม่มีปัญหาแบบนี้ โดยโหมดใดที่มี EQ ต่อท้ายนั้นจะหมายถึงมีการใช้เทคนิค Coverage Sampling ร่วมด้วย เช่น 4xEQ นั้นจะหมายถึงมีการใช้ Multisampling 4x ร่วมกับ Coverage Sampling 4 จุด ง่ายๆ ตรงๆ แบบนั้นเลย ฉะนั้นเพื่อให้ไม่เป็นการสับสนในการใช้งาน ผมแนะนำให้ดูตาราง 1 ประกอบไปด้วยนะครับ แล้วจะเห็นว่าค่ายเขียวนั้นตั้งชื่อโหมดชวนปวดหัวจริงๆ – -‘

ตาราง 1: แสดงให้เห็นชื่อโหมด AA ที่แต่ละค่ายใช้เรียกและความหมาย จะเห็นได้ว่า NVIDA ตั้งชื่อได้แทบไม่ตรงกับการนำไปใช้จริงๆ เลย แนะนำให้ตัดแปะตารางนี้ไว้ตรงเคสข้างคอมไว้ใช้อ้างอิงได้เลยครับ
ตาราง 1: แสดงให้เห็นชื่อโหมด AA ที่แต่ละค่ายใช้เรียกและความหมาย จะเห็นได้ว่า NVIDA ตั้งชื่อได้แทบไม่ตรงกับการนำไปใช้จริงๆ เลย แนะนำให้ตัดแปะตารางนี้ไว้ตรงเคสข้างคอมไว้ใช้อ้างอิงได้เลยครับ

ถึงเวลาเปิดใช้งานจริงแล้ว

วิธีการเปิดใช้งานสำหรับการ์ดของ NVIDIA นั้นก็ไม่ยากเพียงแต่เข้าไปที่ NVIDIA Control Panel ด้วยการคลิ้กขวาที่หน้าจอ จากนั้นเลือกที่ Manage 3D Setting ทีนี้ในหน้าต่างด้านขวามือจะเห็นว่ามีตัวเลือกที่เกี่ยวข้องกับ AA สามตัวด้วยกันคือ Antialiasing-Mode, Antialiasing-Setting และ Antialiasing-Transparency ซึ่งในค่าเริ่มต้นนั้นสองตัวแรกจะถูกตั้งไว้ที่ Application-controlled ซึ่งหมายถึงใช้การตั้งค่าภายในเกม และตัวหลังตั้งไว้ที่ Off ซึ่งก็คือปิดการใช้งาน

ตัวอย่างหน้าจอปรับแต่ง AA ของ NVIDIA
ตัวอย่างหน้าจอปรับแต่ง AA ของ NVIDIA

เริ่มจาก Antialiasing-Mode นั้นจะเห็นว่าตัวเลือกเปิดการใช้งานจะแบ่งเป็นสองประเภท เริ่มจาก Override any application setting ซึ่งมีหน้าที่บังคับใช้ Coverage Sampling กับทุกเกมที่ไม่มีตัวเลือกดังกล่าว และต่อมาที่ตัวเลือก Enhance the application setting ซึ่งหมายความถึงการเปิดลูกเล่น Coverage Sampling ให้กับเกมที่มีตัวเลือกเปิดใช้งาน AA ภายในอยู่แล้ว แต่ไม่รองรับโหมด Override ทว่ามีข้อจำกัดตรงโหมดที่รองรับนั้นต้องมีค่า MSAA เท่ากับค่า AA ที่เราตั้งไว้ภายในเกม ยกตัวอย่างเช่น ถ้าเราตั้งค่า AA ภายในเกมไว้ 4x เราก็ต้องเลือกโหมดที่ประกอบไปด้วยค่า MSAA 4x ซึ่งก็คือ 8x (4x MSAA + 4 Coverage Samples) และ 16x (4x MSAA + 12 Coverage Samples) และจะใช้ไม่ได้กับโหมด 8xQ เพราะมีการเรียกใช้งาน MSAA อย่างเดียวที่ 8x

สุดท้ายที่ Antialiasing-Transparency หรือ TAAA โดยจะเห็นว่ามีตัวเลือกหลักๆ 3 แบบคือ ปิดการใช้งานไปเลย ใช้แบบ Multisampling ระดับเดียวกับ MSAA ในส่วนที่เหลือของฉาก และใช้แบบ Supersampling ในระดับ 2x, 4x และ 8x ครับ

ตัวอย่างหน้าจอปรับแต่ง AA ของการ์ด Radeon
ตัวอย่างหน้าจอปรับแต่ง AA ของการ์ด Radeon

น่ายินดีที่ว่าการตั้งค่า AA สำหรับการ์ด Radeon นั้นมีความสับสนน้อยกว่ามาก โดยเริ่มจากเปิดหน้าจอ Catalyst Control Center ขึ้นมาโดยคลิ้กขวาที่หน้าจอเดสก์ท้อป จากนั้นเลือกเมนู Preferences เพื่อเปิดตัวเลือก advanced view ถัดมาก็ให้เลือกที่ 3D Application Settings ทางซ้ายมือของจอ แล้วจะเห็นตัวเลือกที่เกี่ยวกับ AA เกือบทั้งหมดโผล่ขึ้นมาทางขวามือ ซึ่งอาจต่างไปตามรุ่นการ์ดกราฟิกที่ใช้ แต่เพื่อเป็นการประหยัดเนื้อที่ผมจะขออิงกับ Radeon 6900 นะครับ โดยจะเห็นว่าในส่วนของ Mode นั้นจะมีตัวเลือกสามชนิด เริ่มจาก Use application settings ซึ่งจะเป็นการปล่อยให้เกมเป็นตัวกำหนดระดับ AA ส่วน Enhance application setting จะเป็นการเพิ่ม Coverage Sampling (EQAA) เข้าไปในเกมให้เท่ากับค่าที่ตั้งไว้ ยกตัวอย่างเช่น ถ้าตั้ง AA ในเกมที่ 2x ตัวเลือกนี้จะไปเพิ่ม Coverage Sampling 2 จุด และสุดท้ายที่ Override application setting จะเป็นการบังคับใช้ AA ตามแต่ที่เราเลือกในสไลด์บาร์ด้านล่าง

และสำหรับผู้ที่ใช้งานไดรเวอร์ Catalyst ตั้งแต่ 11.2 ขึ้นไปก็จะเห็นตัวเลือก Morphological Filtering หรือ MLAA ซึ่งเป็นเทคนิคใหม่สามารถใช้ได้กับ Radeon 6800 ขึ้นไปเท่านั้น โดยจะเป็นการเล่นกับเอ็ฟเฟ็ค Post-processing เพื่อให้ขอบและพื้นผิววัตถุดูเนียน แต่อาจมีปัญหากับการแสดงผลตัวอักษรนะครับ

ทีนี้ผมอยากให้ท่านผู้อ่านเลื่อนหน้าจอลงมาล่างสุดแล้วจะเห็นว่ามีตัวเลือก AA ซ่อนเอาไว้ โดยจะมีตัวเลือกสามตัวด้วยกันคือ Multi-Sample AA ซึ่งเป็นการเลือกใช้งาน MSAA ธรรมดา ถัดมาคือ Adaptive Multi-Sample AA ซึ่งก็คือเป็นการเลือกใช้งาน AA ให้กับวัตถุโปร่งแสงด้วย สุดท้ายคือ Super-Sample AA ซึ่งก็คือเลือกใช้งาน SSAA นั่นเอง แต่จะใช้ได้กับเกมที่เป็น DirectX 9 เท่านั้น

ส่งท้าย

เป็นอย่างไรบ้างครับกับ AA จะเห็นได้ว่ามีตัวเลือกมากมายเหลือเกิน ความจริงแล้วยังมีรายละเอียดปลีกย่อยอีกมากที่ยังไม่ได้กล่าวถึง สำหรับวันนี้ขอจบดื้อๆ เพียงเท่านี้ก็แล้วกันครับ สวัสดี

Advertisements

13 thoughts on “ไขข้อสงสัย Anti-Aliasing ลูกเล่นลบรอยหยักภายในเกม

  1. adaptive multisampling มีผลกับแค่ลูกกรงใช่ไหมครับแล้วทำให้พื้นผิวของตัวละครคมขึ้นหรือสวยขึ้นกว่า multisampling หรือป่าวครับ

    1. ประมาณนั้นเลยครับ แต่เนื่องจากบทความนี้มีอายุได้สองปีกว่าแล้ว ปัจจุบันจึงเห็นเทคนิค AA ใหม่ๆ ที่อาจให้คุณภาพดีกว่า แต่โดยทั่วไปเทคนิคที่เกมส่วนใหญ่ใช้กันอยู่ก็คือ MSAA นั่นล่ะครับ แนะนำว่าถ้าไม่อยากปวดหัวกับสารพัดตัวเลือกก็ตั้งค่าตามที่มีอยู่ใน graphic setting ของแต่ละเกมนั่นล่ะครับง่ายสุดแล้ว

      1. anti aliasing mode ผมปรับเป็น enhance จะมีผลดีขึ้นไหมครับ

      2. เท่าที่หาข้อมูลดูพบว่ามันจะช่วยให้ขอบของวัตถุดูนวลขึ้นเล็กน้อย แต่ถ้าเฟรมเรทตกลงมามากก็แนะนำให้ปิดดีกว่าครับ

      3. สรุปต้องปรับอะไรไหม หรือแค่ในเกมดีสุดและครับ

  2. พี่ครับขอถามอีกอย่างได่ไหมครับ filter เป้น standard กับ edge-detect ต่างกันไหมครับ

    1. edge-detect จะมีกระบวนการทำงานที่ซับซ้อนกว่า กินกำลังการ์ดมากกว่า แต่เอาเข้าจริงๆ ไม่ได้ให้ผลต่างกันเท่าไรครับ 😀

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out /  เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out /  เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out /  เปลี่ยนแปลง )

Connecting to %s