पूरी तरह से तकनीकी शब्दों में, fwidth(p)
के रूप में परिभाषित किया गया है
fwidth(p) := abs(dFdx(p)) + abs(dFdy(p))
और dFdx(p)
/dFdy(p)
और स्क्रीन आयामों के p
संबंध में मूल्य के आंशिक व्युत्पन्न हैं । इसलिए वे निरूपित करते हैं कि एक पिक्सेल को दाईं ओर ( ) या एक पिक्सेल ऊपर ( ) में जाने पर व्यवहार का मूल्य कैसे होता है ।x
y
p
x
y
अब वे व्यावहारिक रूप से कैसे गणना कर सकते हैं? ठीक है, अगर आप पड़ोसी के पिक्सल के मूल्यों को जानते हैंp
सीधे उन व्युत्पन्न अंतरों की गणना कर सकते हैं जो कि उनके वास्तविक गणितीय व्युत्पत्ति के लिए एक अनुमान के रूप में प्रत्यक्ष परिमित अंतर हैं (जिनका सटीक विश्लेषणात्मक समाधान नहीं हो सकता है):
dFdx(p) := p(x+1) - p(x)
लेकिन निश्चित रूप से अब आप पूछ सकते हैं, हम p
पड़ोसी के पिक्सल के लिए ( यहां तक कि shader प्रोग्राम के अंदर किसी भी मनमाने ढंग से गणना किए गए मूल्य के मूल्य को कैसे जान सकते हैं) भी जानते हैं ? हम पूरे शैडर की गणना दो (या तीन) बार करके प्रमुख ओवरहेड के बिना उन मूल्यों की गणना कैसे करते हैं?
ठीक है, आप जानते हैं कि, उन पड़ोसी मूल्यों को किसी भी तरह से गणना की जाती है, क्योंकि पड़ोसी पिक्सेल के लिए आप एक टुकड़ा शेडर भी चलाते हैं। इतना सब कुछ है कि आप की जरूरत है जब पड़ोसी पिक्सेल के लिए चलाने के लिए इस पड़ोसी टुकड़ा shader आह्वान है। लेकिन यह और भी आसान है, क्योंकि उन पड़ोसी मूल्यों की गणना भी उसी समय की जाती है।
आधुनिक रैस्टरएज़र एक से अधिक पड़ोसी पिक्सल के बड़े टाइलों में टुकड़े टुकड़े करते हैं। सबसे छोटे वे पिक्सल के 2x2 ग्रिड होंगे। और इस तरह के प्रत्येक पिक्सेल के लिए प्रत्येक पिक्सेल के लिए खंड shader को लागू किया जाता है और उन चालानों को चलाया जाता है )। तो किसी भी समय, एक टुकड़ा shader सैद्धांतिक रूप से अपने पड़ोसी पिक्सल के टुकड़े shader मूल्यों तक पहुँच प्राप्त करता है। और जब आप उन मूल्यों के लिए सीधी पहुँच नहीं है, आप व्युत्पन्न कार्यों की तरह उन लोगों से गणना की मूल्यों की भी पहुंच , , , ... को पूरी तरह से समानांतर लॉक-स्टेप में जाता है ताकि सभी गणना सटीक उसी क्रम में और ब्लॉक में प्रत्येक पिक्सेल के लिए सटीक एक ही समय में हो सकें। (यह भी कि क्यों टुकड़े टुकड़े में शाखाओं में बँधना, जबकि घातक नहीं है, यदि संभव हो तो बचा जाना चाहिए, क्योंकि ब्लॉक के प्रत्येक आह्वान को प्रत्येक शाखा का पता लगाना होगा जो कम से कम एक आक्रमण द्वारा लिया जाता है, भले ही वह बस दूर हो जाए। परिणाम बाद में, जैसा कि इस संबंधित प्रश्न के उत्तर में भी दर्शाया गया हैdFdx
dFdy
fwidth
dFdx(p) = p(x1) - p(x)
, तो या तोx1
हो सकता है(x+1)
या(x-1)
,x
क्वाड में पिक्सेल की स्थिति पर निर्भर करता है । किसी भी तरह से,x1
एक ही ताना / लहर के रूप में होना चाहिएx
। क्या मैं सही हूँ?