स्क्रीन स्पेस डेरिवेटिव क्या हैं और मैं उनका उपयोग कब करूंगा?


12

मैं देख रहा हूँ ddxऔर ddyglsl फ़ंक्शंस और hlsl समकक्ष हर बार shader कोड में आते हैं। मैं वर्तमान में उन्हें स्पर्शरेखा या विचित्र के बिना टक्कर मैपिंग करने के लिए उपयोग कर रहा हूं, लेकिन मैं मूल रूप से कोड को कॉपी-पेस्ट करता हूं। मुझे समझ नहीं आता कि ये कार्य वास्तव में क्या हैं, वे क्या करते हैं, और जब मैं उनका उपयोग करना चाहूंगा।

तो सवाल:

  1. स्क्रीनस्पेस डेरिवेटिव फ़ंक्शंस क्या हैं?
  2. ये कार्य क्या करते हैं? इनपुट मान और आउटपुट मान
  3. वे सबसे अधिक किस प्रभाव के लिए उपयोग किए जाते हैं?
  4. किस प्रकार के प्रभावों की आवश्यकता है कि आप इन कार्यों की ओर देखते हैं?

अतीत में मैंने इन्हें बनावट के लिए इस्तेमाल किया है, जहाँ ताना कुछ टुकड़ों के लिए गलत मेपेल का चयन कर सकता है; आम तौर पर एक कम miplevel, इसलिए आप बनावट को बहुत स्पष्ट रूप से विस्तार से देख सकते हैं क्योंकि यह ताना है। अनजाने टेक्सकोर्ड्स का व्युत्पन्न लेना, फिर ताना की गणना करना, फिर टेक्स 2 कार्ड्स / नमूनाग्रैड / टेक्सचरग्रैड का उपयोग ताना वाले टेक्सकोर्ड्स के साथ करना और डेरिवेटिव्स को ऐसा होने से रोकता है।
मैक्सिमस मिनिमस 12

@ LeComteduMerde-fou बनावट युद्ध क्या हैं? एक त्वरित Google आपको रैप का मतलब बताता है?
नेउरअर्काना

नहीं, मैं क्या मतलब है warps , यानी समय के साथ बनावट coords बदलकर बनावट विकृत।
मैक्सिमस मिनिमस

इससे संबंधित प्रश्न देखें । मुझे नहीं लगता कि हालांकि यह काफी डुप्लिकेट है, क्योंकि जुड़ा हुआ सवाल इस बारे में अधिक पूछ रहा है कि ये फ़ंक्शन कैसे काम करते हैं / उनकी गणना कैसे की जाती है, उच्च स्तर के बजाय "यह क्या है और यह किसके लिए अच्छा है?"
DMGregory

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

जवाबों:


12

सबसे पहले, यह जानने में मदद करता है कि GPUs हमेशा एक समय में पिक्सेल के 2x2 ब्लॉकों पर टुकड़े / पिक्सेल शेड का मूल्यांकन करते हैं। (भले ही उन पिक्सेल में से कुछ को अंततः खींचने की आवश्यकता होती है, जबकि अन्य बहुभुज के बाहर हैं या बंद हैं - अनावश्यक टुकड़ों को अंत में लिखे जाने के बजाय बाहर निकाल दिया जाता है)।

रेखागणित त्रिभुज में आरेख चित्रण व्युत्पन्न

vआपके shader में एक चर (या अभिव्यक्ति) के स्क्रीनस्पेस व्युत्पन्न vइस 2x2 पिक्सेल क्वाड के एक तरफ से (कोड में उस बिंदु पर) के मूल्य में अंतर है । अर्थात। ddxका मूल्य है vशून्य से सही पिक्सेल में का मूल्य vबाएं भाग में स्थित है, और इसी तरह के लिए ddyखड़ी पर।

इसका उत्तर " vहम स्क्रीन पर क्षैतिज (ddx) या लंबवत (ddy) बढ़ने पर कितनी तेजी से बढ़ते या घटते हैं?" - अर्थात। कैलकुलस शब्दों में, यह आपके वैरिएबल के अनुमानित डेरिवेटिव को अनुमानित करता है (अनुमानित क्योंकि यह फंक्शन के अनन्तमूलक व्यवहार का मूल्यांकन करने के बजाय प्रत्येक टुकड़े में असतत नमूनों का उपयोग करता है)

