อัลกอริทึม state-of-the-art ปัจจุบันสำหรับเขตข้อมูลความสูงการติดตามเรย์คืออะไร


16

มีเอกสารจำนวนมากในช่วงหลายปีที่ผ่านมาเกี่ยวกับเทคนิคที่แตกต่างกันสำหรับการวาดภูมิประเทศสนามสูงใน ray-tracer อัลกอริธึมบางอย่างเรย์เดินตารางโดยตรง (หรือผ่านควอดทรี) คนอื่น ๆ เปลี่ยนภูมิประเทศให้เป็นตาข่ายรูปหลายเหลี่ยมและใช้การทดสอบจุดตัดแบบสามเหลี่ยมเรย์แบบมาตรฐาน ดูเหมือนว่างานวิจัยจะดำเนินต่อไปในช่วงไม่กี่ปีที่ผ่านมาและมันยากที่จะหางานเขียนในทศวรรษที่ผ่านมา แต่ความสมดุลระหว่างหน่วยความจำและการคำนวณ (ทั้ง CPU และ GPU) ยังคงมีการเปลี่ยนแปลง

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


การสะท้อนพื้นที่หน้าจอ: สร้างฟิลด์ความสูงโดยใช้ความลึกและเฟรมบัฟเฟอร์เรย์ติดตามมันเพื่อรับการสะท้อนกลับอย่างหยาบ ฉันไม่รู้เกี่ยวกับรายละเอียด แต่ฉันจินตนาการถึง Crysis, Killzone, Frostbite เมื่อเร็ว ๆ นี้เป็นต้นมาจะใช้เทคนิคขั้นสูงเพื่อให้มันรวดเร็ว คุณเคยดูเรื่องนี้บ้างไหม?
David Kuri

1
@DavidKuri ขอบคุณนั่นเป็นตัวชี้ที่ดีสำหรับวิธีการทำให้แกนของ ray-marching เร็วขึ้น ควรมีการปรับให้เหมาะสมมากที่สุดสำหรับฟิลด์ความสูงแบบคงที่ซึ่งทำงานได้ไม่ดีในการติดตามพื้นที่หน้าจอเช่นการคำนวณ mipmaps ก่อนการประมวลผลหรือ quadtree ขั้นต่ำดังนั้นฉันยังคงหวังคำตอบ ที่ครอบคลุมนั้น
Dan Hulme

เฮ้แดน BTW คุณกำลังมองหาโซลูชั่น CPU หรือ GPU? และเรียลไทม์หรือการแสดงผลแบบเรียลไทม์?
Alan Wolfe

@AlanWolfe การใช้งานของฉันคือ GPU และไม่ใช่แบบเรียลไทม์ (เช่นปริมาณงานสูงสุดมากกว่าคุณภาพของภาพที่ดีที่สุดที่คุณสามารถจัดการได้ใน 16 มิลลิวินาที) แต่ฉันจะยังตอบคำตอบที่น่าสนใจที่รวดเร็วบนซีพียู
Dan Hulme

คุณสามารถลองสร้างฟิลด์ระยะทางที่ลงนามจากแผนที่ความสูง โดยทั่วไปแล้วพื้นผิว 3 มิติที่เก็บระยะห่างจากพื้นผิวถัดไป สิ่งนี้จะช่วยให้ "เดินทางเร็วกว่ารังสี" Unreal Engine 4 ใช้สิ่งนี้สำหรับการ
บัง

คำตอบ:


12

สำหรับปัจจุบันนี้ค้นหาบทความนี้: "Mipmaps สูงสุดสำหรับการเรนเดอร์ฟิลด์ความสูงแบบไดนามิกที่รวดเร็วแม่นยำและปรับขนาดได้" Tevs et al 2008

แนวคิดพื้นฐานคือการข้ามพื้นที่จำนวนมากโดยการมีความรู้เกี่ยวกับคุณค่าสูงสุดเหนือพื้นที่ขนาดใหญ่ของภูมิประเทศ หากรังสีอยู่เหนือสิ่งนั้นให้ข้ามไปยังพื้นที่ขนาดใหญ่ถัดไป

หากคุณดูรูปที่ 8 คุณจะเห็นการเปรียบเทียบการก้าวเชิงเส้นขั้นพื้นฐานกับการแม็พแม็พสูงสุด ผลลัพธ์การก้าวเชิงเส้นใน 200 ขั้นตอนซึ่งสามารถทำได้แบบเรียลไทม์กับ gpus ที่ทันสมัย ​​แต่ก็ยังช้าอยู่ Max mipmaps ทำเช่นเดียวกันในประมาณ 10 ขั้นตอนทั้งหมดอยู่ใน shader


ฉันยอมรับคำตอบนี้เพราะกระดาษนั้นดีและส่วน "งานที่เกี่ยวข้อง" นั้นค่อนข้างครอบคลุม แม้ว่าฉันจะไม่ได้ใช้เทคนิคนี้อย่างแน่นอน แต่ฉันแน่ใจว่าฉันจะสามารถปรับแต่งบางอย่างสำหรับกรณีการใช้งานของฉันจากสิ่งนี้และการอ้างอิงของมัน
Dan Hulme

คุณพบการสาธิตด้วย mipmaps สูงสุดหรือไม่ ขอบคุณ
raRaRa

