23 ธ.ค. 2023 เวลา 04:43 • วิทยาศาสตร์ & เทคโนโลยี

Alan Wake II กับ Ray Tracing (Ray Tracing Series ตอนที่ 2)

เปิดหัวข้อมากับเกมสุดยอดเกมนึงแห่งปี 2023 ที่เรียกได้ว่าเป็นกระแสเลยก็ว่าได้ กับเกม Alan Wake II เกมแนว Survival Horror
ในเกมนี้ผู้เล่นจะได้รับบทเป็น Alan Wake หรือ Saga Anderson ในสองเรื่องราวที่แยกกัน ซึ่งสามารถเล่นในลำดับที่ผู้เล่นเลือก เกมนี้ยังมีการเพิ่มเติมส่วนของการสืบสวน โดยผู้เล่นสามารถเข้าถึงพื้นที่ที่ไม่มีศัตรูที่เรียกว่า "Mind Place" และ "Writer's Room" ได้
เกมนี้ได้รับความนิยมจากนักวิจารณ์และเป็นที่ชื่นชอบของผู้เล่น. นอกจากนี้ยังมีการวางแผนให้มีการขยายเนื้อเรื่องหลังจากเกมเสร็จสิ้น ซึ่งมีชื่อว่า "Night Springs" และ "The Lake House"
นอกจากเนื้อเรื่อง การเล่นแล้ว ในซีรีย์ Ray Tracing นี้ผมจะอธิบายเกี่ยวกับเทคโนโลยีเบื้องหลังของการเรนเดอร์ภาพในเกม Alan Wake II
โดยเทคนิคหลักอันหนึ่งในเกมนี้ ใช้เทคโนโลยีของ Nvidia DLSS (Deep Learning Super Sampling) ซึ่งตอนนี้เดินทางมาถึงเวอร์ชั่นที่ 3.5 แล้ว
การปรับปรุง DLSS ในแต่ละเวอร์ชั่น ภาพจาก https://www.nvidia.com/en-us/geforce/news/nvidia-dlss-3-5-ray-reconstruction/
DLSS นี้เป็นเทคโนโลยีที่ Nvidia เคลมว่าเป็น Neural rendering คือใช้ Deep learning technology ในการช่วย render ภาพเป็นหลัก แต่ในทางเทคนิคคือ มันคือการ Upscaling และ/หรือ Denoising ภาพ โดยใช้ Deep Learnig
เนื่องจากว่าภาพที่ต้องการความละเอียดสูง (high resolution) และภาพที่ต้องการความเสมือนจริง (Photo-realistic) นั้น การสร้างภาพขึ้นมาจะต้องใช้การประมวลผลที่ค่อนข้างหนัก เทคนิคนึงในการแก้ปัญหาการสร้างภาพเหล่านี้คือ ลดความละเอียดในการสร้างลง แล้วแปลงปัญหาให้เป็นการ Upscaling เช่น เรนเดอร์ที่ความละเอียด 720p แล้ว upscaling ให้เป็น 4K ส่วนรายละเอียดที่หายไปจากการ Upscaling ก็จะใช้ Denoising เสริมเข้าไป
ฟีเจอร์ของ DLSS ในแต่ละเวอร์ชั่น ภาพจาก https://www.nvidia.com/en-us/geforce/news/nvidia-rtx-games-engines-apps/
ซึ่ง DLSS 2 นั้นจะมีฟีเจอร์แค่ Super resolution (Upscaling) และ Deep Learning Anti-aliasing (Denoising) จะเห็นได้ว่าใน DLSS 2 นั้นเป็นเทคโนโลยีที่ไม่เกี่ยวกับ Ray tracing เท่าไหร่ กล่าวคือใช้เรื่องการประมวลผลภาพที่ได้ออกมาเป็นหลัก เพียงแต่ว่าต้องการให้โปรแกรมหรือเกมที่ทำงานกราฟิกนั้นประมวลผลด้วย FPS ได้สูงขึ้นและ smooth ขึ้น ซึ่งในบางครั้งฉากบางฉากแม้เป็นการเรนเดอร์ด้วยเทคนิค Rasterization ก็มีโอกาสที่จะทำให้ FPS drop ลงได้
DLSS ในเวอร์ชั่น 3.5 นี้ใส่ฟีเจอร์ Ray reconstruction เพิ่มเข้าไป ซึ่งเป็นเทคโนโลยีที่ทาง Nvidia (น่าจะ) ออกแบบมาเพื่อ Ray Tracing โดยเฉพาะ
ในคลิปนี้ คุณ Bryan Catanzaro ซึ่งเป็น Vice President ของ Nvidia Applied Deep Learning Research Group ได้มาอธิบายถึงหลักการทำงานคร่าวๆ ของ DLSS 3.5 โดยในคลิปนี้เขาจะพูดถึงเรื่อง Global Illumination ค่อนข้างเยอะ ซึ่งจุดนี้เองน่าจะเป็นจุดเริ่มต้นของการเชื่อมโยงของ DLSS x Ray Tracing มากขึ้น
Global illumination (GI) หรือ indirect illumination คือกลุ่มของอัลกอริทึมที่ใช้ในกราฟิก 3 มิติเพื่อเพิ่มการส่องแสงที่สมจริงให้กับฉาก 3 มิติ อัลกอริทึมเหล่านี้ไม่เพียงแค่คำนึงถึงแสงที่มาโดยตรงจากแหล่งแสง (direct illumination) แต่ยังคำนึงถึงกรณีที่แสงจากแหล่งเดียวกันถูกสะท้อนโดยพื้นผิวอื่น ๆ ในฉาก (indirect illumination)
ตัวอย่างง่ายๆ เช่น เมื่อเราเปิดไฟในห้อง แสงจากหลอดไฟจะส่องไปกระทบพื้นและผนัง จากนั้นแสงที่สะท้อนจากพื้นและผนังก็จะไปกระทบวัตถุอื่นๆ ในฉาก เช่น โต๊ะ เก้าอี้ ตู้ เป็นต้น แสงสะท้อนเหล่านี้จะส่งผลต่อสีและความสว่างของวัตถุต่างๆ ในฉาก ทำให้ภาพดูสมจริงยิ่งขึ้น
กลุ่มของอัลกอริธึม Global illumination แบ่งออกเป็น 2 ประเภทหลักๆ คือ
  • 1.
    Ray Tracing (View dependent) ที่บทความกำลังเขียนถึง
  • 2.
    Irradiance caching (View independent) เป็นเทคนิคที่คำนวณแสงโดยแบ่งฉากออกเป็นเซลล์เล็กๆ จากนั้นคำนวณแสงในแต่ละเซลล์ แล้วนำแสงของเซลล์ต่างๆ มารวมกัน เทคนิคนี้ให้ผลลัพธ์ที่รวดเร็วกว่าเทคนิคแบบ Ray Tracing จึงมักใช้กับฉากที่มีวัตถุจำนวนมาก
