मैं अपनी रूपरेखा चमक प्रभाव में अलियासिंग को कैसे कम कर सकता हूं?


42

मैं लेफ्ट 4 डेड गेम में ग्लोइंग आउटलाइन इफेक्ट को दोहराने की कोशिश कर रहा हूं। प्रभाव के कारण वस्तुओं को चमकना पड़ता है, तब भी जब वस्तु को हटा दिया जाता है। यहाँ प्रभाव का एक स्क्रीनशॉट है:

यहाँ छवि विवरण दर्ज करें

मैं अपने OpenGL आधारित कार्यक्रम में इस प्रभाव को दोहराने में सक्षम हूं। यह मैं वर्तमान में कर रहा हूँ:

  • एक रंग और गहराई की बनावट बनाएं जो चमकती हुई वस्तुओं को प्रस्तुत करने के लिए स्क्रीन आकार का आधा हो
  • चमक रंग / गहराई बनावट साफ़ करें। रंग को काला करने के लिए साफ किया जाता है।
  • प्रत्येक चमकने वाली वस्तु के लिए, उसे ठोस रंग के रूप में चमक बनावट के लिए प्रस्तुत करें
  • चमक बनावट पर एक अलग करने योग्य गाऊसी धब्बा का प्रदर्शन करें
  • पूर्ण रिज़ॉल्यूशन दृश्य को सामान्य के रूप में रेंडर करें
  • Additively सामान्य दृश्य के साथ चमक बनावट को मिलाते हैं, लेकिन ऑब्जेक्ट को मास्क करने के लिए चमक गहराई बनावट का उपयोग करते हैं, जिससे केवल धुंधला हो जाता है।

यहाँ मेरे दृष्टिकोण का एक स्क्रीनशॉट है:

यहाँ छवि विवरण दर्ज करें

यहाँ टुकड़ा shader है कि दृश्य के साथ चमक बनावट को जोड़ती है:

uniform sampler2D glowColorTex;
uniform sampler2D glowDepthTex;
uniform sampler2D sceneColorTex;
void main()
{
    vec2 uv = gl_TexCoord[0].st;

    vec4 color = texture2D( sceneColorTex, uv);

    float depth = texture2D( glowDepthTex, uv).r;
    if(depth == 1.0) {
        color += 2.0 * texture2D( glowColorTex, uv);
    }

    gl_FragColor = color;
}

जैसा कि आप देख सकते हैं, यह अधिकांश भाग के लिए काम करता है, लेकिन रूपरेखा पर उपनाम वास्तव में खराब है।

किसी को भी रूपरेखा के भीतरी किनारे चौरसाई के लिए कोई सुझाव है?

क्या मुझे प्रत्येक पिक्सेल की पड़ोसी गहराई के मूल्यों का नमूना लेना चाहिए और 1.0 के बराबर गहराई वाले मूल्यों की संख्या के आधार पर चमक को स्केल करना चाहिए?

या वहाँ एक बेहतर दृष्टिकोण है जो चिकनी परिणाम देगा?

जवाबों:


13

हो सकता है कि कम-रिज़ॉल्यूशन की गहराई वाले बफर के खिलाफ इसकी जांच करने के बजाय आप स्टैंसिल टेस्ट का उपयोग कर सकते हैं। सामान्य दृश्य का प्रतिपादन करते समय, आप बस उस वस्तु को प्रस्तुत करते हैं, जिसे स्टेंसिल बफर में चमकना चाहिए (गहराई-परीक्षण के बिना, मुझे लगता है) और फिर पूरी चमक बनावट को इसमें मिलाएं, लेकिन स्टैंसिल-परीक्षण को केवल पास करने के लिए कॉन्फ़िगर करें जहां स्टैंसिल बफर है सेट नहीं किया गया, इसलिए उच्च-रिज़ॉल्यूशन ऑब्जेक्ट को मास्क करना।

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


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