2010-08-27 11 views
7

जैसा कि मैं रेडबुक पढ़ रहा था, मैं काफी उलझन में रहा, कि ओपनजीएल में दृश्य में अधिकतम 8 रोशनी हो सकती हैं (कार्यान्वयन के आधार पर संख्या, लेकिन 8 के आसपास होना चाहिए)।ओपनजीएल रोशनी

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

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

उत्तर

10

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

अद्यतन: ब्रांचिंग के साथ जटिल शेडर भी रोशनी उत्पन्न कर सकता है (लंबी सड़क या क्रिसमस पेड़ के बारे में सोचें)। यह बड़ी संख्या में पैरामीटर की आपूर्ति से अधिक कुशल हो सकता है।

+0

अद्यतन: इस तकनीक एक बहुत चर्चा की गई, यहाँ एक कड़ी है: http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=267432 – alxx

+0

कमजोर रोशनी एक shaders सुविधा नहीं कर रहे हैं, के बाद से रोशनी को सक्षम/अक्षम करने की क्षमता केवल एक महत्वपूर्ण प्रबंधक को सक्षम करने, एक हल्के प्रबंधक को डिजाइन करने वाली निश्चित पाइपलाइन के बाहर की जा सकती है। – Luca

+0

लाइट मैनेजर पूरे दृश्य के लिए रोशनी को सक्षम/अक्षम करता है। पिक्सेल शेडर प्रति पिक्सेल कर सकता है, अंतर देखें? वैसे, पारंपरिक पाइपलाइन में 8 रोशनी प्रति-वर्टेक्स हैं, जबकि शेडर प्रति-पिक्सेल प्रकाश करता है - काफी अलग बात है। – alxx

4

गेम में इस्तेमाल होने वाली चालों में से एक एक बनावट के साथ प्रकाश को अनुकरण करना है।

तो आपकी सड़क के प्रकाश उदाहरण में, "जला" क्षेत्र वास्तव में एक उज्ज्वल बनावट छवि होगी। सही प्रभाव प्राप्त करने के लिए केवल निकटतम रोशनी प्रकाश स्रोत होंगे।

ऐसे ही दृष्टिकोण हैं जहां एक पारदर्शी शंकु के साथ अर्ध-पारदर्शी बनावट या बनावट दृश्य को ओवरलैड कर देती हैं ताकि समान प्रभाव दिया जा सके।

वास्तविक समय में छाया आदि की गणना करने के लिए मत भूलना मतलब है कि किसी भी स्थान पर प्रकाश की तीव्रता की गणना करने के लिए दृश्य को प्रकाश के दृष्टिकोण से प्रस्तुत किया जाना चाहिए। तो 8 रोशनी के लिए आप दृश्य (या दृश्य के कुछ हिस्सों) को 8 बार तक से पहले प्रदर्शित करने के लिए दृश्य प्रस्तुत कर रहे हैं। यहां तक ​​कि यदि यह सीपीयू की बजाय जीपीयू पर किया जाता है तो यह बहुत महंगा है।

5

प्रकाश कंप्यूटर ग्राफिक्स में एक बहुत ही जटिल विषय है।

वास्तव में, वस्तु की रोशनी, असली दुनिया प्रकाश व्यवस्था या जिस प्रभाव को हम लक्षित कर रहे हैं उसका अनुकरण करते हैं, वास्तव में क्या मायने रखता है। वास्तविक प्रभाव को अनुमानित करने के लिए प्रकाश स्रोत को कई स्रोतों द्वारा बनाया जा सकता है जिसे हम प्राप्त करने की कोशिश कर रहे हैं।

ओपनजीएल प्रकाश कार्यान्वयन गतिशील रोशनी हैं, जो हल्के बिंदु अमूर्त हैं जो रेंडर किए गए कोने के लिए "प्रकाश" (यानी रंग देते हैं) को अनुमति देते हैं (जो त्रिभुजों को प्रस्तुत करने के लिए उपयोग किए जाते हैं)। ... कशेरुक रोशनी है, प्रत्येक प्रकाश के लिए रंग योगदान प्राप्त करें।

जैसा कि आपने बताया है, प्रतिपादन प्रक्रिया में हमने और अधिक रोशनी सक्षम की है। इसे कम करने के लिए, आपके पास अलग-अलग संभावनाएं हैं।

  • लाइट culling (रोशनी को बाहर जो योगदान रंग बदलने के लिए थोड़ा करने के लिए है), और इस प्रकाश गुण (दूरी, शंकु, क्षीणन, देखें और बाधा डालने वस्तुओं के बिंदु) का उपयोग कर निर्धारित किया जाता है।
  • स्टेटिक लाइटिंग, जो ऑब्जेक्ट्स पर प्रकाश को अनुकरण करने के लिए बनावट का उपयोग करती है जो कभी नहीं चलता है।

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

एक और सटीक प्रकाश प्राप्त करने के लिए, सॉफ़्टवेयर प्रत्येक खंड (पिक्सेल) रंग (पिक्सेल प्रकाश) को उसी तरह निर्धारित करेगा, जिस तरह से एक कशेरुक रोशनी से रंगीन होता है, लेकिन जैसा कि आप समझ सकते हैं, वहां चरम से अधिक पिक्सल हो सकते हैं। रास्टरराइजेशन चरण के दौरान ज्यामिति के प्रत्येक पिक्सेल के लिए प्रकाश का योगदान (शेडर्स या ओपनजीएल एक्सटेंशन का उपयोग करके) की गणना करना या स्थगित प्रकाश का उपयोग करके पिक्सेल रंग निर्धारित करना है।

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