ฉันยังไม่ได้อ่านกระดาษ แต่ "การทำแผนที่สูงสุด" ฟังดูคล้ายกับเทคนิคที่ใช้สำหรับCone Step Mapping (ซึ่งปรับปรุงการทำแผนที่ Parallax occlusion โดยการข้ามพื้นที่ขนาดใหญ่ด้วยกรวย)
Julien Guertault

@JulienGuertault ฉันจะบอกว่านี่คือการติดตาม HiZ ธรรมดา มันเป็นวิธีที่ปลอดภัยเพื่อให้แน่ใจในสิ่งที่คุณตี แต่ไม่เร็วมากเมื่อเทียบกับวิธีที่ไม่ปลอดภัยเช่นการค้นหาแบบไบนารี
v.oddou

4

สิ่งที่ดีที่สุดที่ฉันเคยเห็นเป็นการส่วนตัวคือสิ่งที่ inigo quillez ทำ Ray March ภูมิประเทศที่ใหญ่กว่าก้าวไกลกว่าที่คุณได้รับจากกล้องเนื่องจาก (โดยปกติ) รายละเอียดมีความสำคัญน้อยกว่าในระยะไกล (ยกเว้น = กำแพงบาง!) เขาใช้ข้อมูลการเจาะและตัวชี้วัดอื่น ๆ ที่หาได้ง่ายเพื่อจำลองการบดเคี้ยวโดยรอบและเทคนิคการให้แสงที่ซับซ้อนอื่น ๆ

นี่คือตัวอย่างของสิ่งที่กำลังดำเนินการ: https://www.youtube.com/watch?v=_YWMGuh15nE

และนี่คือหน้า IQ ของภูมิประเทศที่น่าอ่านซึ่งน่าสนใจ: http://www.iquilezles.org/www/articles/terrainmarching/terrainmarching.htm

BTW ในเกมสมัยใหม่เทคนิคของ "การสะท้อนพื้นที่หน้าจอ" มักจะเป็นเพียงรังสีเดินขบวนกับบัฟเฟอร์ Z ของฉากที่แสดงผล บัฟเฟอร์ Z เป็นเพียงส่วนของความสูงเท่านั้น

ฉันเห็นการพูดคุยเกี่ยวกับเรื่องนี้ที่ siggraph 2014 และในขณะที่บางคนใช้เทคนิคที่คล้ายกันกับ IQ แต่มีบางคนที่ทำสิ่งต่าง ๆ ไม่ได้เป็น IQ ซึ่งน่าสนใจที่จะดู: P


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

สิ่งนี้ใช้ในรหัส demoscene และภาพสะท้อนบนหน้าจอในเกมที่ทันสมัยที่สุด รหัสที่เร็วที่สุดบางครั้งก็ง่ายที่สุด ฉันจะไม่ปฏิเสธเพราะความเรียบง่าย มันจะน่าสนใจถ้าคุณได้รับคำตอบอื่น ๆ
Alan Wolfe

2
สิ่งที่ขาดหายไปในการตอบสนองของคุณคือ IQ ใช้ตาข่ายความสูงมาตรฐานเป็นการเดาเริ่มต้นเพื่อเริ่มต้นการสำรวจภูมิประเทศที่แท้จริง ครั้งแรกที่เขาแสดงภูมิประเทศที่เป็นโพลีต่ำโดยใช้การแรสเตอร์แบบมาตรฐานและจากนั้นจะใช้พิกเซล shader เหนือภาพที่เริ่มต้นการเรย์แสงที่ความลึกเชิงแรสเตอร์ นี่เป็นวิธีเดียวที่จะทำให้เรียลไทม์นี้จริง
Benedikt Bitterli

ฉันเชื่อว่าเพียงส่วนเดียวของสิ่งที่คุณพูดเป็นเรื่องจริง เขาใช้การวิเคราะห์พฤติกรรมตามความสูงของภูมิประเทศ (รวมถึงระยะห่างจากกล้อง) เพื่อดูว่ารังสีสามารถเดินได้ไกลแค่ไหน แต่เท่าที่ฉันเคยได้ยินเขาไม่ได้ใช้การแรสเตอร์ นี่คือตัวอย่างผลงานของเขาซึ่งไม่ได้ใช้ rasterization แต่นั่นไม่ได้หมายความว่าจะไม่มีการใช้งานที่ต้องใช้ rasterization: shadertoy.com/view/MdX3Rr
Alan Wolfe

ฉันสับสนเล็กน้อยว่าคำถามนั้นเกี่ยวกับการติดตามรังสีและคำตอบนี้เกี่ยวกับการเดินขบวนของเรย์ มีความแตกต่างพื้นฐานระหว่างทั้งสองและสิ่งที่พวกเขาสามารถบรรลุ
Julien Guertault

4

การทำแผนที่ขั้นตอนที่เป็นกรวยและการทำแผนที่ขั้นตอนในกรวยที่ผ่อนคลายดูเหมือนจะเป็นอัลกอริธึมที่เหมาะสมมาก สิ่งเหล่านี้ต้องอาศัยการประมวลผลข้อมูลส่วนสูงล่วงหน้าเพื่อสร้างแผนที่ 2D ที่ใช้สำหรับการค้นหาที่มีประสิทธิภาพมากขึ้น

http://www.lonesock.net/files/ConeStepMapping.pdf https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch18.html

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.