กราฟิคแบบเรียลไทม์ปรับใช้การประมาณค่าต่าง ๆ เพื่อจัดการกับค่าใช้จ่ายในการคำนวณของการจำลองแสงทางอ้อมซื้อขายระหว่างประสิทธิภาพรันไทม์และความเที่ยงตรงของแสง นี่เป็นพื้นที่ของการวิจัยเชิงรุกโดยมีเทคนิคใหม่ ๆ ปรากฏขึ้นทุกปี
แสงโดยรอบ
ในช่วงท้ายที่ง่ายที่สุดของช่วงคุณสามารถใช้แสงโดยรอบ : แหล่งกำเนิดแสงทั่วโลกและรอบทิศทางที่ใช้กับทุกวัตถุในฉากโดยไม่คำนึงถึงแหล่งกำเนิดแสงจริงหรือการมองเห็นในท้องถิ่น มันไม่ถูกต้อง แต่มีราคาถูกมากง่ายสำหรับศิลปินที่จะปรับแต่งและสามารถดูโอเคขึ้นอยู่กับฉากและสไตล์ภาพที่ต้องการ
ส่วนขยายทั่วไปของแสงพื้นฐาน ได้แก่ :
- ทำให้สีของสภาพแวดล้อมแตกต่างกันไปในทิศทางต่างๆเช่นการใช้ฮาร์โมนิกทรงกลม (SH)หรือcubemap ขนาดเล็กและค้นหาสีใน shader ตามเวกเตอร์ปกติของแต่ละจุดยอดหรือพิกเซล สิ่งนี้ทำให้เกิดความแตกต่างทางภาพระหว่างพื้นผิวของทิศทางที่แตกต่างกันแม้ว่าจะไม่มีแสงส่องตรงก็ตาม
- สมัครสภาวะแวดล้อมต่างๆ (AO)เทคนิครวมทั้งก่อนการคำนวณยอด AO, AO แผนที่พื้นผิวสาขา AOและหน้าจอพื้นที่ AO (SSAO) สิ่งเหล่านี้ทำงานโดยพยายามตรวจหาพื้นที่เช่นหลุมและรอยแยกที่แสงทางอ้อมมีโอกาสน้อยที่จะกระเด็นเข้ามาและทำให้แสงรอบข้างมืดลง
- เพิ่มcubemap ของสภาพแวดล้อมเพื่อจัดเตรียมการสะท้อนแสงโดยรอบ cubemap ที่มีความละเอียดเหมาะสม (128 ²หรือ 256 ²ต่อหน้า) สามารถโน้มน้าวใจอย่างมากสำหรับ specular บนพื้นผิวที่โค้งและเป็นประกาย
แสงทางอ้อมอบ
"ระดับ" ถัดไปดังนั้นจะพูดถึงเทคนิคที่เกี่ยวข้องกับการอบ (pre-computing ออฟไลน์) เป็นตัวแทนของแสงทางอ้อมในฉาก ข้อดีของการอบคือคุณสามารถได้ผลลัพธ์ที่มีคุณภาพสูงสำหรับค่าใช้จ่ายในการคำนวณแบบเรียลไทม์เล็กน้อยเนื่องจากชิ้นส่วนที่แข็งทั้งหมดจะถูกนำไปอบ ข้อเสียคือเวลาที่ใช้สำหรับกระบวนการอบเป็นอันตรายต่ออัตราการวนซ้ำของนักออกแบบระดับ; จำเป็นต้องใช้หน่วยความจำและพื้นที่ดิสก์เพิ่มเติมเพื่อจัดเก็บข้อมูลที่คำนวณไว้ล่วงหน้า ความสามารถในการเปลี่ยนแสงในแบบเรียลไทม์นั้นมี จำกัด มาก และกระบวนการอบสามารถใช้ข้อมูลจากรูปทรงเรขาคณิตระดับคงที่เท่านั้นดังนั้นเอฟเฟกต์แสงทางอ้อมจากวัตถุไดนามิกเช่นตัวละครจะถูกพลาด ยังคงแสงไฟอบใช้กันอย่างแพร่หลายในเกม AAA วันนี้
ขั้นตอนการอบสามารถใช้อัลกอริธึมการเรนเดอร์ที่ต้องการรวมถึงการติดตามเส้นทาง, ความเป็นคลื่นวิทยุ, หรือการใช้เอ็นจิ้นเกมเพื่อแสดง Cubemaps (หรือครึ่งวงกลม )
ผลลัพธ์สามารถเก็บไว้ในพื้นผิว ( lightmaps ) ที่นำไปใช้กับรูปทรงเรขาคณิตคงที่ในระดับและ / หรือพวกเขายังสามารถแปลงเป็น SH และเก็บไว้ในโครงสร้างข้อมูลเชิงปริมาตรเช่นปริมาณรังสี (ปริมาณพื้นผิวที่แต่ละเทกเซลเก็บโพรบ SH) หรือตาข่าย tetrahedral จากนั้นคุณสามารถใช้เฉดสีเพื่อค้นหาและสอดแทรกสีจากโครงสร้างข้อมูลนั้นและนำไปใช้กับรูปทรงเรขาคณิตของคุณ วิธีการวัดปริมาตรช่วยให้แสงที่อบเข้ากับวัตถุแบบไดนามิกและเรขาคณิตคงที่
ความละเอียดเชิงพื้นที่ของ lightmaps ฯลฯ จะถูก จำกัด โดยหน่วยความจำและข้อ จำกัด ในทางปฏิบัติอื่น ๆ ดังนั้นคุณอาจเสริมแสงอบด้วยเทคนิค AO บางอย่างเพื่อเพิ่มรายละเอียดความถี่สูงที่แสงอบไม่สามารถให้และตอบสนองต่อวัตถุแบบไดนามิก (เช่นทำให้แสงทางอ้อมมืดลงภายใต้ตัวละครที่เคลื่อนไหวหรือยานพาหนะ)
นอกจากนี้ยังมีเทคนิคที่เรียกว่าการถ่ายโอนความสว่างแบบ precomputed (PRT)ซึ่งขยายการอบเพื่อจัดการกับสภาพแสงแบบไดนามิกมากขึ้น ใน PRT แทนการอบด้วยแสงทางอ้อมเองคุณอบฟังก์ชั่นการถ่ายโอนจากแหล่งกำเนิดแสงบางแห่ง - โดยปกติคือท้องฟ้า - ไปยังแสงทางอ้อมที่เกิดขึ้นในฉาก ฟังก์ชั่นการถ่ายโอนจะแสดงเป็นเมทริกซ์ที่เปลี่ยนจากค่าสัมประสิทธิ์แหล่งต้นทางไปยังค่า SH ปลายทางที่จุดตัวอย่างอบแต่ละจุด สิ่งนี้ทำให้สภาพแวดล้อมของแสงมีการเปลี่ยนแปลงและแสงทางอ้อมในที่เกิดเหตุจะตอบสนองได้อย่างน่าเชื่อถือ Far Cry 3 และ 4 ใช้เทคนิคนี้เพื่อให้รอบต่อเนื่องตลอดทั้งวันด้วยแสงทางอ้อมที่แตกต่างกันไปตามสีของท้องฟ้าในแต่ละช่วงเวลาของวัน
อีกจุดหนึ่งเกี่ยวกับการทำอาหาร: มันอาจมีประโยชน์ที่จะมีข้อมูลการอบแยกต่างหากสำหรับแสงทางอ้อมแบบกระจายและแบบพิเศษ Cubemaps ทำงานได้ดีกว่า SH สำหรับ specular (เนื่องจาก cubemaps สามารถมีรายละเอียดเชิงมุมได้มากขึ้น) แต่พวกมันยังใช้หน่วยความจำมากขึ้นด้วยดังนั้นคุณจึงไม่สามารถที่จะวางมันให้หนาแน่นเหมือนตัวอย่าง SH การแก้ไข Parallaxสามารถใช้ในการชดเชยค่อนข้างมากโดยการโค้งงอ cubemap แบบ heuristically เพื่อให้การสะท้อนของมันให้ความรู้สึกที่มีเหตุผลมากขึ้นกับเรขาคณิตรอบ ๆ
เทคนิคเรียลไทม์อย่างเต็มที่
ในที่สุดก็เป็นไปได้ที่จะคำนวณแสงทางอ้อมแบบไดนามิกทั้งหมดบน GPU สามารถตอบสนองต่อการเปลี่ยนแปลงของแสงหรือรูปทรงเรขาคณิตแบบเรียลไทม์ อย่างไรก็ตามมีการแลกเปลี่ยนระหว่างประสิทธิภาพรันไทม์ความสว่างของแสงและขนาดฉากอีกครั้ง เทคนิคเหล่านี้บางตัวต้องใช้ GPU ที่มีเนื้อหนาในการทำงานและอาจเป็นไปได้สำหรับขนาดฉากที่ จำกัด พวกเขายังรองรับแสงทางอ้อมเพียงครั้งเดียวเท่านั้น
- cubemap สภาพแวดล้อมแบบไดนามิกที่ใบหน้าของ cubemap จะถูกเรนเดอร์อีกครั้งในแต่ละเฟรมโดยใช้กล้องหกตัวที่รวมอยู่รอบจุดที่เลือกสามารถให้การสะท้อนแสงโดยรอบที่เหมาะสมสำหรับวัตถุชิ้นเดียว ซึ่งมักใช้สำหรับผู้เล่นในเกมแข่งรถเป็นต้น
- การส่องสว่างส่วนกลางของพื้นที่หน้าจอซึ่งเป็นส่วนเสริมของ SSAO ที่รวบรวมแสงสะท้อนจากพิกเซลใกล้เคียงบนหน้าจอในการผ่านการประมวลผล
- การสะท้อนแสงแบบสเปซ - เรย์บนหน้าจอทำงานโดยการเดินผ่านเรย์บัฟเฟอร์ความลึกในโพสต์ - พาส มันสามารถให้การสะท้อนค่อนข้างคุณภาพสูงตราบใดที่วัตถุที่สะท้อนอยู่บนหน้าจอ
- ใช้คลื่นวิทยุในทันทีโดยการติดตามรังสีเข้าฉากโดยใช้ซีพียูและวางจุดไฟที่แต่ละจุดของรังสีซึ่งประมาณจะแทนแสงที่สะท้อนออกไปในทุกทิศทางจากรังสีนั้น แสงจำนวนมากเหล่านี้รู้จักกันในชื่อ virtual point lights (VPLs) นั้นแสดงผลโดย GPU ตามปกติ
- แม็พเงาสะท้อนแสง (RSMs)นั้นคล้ายกับวิทยุแบบทันที แต่ VPL นั้นถูกสร้างขึ้นโดยการเรนเดอร์ฉากจากมุมมองของแสง (เช่นแผนที่เงา) และวาง VPL ที่แต่ละพิกเซลของแผนที่นี้
- ปริมาณการแพร่กระจายแสงประกอบด้วยกริด 3 มิติของโพรบ SH ที่วางทั่วฉาก RSM จะแสดงผลและใช้ในการ "ฉีด" แสงสะท้อนกลับเข้าไปในโพรบ SH ที่ใกล้ที่สุดกับพื้นผิวที่สะท้อน จากนั้นกระบวนการเติมน้ำท่วมจะแพร่กระจายแสงจากหัววัด SH แต่ละจุดไปยังจุดรอบ ๆ ในตารางและผลลัพธ์ของสิ่งนี้จะถูกใช้เพื่อปรับแสงให้เข้ากับฉาก เทคนิคนี้ได้ขยายไปถึงการกระเจิงแสงตามปริมาตรเช่นกัน
- การติดตาม Voxel coneทำงานโดยการทำให้เรขาคณิตฉากเกิดขึ้น (น่าจะใช้ความละเอียดของ Voxel ที่หลากหลายปรับให้ดีขึ้นใกล้กับกล้องและ coarser ที่อยู่ไกล) จากนั้นฉีดแสงจาก RSMs ลงในตาราง voxel เมื่อเรนเดอร์ฉากหลัก shader พิกเซลจะทำการ "กรวยติดตาม" - ray-march พร้อมกับค่อย ๆ เพิ่มรัศมี - ผ่านตาราง voxel เพื่อรวบรวมแสงที่เข้ามาสำหรับการกระจายแสงหรือการแรเงาแบบ specular
เทคนิคเหล่านี้ส่วนใหญ่ไม่ได้ใช้กันอย่างแพร่หลายในเกมวันนี้เนื่องจากปัญหาการปรับขนาดถึงขนาดฉากจริงหรือข้อ จำกัด อื่น ๆ ข้อยกเว้นคือการสะท้อนพื้นที่หน้าจอซึ่งเป็นที่นิยมมาก (แม้ว่ามักจะใช้กับ cubemaps เป็นทางเลือกสำหรับภูมิภาคที่ส่วนพื้นที่หน้าจอล้มเหลว)
อย่างที่คุณเห็นการส่องสว่างทางอ้อมแบบเรียลไทม์เป็นหัวข้อใหญ่และแม้แต่คำตอบ (ค่อนข้างยาว!) ก็สามารถให้ภาพรวม 10,000 ฟุตและบริบทสำหรับการอ่านเพิ่มเติม วิธีใดที่ดีที่สุดสำหรับคุณจะขึ้นอยู่กับรายละเอียดของแอปพลิเคชันเฉพาะของคุณข้อ จำกัด ที่คุณต้องการยอมรับและเวลาที่คุณต้องใช้ในการลงเวลา