การแรสเตอร์และการประมวลผลกราฟิก
การแรสเตอร์ (Rasterization) คือกระบวนการแปลงรูปทรงเรขาคณิตพื้นฐาน เช่น รูปสามเหลี่ยม ให้กลายเป็นพิกเซลที่ครอบคลุมบนหน้าจอ และเป็นขั้นตอนสำคัญของการประมวลผลกราฟิกที่เปลี่ยนฉาก 3 มิติให้เป็นภาพ 2 มิติ
Definition
การแรสเตอร์คือกระบวนการกำหนดว่าพิกเซลใดที่รูปทรงเรขาคณิตพื้นฐานที่ฉายภาพครอบคลุม และการประมาณค่าปริมาณต่อจุดยอด เช่น ความลึก สี และพิกัดพื้นผิว (texture coordinates) ทั่วทั้งพิกเซลเหล่านั้น
Scope
หัวข้อนี้ครอบคลุมขั้นตอนของการประมวลผลการเรนเดอร์มาตรฐาน ได้แก่ การแปลงจุดยอด (vertex transformation), การตัด (clipping), การฉายภาพ (projection), การประกอบรูปทรงพื้นฐาน (primitive assembly), การแปลงสแกน (scan conversion) และการประมวลผลแฟรกเมนต์ (fragment processing) พร้อมด้วยการใช้บัฟเฟอร์ความลึก (depth buffering) สำหรับการมองเห็น, การประมาณค่าแบบเปอร์สเปคทีฟที่ถูกต้องของแอตทริบิวต์จุดยอด และการลดรอยหยัก (antialiasing) ของตัวอย่างที่ได้
Core questions
- พิกัด 3 มิติถูกแปลงเป็นตำแหน่งหน้าจอ 2 มิติได้อย่างไร?
- รูปสามเหลี่ยมที่ฉายภาพครอบคลุมพิกเซลใดบ้าง?
- จะแก้ไขการมองเห็นได้อย่างไรเมื่อรูปทรงพื้นฐานทับซ้อนกัน?
- จะลดสิ่งแปลกปลอมที่เกิดจากรอยหยัก (aliasing artifacts) ตามขอบได้อย่างไร?
Key concepts
- ขั้นตอนจุดยอดและแฟรกเมนต์
- การตัดและการฉายภาพ
- การแปลงสแกน
- การทดสอบความลึกด้วย Z-buffer
- การประมาณค่าแบบเปอร์สเปคทีฟที่ถูกต้อง
- การลดรอยหยัก
Key theories
- การประมวลผลแบบ transform-and-rasterize
- รูปทรงเรขาคณิตจะผ่านลำดับการแปลงพิกัดที่กำหนดไว้จาก object space ไปยัง screen space หลังจากนั้นรูปทรงพื้นฐานจะถูกแปลงสแกนเป็นแฟรกเมนต์ ซึ่งให้โครงสร้างที่สามารถแมปกับฮาร์ดแวร์แบบขนานได้อย่างมีประสิทธิภาพ
- การใช้บัฟเฟอร์ความลึกสำหรับการมองเห็น
- Z-buffer จะเก็บความลึกที่ใกล้ที่สุดที่เห็นมาแล้วในแต่ละพิกเซล และทิ้งแฟรกเมนต์ที่อยู่ด้านหลัง ซึ่งช่วยแก้ไขการซ่อนพื้นผิวที่ซ่อนอยู่ทีละน้อยโดยไม่ต้องจัดเรียงรูปทรงเรขาคณิต
Clinical relevance
การประมวลผลการแรสเตอร์เป็นรากฐานของกราฟิกแบบเรียลไทม์เกือบทั้งหมด ซึ่งขับเคลื่อนวิดีโอเกม การจัดองค์ประกอบส่วนต่อประสานผู้ใช้ (user-interface compositing) โปรแกรมดู CAD และกราฟิก 3 มิติแบบโต้ตอบที่พบในเบราว์เซอร์และอุปกรณ์เคลื่อนที่
History
วิธีการ Z-buffer และ scan-conversion ในช่วงต้นทศวรรษ 1970 ได้ถูกกำหนดเป็น fixed-function pipeline ของฮาร์ดแวร์กราฟิกยุคแรก จากนั้นจึงถูกพัฒนาให้เป็น programmable shader pipelines ของ GPU สมัยใหม่
Key figures
- Edwin Catmull
- Bui Tuong Phong
Related topics
Seminal works
- catmull1974
- hughes2013
Frequently asked questions
- เหตุใดการแรสเตอร์จึงรวดเร็วมาก?
- รูปสามเหลี่ยมแต่ละรูปจะถูกประมวลผลอย่างอิสระ และแต่ละพิกเซลจะถูกเติมด้วยการคำนวณแบบเพิ่มขึ้นอย่างง่าย ซึ่งแมปโดยตรงกับสถาปัตยกรรมแบบขนานขนาดใหญ่ของฮาร์ดแวร์กราฟิก
- Z-buffer มีไว้เพื่ออะไร?
- Z-buffer จะบันทึกว่าพื้นผิวที่ใกล้ที่สุดที่วาดไปแล้วอยู่ห่างออกไปเท่าใดในแต่ละพิกเซล เพื่อให้พื้นผิวที่ใกล้กว่าเขียนทับพื้นผิวที่ไกลกว่า และส่วนที่ซ่อนอยู่ของฉากจะถูกลบออกโดยอัตโนมัติ