ปรับภาพเกมยังไงดี: Anti-Aliasing

มีความคิดมาสักพักแล้วว่าภาษาไทยไม่ค่อยมีบทความเรื่องการปรับภาพเกม บางคนเห็นไม่เข้าใจมีอะไรให้ปรับลากให้สุดไว้ก่อน แม้แต่ FOV

บทความชุดนี้ประกอบด้วย

  • Anti-Aliasing
  • VSync
  • FOV
  • อื่นๆ ที่ไม่ยาวพอ

Anti-Aliasing

ปกติภาษาไทยเราก็จะเรียกมันว่าลบรอยหยัก ก่อนอื่นอธิบายถึงทฤษฎีก่อนแล้วกันครับว่าทำไมเกมถึงมีรอยหยักตามขอบภาพ

สมมุติว่ามีเส้นตรงเส้นนึงที่เราจะแสดงผลบนจอ ทีนี้บนจอภาพเราน่าจะทราบดีว่าประกอบด้วยจุดพิกเซลต่างๆ

ถ้าเส้นนั้นมันตัดไม่เต็มจุดพิกเซลล่ะครับ… จะแสดงผลยังไง

Screenshot from 2016-02-07 17-44-04

วิธีที่คอมพิวเตอร์ใช้ตัดสินใจเรียกว่า Sampling ครับ วิธีการคือใน 1 pixel นั้นจะกำหนด 1 ตำแหน่งขึ้นมาเป็นตำแหน่งแทนพิกเซลนั้นๆ ถ้าจุดนั้นมีสีอะไร ก็ให้ทั้งพิกเซลนั้นมีสีนั้นไปด้วย

ก่อน
ก่อน

หลัง
หลัง

มองแบบนี้ก็เริ่มเห็นแล้วนะครับว่า เส้นมันไม่เป็นเส้นแล้ว เราจะแก้ไขปัญหาอย่างไรดี..?

SSAA

วิธีแรกง่ายมากครับ SSAA = Supersampling AA หรือบ้างก็เรียก FSAA = Full screen AA หลักการก็คือ render เกมให้ใหญ่กว่าจอของเรา แล้วย่อภาพลงมาให้พอดีจอ ทำให้ภาพที่ได้จะมีความคมชัดมาก

ภาพประกอบ: PC Gamer

(ถ้าเล่นเกมบนจอ 4k แล้วเปิด 4x SSAA นี่แปลว่าเกมมันทำงานในความละเอียด 8k อยู่นะครับ!)

MSAA

ปัญหาคือ SSAA โคตรกินเครื่องเลยครับ ก็เลยมีคนคิดค้นวิธีอื่นๆ ขึ้นมาอีก

MSAA (Multisampled AA) เป็นวิธีคล้ายๆ กับ SSAA แต่ shader จะรันในความละเอียดเท่ากับความละเอียดแสดงผล ทำให้กินเครื่องน้อยลง

ภาพประกอบ: The Danger Zone

FXAA/MLAA

Fast Approximate AA เป็นวิธีฉลาดแกมโกงครับ โดยเอาภาพที่ render เสร็จแล้วมาหาขอบต่างๆ แล้วก็ blur ทิ้ง! ง่ายมั้ยล่ะ…

ข้อเสียคือเบลอแบบนี้ก็จะทำให้ texture เบลอไปด้วย

Source: Hardforum
ภาพประกอบ: Hardforum

MFAA

ใน driver NVIDIA จะมีให้เปิด Multiframe Anti-Aliasing ครับ ซึ่งหลักการคือจะใช้จุดอ้างอิงหลายๆ จุดในเฟรมแล้วก็เฉลี่ยค่าสีกัน ปัญหาก็คือวิธีนี้มันก็คล้ายๆ SSAA ใช่มั้ยล่ะครับแล้วมันก็จะช้า

