Shader गणित के लिए, रैखिक RGB को sRGB का सरगम ​​क्यों रखना चाहिए?


13

sRGB को अक्सर "रैखिक RGB" के साथ जोड़ा जाता है।

  • छवियों को डिस्क पर संग्रहीत किया जाता है और sRGB में प्रदर्शित करने के लिए पारित किया जाता है , जो लगभग अवधारणात्मक रूप से तीव्रता में समान है।
  • शेडर गणित रैखिक आरजीबी में किया जाता है , जो तीव्रता में शारीरिक रूप से समान है।
  • गामा सुधार को दोनों के बीच परिवर्तित करने के लिए लागू किया जा सकता है।

अब, sRGB का एक मानक है कि colorimetrically इसके सरगम ​​को निर्दिष्ट करता है, यह कहते हुए कि शुद्ध लाल, हरा, नीला और सफेद झूठ। लेकिन सिर्फ "रैखिक RGB" के लिए कोई संगत मानक नहीं है। वर्णक्रमीय आरेख पर किसी भी त्रिभुज को रेखीय कहा जा सकता है, और, वास्तव में, इसमें से चुनने के लिए कई प्रसिद्ध गेम हैं:

आरजीबी सरगम

व्यवहार में, जब हम कहते हैं "रैखिक आरजीबी," हमारा मतलब है "गामा सुधार के बिना sRGB।" (इसका तात्पर्य यह है कि जब हम sRGB गामा सुधार को अंतिम पोस्ट-प्रोसेसिंग कदम के रूप में लागू करते हैं, लेकिन बाकी रेंडरिंग पाइपलाइन के लिए रंग रिक्त स्थान की उपेक्षा करते हैं।)

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

क्या यह है कि आरजीबी लाइटिंग लगभग कोई बात नहीं होने जा रही है, इसलिए इससे कोई फर्क नहीं पड़ता कि हम कौन सा सरगम ​​चुनते हैं, और हो सकता है कि हम किसी एक को सबसे नज़दीक से चुनें जो मूल रूप से प्रदर्शित करता है? क्या यह सिर्फ लापरवाही है? या इन विभिन्न गेम में गणना वास्तव में एक ही परिणाम प्राप्त करते हैं, किसी तरह?

जवाबों:


13

रैखिक आरजीबी के बारे में बात करने से बचना चाहिए क्योंकि यह आपको आरजीबी कोलोरस्पेस इंट्रिनिक्स के बारे में कुछ नहीं बताता है, अर्थात, प्राइमरी, व्हाइटपॉइंट और कलर कंपोनेंट ट्रांसफर फ़ंक्शंस। कुछ साल पहले, यह मानते हुए कि यह sRGB था, लेकिन आजकल DCI-P3 और BT.2020 बहुत आम है, इसे खारिज किया जाना चाहिए।

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

कोई सोच सकता है कि एक ही बेस रंगों के साथ दो रेंडर करना, लेकिन एक जहाँ वे sRGB / BT.709 के साथ एन्कोडेड हैं और दूसरा जहाँ वे DCI-P3 के साथ एन्कोडेड हैं और फिर दो परिणामी छवियों को उदाहरण के लिए AC202065-1 में परिवर्तित करेंगे। एक ही चित्र उपज, लेकिन यह मामला नहीं है। रैखिक बीजगणित और मेट्रिसेस की प्रकृति के कारण कुछ गणितीय कार्य, दिए गए RGB कोलोरस्पेस प्राइमरी पर निर्भर करते हैं, अर्थात, कोलोस्पेस स्पेस के आधार पर। एक ही ऑपरेशन को अलग-अलग आरजीबी कोलोरस्पेस में किए जाने वाले अलग-अलग ट्रिस्टिमुलस वैल्यूज मिलेंगे, जो एक बार CIE XYZ कलर स्पेस में वापस आ जाएंगे। उदाहरण के लिए गुणा, विभाजन और बिजली संचालन आरजीबी कोलोरस प्राइमरी निर्भर हैं जबकि जोड़ और घटाव नहीं हैं।

RGB Colourspaces और Exponentiation

यह छवि विभिन्न रंगों को अपने द्वारा अलग-अलग RGB कोलोरस्पेस में गुणा करने के प्रभाव को दर्शाती है: परिणामी रंग अलग-अलग होते हैं। विभिन्न नमूने निम्नानुसार उत्पन्न होते हैं: 3 यादृच्छिक sRGB colourspace मान उठाए जाते हैं और तीन अध्ययन किए गए RGB colourspaces में कनवर्ट किए जाते हैं, उन्हें घातांकित किया जाता है, वापस sRGB colourspace में परिवर्तित किया जाता है, बाईं ओर CIE 1931 राजनयिक आरेख में प्लॉट किया जाता है और इसे स्वैच के रूप में प्रदर्शित किया जाता है। सही।