स्केलर मात्रा के लिए, हम इसे एक ढाल वेक्टर के रूप में भी देख सकते हैं ∇v = float2(ddx(v), ddy(v))जो स्क्रीनस्पेस दिशा के साथ इंगित करता vहै जिसमें सबसे तेजी से बढ़ रहा है।

इस प्रकार की जानकारी का उपयोग अक्सर आंतरिक रूप से बनावट देखने के लिए एक उपयुक्त मिपमैप या अनिसोट्रोपिक फ़िल्टरिंग कर्नेल का चयन करने के लिए किया जाता है । उदाहरण के लिए, यदि मेरा कैमरा uvटेक्सचर्ड फ्लोर प्लेन की वर्टिकल दिशा के लगभग समानान्तर दिखता है, तो स्क्रीन ddy(uv.y)की तुलना ddx(uv.x)में वर्टिकल ऐक्सिस को फोर्स किया जाता है (- जब एक पिक्सेल स्ट्रेट वर्टिकल स्ट्रैचर स्पेस का लंबा स्ट्रेच कवर करता है) की तुलना में बहुत बड़ा होगा। बनावट के नमूने के हार्डवेयर को बताता है कि मुझे ऐलिसोट्रोपिक फ़िल्टरिंग की आवश्यकता है ताकि उर्जा कलाकृतियों से बचने के लिए ऊर्ध्वाधर बनावट दिशा को क्षैतिज से अधिक धुंधला किया जा सके।

सबसे सरल प्रभावों के लिए आपको इन डेरिवेटिवों का उपयोग करने की आवश्यकता नहीं है, क्योंकि मूल 2 डी बनावट नमूने के तरीके आपके लिए इसे संभालते हैं। लेकिन जैसा कि ऊपर दिए गए एक टिप्पणी में ले कॉम्टे डू मेरडे-फू ने उल्लेख किया है, जब आप अपने बनावट के लुकअप को विकृत कर रहे हैं, तो आपको उपयुक्त फ़िल्टरिंग (जैसे) के माध्यम से हार्डवेयर का चयन करने में मदद करने के लिए स्क्रीनस्पेस डेरिवेटिव को मैन्युअल रूप से प्राप्त करने और / या मालिश करने की आवश्यकता हो सकती है। tex2DlodHLSL में)

स्क्रीनस्पेस डिकैल्स एक ऐसा मामला है, जहां एक एकल 2x2 ब्लॉक गणना की गई बनावट के समन्वय में एक बड़ी छलांग को कवर कर सकता है, यदि आप सिस्टम को फ़िल्टरिंग स्तर की गणना करने की अनुमति देते हैं, तो एक स्मीयर या अलियास किए गए किनारे पर चलते हैं। यह लेख इस कलाकृति के बारे में विस्तार से बताता है और इसे कम करने के लिए दृष्टिकोण करता है

जब आप प्रक्रियात्मक बनावट में शोर कार्यों का उपयोग कर रहे हैं तो ये व्युत्पन्न भी काम कर सकते हैं। यदि कहें, तो आप प्रक्रियात्मक शोर को एक सामान्य मानचित्र में बदलना चाहते थे, ddx & ddy एक सरल, यदि अनुमानित है, तो यह गणना करने का तरीका कि वर्तमान टुकड़े के आसपास के क्षेत्र में शोर का मूल्य कैसे बदल रहा है, और यह किस तरह से ढलान है, तो आप एक उचित सामान्य निर्माण कर सकते हैं।

एंटीअलियासिड लाइनों या चौराहे पर प्रकाश डालने के लिए तकनीकें स्क्रीनस्पेस गति का भी उपयोग कर सकती हैं, यह सुनिश्चित करने के लिए कि मोटाई / फ़ॉलऑफ़ सुसंगत है और ज्यामिति या व्यू एंगल पर निर्भर नहीं है।

