मैं आंख अनुकूलन और एचडीआर के साथ टोन मैपिंग को लागू करने की कोशिश कर रहा हूं। वास्तव में मैंने इसे पहले ही लागू कर दिया था लेकिन मैं परिणाम से संतुष्ट नहीं हूं और मुझे लगता है कि मैंने कुछ गलत किया है।
मेरी अंतिम छवि (पोस्टप्रॉसेसिंग से पहले) मैं आधी फ्लोट बनावट में संग्रहीत करता हूं। मेरे पास 2 सहायक पाठ भी हैं। पिछले एक मील के नक्शे में पहले एक स्टोर में ल्यूमिनेन्स और एवीजी, मिन और अधिकतम रंग होता है। दूसरा एक भंडार मूल्य को अनुकूलित करता है जो इस प्रकार है:
prevLum + (avgLum - prevLum) * (1.0 - exp2(-adaptionRate))
जहां prevLum पिछला अनुकूलन मूल्य है (इस बनावट का आकार 1x1 है)। लॉग ल्यूमिनेन्स बनावट R8B8G8 प्रारूप है और दूसरा R8 है। ट्यूटोरियल में मैंने देखा कि आधे फ्लोट टेक्सचर का उपयोग किया जाता है लेकिन मेरे मामले में मुझे बहुत उज्ज्वल चित्र (लगभग सफेद) मिले हैं।
अंतिम postprocess shader में मैं इस कोड का उपयोग करके आंखों के अनुकूलन और टोन मैपिंग प्राप्त करने के लिए सभी मूल्यों का उपयोग कर रहा हूं:
float autokey(in float lum) {
return 1.03 - 2.0 / (2.0 + log10(lum + 1.0));
}
float hejl(in float color) {
float x = max(0.0, color - 0.004);
return (x * (A * x + B)) / (x * (A * x + C) + D);
}
float adaptedLum = texture(adaptedLuminance, vec2(0.5)).r;
float exp = exposure * autokey(adaptedLum) / adaptedLum;
result *= exp;
result.xyz=RGB2xyY(result.xyz); // conversion to CIE xyY
result.z = hejl(result.z);
result.xyz=xyY2RGB(result.xyz);
और यहाँ मेरे परिणाम हैं:
- आंखों का अनुकूलन और टोन मैपिंग चालू
- केवल आंख का अनुकूलन
- टोनिंग मैपिंग
- सब कुछ बंद
जैसा कि आप देख सकते हैं जब बनी रंग पर टोन मानचित्रण चालू होता है। और जब अंतिम छवि पर आंख का अनुकूलन चालू होता है तो वह अधिक गहरा होता है। क्या कोई मुझे समझा सकता है कि क्या कारण हो सकते हैं, क्योंकि मुझे लगता है कि यहां कुछ गलत है। शायद यह रंग रिक्त स्थान के साथ कुछ है जो मुझे अच्छी तरह से समझ में नहीं आता है? या खिलने के साथ जो टोन मैपिंग और आंखों के अनुकूलन से पहले लगाया जाता है?
मेरे पास आंख अनुकूलन के साथ एक और अजीब व्यवहार भी है। जब मैं अंधेरे क्षेत्रों को देख रहा हूं, तो पृष्ठभूमि (आकाश) तेज हो जाती है। यह ठीक है, लेकिन यह हमेशा होता है जब कैमरे का केंद्र काले क्षेत्र पर होता है (कोई फर्क नहीं पड़ता कि कैमरा इस क्षेत्र से कितना दूर है)।
मैं इस पृष्ठ पर परियोजनाओं में शामिल कार्यान्वयन पर आधारित हूं: जॉन चैपमैन , न्यूट्री सॉफ्टवेयर