वार्ड और ईडलबर्ग-विलेशिन (2002) , लैंग्लैंड्स एंड मेन्सेंकल (2014) और मैन्सेंकल (2014) द्वारा किए गए परीक्षणों और शोधों से पता चला है कि वर्णक्रमीय लोकोस के नज़दीक प्राइमरी के साथ गैमेट्स , यानी वर्णक्रमीय तीक्ष्ण प्राइमरी, वर्णक्रमीय ग्राउंड की तुलना में त्रुटियों को कम करते हैं। सत्य का प्रतिपादन।

यहाँ एक छवि है जिसे मैंने हाल ही में एंडर्स के साथ हमारे निष्कर्षों को फिर से सत्यापित करने के लिए मित्सुबा के साथ प्रदान किया है:

Colourspaces का प्रतिपादन

वे BT.709 प्राइमरी (पहली पंक्ति), 47 वर्णक्रमीय डिब्बे (दूसरी पंक्ति), BT.2020 प्राइमरी (तीसरी पंक्ति), स्पेक्ट्रल माइनस BT.709 प्राइमरी का उपयोग करके अवशेषों (चौथी पंक्ति), स्पेक्ट्रल माइनस BT .2020 प्राइमरी अवशिष्ट (पाँचवीं पंक्ति) का प्रतिपादन करता है। अंतिम पंक्ति क्रमशः बीटी .709 प्राइमरी, वर्णक्रमीय और बीटी 2020 प्राइमरी के तीन ऊर्ध्वाधर पट्टियों के साथ इकट्ठे हुए समग्र चित्र दिखाती है। प्रत्यक्ष रोशनी रेंडरर्स के बीच मेल खाती है। ऐसे क्षेत्र जो कई प्रकाश उछाल के प्रभाव को दर्शाते हैं, अर्थात, BT.709 और BT.2020 प्राइमरी रेंडर में सीलिंग, विशेष रूप से BT ​​में, विशेष रूप से BT.709 प्राइमरी में रेंडर या ऊर्जा के मामूली नुकसान को बढ़ाते हुए, प्रदर्शन को बढ़ाते हैं। .2020 रेंडर। बाहरी कारकों के कारण, जैसे, दृश्य प्रकाश स्रोत को छोड़कर, साथ RMSE प्रस्तुत करना वर्णक्रमीय हैं .0083और 0.0116 क्रमशः BT.2020 प्राइमरी के लिए और BT.709 प्राइमरी बना देता है।

अब इसका मतलब यह नहीं है कि वे हमेशा बेहतर प्रदर्शन करेंगे, और एक ऐसे उदाहरणों का उत्पादन करने में सक्षम हो सकता है जो BT.709 / sRGB की ओर एक पूर्वाग्रह प्रदर्शित करेंगे। मुख्य मार्ग यह है कि आरजीबी रेंडर वर्णक्रमीय रेंडर से मेल नहीं खा सकते हैं और तेज वाइड गेमट बेहतर प्रदर्शन करते हैं। रेंडरिंग कोलोरस्पेस चुनने के लिए, मैं एक विस्तृत सरगम ​​के साथ चुनूंगा जिसमें पॉइंटर के गामुट और DCI-P3, BT.2020 या ACEScg शामिल हैं, जो इसके लिए उत्कृष्ट उम्मीदवार हैं।


5

व्यवहार में, जब हम कहते हैं "रैखिक आरजीबी," हमारा मतलब है "गामा सुधार के बिना sRGB।"

यह कहना अधिक सही होगा कि "sRGB कलर्सस्पेस" और "लाइनराइज़्ड sRGB कलर्सस्पेस" है, जिसमें sRGB विनिर्देश एक से दूसरे में रूपांतरण की परिभाषा देते हैं।

हां, असीम रूप से कई "रैखिक आरजीबी" रंग स्थान हैं। लेकिन बात यह है कि इन "रैखिक आरजीबी" रंगस्थानों के सभी आम है कि वे रैखिक हैं । इसका मतलब है कि, यदि आप किसी भी घटक का मूल्य दोगुना करते हैं, तो आप उस प्रकाश की तीव्रता को दोगुना करते हैं जो घटक का प्रतिनिधित्व करता है। यह अनिवार्य रूप से "रैखिक" होने का मतलब है: रंग मूल्यों और उस हल्के रंग की परिणामी तीव्रता के बीच एक रेखीय मानचित्रण है।

यह महत्वपूर्ण है क्योंकि प्रकाश समीकरण काम नहीं करते हैं यदि रंग मान प्रकाश तीव्रता के लिए रैखिक रूप से मैप नहीं करते हैं। लेकिन समीकरणों का ध्यान नहीं है कि आप किस रैखिक रंग स्थान का उपयोग करते हैं; आपको बस एक चुनना है।

तो रैखिककृत sRGB रंग स्थान एक रेखीयकृत Adobe RGB रंगस्थान या एक रेखीय SWOP CMYK रंग स्थान से अधिक सही नहीं है। क्या मायने रखती है दो चीजें:

  1. Colorpace मूल्यों की एक रेखीय मानचित्रण का प्रतिनिधित्व करता है जो प्रकाश की तीव्रता के लिए है।
  2. चुने गए रंग स्थान का उपयोग लगातार प्रकाश समीकरण में किया जाता है। यही है, प्रकाश समीकरण में उपयोग किए जाने वाले सभी रंग समान (रैखिक) रंग स्थान से आते हैं।