วิธีแก้ของ MFAA คือการใช้หลายๆ เฟรมเข้ามาอ้างอิงแทนครับ เฟรมแรกใช้จุดนึงอ้างอิงสี เฟรมถัดมาเปลี่ยนจุดแล้วเฉลี่ยไป ฉะนั้นก็จะทำให้ไม่กินเครื่อง

ข้อเสียของ MFAA คือถ้า framerate ไม่ถึง 40 ใช้ไม่ได้นะครับ และถ้าภาพเป็นภาพเคลื่อนไหวก็จะทำให้เกิด ghosting หรืออาการภาพค้างจางๆ

ภาพประกอบ: PCPer
ภาพประกอบ: PCPer

SMAA

Enhanced Subpixel Morphological หรือ SMAA เป็นเทคนิคใหม่จาก Crytek ครับ ปัจจุบันยังไม่เห็นเกมไหนรองรับ ถ้าจะใช้ต้องใช้ SweetFX หรือ injectSMAA

หลักการทำงานคล้ายๆ กับ FXAA คือเบลอขอบภาพ แต่วิธีการหาขอบจะใช้วิธีที่ใช้ตรวจการทำงานของ shader ใน MSAA ฉะนั้นแล้วจะทำให้ภาพมีคมชัด ไม่เบลอ texture มาก และกินเครื่องไม่มากไปกว่า FXAA เท่าไร

ภาพประกอบ: RadeonPro
ภาพประกอบ: RadeonPro

แบบไหนดี?

ปกติแล้วเกมจะมีให้เลือกปรับชนิดได้ 1-3 แบบนะครับ แล้วก็อาจจะมีตัวคูณไปอีก ตรงนี้ก็ปรับแล้วแต่ความชอบเลย แต่โดยทั่วไปแล้วนะครับ

  1. SSAA คมสุด กินเครื่องสุด
  2. MSAA
  3. SMAA ภาพดี กินเครื่องไม่เยอะ
  4. FXAA

อาจจะมีตัวอื่นๆ นอกเหนือจากนี้ อันนี้ลองหาข้อมูลเพิ่มเติมดูครับเพราะจะยกมาเฉพาะตัวที่สำคัญๆ เท่านั้น

Source

เน็ตไม่ห่วย เราท์เตอร์ห่วย

เวลาเล่นดอทมีปัญหาพื้นฐานที่ผมรำคาญมาก

คือ ping มันวิ่งตั้งแต่ 80-200 บางทีจะตีกันอยู่ ping 500 พอเดินออกมาหาย ที่แย่กว่าคือตอนจะตีกัน ping อย่างดี พอจะถอย dc lag ไปเลย ทีมก็ ping รัวๆ เฮ้ยยืนเฉยๆ ทำไร ส่วนผมน่ะหรอ กลับมาอีกทีเห็นแต่ ping รัวๆ กับศัตรูไล่ดันข้ามศพผมมาถึงหน้าป้อมแล้ว

ผมก็ลองหลายๆ วิธีดู เริ่มจากง่ายๆ เสียบแลนเล่น ทีแรกเหมือนจะดี แต่เปล่าเลย placebo ชัดๆ สุดท้ายก็อาการเดิม

ถัดมา ผมมี Cisco-Linksys WAG320N อยู่ตัวนึงตั้งแต่สมัยบ้านผมใช้ xDSL ก็เลยเอามาต่อแล้ว bridge จากโมเด็มทรู (Cisco) เข้าตัวนี้ ให้ตัวนี้ทำ NAT

แรกๆ นี่อย่างลื่นครับ ping 80-100 สนุกเลย

จนกระทั่งวันนึง ping 500 ทั้งเกม ผมบ่นใน team chat จนทีมด่ามันก็ไม่หาย lag จนกระทั่งผม dc lag ผมหันไปดูแล้วพบว่า…. router ดับ!!! คือเคเบิลโมเด็มยังติดอยู่ แต่ว่า WAG320N ดับชนิดที่ว่าเหมือนชักปลั๊กออก (แต่ไม่มีใครไปแตะอะไรมัน)

nrsAU[1]

ผมเล่าให้พ่อฟัง พ่อคิดว่าน่าจะเป็นเพราะสัญญาณเน็ตมากกว่า (บ้านผมอยู่เกินระยะเดินสายฟรีและต้องใช้สายอีกชนิดเดินเข้า)

แต่ผมไม่เชื่อว่ามันจะเป็นที่เน็ตจริงๆ ก็เลยคิดว่าจะเก็บตังซื้อ Ubiquiti EdgeRouter มาใช้ (สรรพคุณมันคือ router ที่เป็นแค่ router จริงๆ ครับ ต่อเน็ตไม่ได้ ไม่มีไวไฟ และไม่มีสวิทช์ด้วย คือแต่ละช่องคือ network แยกกันอิสระไม่เกี่ยวกันเลย จะตั้งให้มันเป็น switch ก็ได้แต่ performance ก็จะต่ำเพราะมันใช้ software ทำ)

พ่อถามว่าบ้าป่าว จะเล่นเกมต้องซื้อ router ตัวหลายพัน หันไปหันมาเจอกับ PC เก่าผมที่รัน whsgroup.ath.cx ก็เลยเอามาทำ router ซะเลยละกัน


สำหรับ Config ที่ผมใช้ก็ไม่มีอะไรมากครับ เป็น Ubuntu 12.04 ลง EBox (ปกติผมไม่อยากลง Ubuntu นะ แต่จะใช้ EBox เลยต้องลง) ที่เลือก Ebox เพราะอยากได้ระบบแชร์ด้วยครับ (ใช้เป็น NAS นั่นแหละ) จริงๆ ก็เซตมือก็ได้แต่ถ้ามี GUI ให้ครบเลยก็จบ และอีกเหตุผลนึงคือมันอยู่บน Ubuntu ปกติที่ผมจะลงอะไรเล่นก็ได้ ถ้าเป็นดิสโตรแบบที่รันแต่ firewall จะลงอะไรก็ลำบาก (เอาเข้าจริงก็แทบไม่ได้ลงอะไรเลยอยู่ดี)

ส่วนการต่อก็จะต่อเป็น Cable modem > server > WAG320N (ใช้ปล่อย Wifi)

Capture

หลังลงเซิร์ฟเวอร์เสร็จแล้วพบความเปลี่ยนแปลงอย่างมากเลยครับ ping dota ผมจาก 80-100 กลายเป็น 80 ทั้งเกมไม่มีกระตุก!! ผมนี่เหลือเชื่อเลย

แต่ก็มีอยู่วันนึงนะครับที่ dota มัน ping 80-500 อยู่ ผมก็งงว่า อ้าว ตกลงมันได้ผลมั้ยเนี่ย ซึ่งตรงนี้ก็เป็นข้อดีของการที่ทุกอย่างผ่าน server คือเราก็แอบดักฟังได้ ผมเลยใช้โปรแกรม iftop ดักเลยครับ

Capture

ด้วยพลังแห่ง iftop ก็จะมองเห็นได้เลยครับว่ามีการต่อไปที่ ip ไหนอยู่บ้างตอนนี้ ใช้ bandwidth เท่าไร อย่างตอนที่กระตุกครั้งนั้นผมเปิดดูแล้วก็พบว่าไม่ใช่อะไร น้องผมดูซีรีส์อยู่นั่นเอง….

>my sister is watching series

>kill your sister

— Teammate, 2015


ปล. พอมี server แล้วเลยลองปรับ wifi ที่บ้านให้ใช้ WPA2-Enterprise ด้วยครับ โดนทั้งบ้านบ่นเลยเพราะว่ามันต่อยากมาก ใน Android มี dropdown 3 ช่อง input 3 ช่องให้กรอก (ซึ่งไม่ต้องกรอกทั้งหมดก็ได้) ถ้าไม่เคยใช้นี่งงแน่นอน