ฉันได้ดู shaders พบที่นี่ shadertoy.com และส่วนใหญ่ที่เย็นมีเสียงและ raymarch เหมือนกัน ฉันไม่เข้าใจซอร์สโค้ด แต่ฉันต้องการจริงๆ เฉดสีเหล่านี้ทำงานอย่างไรและอัลกอริทึม raymarch ทำงานอย่างไร ฉันค้นหาทั่วและไม่พบสิ่งใดในหัวข้อ
ขอบคุณ
ฉันได้ดู shaders พบที่นี่ shadertoy.com และส่วนใหญ่ที่เย็นมีเสียงและ raymarch เหมือนกัน ฉันไม่เข้าใจซอร์สโค้ด แต่ฉันต้องการจริงๆ เฉดสีเหล่านี้ทำงานอย่างไรและอัลกอริทึม raymarch ทำงานอย่างไร ฉันค้นหาทั่วและไม่พบสิ่งใดในหัวข้อ
ขอบคุณ
คำตอบ:
มันอาจจะง่ายที่สุดในการเข้าใจโดยเปรียบเทียบกับการฉายรังสี
ในการเรนเดอร์แบบดั้งเดิมด้วย raytracing คุณจำเป็นต้องมีฟังก์ชั่นที่บอกว่าเรย์แบบดั้งเดิมและเรย์อินพุตนั้นบอกคุณตรงจุดที่รังสีนั้นเข้าชมแบบดั้งเดิม จากนั้นคุณสามารถทดสอบรังสีกับแบบดั้งเดิมที่เกี่ยวข้องทั้งหมดและเลือกจุดตัดที่ใกล้ที่สุด ซีพียูดีในเรื่องนี้
ด้วย raymarching คุณไม่มีฟังก์ชั่นการตัดกันแบบง่าย เมื่อกำหนดจุดหนึ่งบนรังสีคุณสามารถประมาณว่าจุดนั้นอยู่ใกล้กับพื้นผิวมากแค่ไหน แต่คุณไม่รู้ว่าคุณต้องขยายรังสีนั้นให้ไกลออกไปถึงพื้นผิวอย่างไร
ดังนั้นคุณ "เดินขบวน" ทีละขั้นตอน:
เริ่มต้นที่ "เริ่มต้น" ของรังสี - ระนาบใกล้สำหรับการเรนเดอร์ฉากหรือจุดตัดที่มีระดับเสียง จำกัด หากมันเป็นเพียงวัตถุเดียวในฉาก (P0 ในแผนภาพด้านล่าง)
ประเมินฟังก์ชันระยะทางของคุณเพื่อรับค่าประมาณว่าคุณอยู่ใกล้พื้นผิวมากแค่ไหน (วงกลมที่ใหญ่ที่สุดในแผนภาพ)
เลื่อนไปข้างหน้าตามแนวรังสีของคุณ การย้ายควรสั้นอย่างระมัดระวังดังนั้นคุณมั่นใจว่าคุณจะไม่เจาะผ่านพื้นผิวทุกที่
ตอนนี้คุณมีจุดใหม่ (P1 ด้านล่าง) - รับประมาณการใหม่และทำซ้ำ
รับการประมาณการต่อไปและก้าวไปข้างหน้าจนกว่าคุณจะได้รับภายในระยะทางขีด จำกัด ของพื้นผิวหรือตีจำนวนขั้นสูงสุดของคุณ (P4 ด้านล่าง)
ตอนนี้คุณมีความลึกของพื้นผิวและสามารถอนุมานสิ่งต่าง ๆ เช่นภาวะปกติ / การบดเคี้ยวแวดล้อมจากตัวอย่างบริเวณใกล้เคียงและใช้ข้อมูลนี้เพื่อให้แสงและสีของพิกเซล
ตัวอย่างไดอะแกรมของ GPU Gems 2 ตอนที่ 8
เนื่องจากแต่ละเรย์มีความเป็นอิสระและใช้ (โดยทั่วไป) เฉพาะข้อมูลท้องถิ่นในแต่ละขั้นตอนจึงสุกสำหรับการขนานกับ GPU บ่อยครั้งที่มีเพียงสองรูปสามเหลี่ยมเท่านั้นที่จะถูกวาดบนหน้าจอ หลังจาก rasterizing สิ่งเหล่านี้แต่ละพิกเซลที่ส่งผ่านไปยังส่วนของ shader จะแทนรังสีเดียว ชิ้นส่วน shader marches ที่เรย์จนกว่าจะถึงพื้นผิวผลตอบแทน (มักจะเป็นเพียงค่าความลึกสำหรับพื้นผิวและแรเงาในผ่านเต็มหน้าจอแยก)
ขั้นตอนที่แน่นอนขึ้นอยู่กับลักษณะพิเศษที่คุณพยายามจะทำให้สำเร็จ ใช้เทคนิค Raymarching กับ ...
Raymarching ยังถูกนำมาใช้กับการผสมในแต่ละขั้นตอน (มักจะใช้ขั้นตอนการแก้ไขแทนการประเมินระยะไกลในแต่ละครั้ง) สำหรับการแสดงผล translucency ปริมาตรเช่นเดียวกับในตัวอย่างนี้จากวิกิพีเดีย
นี้ได้กลายเป็นวิธีที่นิยมที่จะทำให้เมฆรายละเอียดในเรียลไทม์
แม้แต่การทำแผนที่ภายในวิธีการจำลองรายละเอียดห้องตกแต่งภายในด้านหลังหน้าต่างอาคารก็อาจถือได้ว่าเป็นรูปแบบของ raymarching โดยที่รังสีถูกเหยียบจากจุดที่มันเข้าสู่หน้าต่างไปยังผนังชั้น / เพดานหรือระนาบเฟอร์นิเจอร์ที่ใกล้เคียงที่สุด
หากมีลักษณะพิเศษของ raymarching เฉพาะที่คุณสนใจคุณอาจได้รับคำตอบที่ละเอียดกว่านี้โดยถามคำถามใหม่พร้อมตัวอย่างเฉพาะ ในฐานะครอบครัวเทคนิคนี้มีความหลากหลายเกินกว่าที่จะครอบคลุมทุกสิ่งทุกอย่างด้วยคำตอบสั้น ๆ ;) ฉันหวังว่าสิ่งนี้จะช่วยให้คุณมีกรอบสำหรับการทำความเข้าใจกับสิ่งที่เกิดขึ้นภายใต้ประทุนในเฉดสีเหล่านี้