Rasterization (การแรสเตอร์) คือกระบวนการแปลงคำอธิบายเวกเตอร์ของพริมิทีฟสามมิติ (สามเหลี่ยม เส้น จุด) ให้เป็นชุดของพิกเซล (แฟรกเมนต์) เพื่อแสดงบนหน้าจอ ตามข้อมูลจาก Khronos Group, 2025 การแรสเตอร์เป็นขั้นตอนอัตโนมัติ (ไม่สามารถเขียนโปรแกรมได้) ของไปป์ไลน์กราฟิก ซึ่งอยู่ระหว่าง Vertex Shader และ Fragment Shader Rasterization กำหนดว่าพิกเซลหน้าจอใดเป็นของสามเหลี่ยมใด และคำนวณแอททริบิวต์แบบอินเทอร์โพเลตสำหรับแต่ละแฟรกเมนต์
ประเด็นสำคัญ
Rasterization เป็นขั้นตอนของไปป์ไลน์กราฟิกที่แปลงพริมิทีฟทางเรขาคณิต (สามเหลี่ยม เส้น) ให้เป็นชุดของแฟรกเมนต์สำหรับการประมวลผลต่อไปโดย Fragment Shader ข้อมูลนำเข้าคือจุดยอดของสามเหลี่ยมในพิกัดหน้าจอและแอททริบิวต์ของมัน (สี โนร์มัล UV) ผลลัพธ์คือชุดของแฟรกเมนต์ที่มีแอททริบิวต์แบบอินเทอร์โพเลต
ต่างจากเชเดอร์ที่เขียนโปรแกรมได้ (Vertex Shader และ Fragment Shader) การแรสเตอร์เป็นขั้นตอน คงที่ (ไม่สามารถเขียนโปรแกรมได้) นักพัฒนาไม่สามารถเปลี่ยนอัลกอริทึมการแรสเตอร์ได้ แต่สามารถควบคุมพารามิเตอร์ของมันได้: โหมดคัลลิง (culling) ความกว้างของเส้น การออฟเซ็ตความลึก (polygon offset) และมัลติแซมปลิง
เกือบทั้งหมดของกราฟิกเรียลไทม์สมัยใหม่ — เกม UI AR/VR — ใช้การแรสเตอร์ มันเป็นวิธีการเรนเดอร์ที่มีประสิทธิภาพสูงสุด สามารถประมวลผลสามเหลี่ยมนับล้านต่อเฟรมที่ 60 FPS แรสเตอร์ไรเซอร์ GPU ได้รับการปรับให้เหมาะสมสำหรับการประมวลผลแบบขนานของสามเหลี่ยมนับพันพร้อมกันผ่านบล็อก ROP (Render Output Units) เฉพาะทาง
การแรสเตอร์สามเหลี่ยม เริ่มต้นหลังจาก Vertex Shader แปลงจุดยอดเป็นพิกัดหน้าจอแล้ว GPU นำจุดยอดสามจุดของสามเหลี่ยมและกำหนดว่าพิกเซลหน้าจอใดอยู่ภายในสามเหลี่ยมนั้น
กระบวนการประกอบด้วยสามขั้นตอนตามลำดับ: การกำหนดกรอบขอบเขต (bounding box) ของสามเหลี่ยมในหน่วยพิกเซล — การตรวจสอบแต่ละพิกเซลภายในกรอบขอบเขตว่าอยู่ในสามเหลี่ยมหรือไม่ (ฟังก์ชันขอบ) — การคำนวณแอททริบิวต์แบบอินเทอร์โพเลต (พิกัด barycentric) สำหรับแต่ละพิกเซลที่ถูกครอบคลุม ฟังก์ชันขอบ (Edge function) คือสมการเชิงเส้นที่กำหนดว่าจุดหนึ่งอยู่ด้านใดของขอบสามเหลี่ยม
| ขั้นตอน | คำอธิบาย | ผลลัพธ์ |
|---|---|---|
| การตัด (Clipping) | การตัดสามเหลี่ยมที่อยู่นอกขอบเขตวิวพอร์ต | พริมิทีฟที่มองเห็น |
| การแปลงวิวพอร์ต | การแปลงเป็นพิกัดหน้าจอ | พิกัดพิกเซล |
| การตั้งค่าสามเหลี่ยม | การคำนวณฟังก์ชันขอบและกรอบขอบเขต | พารามิเตอร์การแรสเตอร์ |
| การสร้างแฟรกเมนต์ | การทดสอบการครอบคลุมและการอินเทอร์โพเลต | แฟรกเมนต์ + แอททริบิวต์ |
Rasterization สามารถใช้งานได้ด้วยอัลกอริทึมต่างๆ ซึ่งแต่ละแบบมีการแลกเปลี่ยนระหว่างประสิทธิภาพและคุณภาพ GPU สมัยใหม่ใช้การผสมผสานของหลายวิธี
อัลกอริทึมการแรสเตอร์แบบคลาสสิกที่พัฒนาสำหรับ GPU รุ่นแรก สามเหลี่ยมถูกประมวลผลทีละบรรทัด (scanline): สำหรับแต่ละบรรทัดของหน้าจอ จะกำหนดจุดเข้าและออกของสามเหลี่ยม และพิกเซลทั้งหมดระหว่างจุดเหล่านั้นจะถูกเติม Scanline conversion มีประสิทธิภาพสำหรับสามเหลี่ยมขนาดใหญ่ แต่ต้องใช้ตรรกะที่ซับซ้อนสำหรับสามเหลี่ยมที่มีรูปร่างตามอำเภอใจ
GPU สมัยใหม่ใช้วิธีแรสเตอร์แบบ half-space: สำหรับแต่ละด้านของสามเหลี่ยม จะคำนวณฟังก์ชันขอบ — สมการเชิงเส้นที่เป็นบวกด้านหนึ่งและลบอีกด้านหนึ่ง พิกเซลเป็นของสามเหลี่ยมถ้าฟังก์ชันขอบทั้งสามเป็นบวก Half-space rasterization สามารถทำขนานได้ง่ายและเหมาะกับสถาปัตยกรรม GPU แบบ SIMD
GPU มือถือ (Qualcomm Adreno, ARM Mali) ใช้ Tile-Based Rendering (TBR) หน้าจอถูกแบ่งออกเป็นไทล์ขนาดเล็ก (16x16 หรือ 32x32 พิกเซล) และการแรสเตอร์จะดำเนินการสำหรับแต่ละไทล์แยกกัน ซึ่งช่วยลดการเข้าถึงหน่วยความจำโดยการเก็บเฟรมบัฟเฟอร์ในหน่วยความจำท้องถิ่นที่รวดเร็ว (หน่วยความจำไทล์) TBR ช่วยลดการใช้พลังงาน ซึ่งสำคัญสำหรับอุปกรณ์มือถือ
Rasterization และ ray tracing เป็นสองวิธีที่แตกต่างกันโดยพื้นฐานสำหรับการเรนเดอร์กราฟิก 3D การแรสเตอร์ครองตลาดในแอปพลิเคชันเรียลไทม์ ในขณะที่ ray tracing ใช้ในการเรนเดอร์แบบออฟไลน์และค่อยๆ เข้าสู่ระบบเรียลไทม์ (บน GPU ที่รองรับ RTX)
| พารามิเตอร์ | Rasterization | Ray Tracing |
|---|---|---|
| หลักการ | สามเหลี่ยม → แฟรกเมนต์ | รังสี → การตัดกับฉาก |
| ความเร็ว | เร็วมาก (สามเหลี่ยมหลายล้าน/เฟรม) | ช้า (รังสีหลายพัน/เฟรม) |
| คุณภาพ | ต้องใช้เทคนิคเพิ่มเติม (เงา การสะท้อน) | เงาและการสะท้อนที่ถูกต้องทางฟิสิกส์ |
| GPU มือถือ | วิธีมาตรฐาน | รองรับจำกัด (A17 Pro, Snapdragon Gen 3) |
| การใช้พลังงาน | ต่ำ | สูง |
การแรสเตอร์ทำให้เกิดปัญหา aliasing — ขอบหยัก (jaggies) ที่ขอบของสามเหลี่ยม สิ่งนี้เกิดขึ้นเพราะพิกเซลเป็นแบบไม่ต่อเนื่องและไม่สามารถถูกสามเหลี่ยมครอบคลุมบางส่วนได้ เพื่อต่อสู้กับ aliasing จึงใช้มัลติแซมปลิง (MSAA)
MSAA (Multisample Anti-Aliasing) ทำการแรสเตอร์ด้วยอัตราการสุ่มตัวอย่างที่เพิ่มขึ้น (2x, 4x, 8x) แทนที่จะใช้หนึ่งตัวอย่างต่อพิกเซล จะใช้หลายตัวอย่างย่อย ซึ่งแต่ละตัวอย่างจะถูกทดสอบการครอบคลุมของสามเหลี่ยม MSAA 4x ประมวลผล 4 ตัวอย่างย่อยต่อพิกเซล ให้การทำให้ขอบเรียบเนียนอย่างเห็นได้ชัดโดยไม่ต้องเพิ่มความละเอียดการเรนเดอร์ทั้งหมด
ต่างจาก MSAA วิธีการลดรอยหยักแบบหลังการประมวลผล (FXAA, SMAA, TAA) ทำงานหลังจากการแรสเตอร์โดยการวิเคราะห์ภาพสุดท้าย FXAA (Fast Approximate Anti-Aliasing) ตรวจจับขอบของภาพและใช้การเบลอเพื่อทำให้เรียบ ซึ่งทำงานเร็วกว่า MSAA อย่างมีนัยสำคัญ แต่มีคุณภาพน้อยกว่า
Rasterization บน GPU สมัยใหม่ดำเนินการโดยบล็อกฮาร์ดแวร์เฉพาะทาง — ROP (Render Output Units) จำนวน ROP ส่งผลโดยตรงต่ออัตราการเติม (fill rate) — จำนวนพิกเซลที่ GPU สามารถประมวลผลต่อวินาที
สำหรับ GPU มือถือ (Tile-Based Rendering) ปัจจัยสำคัญรวมถึง: การลด overdraw ผ่าน early-Z rejection การใช้ back-face culling เพื่อลบสามเหลี่ยมที่มองไม่เห็น และ occlusion culling เพื่อปฏิเสธสามเหลี่ยมที่ถูกวัตถุอื่นครอบคลุมทั้งหมด
คำถามที่พบบ่อย
การแรสเตอร์คือกระบวนการเปลี่ยนสามเหลี่ยมให้เป็นพิกเซลบนหน้าจอ GPU นำสามเหลี่ยมสามมิติ กำหนดว่า พิกเซลหน้าจอใดที่มันครอบคลุม และส่งต่อไปยัง Fragment Shader เพื่อทำการระบายสี
การแรสเตอร์ฉายสามเหลี่ยมลงบนหน้าจอและกำหนดการครอบคลุมพิกเซล (เร็วมาก) Ray tracing ยิงรังสีจากกล้องและตรวจสอบการตัดกับเรขาคณิต (แม่นยำทางฟิสิกส์มากกว่า แต่ช้ากว่าอย่างเห็นได้ชัด)
ระหว่างการแรสเตอร์ พิกเซลจะอยู่ในสามเหลี่ยมอย่างสมบูรณ์หรือไม่ก็ได้ — จึงเกิด ขอบหยัก (aliasing) MSAA ทำให้ขอบเรียบโดยใช้หลายตัวอย่างย่อยต่อพิกเซล ในขณะที่ FXAA ใช้ฟิลเตอร์กับภาพสุดท้าย
ไม่ การแรสเตอร์เป็น ขั้นตอนคงที่ ของไปป์ไลน์กราฟิก นักพัฒนาไม่สามารถเปลี่ยนอัลกอริทึมได้ แต่สามารถควบคุมการตั้งค่า: คัลลิง polygon offset โหมดการแรสเตอร์ (จุด เส้น สามเหลี่ยม) และพารามิเตอร์ MSAA
Tile-Based Rendering (TBR) แบ่งหน้าจอออกเป็นไทล์และประมวลผลในหน่วยความจำท้องถิ่นที่รวดเร็วแทน VRAM ทั่วโลก ซึ่งช่วยลดการใช้พลังงานและแบนด์วิดท์ลงอย่างมาก ซึ่งสำคัญสำหรับอุปกรณ์มือถือที่ใช้พลังงานจากแบตเตอรี่
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม