ฉันได้ดำเนินการขยายพันธุ์แสง Cascaded เล่มอัลกอริทึม (ไม่มีแชโดว์อ้อมยัง) สำหรับแบบ real-time กระจายโลกสว่างรายละเอียดที่นี่และที่นี่ ใช้งานได้ดี แต่ฉันยังคงพยายามแก้ไขสิ่งประดิษฐ์โดยเฉพาะอย่างยิ่ง
สรุปสั้น ๆ
คุณสามารถข้ามสิ่งนี้ได้หากคุณรู้วิธีการทำงานของอัลกอริทึมแล้ว
อัลกอริธึมทำงานโดยการจัดเก็บข้อมูลแสงในรูปแบบของฮาร์โมนิกส์กลมในตาราง 3 มิติโดยเริ่มแรกข้อมูลในแต่ละเซลล์ของกริดมาจากการแสดงแผนที่เงาแบบขยาย ( แผนที่เงาสะท้อนแสง)) ที่มีสีและข้อมูลปกตินอกเหนือจากความลึก แนวคิดก็คือพิกเซลทั้งหมดที่มองเห็นโดยแหล่งกำเนิดแสงนั้นเป็นสาเหตุของการสะท้อนแสงทางอ้อมครั้งแรกดังนั้นคุณจึงจัดเก็บข้อมูลที่จำเป็นพร้อมกับบัฟเฟอร์ความลึกปกติที่คุณใช้สำหรับการทำแผนที่เงาและตัวอย่างข้อมูลทั้งหมดเพื่อเริ่มต้นตาราง 3D . ข้อมูลในตาราง 3 มิติจะถูกแพร่กระจายซ้ำ ๆ กัน (สำหรับการวนซ้ำแต่ละครั้ง) เผยแพร่ข้อมูลในเซลล์เดียวไปยังเพื่อนบ้านโดยตรงทั้งหมด 6 แห่ง (เหนือ, ล่าง, ซ้าย, ขวา, บน, ล่าง) เมื่อต้องการให้แสงฉากโดยใช้ข้อมูลในตารางคุณใช้การส่งผ่านหน้าจอแบบเต็มหน้าจอสำหรับแต่ละพิกเซลที่ผ่านการแรสเตอร์คุณมีตำแหน่งพื้นที่โลกของพื้นผิวที่มีการแรสเตอร์ (เช่นจาก G-Buffers ในการแรเงาแบบเลื่อน) ทราบว่าเซลของกริดหนึ่งพิกเซลบนหน้าจอเป็นของใคร
นี่เป็นการทำงานที่ดีสำหรับส่วนใหญ่นี่คือภาพสองภาพที่ไม่มีการจำลอง GI และเพียงแค่คำศัพท์ล้อมรอบฮาร์ดโค้ดและถัดจากภาพด้วยอัลกอริทึม LPV สังเกตเห็นการสะท้อนสีบนพื้นผิวรายละเอียดเชิงลึกที่ดีขึ้น ฯลฯ
ปัญหา
เมื่อค้นหาเซลล์ในช่วงแสงการแก้ไข trilinear (โดยใช้ฟิลเตอร์พื้นผิวของฮาร์ดแวร์) จะถูกใช้เพื่อสอดแทรกข้อมูลระหว่างจุดกึ่งกลางของเซลล์เซลล์ที่อยู่ใกล้เคียงและการประสานงานพื้นผิวที่เกิดขึ้นจริงได้อย่างราบรื่น โดยพื้นฐานแล้วการแก้ไขนี้เลียนแบบการแพร่กระจายของข้อมูลแสงที่ศูนย์กลางของเซลล์ไปยังพิกเซลคอนกรีตรอบ ๆ จุดศูนย์กลางที่มีการค้นหาข้อมูล นี่เป็นสิ่งจำเป็นเพราะมิฉะนั้นแสงจะดูหยาบและน่าเกลียด อย่างไรก็ตามเนื่องจากการแก้ไข trilinear ไม่ได้คำนึงถึงทิศทางของการแพร่กระจายของแสงของข้อมูลแสงที่เข้ารหัสในเซลล์ (จำไว้ว่ามันอยู่ในทรงกลมประสานกัน) แสงสามารถแพร่กระจายอย่างไม่ถูกต้องไปยังพิกเซลค้นหา ตัวอย่างเช่นหากความเปล่งปลั่งที่เข้ารหัสในเซลล์แพร่กระจายสู่ (1,0,0) เท่านั้น ("
สิ่งนี้ทำให้เกิดแสงเลือดไหลบนผนังรางอย่างไม่ถูกต้องเมื่อขนาดของเซลล์ในกริดมีขนาดใหญ่เมื่อเทียบกับพื้นผิวในฉาก (จำเป็นเนื่องจากคุณต้องมีเซลล์ขนาดใหญ่เพื่อกระจายแสงไปยังที่เกิดเหตุ นี่คือสิ่งที่ดูเหมือนว่า:
อย่างที่คุณเห็น (จากภาพเงาที่มุมขวาด้านบน) ฉากนั้นสว่างโดยแหล่งกำเนิดแสงทิศทางที่ใดที่หนึ่งเหนือฉากไปทางซ้ายบน และเนื่องจากมีเซลล์เพียงเซลล์เดียวที่แยกด้านนอกของเอเทรียมและด้านในออกมาแสงจะส่องผ่านและผนังทางด้านซ้ายจะติดสว่างไม่ถูกต้อง
คำถามจริง
ผู้เขียนแนะนำรูปแบบของตัวกรอง anisotropic ด้วยตนเองเพื่อแก้ไขปัญหานี้ เขาให้ความกระจ่างใส (ฉันสมมติว่าค่าสัมประสิทธิ์ SH สุ่มตัวอย่างจากเซลล์ปัจจุบัน) ไปยังทิศทางของพื้นผิวปกติ n เป็น:
และรัฐต่างๆ
ดังนั้นโดยการเปรียบเทียบอนุพันธ์ทิศทางความกระจ่างใสกับทิศทางความกระจ่างใสที่เกิดขึ้นจริงมันสามารถคำนวณได้ว่าการกระจายความกระจ่างใสเริ่มต้นสูงกว่าการประมาณค่าแบบไตรลิเนียร์ในจุดนี้หรือไม่
คำถามของฉัน:
ในสมการฟังก์ชั่น c (x) ดูเหมือนจะเป็นค่าสัมประสิทธิ์ SH ที่จุด (x) ดังนั้นการไล่ระดับสีแบบเรเดียนซ์จึงถูกคำนวณเหมือนเลขปกติทั่วไปเนื่องจากความแตกต่างของค่าสัมประสิทธิ์ SH ที่จุด x - (n / 2) และ x + (n / 2) อย่างไรก็ตาม c (x) ในบริบทของฉันคืออะไร ขณะนี้ฉันกำลังสมมติว่า c (x) หมายถึงค่าสัมประสิทธิ์การประมาณค่าไตรภาคีที่ตำแหน่งพื้นผิว (x) แต่ฉันไม่แน่ใจเลยเนื่องจากฉันไม่รู้ว่าควรให้ข้อมูลเพิ่มเติมเกี่ยวกับทิศทาง การกระจายของสัมประสิทธิ์ SH
แล้วการไล่ระดับสีนั้นจะเปลี่ยนวิธีการใช้แสงตัวอย่างจากเซลล์ไปยังพื้นผิวได้อย่างไร? ผู้เขียนเพิ่งเขียน "การเปรียบเทียบอนุพันธ์ทิศทางความกระจ่างใสกับทิศทางความกระจ่างใส" แต่นี่ค่อนข้างคลุมเครือ
เขากล่าวถึงการใช้ "โครงการสร้างความแตกต่างกลาง" และอ้างอิงสไลด์เหล่านี้สำหรับค่าความแตกต่างกลางของสัมประสิทธิ์ SH และอ้างอิงเอกสารนี้ซึ่งแสดงการเปลี่ยนแปลงของการไล่ระดับสี แต่ตอนนี้ฉันไม่สามารถสรุปผลที่เป็นประโยชน์จากพวกเขาได้