क्या OpenGL ES 2.0 के साथ प्रतिपादन / छायांकन संभव है?


20

मैंने StackOverflow पर यह पूछा , लेकिन यह यहाँ और अधिक समझ सकता है:

क्या किसी ने OpenGL ES 2.0 के तहत रेंडरिंग / छायांकन लागू किया है? यह MRTs का समर्थन नहीं करता है, इसलिए केवल एक रंग बफर के साथ, यह ऐसा कुछ नहीं है जिसे "सामान्य" तरीके से लागू किया जा सकता है।

विशेष रूप से, मैं iPad, iPhone4 (maaaybe iPhone 3gs), और Android पर खोज रहा हूं। IPad / iPhone4 / iPhone3gs पर GLESView ऐप पर, GL_OES_RGB8_RGBA8 एक्सटेंशन मौजूद है, और मैंने अभी तक बहुत गहराई से नहीं देखा है, लेकिन 8 बिट्स / चैनल के साथ, यह विचार दिलचस्प है: http://www.gadev.net/topic/ 562,138-ओपन-एस-20 और टाल-छायांकन /

कोई अन्य विचार? क्या यह प्रदर्शन, प्रदर्शन के लायक भी है?


हाँ, यह मुमकिन है।
क़ाज़ी इरफ़ान

7
कौन सी तकनीक है?
जिम बक

जवाबों:


15

हाँ यह संभव है। हालाँकि, यह विशेष रूप से सार्थक नहीं है।

सबसे पहले, जब तक आपके पास NV_draw_buffers एक्सटेंशन तक पहुंच नहीं होती है (जैसा कि नाम का अर्थ है, यह केवल NVIDIA है। इसलिए जब तक आप टेग्रा पर नहीं चल रहे हैं, आपके पास नहीं है), ES 2.0 के तहत फ्रेमबफ़र ऑब्जेक्ट केवल एक को प्रस्तुत कर सकते हैं। छवि समय पर। तो अपने जी-बफ़र्स को उत्पन्न करने के लिए, आपको कई बार अपने दृश्य को प्रस्तुत करना होगा, इस प्रकार स्थगित किए गए लाभों में से एक को दूर करना होगा।

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

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


6

मुख्य समस्या फिल्रेट है। मोबाइल GPU पर, आपकी भरण दर कम है कि आप वास्तविक रिज़ॉल्यूशन में वास्तविक समय में आस्थगित छायांकन नहीं कर सकते हैं।

IPhone 4 और iPad 1 पर, फ़िल्टर्ड केवल हास्यास्पद है। अच्छी फिल्टर्स वाला एकमात्र डिवाइस IOS iPad 2 है, लेकिन मुझे संदेह है कि पर्याप्त है ... एंड्रॉइड पर, केवल Tegra डिवाइसों में MR_N का उपयोग करने के लिए GL_NV_draw_buffers हैं, लेकिन भरा भी बहुत कम है। लगता है कि माली 400 में सबसे अच्छा भराव है। यदि आप रोना चाहते हैं, तो बस 4 बार फुलस्क्रीन रिज़ॉल्यूशन पर एक रंग आयताकार भरने की कोशिश करें ... कई डिवाइस इसे 60 एफपीएस नहीं कर सकते।

डेस्कटॉप जीपीयू पर, आप 10 बार (या अधिक) मोबाइल जीपीयू के रूप में भरते हैं। यह मत भूलो कि मोबाइल GPU CPU के समान मेमोरी का उपयोग करते हैं और आपके पास समर्पित मेमोरी नहीं है।

वेबजीएल (उसी एपीआई) में कुछ उदाहरण हैं ताकि एपीआई की कोई सीमा नहीं है।


1
कमजोरी को भरने के लिए +1। मैं गौसियन ब्लर को 60fps पर 1536x2048 रिज़ॉल्यूशन पर भी नहीं चला सकता था (यह तुरंत फ्रेम दर को 30fps तक नीचे ले गया, यहां तक ​​कि केवल 4 नमूनों के साथ)
बॉबोबोबो

1
मुझे लगता है कि यह आपके कार्यान्वयन की सूक्ष्मताओं पर बहुत निर्भर करता है, और यह समझना कि मोबाइल हार्डवेयर पर सबसे अधिक क्या प्रभाव पड़ता है। उदाहरण के लिए, इन लोगों ने 2012 में मध्यम प्रदर्शन करने वाले DoF ब्लर को वापस किया।
इंजीनियर

1

वास्तव में आपको यह विचार करना होगा कि आस्थगित रेंडर के लिए आपको आवश्यक न्यूनतम न्यूनतम क्या है। यदि आप वापस प्रकाश में आ जाते हैं, तो यह डेटा की मात्रा को कम कर देता है, जिसे GBuffer में संग्रहीत करने की आवश्यकता होती है, और वास्तव में यह एक नरकुवा बहुत सस्ता है जो रोशनी की कम मात्रा का समर्थन करने के लिए आधे दृश्य 3 बार या उससे अधिक प्रदान करता है।

मैं निम्नलिखित GBuffer प्रारूप के लिए जाऊंगा:

  • प्रकाश पास के लिए गहराई बफर का पुन: उपयोग करें, यह सुनिश्चित नहीं करें कि यह मोबाइल उपकरणों पर कितना व्यापक रूप से समर्थित है, लेकिन यह एक मुक्त गहराई बनावट है।
  • एक एकल GBuffer बनावट, इसके अंदर मैं स्टोर करूंगा: नॉर्मल यू, नॉर्मल वी, परम 0, परम 1. लैम्बर्ट-अजीमुथल एन्कोडिंग वास्तव में मानदंडों के लिए बहुत अच्छी लगती है और उन्हें सिर्फ दो घटकों में संकुचित कर देती है, साथ ही साथ उन्हें एनकोड और डिकोड करने के लिए अपेक्षाकृत सस्ता है।
  • लाइटिंग वैरिएबल के लिए दो पैरामीटर बहुत सारे हैं, एक का उपयोग कई लाइटिंग फंक्शंस के लिए एन्यूमरेशन के रूप में किया जा सकता है यदि हार्डवेयर गतिशील ब्रांचिंग के साथ अच्छा करता है।

आस्थगित प्रकाश व्यवस्था आस्थगित प्रतिपादन के समान है, सिवाय इसके कि आप दृश्य को दो बार प्रस्तुत करते हैं:

  1. रेंडर जियोमेट्री डेप्थ, नॉर्मल्स, और लाइटिंग पैरामीटर्स इन जीब्यूफर।
  2. रेंडर लाइट्स संचय बफर में।
  3. सामग्री शेड्स के साथ रेंडर ज्यामिति, अपने प्रकाश को भी यहां संयोजित करें। यदि प्रकाश समीकरणों के रिवर्स ऑपरेटर्स के साथ काम करने में आपकी भलाई है तो आप इस कदम के साथ बहुत अच्छी चीजें कर सकते हैं।
  4. किसी भी पोस्ट-प्रोसेसिंग को आप कर सकते हैं, दक्षता की खातिर यहां गहराई और सामान्य बनावट को मौत के घाट उतारना सुनिश्चित करें।

प्रकाश व्यवस्था के परिणामों के भंडारण के बारे में। मैं स्टोरेज डिफ्यूज़ कलर और स्पेक्युलर ल्यूमिनेन्स के शौकीन बन गया हूँ, ताकि संचय बफर को केवल 32-बिट कलर टेक्सचर बनाने की ज़रूरत पड़े। आप स्पेक्युलर रंग का अनुमान डिफ्यूज़ रंग के क्रोमा की गणना करके और स्पेक्युलर ल्यूमिनेन्स के साथ जोड़कर लगा सकते हैं।

हालांकि यह सबसे महत्वपूर्ण हिस्सा है कि यह पूरी तरह से गहराई-स्टैंसिल बफर का उपयोग करने वाला है, यह सुनिश्चित करें कि आपका कोई भी प्रकाश कोड प्रदान नहीं कर रहा है जहां इसकी आवश्यकता नहीं है। मैं तो यहाँ तक जाऊँगा कि कुछ विच्छेद बयानों को शब्दों में जोड़ने के लिए जो कि डिवाइस के डिस्प्लेेबल रेंज (1e-3 आमतौर पर एक सुरक्षित कटऑफ है) के नीचे प्रकाश दृश्यता को गिरा देगा।


