1 คะแนน โดย GN⁺ 2024-11-21 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

การเดินทางวันนี้: Anti-Aliasing

  • Anti-aliasing เป็นศิลปะรูปแบบหนึ่งที่พัฒนามาตลอดหลายทศวรรษ ผ่านคณิตศาสตร์ เทคนิคที่สร้างสรรค์ และนวัตกรรมที่ไม่หยุดนิ่ง
  • มีแนวทางหลากหลาย เช่น SSAA, SMAA, DLAA ซึ่งต่างก็พยายามบรรลุเป้าหมายเดียวกันด้วยวิธีที่แตกต่างกัน
  • บทความนี้จะพาไปดูว่าวิธีเหล่านี้ทำงานอย่างไร และแนะนำวิธีใหม่ในการแก้ปัญหาที่เรียกว่า analytical anti-aliasing

การตั้งค่า

  • เพื่อทำความเข้าใจอัลกอริทึม anti-aliasing มีการใช้แคนวาส WebGL เพื่อวาดวงกลมที่เคลื่อนไหวและนำมาใช้ในการอธิบาย
  • หากความละเอียดสูงเกินไปจนมองไม่เห็น aliasing สามารถลดความละเอียดลงเพื่อสังเกตได้

การวิเคราะห์เชิงเทคนิค

  • การเข้าใจโค้ด GPU ไม่ใช่สิ่งจำเป็น แต่ช่วยให้เข้าใจส่วนที่เป็นเชิงวิเคราะห์ได้มากขึ้น
  • วงกลมไม่ได้ถูกวาดขึ้นด้วยเรขาคณิตโดยตรง แต่ถูกวาดด้วย shader

SSAA

  • SSAA ย่อมาจาก super-sampling anti-aliasing เป็นวิธีที่เรนเดอร์ด้วยความละเอียดที่ใหญ่กว่าแล้วค่อย downsample
  • นำไปใช้งานได้ง่าย แต่ต้องใช้หน่วยความจำและการคำนวณสูง
  • ต้องมีการจัดวาง sample ที่เหมาะสม และต้องผสานเข้ากับ rendering pipeline อย่างลึกซึ้ง

MSAA

  • MSAA จะทำ super-sampling เฉพาะที่ silhouette ของโมเดล เรขาคณิตที่ซ้อนทับกัน และขอบของ texture เท่านั้น
  • ถูกนำไปใช้โดยฮาร์ดแวร์ และการรองรับขึ้นอยู่กับฮาร์ดแวร์แต่ละชนิด
  • ในบางสถานการณ์อาจไม่มีต้นทุนด้านประสิทธิภาพเลย

Post-process Anti-Aliasing

  • ในปี 2009 งานวิจัยของ Alexander Reshetov ทำให้ MLAA ถือกำเนิดขึ้น
  • FXAA เป็นอัลกอริทึมที่พัฒนาขึ้นโดยได้แรงบันดาลใจจาก MLAA โดยมีต้นทุนด้านประสิทธิภาพต่ำและนำไปใช้ได้ง่าย
  • มีประสิทธิภาพมากกว่าในฉากที่ซับซ้อน

Analytical Anti-Aliasing

  • Analytical anti-aliasing เป็นการแก้ปัญหาแบบย้อนกลับ โดยรู้รูปทรงที่ต้องการล่วงหน้า แล้ววาดพิกเซลที่ผ่านการ anti-aliasing แล้วลงบนหน้าจอ
  • ไม่ต้องใช้บัฟเฟอร์เพิ่มเติมหรือข้อกำหนดด้านฮาร์ดแวร์ และสามารถทำงานได้แม้บน WebGL 1.0 หรือ OpenGLES 2.0 พื้นฐาน
  • ทำให้ขอบของรูปทรงค่อย ๆ จางลงด้วยการคำนวณขนาดพิกเซล

การนำไปใช้

  • การใช้ signed distance field ช่วยให้ทราบระยะทางจากแต่ละจุดที่ sample ไปยังรูปทรงที่ต้องการ
  • วิธีคำนวณขนาดพิกเซลใช้ฟังก์ชัน dFdx, dFdy และ fwidth
  • การ blend ทำได้ด้วย alpha blending หรือ MSAA + Alpha to Coverage
  • สามารถใช้ linearstep แทน smoothstep เพื่อเพิ่มประสิทธิภาพได้

บทสรุป

  • Analytical anti-aliasing ให้ขอบที่เรียบเนียนโดยทำให้ขอบของรูปทรงค่อย ๆ จางลงอย่างแม่นยำ
  • มีวิธีการนำไปใช้ได้หลากหลาย และสามารถเลือกตามสมดุลระหว่างประสิทธิภาพกับความแม่นยำ

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

 
GN⁺ 2024-11-21
ความเห็นจาก Hacker News
  • บทความนี้วิเคราะห์การเขียนโปรแกรมกราฟิกผ่านตัวอย่าง WebGL และมีเนื้อหาลึกมาก
    • เคยใช้ MSAAx4 มาตลอด แต่กำลังพิจารณาเปลี่ยนไปใช้ FXAA/TAA และได้เรียนรู้แนวทางเชิงวิเคราะห์สำหรับองค์ประกอบ UI
    • แม้เนื้อหาเกี่ยวกับการเขียนโปรแกรมกราฟิกจะหายาก แต่รายการวิเคราะห์เฟรมเป็นแหล่งข้อมูลที่มีประโยชน์
    • เกมจำนวนมากไม่อธิบายความแตกต่างของตัวย่อในการตั้งค่า AA ทำให้ไม่ค่อยเป็นมิตรกับผู้ใช้
    • SDF (mSDF) เป็นเทคนิคคลาสสิกที่ดีเพียงพออยู่แล้ว
    • การแก้เซกเมนต์เส้นโค้งเบซิเยร์ในระดับพิกเซลใน Slug และ DirectWrite คือเทคโนโลยีของปัจจุบันหรืออนาคต
    • เพิ่งได้รู้จักผลงานของ Captain Disillusion เป็นครั้งแรก และแนะนำสำหรับคนที่สนใจเอฟเฟกต์วิดีโอ
    • เฟรมที่มีวงกลมและส่วนที่ขยายออกมาถือเป็นวิธีสื่อสารสาระได้อย่างยอดเยี่ยม
    • กราเดียนต์ที่นุ่มนวลนั้นน่าพึงพอใจมาก
    • เอนจินเรนเดอร์ 2D และ 3D มีเป้าหมายและกรณีการใช้งานที่แตกต่างกันโดยสิ้นเชิง
    • ในงาน 3D อาจไม่สำคัญ แต่ในงาน 2D มีเกณฑ์ของเทคนิค AA ที่ให้ความสำคัญกับความแม่นยำและอคติ
    • ภาพหน้าจอ NeoTokyo น่าประทับใจมาก และเคยสนุกกับการเปิดเซิร์ฟเวอร์ของม็อดนั้น
    • เคยอ่าน SSAA ผิดเป็น 'screen space anti-aliasing'