मैं लेफ्ट 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 के बराबर गहराई वाले मूल्यों की संख्या के आधार पर चमक को स्केल करना चाहिए?
या वहाँ एक बेहतर दृष्टिकोण है जो चिकनी परिणाम देगा?