स्टैंसिल बफर क्या है?


26

विकिपीडिया बताता है कि एक स्टैंसिल बफर कुछ मनमाना बफर एक shader उपयोग कर सकते हैं।

हालांकि, यह संकेत देता है कि यह क्लिपिंग के लिए उपयोग किया जाता है, या अन्यथा गहराई और पिक्सेल बफ़र्स को "बाइंडिंग बाइंडिंग" करता है, थोड़ा स्वयं के विपरीत।

स्टैंसिल बफर वास्तव में क्या करता है, और यह आधुनिक अनुप्रयोगों में व्यावहारिक रूप से कैसे उपयोग किया जाता है?

जवाबों:


31

विकिपीडिया द्वारा स्टैंसिल बफर परिभाषा वास्तव में महान नहीं है, यह आधुनिक कार्यान्वयन (ओपनजीएल) के विवरण पर बहुत अधिक ध्यान केंद्रित करता है। मुझे यह समझने में आसान संस्करण की अनुमति नहीं है:

एक स्टैंसिल एक टेम्प्लेट है जिसका उपयोग समान अक्षरों, प्रतीकों, आकृतियों या प्रतिमानों को हर बार इस्तेमाल करने के लिए किया जाता है। इस तरह के टेम्पलेट द्वारा निर्मित डिजाइन को स्टेंसिल भी कहा जाता है।

कंप्यूटर ग्राफिक्स से पहले स्टैंसिल का यही मतलब है। यदि आप Google छवियाँ पर स्टैंसिल लिखते हैं , तो यह पहले परिणामों में से एक है:

स्टेंसिल मास्क

जैसा कि आप देख सकते हैं, यह केवल एक मुखौटा या पैटर्न है जिसका उपयोग किसी चीज पर पैटर्न के नकारात्मक "रंग" के लिए किया जा सकता है।

स्टेंसिल बफर में ठीक उसी तरह से काम करता है। एक स्टैंसिल रेंडर पास करके एक चयनित पैटर्न के साथ स्टैंसिल बफर को भर सकता है, फिर उपयुक्त स्टैंसिल फ़ंक्शन सेट करें जो यह परिभाषित करेगा कि पैटर्न को बाद के चित्र पर कैसे व्याख्या किया जाना है, फिर अंतिम दृश्य प्रस्तुत करें। तुलनात्मक कार्य के अनुसार, स्टैंसिल मास्क के अस्वीकार किए गए क्षेत्रों में आने वाले पिक्सेल खींचे नहीं जाते हैं।


जब स्टैंसिल बफर को लागू करने की बात आती है, तो कभी-कभी यह वास्तव में गहराई बफर के साथ युग्मित होता है। अधिकांश ग्राफिक्स हार्डवेयर 1 बाइट (8 बिट) स्टैंसिल बफर का उपयोग करते हैं, जो कि अधिकांश अनुप्रयोगों के लिए पर्याप्त है। गहराई बफ़र्स आमतौर पर 3 बाइट्स (24 बिट्स) का उपयोग करके कार्यान्वित किया जाता है, जो फिर से अधिकांश प्रकार के 3 डी रेंडरिंग के लिए सामान्य रूप से पर्याप्त होता है। इसलिए स्टेंसिल बफर के 8 बिट्स को गहराई वाले बफर के अन्य 24 के साथ पैक करना केवल तार्किक है, जिससे प्रत्येक गहराई + स्टैंसिल पिक्सेल को 32 बिट पूर्णांक में स्टोर करना संभव हो जाता है। विकिपीडिया का यही अर्थ है:

गहराई बफर और स्टैंसिल बफर अक्सर ग्राफिक्स हार्डवेयर की रैम में एक ही क्षेत्र साझा करते हैं।


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


यह एक चरित्र है, लेकिन cleaver-> clever। मैं इसे संपादित नहीं कर सकता डी: जिस तरह से महान जवाब, यह अब तक का सबसे अधिक समझ में आता है।
Qix

