เรย์มาร์ชนิ่งคืออะไร? การติดตามทรงกลมเป็นสิ่งเดียวกันหรือไม่


31

การสาธิตของ ShaderToy จำนวนมากแบ่งปันอัลกอริทึม Ray Marching เพื่อแสดงฉาก แต่บ่อยครั้งที่พวกเขาเขียนด้วยสไตล์ที่กะทัดรัดมากและฉันไม่สามารถหาตัวอย่างหรือคำอธิบายที่ตรงไปตรงมาได้

ดังนั้นเรย์มาร์ชนิ่งคืออะไร? ความคิดเห็นบางข้อบ่งชี้ว่าเป็นรูปแบบของ Sphere Tracing อะไรคือข้อดีของการคำนวณของวิธีการดังกล่าวคืออะไร?

คำตอบ:


34

TL; DR

พวกมันอยู่ในตระกูลนักแก้ปัญหาเดียวกันโดยที่การติดตามทรงกลมเป็นวิธีหนึ่งในการเดินเรย์ซึ่งเป็นชื่อสกุล

Raymarching คำจำกัดความ

Raymarching เป็นเทคนิคเล็กน้อยเหมือน raytracing แบบดั้งเดิมที่ฟังก์ชั่นพื้นผิวนั้นไม่ใช่เรื่องง่ายที่จะแก้ปัญหา ใน raytracing คุณแค่เงยหน้าขึ้นมองเรย์ในขณะที่เรย์เดินทัพคุณเดินไปข้างหน้า (หรือกลับไปกลับมา) จนกว่าคุณจะพบทางแยกมีตัวอย่างเพียงพอหรืออะไรก็ตามที่คุณพยายามจะแก้ ลองคิดว่ามันเป็นวิธีการของนิวตัน - ราฟสันสำหรับการค้นหาพื้นผิวหรือการหาข้อสรุปสำหรับการรวมฟังก์ชั่นที่แตกต่างกัน

สิ่งนี้มีประโยชน์หากคุณ:

  • จำเป็นต้องแสดงปริมาตรที่ไม่สม่ำเสมอ
  • การแสดงผลฟังก์ชั่นโดยนัยเศษส่วน
  • การแสดงพื้นผิวตัวแปรชนิดอื่นที่ไม่ทราบจุดตัดก่อนเวลาเช่นการทำแผนที่พาราลิก
  • ฯลฯ

raymarching แบบดั้งเดิม

ภาพที่ 1 : รังสีเดินแบบดั้งเดิมเพื่อค้นหาพื้นผิว

กระทู้ที่เกี่ยวข้อง:

การติดตามทรงกลม

การติดตามทรงกลมเป็นหนึ่งในอัลกอริธึมการเดินเรย์ ไม่ใช่ raymarching ทั้งหมดใช้ประโยชน์จากวิธีนี้เนื่องจากไม่สามารถแปลงเป็นรูปแบบนี้ได้

Sphere สืบค้นกลับถูกนำมาใช้สำหรับการแสดงผลพื้นผิวโดยปริยาย พื้นผิวโดยนัยจะเกิดขึ้นในบางระดับของฟังก์ชั่นต่อเนื่อง ในสาระสำคัญการแก้สมการ

F(X,Y,Z) = 0

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

การติดตามทรงกลมมีขนาดขั้นตอนการปรับตัว

Image 2 : การติดตาม Sphere * ในบันทึกการทำงานว่าขนาดขั้นตอนปรับตัวอย่างไร

สำหรับข้อมูลเพิ่มเติมดู:

* บางทีใน 2d มันควรจะเรียกว่าการติดตามวงกลม :)


1
ฉันอยากจะแนะนำบทความนี้จาก Scratchapixel สำหรับคำอธิบายในเชิงลึก: scratchapixel.com/lessons/advanced-rendering/ ......
18490

@ การเชื่อมโยง user18490 'เพื่อ Scratchapixel ได้ย้ายไปscratchapixel.com/lessons/advanced-rendering/... ส่วนที่เหลือของไซต์ ( scratchapixel.com/index.php ) ก็มีประโยชน์เช่นกัน
WillC

15

Ray marching เป็นการทดสอบจุดตัดซ้ำแบบวนซ้ำซึ่งคุณจะต้องเดินไปตามแนวรัศมีและทดสอบจุดตัดโดยปกติแล้วจะใช้เพื่อค้นหาจุดตัดที่มีรูปทรงเรขาคณิตที่เป็นของแข็งซึ่งการทดสอบภายใน / ภายนอกนั้นรวดเร็ว

ป้อนคำอธิบายรูปภาพที่นี่
ภาพจากเรขาคณิตการแสดงผลพร้อมลวดลายพื้นผิว

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

ป้อนคำอธิบายรูปภาพที่นี่

โดยทั่วไปจะใช้กับ space leaping, เทคนิคการเร่งความเร็วซึ่งการประมวลผลล่วงหน้าบางอย่างให้ระยะห่างที่ปลอดภัยที่คุณสามารถเคลื่อนที่ไปตามแนวรังสีโดยไม่ต้องตัดกันรูปทรงเรขาคณิตหรือดีกว่าโดยไม่ต้องตัดกันแล้วปล่อยให้เรขาคณิตหลุด ตัวอย่างเช่นการทำแผนที่ขั้นตอนรูปกรวยและการทำแผนที่ขั้นตอนรูปกรวยที่ผ่อนคลาย

การติดตามสเฟียร์อาจอ้างถึงการทดสอบการแยกเรย์ - สเฟียร์โดยปริยายแต่ก็เป็นชื่อของเทคนิคการกระโดดอวกาศโดย John Hart ในขณะที่ @ joojaa กล่าวถึงและใช้โดย William Donnelly ( Per-Pixel Displacement Mapping กับ Function Distance ) พื้นผิว 3 มิติเข้ารหัสทรงกลมรัศมีที่ไม่มีรูปทรงเรขาคณิต


คุณไปได้แล้วการถ่ายภาพจากคนอื่นนั้นมีประสิทธิภาพมากกว่าการวาดด้วยตนเอง
joojaa

@ joojaa ใช่เร็วขึ้นถ้าคุณจำได้ว่าพวกเขาอยู่ที่ไหน แต่ไม่มีความรู้สึกพอใจที่ทำมันเอง: P อีกทั้งฉันยังมีบั๊กย่อยการแสดงผลที่โง่ในโครเมี่ยมดังนั้นข้อความจึงมีสีสัน
jozxyqk

1
การแสดงพิกเซลย่อยนั้นเป็นสิ่งที่ไม่ได้ถูกถาม ยัง
joojaa

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