freeya_title_800_0

Deferred Rendering

อาษาเฟรมเวิร์คใช้ Deferred Rendering แบบ Quad Based หมายความว่าแสงทุกๆประเภทไม่ว่าจะเป็น Directional, Point หรือ Spot Light จะถูกเรนเดอร์โดยรูปสี่เหลี่ยมเท่านั้น ตัวเฟรมเวิร์คจะมีหน้าที่จะคำนวณโวลุมของแสงที่เกิดขึ้น แล้วสร้างเป็นระนาบสี่เหลี่ยมที่ขนานกับจอภาพ จากนั้นจึงทำการคำนวณแสงและการสะท้อนให้ผู้เล่นได้เห็น ดร.อาษาได้บอกกับเราว่าวิธีการ Quad Based นั้นดีที่สุดแล้วสำหรับเกมในภาคเรียลนี้ เหตุผลก็มาจากการวิจัยของทีมงานที่ได้ทดลองใช้วิธีแบบ Tile Based แล้วพบว่ามีข้อจำกัดมากมายตั้งแต่เทคนิค Compute Shader ที่ต้องการ Shader Model 4 หรือ GLSL V. 4 ขึ้นไปเพื่อที่จะเรียกกับชุดคำสั่งที่เกี่ยวกับ memory barriers มีหน้าที่สั่งให้จีพียูจัดการกับข้อมูลของแสงที่ถูกแบ่งออกเป็นตารางย่อยๆ ยิ่งถ้ามีจำนวนแสงมากเท่าไหร่ก็จะทำให้การประมวลผลได้ดีขึ้น เสียค่าการประมวลผลในการประมวลผลคุ้มกับที่ต้องจ่าย ฟังไม่ผิดหรอกครับแสงยิ่งมากเท่าไหร่ยิ่งประมวลผลได้เร็วกว่าเทคนิคอื่นๆ แต่จะเห็นผลลัพธ์ที่แตกต่างกันอย่างจับต้องได้ก็ต้องมีแสงในฉากถึงในระดับร้อยดวงขึ้นไปเท่านั้น ทั้งหมดจึงเป็นเหตุผลที่ว่าทำไมจึงอาษาเฟรมเวิร์คจึงเลือกใช้วิธีดังกล่าวในการเรนเดอร์

arsa_realtime_rendering_ex

ตัวอย่างงานวิจัยอธิบายการทำงานของอาษาเฟรมเวิร์ค

GBuffer

จุดเด่นอีกอย่างของอาษาเฟรมเวิร์คคือ G-Buffer ก่อนอื่นต้องขออธิบายบริบทของ G-Buffer ในเอนจิ้นทั่วไปเสียก่อน ส่วนมากนั้นจะใช้ Render Texture เพื่อเก็บข้อมูลประมาณ 2 ถึง 3 ชิ้น ในชิ้นแรกเป็นค่า Albedo ชิ้นที่สองเป็นค่า Normal และชิ้นที่สามเป็นค่าพารามิเตอร์ แต่ถ้าเป็นอาษาเฟรมเวิร์คจะยุบ Render Texture เหลือชิ้นเดียวโดยจะทำการบีบอัดค่า Albedo และ Normal เข้าไว้ในชาแนล RGBA แบบ 8 Bit เพียงชิ้นเดียว ทำให้ลดหน่วยความจำในการใช้งานไปได้ประมาณหนึ่ง ส่วนค่า Depth ก็อ่านมาจาก Hardware Z Buffer โดยตรง จริงๆยังมีรายละเอียดเกี่ยวกับเทคนิคการสร้างอาษาเฟรมเวิร์คอีกมาก แต่ด้วยพื้นที่การนำเสนอมีจำกัดบวกกับบางส่วนเป็นข้อมูลในเชิงเทคนิคมากๆจึงอาจต้องยกยอดไปไว้โอกาสต่อไป แต่หากใจร้อนดร.อาษาได้บอกว่าลองไปนั่งเรียนที่มหาวิทยาลัยในรายวิชาที่ดร.อาษาสอนก่อนก็ได้

006arsa_render_27248322

ฉากสู้กลางทะเลทรายอันร้อนระอุ มีรถถังจอดทิ้งอยู่หลายคัน

007arsa_render_16432356_w

ฉากสถานีรถไฟฉากนี้ได้แรงบันดาลใจมาจากหัวลำโพงในบ้านเรานั่นเอง

Global Illumination

นี่คือสิ่งที่ขาดไม่ได้สำหรับเทคนิคทำให้ภาพดูเป็นสามมิติ สำหรับคนทำงานสามมิติคำพูดที่เวลามีคนมาวิจารณ์งานแล้วสะเทือนใจมากที่สุดคือ ทำไมภาพมันดูแบนอย่างกับกระดาษ ตอนได้ยินคำนี้แรกๆแทบทรุดลงไปกองกับพื้นพร้อมกับมีคำถามก้องในหัวว่า มันจะแบนได้อย่างไร นี่ฉันทำเป็นโมเดลสามมิตินะ แต่พอสูดหายใจเข้าลึกๆแล้วลองเปิดใจให้กว้างมาพิจารณาดูฟีดแบ็คที่ได้รับมา ทำให้เข้าใจว่างานสามมิตินั้นก็แบนเป็นกระดาษได้ ถ้าเรายังไม่ใส่องค์ประกอบที่ถูกต้องลงไปทั้งในเรื่องของการจัดแสงเงาและที่ขาดไม่ได้เลยคือ Global Illumination

arsa_render_20740542

จอมมารเอ็กแซ็คกับ Scene ที่ใส่ Global Illumination

Global Illumination คือเทคนิคทางคอมพิวเตอร์กราฟิกที่ช่วยปรับภาพในเกมทั้งหมดให้ดูมีมิติมากขึ้นยกตัวอย่างเช่นเทคนิค Horizontal Based Ambient Occlusion (HBAO)

HBAO

จะช่วยสร้างให้ภาพดูมีมิติมากยิ่งขึ้น หากมีส่วนไหนของภาพทับซ้อนกันจะทำการแรเงาสีดำลงไปเพื่อให้เกิดความรู้สึกว่าวัตถุมีระดับความลึก ถ้ายังนึกภาพไม่ออกลองหงายมือเอานิ้วชี้และนิ้วกลางมาติดกัน จากนั้นลองดูระหว่างร่องของนิ้วทั้งสองจะเห็นพื้นที่สีดำอยู่ตรงกลางร่อง นั่นเหละครับ HBAO ทำงานคล้ายกับแบบนั้น แต่เวลาเขียนจริงในอาษาเฟรมเวิร์คต้องสั่งงานเป็นโค้ดของเฉดเดอร์ คำนวนจากความลึกและส่งรัศมีการตรวจสอบออกไปว่ากระทบกับเวอร์เท็กซ์อันไหนบ้าง จึงได้ค่าผลลัพธ์ออกมาเป็นส่วนที่จะให้แรเงาเข้มหรือส่วนที่ไม่ต้องทำการแรเงา

002hbao

การแสดงผลโดยใช้เทคนิค HBAO สังเกตุส่วนที่ทับซ้อนกันจะแรเงาสีดำลงไปเพื่อบอกความลึก

003hbao_beauty

จากนั้นนำมารวมกับภาพที่ให้แสงด้วยเทคนิค PBR จึงได้ผลลัพธ์ดังรูปด้านบน

โปรดติดตามความมันส์ได้ในครั้งต่อไป

ทีมซารอส

www.sarosworld.com

www.facebook.com/sarosworld

www.twitter.com/_sarosworld

www.youtube.com/user/wing640

Facebook Comment