क्या यह है कि आरजीबी लाइटिंग लगभग कोई बात नहीं होने जा रही है, इसलिए इससे कोई फर्क नहीं पड़ता कि हम कौन सा सरगम ​​चुनते हैं, और हो सकता है कि हम किसी एक को सबसे नज़दीक से चुनें जो मूल रूप से प्रदर्शित करता है?

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

या आप बस हर जगह रैखिककृत sRGB का उपयोग कर सकते हैं और प्रदर्शन कर सकते हैं। बाद वाला जीत जाता है।


आप इस लेखन के बारे में क्या सोचते हैं ? मैं यह सही पढ़ रहा हूँ, तो यह दर्शाता है कि अलग अलग रैखिक रंग रिक्त स्थान में गणना कर भिन्न परिणाम मिल।
मैक्सकॉम

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

@ Maxpm लेकिन बेशक वे अन्य सभी रिक्त स्थान अलग होने के बाद करते हैं। लेकिन फिर RGB रंग नहीं है इसलिए ऐसा है। लेकिन फिर सवाल यह है कि क्या आप सही होना चाहते हैं। लाभ छोटे और छोटे हो जाते हैं,
joojaa

0

विशेष रूप से sRGB के दो पक्ष हैं। इनपुट गैर-एचडीआर छवियों के लिए, यह दावा किया जाता है कि उन लोगों को sRGB के लिए संपीड़ित माना जाना चाहिए (चाहे यह दावा सही है एक अलग कहानी है)। इसलिए, इससे पहले कि आप उन पर कोई रेखीय गणित ऑपरेशन कर सकें, आपको उन्हें sRGB से हटाने की आवश्यकता है। यह भी संभव है कि एक छवि पर कब्जा कर लिया गया था और एक अलग प्रतिनिधित्व करने के लिए compresssd जो sRGB नहीं है, उस स्थिति में आपको उस विशिष्ट प्रतिनिधित्व को डिकम्प्रेस करने की आवश्यकता है। किसी भी मामले में, एन्कोडिंग एक निश्चित सरगम ​​का तात्पर्य करता है कि इनपुट छवि कभी भी बच नहीं पाएगी (क्योंकि sRGB- संग्रहित चित्र आम तौर पर प्रति चैनल 8-बिट्स में काट दिए जाते हैं), लेकिन इनपुट के बाद आपके shader गणित को उस सरगम ​​में नहीं रहना पड़ता है छवि विघटित है। लेकिन अंत में आपको प्रदर्शन पर विचार करना होगा।

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

(मुझे लगता है कि इस दावे के लिए आधार है कि मानव निर्मित छवियां sRGB- एन्कोडेड हैं, क्योंकि उन छवियों को sRGB डिस्प्ले पर लेखक के रूप में माना गया है)

तो अब आप शायद बेहतर तरीके से देख सकते हैं कि विशेष रूप से sRGB को shader गणित इनपुट और छवि प्रदर्शन के लिए हार्डवेयर में समर्थन क्यों दिया गया था। यह आम मामला है। इसके अलावा, यह अवधारणात्मक रंग बैंडिंग कलाकृतियों को कम करने के लिए अच्छा गुण है, इसलिए यह 8 बिट्स में रंगों को संपीड़ित करने और उन्हें मनुष्यों के लिए प्रशंसनीय रखने का एक अच्छा तरीका है।


0

यदि आप 0..1 सीमा के बाहर मानों की अनुमति देते हैं, तो भी sRGB की काफी सीमित प्राइमरी के साथ, आप अभी भी पूरे मानव दृश्य सरगम ​​को संबोधित कर सकते हैं। इसलिए फ्लोटिंग पॉइंट लाइट कलर वैल्यू को स्टोर करने के लिए यह बहुत ज्यादा मायने नहीं रखना चाहिए कि आप किन प्राइमरी का उपयोग करते हैं। हालाँकि, किसी भी प्रकार के गुणात्मक गणित को करने से थोड़ा फ़ायदा होता है, क्योंकि प्राइमरी के मनमाने निर्देशांक स्केलिंग 'पिवट' के रूप में कार्य करते हैं। sRGB प्राइमरी का आमतौर पर उपयोग किया जाता है क्योंकि परंपरागत रूप से आपका इनपुट डेटा sRGB एनकोडेड है और आउटपुट डिस्प्ले sRGB या rec709 है ... rec2020 के साथ, इसका आधा बदल गया है, लेकिन अभी के लिए, आपके अधिकांश इनपुट डेटा अभी भी शायद RRGB एनकोडेड हैं, इसलिए उपयोग कर रहे हैं आपके भंडारण के समान प्राइमरी केवल सबसे आसान विकल्प है।

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