3
यदि आपके पास एक महंगा प्रति पिक्सेल शेडर है, तो स्टैंसिल बफर का उपयोग इसी थ्रेड्स को बैचने के लिए भी किया जा सकता है, विचलन को कम करने और इस ओआईटी पेपर में वृद्धि अधिभोग के रूप में , सेकंड 2.6 (अस्वीकरण: मैं एक लेखक हूं)।
jozxyqk

@jozxyqk, यह कुछ बॉक्स के ठीक बाहर की सोच है! बहुत अच्छा।
glampert

13

स्टैंसिल बफर एक अहस्ताक्षरित पूर्णांक बफर है, आमतौर पर 8-बिट आजकल, जहां आप स्टैंसिल परीक्षण के बाद विभिन्न ऑपरेशन ( उदाहरण के लिए ओपनजीपीएस ऑप्स ) के उपयोग के आधार पर प्रति-पिक्सेल इन्फोमेशन भर सकते हैं ।

स्टैंसिल परीक्षण केवल एक प्रति पिक्सेल ऑपरेशन है जिसमें स्टैंसिल बफर की सामग्री के खिलाफ वर्तमान पिक्सेल स्टैंसिल मूल्य का परीक्षण किया जाता है। आप उस स्थिति को सेट करते हैं जिसमें स्टैंसिल टेस्ट पास किया जाता है (जैसे ALWAYS, LESS आदि)।

आप परीक्षण के परिणाम के आधार पर स्टैंसिल मान का क्या होता है, यह तय कर सकते हैं (ऑपरेशन में OpenGL का उपयोग करके मैंने आपको ऊपर जोड़ा है)

स्टैंसिल बफर के कुछ उपयोग हैं, जो सबसे पहले दिमाग में आते हैं:

  • इसका उपयोग फ्रेमवर्क के कुछ हिस्से को चुनिंदा रूप से प्रस्तुत करने और बाकी को त्यागने के लिए मास्क के रूप में किया जा सकता है। यह, उदाहरण के लिए, प्रतिबिंब के लिए उपयोगी है, लेकिन बहुत अधिक भी है। जब कई रिज़ॉल्यूशन रेंडरिंग के साथ काम किया जाता है, तो इसका उपयोग उन किनारों को चिह्नित करने के लिए किया जा सकता है, जिन्हें एक उच्च रिज़ॉल्यूशन में प्रस्तुत करने की आवश्यकता होती है। वास्तव में मास्किंग के बहुत सारे उपयोग हैं।
  • उदाहरण के लिए एक बहुत ही सरल ओवरड्रॉल फ़िल्टर। आप स्टैंसिल टेस्ट को हमेशा पास करने के लिए सेट कर सकते हैं और हमेशा मूल्य बढ़ा सकते हैं। स्टैंसिल बफर में आपके द्वारा समाप्त किया गया मान आपके ओवरड्रॉ का प्रतिनिधित्व करता है। [*]

अतीत में इसका इस्तेमाल शैडो वॉल्यूम जैसी तकनीकों के लिए भी किया जाता रहा है।

खराब स्टैंसिल बफर अक्सर काफी कम आंका जाता है, लेकिन एक ग्राफिक्स प्रोग्रामर के शस्त्रागार में एक अच्छा हथियार हो सकता है।

[*] सही SRV का उपयोग करके पोस्ट-प्रोसेस में वापस पढ़ा जाने वाला मान!

संपादित करें: इसके अलावा, यह उल्लेख के लायक है कि Shader Model 5.1 (इसलिए D3D11.3 और D3D12) में आपके द्वारा स्टैंसिल संदर्भ मूल्य तक पहुंच है SV_StencilRef


6

एक स्टैंसिल बफ़र में प्रति-पिक्सेल पूर्णांक डेटा होता है, जिसका उपयोग पिक्सेल पर अधिक नियंत्रण जोड़ने के लिए किया जाता है।

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

स्रोत: स्टैंसिल बफर क्या है? | Microsoft डेवलपर नेटवर्क

सामान्य विचार यह है कि आप प्रत्येक पिक्सेल के लिए एक मूल्य निर्धारित कर सकते हैं और फिर ऑपरेशन सेट कर सकते हैं ( GREATERऔर SMALLER, EQUALआदि), जब यह मूल्यांकन करता है कि पिक्सेल छायांकित है और दिखाया गया है।

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

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