कैसे काम करते हैं Raymarch shaders?


49

मैं shadertoy.com में पाए जाने वाले शेड्स को देख रहा हूं और अधिकांश शांत लोगों में शोर और रमैर्च आम हैं। मुझे सोर्स कोड बिलकुल भी समझ नहीं आ रहा है लेकिन मैं वास्तव में चाहता हूँ। ये शेड कैसे काम करते हैं और किरणमार्च एल्गोरिदम कैसे काम करता है? मैंने सब खोज लिया है और इस विषय पर कुछ भी नहीं पा सकता हूँ।

धन्यवाद


6
Iñigo Quilez ने उसके बारे में उत्कृष्ट ट्यूटोरियल लिखा है। Iquilezles.org/www/articles/raymarchingdf/raymarchingdf.htm , iquilezles.org/www/material/nvscene2008/nvscene2008.htm और iquilezles.org/www/articles/distfunctions/distfunctions.htm देखें । ये शांत शेड्स केवल कोई किरण नहीं है, बल्कि विशेष रूप से किरणों से दूरी वाले क्षेत्र हैं, जिन्हें गोलाकार अनुरेखण भी कहा जाता है।
एमएसएल

क्या आप सामान्य रूप से किरण मार्च करने के बारे में पूछ रहे हैं या जीपीयू पर किरण मार्च कर रहे हैं?
कॉन्सेप्ट 3 डी

@ मिलो क्या आप अपना प्रश्न स्पष्ट कर सकते हैं? क्या आप पूछ रहे हैं कि शांत एल्गोरिदम में आपके द्वारा देखी जाने वाली छवियों को उत्पन्न करने के लिए इन एल्गोरिदम का उपयोग कैसे किया जाता है? क्या आप पूछ रहे हैं कि किरण मार्च कैसे काम करती है? क्या आप पूछ रहे हैं कि खंड / पिक्सेल शेड (यानी कुशल कार्यान्वयन) में किरण कैसे काम करती है?
ट्रैविसग

मैंने एकता इंजन में github.com/smkplus/UnityRayMarching
Seyed Morteza Kamali

जवाबों:


79

यह संभव है कि किरण के विपरीत इसके विपरीत को समझना आसान हो।

रेमिट्रिंग के साथ एक आदिम को प्रस्तुत करने के लिए, आपको एक फ़ंक्शन की आवश्यकता होती है, जो कि आदिम और इनपुट किरण को देखते हुए, आपको यह बताता है कि वास्तव में वह कहाँ आदिम को हिट करता है। फिर आप सभी संबंधित प्राथमिकताओं के खिलाफ किरण का परीक्षण कर सकते हैं, और निकटतम चौराहे को चुन सकते हैं। सीपीयू इस पर अच्छे हैं।

किरण के साथ, आपके पास इस तरह के एक सरल किरण चौराहे समारोह नहीं है। किरण पर एक बिंदु को देखते हुए, आप अनुमान लगा सकते हैं कि बिंदु सतह के कितने करीब है, लेकिन आपको यह नहीं पता है कि सतह को हिट करने के लिए आपको उस किरण को कितनी दूर तक फैलाने की आवश्यकता है।

तो, आप एक बार में एक कदम "मार्च" करते हैं:

  1. किरण की "शुरुआत" पर - दृश्य प्रतिपादन के लिए पास का विमान, या बाउंडिंग वॉल्यूम के साथ चौराहे यदि यह दृश्य में सिर्फ एक वस्तु है। (नीचे दिए गए आरेख में P0)

  2. सतह के कितने करीब हैं, इसका अनुमान लगाने के लिए अपनी दूरी के कार्य का मूल्यांकन करें। (आरेख में सबसे बड़ा वृत्त)

  3. अपने अनुमान के अनुसार किरण के साथ आगे बढ़ें। यह कदम रूढ़िवादी रूप से छोटा होना चाहिए, इसलिए आपको विश्वास है कि आप कहीं भी सतह के माध्यम से सुरंग नहीं बनाएंगे।

  4. अब आपके पास एक नया बिंदु है (नीचे P1) - एक नया अनुमान प्राप्त करें और दोहराएं।

  5. तब तक अनुमान प्राप्त करना जारी रखें और तब तक आगे बढ़ते रहें जब तक कि आप सतह की दहलीज से कुछ दूरी पर न पहुँच जाएँ, या आप अपनी अधिकतम चरण गणना पर न चल जाएँ। (नीचे P4)

  6. अब आपके पास सतह की गहराई है, और पास के नमूनों से मानदंड / परिवेश रोड़ा जैसी चीजों का अनुमान लगा सकते हैं, और इस डेटा का उपयोग पिक्सेल को प्रकाश और रंग करने के लिए कर सकते हैं।