ซึ่งจริงๆ แล้ว Irradiance caching เป็นเทคนิคที่ใช้ร่วมกับ Rasterization มานานพอควรเพราะสามารถให้ผลการคำนวณแสงเงาได้ดีมากพอในระดับนึง
เกมที่ใช้ irradiance caching เช่น Crysis 3 (2013), Uncharted 4: A Thief's End (2016), God of War (2018) พูดง่ายๆ ว่าคือเกมระดับ AAA นั่นแหละครับ ซึ่งข้อจำกัดของมันหลักๆ คือ
ความไม่แม่นยำ (Inaccuracy): อาจทำให้ภาพดูไม่สมจริงในบางกรณี เช่น ในกรณีที่ฉากมีวัตถุจำนวนมาก หรือในกรณีที่วัตถุมีการเคลื่อนไหวอย่างรวดเร็ว Irradiance caching ใช้การสุ่มตำแหน่งและการประมาณค่าโดยการอินเตอร์โพเลชัน (interpolation) ซึ่งอาจทำให้ผลลัพธ์ไม่ตรงกับความเป็นจริง
ความซับซ้อน (Complexity): ต้องการการจัดการข้อมูลที่เก็บไว้ในแคช (cache) ใช้พื้นที่เก็บข้อมูลมาก ขึ้นอยู่กับขนาดของฉากและความละเอียดของข้อมูลแสงที่บันทึกไว้ ซึ่งอาจมีปัญหาเรื่องการค้นหา การเพิ่ม การลบ และการปรับปรุง นอกจากนี้ยังต้องการการปรับค่าพารามิเตอร์ (parameters) เพื่อควบคุมคุณภาพและประสิทธิภาพของเทคนิค
ความไม่คงที่ (Inconsistency): เป็นเทคนิคที่ไม่คงที่ (non-consistent) ซึ่งหมายความว่าผลลัพธ์อาจเปลี่ยนแปลงไปตามการเปลี่ยนแปลงของแคช ซึ่งอาจทำให้เกิดปรากฏการณ์ที่ไม่พึงประสงค์ เช่น การเปลี่ยนสีของพื้นผิว การเกิดรอยคล้ายเงา (ghosting) หรือการเกิดรอยจุด (popping) ในภาพ
ซึ่งข้อจำกัดเหล่านี้ Ray Tracing สามารถแก้ไขปัญหาได้
ก่อนจบท้ายจะวกกลับไปที่ DLSS 3.5 นิดนึงเพื่อให้เห็นภาพว่า Ray Tracing บน DLSS 3.5 ทำงานร่วมกันอย่างไร
สรุปภาพรวมของ Ray reconstruction ใน DLSS 3.5 ภาพจาก https://www.nvidia.com/en-us/geforce/news/nvidia-dlss-3-5-ray-reconstruction/
ภาพนี้จะเป็นสรุปหลักการทำงานรวมของ Ray reconstruction ซึ่งเริ่มจากการใช้เทคนิค Ray Tracing สำหรับสร้างภาพในระดับ 1080P ขึ้นมาเพื่อให้ได้ภาพเรนเดอร์คร่าวๆ หลังจากนั้นจะทำการ Upscaling แล้วมีบางส่วนที่จัดการ Temporal feedback คือภาพหลายๆ ภาพในช่วงเวลาหนึ่ง แล้วจะมีการปรับปรุงสุดท้ายด้วยเทคนิค Optical Flow Accelerator เพื่อให้ได้ภาพ 4K ที่มีความสมจริงมากขึ้น
การใช้ Ray reconstruction แก้ไข Lighting effects จาก Global Illumination ภาพจาก https://www.nvidia.com/en-us/geforce/news/nvidia-dlss-3-5-ray-reconstruction/
ซึ่งส่วนสำคัญส่วนึงคือการปรับแก้ sampling pattern จากเดิมที่ปรับแก้แบบ Hand-tuned มาให้ DLSS จับว่าส่วนไหนของภาพนั้นควรจะปรับแก้มากที่สุด
ในตอนนี้ได้พูดถึงเรื่อง Global Illumination แล้ว ในตอนต่อๆ ไปจะอธิบายเนื้อหาของ Ray Tracing มากขึ้นว่าจะมีองค์ประกอบอะไรบ้างสำหรับ Ray Tracing
ถ้าชื่นชอบ ฝากกดไลค์ กดแชร์เนื้อหาด้วยครับ

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

โฆษณา