12 ธ.ค. 2023 เวลา 05:25 • วิทยาศาสตร์ & เทคโนโลยี

Ray tracing คืออะไร (Ray Tracing Series ตอนที่ 1)

เกมในยุคปัจจุบันจะเริ่มนำเอา Ray tracing เข้ามาใช้กันมากขึ้น คนเล่นเกมอาจจะเริ่มสังเกตุว่า เกมบางเกมเริ่มมีการ support Ray tracing เพื่อให้ภาพมีความสมจริงมากขึ้น ในขณะที่การเล่นเกมได้ลื่นไหลบนวิธีการสร้างภาพแบบ Rasterization แบบเดิม
อย่างเกม Cyberpunk นี้ ก็สนับสนุนการใช้ Ray tracing ซึ่งเห็นได้ว่า ตัว reflection บนพื้นผิวต่างๆ จะมีความสมจริงมากกว่าการไม่เปิดใช้
แล้ว Ray tracing จริงๆ มันคืออะไรหละ ?
ลองดูภาพเปรียบเทียบวิธีการ render ภาพแบบปัจจุบัน (Rasterization) กับ Ray tracing ครับ
ภาพเปรียบเทียบ Rasterization vs. Ray tracing จาก https://www.pixelsham.com/2019/10/24/whats-the-difference-between-ray-tracing-and-rasterization/
หลักการง่ายๆ ของ Ray tracing คือการยิงลำแสงจำลอง (virtual ray) จาก image plane เข้าไปยัง 3D scene ของเรา แล้วทำการ tracing ย้อนไปเรื่อยๆ ยังต้นกำเนิดแสง ซึ่งวิธีการนี้ ในช่วงต้นของยุค 1980s นั้น นักวิจัยได้เริ่มคิดค้นพัฒนา แล้วนำเสนอว่า การจะจำลองภาพเสมือนภาพถ่าย (Photo-realistic image synthesis) นั้น มันคือการแก้ปัญหาของ rendering equation
โดยโมเดลที่จะใช้แก้ปัญหา rendering equation นั้น นักวิจัยเสนอว่า มันคือรูปแบบนึงของการแก้ปัญหา Light Transport Problem คือ เมื่อรู้ว่าแสงเดินทางอย่างไร ก็สามารถสร้างภาพเสมือนจริงได้แล้ว
ความยากของการใช้ Ray tracing ในยุคนั้นคือ มันต้องใช้การประมวลผลค่อนข้างมาก แต่ข้อดีประการหนึ่งคือ เราสามารถทำ Parallel processing ของตัว Ray tracing ได้ นั่นเป็นที่มาที่ว่า หลายบริษัทในอุตสาหกรรม Animation เลือกที่จะใช้ / สร้าง Render farm ขึ้นมา เพื่อให้การพัฒนางานด้น Animation ออกผลงานได้เร็ว
ภาพตัวอย่าง Render farm จาก https://3sfarm.com/the-impact-of-render-farm-technology-on-the-vfx-and-animation-industries/
และแน่นอนว่า ถ้าเราจะเอา Ray tracing มาใช้ในการเล่นเกมที่มีความ Real-time และต้อง render ด้วย Frame rate ที่ค่อนข้างสูงนั้นในยุคที่ผ่านมาเป็นไปไมไ่ด้เลย
และด้วยความที่ Nvidia เริ่มพัฒนา GPU ให้ใช้งานเป็นลักษณะ GPGPU (General Purpose GPU) ในช่วงปลายของปี 2000s งานหนึ่งที่เกี่ยวข้องกับการใช้ GPGPU และอุตสาหกรรมเกมที่ Nvidia เป็นผู้เล่นหลักในตลาดนี้ย่อมหนีไม่พ้นการพยายามยัดฟีเจอร์ Ray tracing เข้าไปใน GPU ของตัวเองให้ได้
ภาพ GPU architecture สำหรับ Hardware-accelerated Ray tracing จา่ก https://www.hardwarezone.com.sg/feature-what-you-need-know-about-ray-tracing-and-nvidias-turing-architecture/rt-cores-and-tensor-cores
ปัจจุบัน แนวทางการพัฒนาได้เริ่มเข้ามาสู่ Graphics library หลายเจ้า ก็คือ DirectX ที่สนับสนุนโดย Microsoft และ Vulkan ที่สนับสนุนโดย Kronos group ผู้พัฒนา OpenGL โดย Nvidia ณ ปัจจุบันเป็น GPU vendor หลักที่สนับสนุนฟีเจอร์ตรงนี้ แม้ว่าเราจะเห็นความพยายามของทาง AMD เข้ามา แต่ก็เหมือนจะยังไม่ได้โฟกัสเท่าไหร่
DirectX 12 มีคุณสมบัติที่เรียกว่า DirectX Raytracing (DXR) ซึ่งช่วยให้เกมสามารถจำลองการทำงานของแสงในชีวิตจริงได้ด้วยเอฟเฟกต์กราฟิกที่สมจริง เช่น แสงส่องสว่าง, ภาพสะท้อน, และเงา นอกจากนี้ DX12 ยังมีการปรับอัตราการแสดงแสงเงา (Variable Rate Shading, VRS) ซึ่งเป็นเทคนิคการเรนเดอร์แบบใหม่ที่ช่วยเพิ่มประสิทธิภาพโดยการปรับอัตราการไล่แสงเงาสำหรับส่วนต่าง ๆ ของฉาก
Vulkan เป็น Graphics library อันนึ่งที่สามารถทำงานข้ามแพลตฟอร์มได้
Vulkan Ray Tracing ถูกพัฒนาโดยกลุ่มงาน Ray Tracing ของ Khronos (Khronos Vulkan Ray Tracing Task Sub Group) ซึ่งได้สร้างชุดขยายความสามารถ (extensions) ที่สามารถนำมาใช้งานร่วมกับ Vulkan ได้อย่างเข้ากันได้1 ชุดขยายความสามารถเหล่านี้ช่วยให้นักพัฒนาสามารถเพิ่มฟังก์ชัน Ray Tracing ลงในแอปพลิเคชันอื่นๆ ได้
การทำงานของ Vulkan Ray Tracing นั้นเริ่มต้นจากการสร้างโครงสร้างการเร่งความเร็ว (Acceleration Structures) ซึ่งเป็นการจัดเก็บข้อมูลเกี่ยวกับวัตถุที่อยู่ในฉาก 3D และจะถูกใช้ในการค้นหาการชนกันระหว่างแสงและวัตถุ นอกจากนี้ยังมีส่วน Host Operations และ Deferred Operations ซึ่งเป็นส่วนหนึ่งของกระบวนการทำงานของ Ray Tracing รวมไปถึง Vulkan Ray Tracing ยังมีการสนับสนุนการสืบค้นแสง (Ray Queries) ซึ่งเป็นเทคนิคที่ใช้ในการคำนวณแสงและเงาในฉาก 3D
รายชื่อเกมที่ปัจจุบันสามารถใช้ความสามารถ Ray tracing ได้
ส่วนรายชื่อด้านล่างนี้คือรวบรวม application และ game ที่รับรองความสามารถ Ray tracing
นอกจาก DirectX และ Vulkan แล้ว จริงๆ ทาง Nvidia ก็ยังพัฒนา Graphics library ตัวเองที่เรียกว่า Nvidia Optix
ภาพตารางเปรียบเทียบ Shading API ค่ายต่างๆ จาก https://developer.nvidia.com/blog/how-to-get-started-with-optix-7/
ซึ่งจริงๆ แล้ว Optix น่าจะมองเป็น Ray tracing API มากกว่า เพราะมันเกิดมาเพื่อสิ่งนี้ โดยล่าสุดเดินทางมาถึงเวอร์ชั่น 7 แล้ว
ส่งท้ายกับบทความนี้ จะสรุปสั้นๆ ว่า เรากำลังเข้าสู่ยุคที่ใช้ Ray tracing ในการสร้างภาพมากขึ้น จากเดิมที่ใช้ Rasterization ในการพัฒนา Graphics application อย่าง OpenGL หรือ DirectX ต่อจากนี้การสร้างภาพจะเริ่มมีความสมจริงตามการพัฒนาของทั้ง Hardware และ Software
ตอนต่อๆ ไปผมจะมาอธิบายเบื้องลึกเบื้องหลังการทำงานในเชิงทฤษฎีของ Ray tracing มากขึ้น และในเชิงปฏิบัติสำหรับการเขียน Ray tracing บน CPU ส่วนการเขียน Real-time Ray tracing นั้นจะอยู่ในซีรีย์ต่อๆ ไปครับ
ถ้าชื่นชอบ ฝากกดไลค์ กดแชร์เนื้อหาด้วยครับ

ดูเพิ่มเติมในซีรีส์

โฆษณา