P0 से इसके चौराहे की ओर एक किरण मार्च करना

जीपीयू रत्न 2, अध्याय 8 से उदाहरण आरेख

क्योंकि प्रत्येक किरण स्वतंत्र है और प्रत्येक चरण में केवल (आमतौर पर) स्थानीय जानकारी का उपयोग करती है, यह GPU पर समानांतर बनाने के लिए परिपक्व है। अक्सर, स्क्रीन पर केवल दो त्रिकोण खींचे जाएंगे। इनका रेखांकन करने के बाद, प्रत्येक पिंड विखंडन करने वाले के पास एक एकल किरण का प्रतिनिधित्व करता है। टुकड़ा shader उस किरण को तब तक मार्च करता है जब तक यह सतह तक नहीं पहुंच जाता है, परिणाम लौटाता है (अक्सर एक अलग पूर्ण-स्क्रीन पास में बनावट और छायांकन के लिए केवल गहराई मूल्य)।

सटीक चरण उस विशेष प्रभाव पर बहुत निर्भर करते हैं जिसे आप प्राप्त करने की कोशिश कर रहे हैं। Raymarching तकनीकों का उपयोग किया जाता है ...

  • परम्परागत rasterized ज्यामिति (लंबन रोड़ा मानचित्रण) पर सतह विस्थापन अनुकरण करने के लिए heightfields
  • स्क्रीनप्ले प्रतिबिंब जैसी चीजों के लिए दृश्य गहराई बफ़र्स
  • 3 डी-सैंपल डेटासेट्स (अक्सर वैज्ञानिक / चिकित्सा) की कल्पना के लिए वॉल्यूम बनावट
  • भग्न जैसी चीजों के प्रतिपादन के लिए निहित कार्य
  • Iñigo Quilez के काम के रूप में प्रक्रियात्मक दूरी के क्षेत्र (ऊपर टिप्पणी में msell से महान लिंक)।

Raymarching का उपयोग प्रत्येक कदम पर सम्मिश्रण के साथ किया जाता है (अक्सर एक दूरी का आकलन करने के बजाय प्रत्येक बार निश्चित चरणों का उपयोग करके), इस तरह के उदाहरण के लिए, विकिपीडिया से उदाहरण के लिए

एक पारदर्शी मात्रा बनावट Raymarching

यह वास्तविक समय में विस्तृत बादलों को प्रस्तुत करने का एक लोकप्रिय तरीका बन गया है ।

यहां तक ​​कि आंतरिक मानचित्रण , खिड़कियों के निर्माण के पीछे आंतरिक कमरे के विस्तार का एक तरीका है, जिसे किरण का एक रूप माना जा सकता है, जहां किरण को उस बिंदु से आगे बढ़ाया जाता है जो खिड़की से निकटतम दीवार, फर्श / छत, या फर्नीचर विमान में प्रवेश करती है।

यदि आपकी किसी विशिष्ट प्रकार की किरण का प्रभाव है, जिसमें आप रुचि रखते हैं, तो आप संभवतः विशिष्ट उदाहरणों के साथ एक नया प्रश्न पूछकर अधिक विस्तृत उत्तर प्राप्त कर सकते हैं। एक परिवार के रूप में, तकनीक एक छोटे से उत्तर में सब कुछ कवर करने के लिए बहुत विविध है। ;) मुझे आशा है कि यह आपको समझने के लिए एक रूपरेखा प्रदान करता है कि इन रंगों में हुड के नीचे क्या हो रहा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.