जर्नी में सैंड रेंडरिंग के बारे में इस बात में , स्पीकर का उल्लेख है कि वे इन व्युत्पन्न कार्यों का इस्तेमाल कर सकते थे ताकि यह नियंत्रित किया जा सके कि चमकते किनारों के साथ रेत कितनी चमकीली है ... यदि वे समय पर उनके बारे में जानते थे (इसके बजाय उन्होंने एक mipmapping ट्रिक का उपयोग किया था,) जो हुड के तहत वैसे भी इन प्रकार के डेरिवेटिव द्वारा संचालित होता है)

एक आखिरी नोट: जागरूक होने के लिए स्क्रीनस्पेस डेरिवेटिव की गणना "मोटे" / कम परिशुद्धता पर की जा सकती है (जिसका अर्थ है कि डेरिवेटिव की एक जोड़ी को पूरे क्वाड द्वारा साझा किया जाता है) या "ठीक" / उच्च परिशुद्धता (प्रत्येक पिक्सेल की तुलना केवल अपने तत्काल के साथ की जाती है) क्वाड में पड़ोसी, जो क्वाड के ऊपर चार अलग-अलग व्युत्पन्न जोड़े दे सकते हैं)। मोटे तौर पर आम तौर पर बहुत होता है, लेकिन यदि आप नोटिस करते हैं कि आपको अपने प्रभाव में 2x2 ब्लॉक दिखाई दे रहे हैं, तो यह एक अच्छा सुराग है जिसे आप ठीक / उच्च परिशुद्धता पर स्विच करना चाहते हैं। ;)

(शीर्ष पर चित्र में मैंने ठीक व्युत्पन्न के लिए गणना का उपयोग किया है, लेकिन खबरदार है कि बस अपने आप ही ddx / ddy को मोटे व्युत्पन्न करने के लिए डिफ़ॉल्ट हो सकता है)


जब आप कहते हैं कि यह 2x2 ब्लॉक के एक तरफ से पिक्सेल के बीच का अंतर है, तो क्या यह पिक्सेल मूल्य में अंतर है, या टेक्सल स्थिति में अंतर है? यदि यह मूल्य में अंतर है, तो क्या यह टेक्सल्स को बीच में या कुछ और के लिए योग करता है?
नेउमरअकाना

यह तर्क के मूल्य में अंतर है ( vयहां), और चूंकि यह 2x2 क्वाड है, बीच में कोई पिक्सेल नहीं हैं। इसलिए, यदि हम क्वाड के शीर्ष-बाएँ टुकड़े को छायांकित कर रहे हैं, और v = 1 वहाँ, और शीर्ष-दाएँ खंड v = 4 में, तो ddx (v) = 3 (कहते हुए "v 3 से बढ़ जाता है क्योंकि हम चलते हैं सही करने के लिए ") छोड़ दिया
DMGregory

मुझे अभी भी काफी समझ नहीं है। अगर मैं एक कोण पर देख रहा हूं, तो 2x2 ब्लॉक बनावट में साइड की तरफ पिक्सेल से बना नहीं हो सकता है। तो मूल्यों में अंतर, क्या यह दो चयनित टेक्सल्स के बीच का अंतर है, या दो चुने हुए टेक्सल्स के बीच का अंतर, जिन्हें ध्यान में रखते हुए लिया गया है?
नेओराअर्काना

टेक्सल्स को भूल जाओ - यह बनावट का नमूना नहीं है। यह आपके द्वारा ddx या ddy को दिए गए तर्क का शाब्दिक मूल्य ले रहा है, और इसकी तुलना पड़ोसी टुकड़े का मूल्यांकन करते समय ddx या ddy में दिए गए मान से कर रहा है। यदि वह मूल्य एक बनावट के नमूने से आया है, तो ऐसा हो, लेकिन व्युत्पन्न कार्यों में बनावट का ज्ञान नहीं है। वे सिर्फ संख्या घटाते हैं। मैं अपने पीसी पर वापस आने के बाद इस उत्तर में एक आरेख जोड़ने की कोशिश करूँगा।
DMGregory

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