discardवास्तव में, टाइल-आधारित पाइपलाइनों के लिए वास्तव में बुरा है जो कई / अधिकांश मोबाइल GPU उपयोग करते हैं।
इंजीनियर

1

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

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

मैंने एक सख्त GLES 2.0 आधारित रेंडरर (हालांकि एक प्रयोगात्मक एक) को लागू किया था, और मैं जी-बफर को एक RGBA बनावट के नीचे उबालने में कामयाब रहा (हां, मैंने रेंडरबफर के बजाय एक बनावट 2 डी का उपयोग किया)। इसमें स्क्रीन स्पेस सामान्य नक्शा + अल्फा चैनल में गहराई बफर (जो एक लघुगणक का उपयोग करके संकुचित किया गया था, जहां तक ​​मुझे याद है)।

स्थिति विशेषताओं (जिसे यहां दुनिया कहा जाता है) की गणना इस तथ्य का उपयोग करते हुए प्रकाश पास के दौरान की जा सकती है, कि एक सुस्पष्ट प्रक्षेपण में, .xy को .z द्वारा विभाजित किया गया है , ताकि:

एक्सyआरयूरोंटीयू=एक्सywआरएल/zwआरएल

मैंने स्थिति विशेषता के xy को अनुमानित किया है :

एक्सywआरएल=एक्सyआरयूरोंटीयू*zwआरएल

नोट: मुझे प्रोजेक्शन मैट्रिक्स की सेटिंग्स के आधार पर आगे के समायोजन करने थे।

इसके अलावा ध्यान देने योग्य है कि मैं छोड़ करने में सक्षम था, है .z , सामान्य वैक्टर की घटक के बाद से मैं फिर से संगठित कर सकता .z से .xy के बाद से सामान्य वेक्टर ताकि सामान्यीकृत है:

एक्स2+y2+z2=1एक्स2+y2+z2=1z2=1-(एक्स2+y2)z=1-(एक्स2+y2)

इस तकनीक का उपयोग करते हुए, मैं अपने RGBA G-Buffer में एक और चैनल को मुक्त करने में सक्षम था और इसका उपयोग स्क्रीन स्पेस स्पेक्युलर-मैप (या चमक, यदि आप करेंगे) को स्टोर करने के लिए किया।


BTW: मेरा रेंडरर किसी भी गेम इंजन से जुड़ा नहीं था। यह सुज़ान की मदद से मेरो वर्ल्ड डेमो था।
साइमन श्मिट

0

जी हां, बिलकुल संभव है। भरने की दर ऐसी समस्या नहीं है क्योंकि मोबाइल ग्राफिक्स चिप्स बहुत उच्च रिज़ॉल्यूशन स्क्रीन से निपटने के लिए डिज़ाइन किए गए हैं। वास्तव में, आस्थगित प्रतिपादन इससे मदद करता है क्योंकि आपकी प्रकाश गणना दृश्य की जटिलता से स्वतंत्र है, इसलिए ओवरड्राइव मंदी का कारण नहीं बनता है। यहां चौथी पीढ़ी के आईपैड पर मेरा कार्यान्वयन है: http://www.youtube.com/watch?v=K4X1oF6b4V8

यदि आप प्रदर्शन का चार गुना चाहते हैं, तो आपके द्वारा प्रस्तुत बनावट का सिर्फ आधा संकल्प। मैं वास्तव में 3 डी ग्राफिक्स के साथ किसी भी रेटिना स्क्रीन, वैसे भी नहीं देख सकता।

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

मेरे कार्यान्वयन के समय, OpenGLES कई लक्ष्यों के लिए रेंडर गायब था, इसलिए मुझे अलग-अलग पास में स्क्रीन का रंग और सामान्य खींचना पड़ा। यह OpenGLES के अधिक हाल के संस्करणों में तय किया जा सकता है, लेकिन उपभोक्ता मोबाइल हार्डवेयर में समाधान अभी तक उपलब्ध हैं या नहीं, यह नहीं जानते।


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