गेम दृश्य ग्राफ में क्या होना चाहिए?


10

क्या आप मुझे स्पष्ट करने में मदद करेंगे, कृपया, क्या वास्तव में एक खेल दृश्य ग्राफ के भीतर निहित होना चाहिए? निम्नलिखित सूची देखें, कृपया:

  • खेल अभिनेता? (स्पष्ट रूप से हाँ, सभी वस्तुएं बदलती हुई अवस्था दृश्य ग्राफ का प्रमुख हिस्सा होनी चाहिए)
  • सरल स्थिर खेल ojbects? (मेरा मतलब है कि बैकग्राउंड में ऐसी जगहें हैं जो एनिमेटेड नहीं मिलतीं, न ही टकराती हैं)
  • गेम ट्रिगर?
  • खेल रोशनी?
  • गेम कैमरा?
  • हथियार की गोलियां?
  • खेल विस्फोट और विशेष प्रभाव?

उपर्युक्त वस्तु प्रकार। अब दृश्य ग्राफ के कवरेज के लिए:

  • क्या एक दृश्य ग्राफ में पूरे खेल के स्तर का नक्शा होना चाहिए क्योंकि स्तर शुरू होता है, या इसमें केवल मानचित्र का दृश्य भाग होना चाहिए ? यदि दूसरा सच है, तो इसका मतलब यह होगा कि खिलाड़ी की चाल के अनुसार, गेम ऑब्जेक्ट्स को जोड़कर / हटाकर, दृश्य ग्राफ को लगातार अपडेट किया जाएगा। हालाँकि, केवल दृश्यमान नक्शे के हैं स्पष्ट रूप से बहुत तेजी से आगे बढ़ने और अद्यतन करने के लिए होगा।

@ जोश: संपादन और मेरे प्रश्न को सही करने के लिए धन्यवाद।
बंकई। कटोरी

जवाबों:


4

मुझे लगता है कि अन्य दृश्य ग्राफ प्रौद्योगिकियों क्या कर रहे हैं पर पढ़ने का एक अच्छा आप के लिए बहुत सारे लाभ होगा।

पृष्ठभूमि
उदाहरण के लिए, Ogre3D विवरण पर नज़र। यह एक दृश्य ग्राफ आधारित ग्राफिक्स इंजन है जो खुला स्रोत है। मैं ट्यूटोरियल देखने और यह देखने का सुझाव दूंगा कि कैसे दृश्य नोड्स का उपयोग किया जा रहा है (ध्यान दें: मैं आपको ओगरे का उपयोग करने के तरीके को सीखने के लिए नहीं कह रहा हूं, बल्कि ओग्रे के दृश्य नोड्स और दृश्य प्रबंधकों में क्या विशेषताएं मौजूद हैं)

दृश्य दस्तावेज़:
http://www.ogre3d.org/docs/api/1.9/class_ogre_1_1_scene_node.html

दृश्य प्रबंधक: http://www.ogre3d.org/docs/api/1.9/class_ogre_1_1_scene_manager.html

कुछ और देखने लायक है निम्नलिखित लिंक:
http://sgl.sourceforge.net/#features

यह एक OpenGL आधारित दृश्य ग्राफ समाधान है और इसमें मौजूद सुविधाएँ पृष्ठ उन सभी नोड्स को दिखाता है जिनमें यह हो सकता है।

आपके सुझाए गए नोड्स
मेरी राय है कि एक दृश्य ग्राफ को गेम लॉजिक से जितना संभव हो उतना दूर होना चाहिए ताकि आपके पास कोई निर्भरता मुद्दे न हों। आपके प्रत्येक बुलेट पॉइंट के लिए मैं निम्नलिखित कहूंगा:

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

संपादित करें: मैं यहाँ दृश्य ग्राफ में अपने खेल अभिनेताओं को शामिल नहीं करने के लिए नहीं कह रहा हूँ (अन्यथा कुछ भी नहीं दिखाएगा: पी) मैं कह रहा हूँ कि दृश्य खेल अभिनेता वर्ग के संदर्भ में एक दृश्य नोड है, इसलिए आपने अभी भी खेल वस्तुओं के प्रतिपादन और अद्यतन के ढीले युग्मन मिला है।

सिंपल स्टैटिक गेम ojbects
यस

गेम ट्रिगर?
नहीं, यह मेरे लिए खेल के विशिष्ट तर्क की तरह लगता है।

खेल रोशनी?
हाँ

गेम कैमरा?
हाँ

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

खेल विस्फोट और विशेष प्रभाव?
निश्चित नहीं, मैं किसी और को इसका उत्तर दूंगा।

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

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

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


+1 - विस्तृत और मूल्यवान उत्तर के लिए धन्यवाद। सीनग्राफ के बारे में मेरा ज्ञान एक गेम गेम कोडिंग कम्प्लीट ( amazon.com/Game-Coding-Complete-Third-McShaffry/dp/1584506806/… ) से आता है । आपके लिंक मददगार हैं, खासकर ओग्रे के सीनोडे क्लास। अपने निष्कर्ष के संदर्भ में , क्या आप इन-गेम लिंक्ड ऑब्जेक्ट्स के ट्रांसफ़ॉर्मेशन को अपडेट करने का एक शानदार तरीका के रूप में एक दृश्य ग्राफ देखते हैं? दोनों, आपके और जोश के उत्तर उत्कृष्ट हैं। मुझे लगता है, इस बारे में अधिक जानकारी है, इसलिए मैं इसे स्वीकार किए गए उत्तर को चिह्नित कर रहा हूं ।
Bunkai.Satori

@Bunkai यदि आप अपने गेम ऑब्जेक्ट के बारे में सोचते हैं जिसमें एक अपडेट () विधि है जहां वे अपनी स्थिति, अभिविन्यास आदि के लिए अपने वैक्टर को अपडेट करते हैं, तो आपके सभी दृश्य नोड को एक जाल प्रस्तुत करना होगा और इसे गेटपोजिशन () और गेटऑनटेंटेशन का उपयोग करके बदलना होगा। () और इसे स्क्रीन पर रेंडर करें। यह वास्तव में आपके अभिनेताओं के तर्क को उनके रेंडरिंग कोड से अलग करता है जो आपको वास्तव में प्रयास करना चाहिए।
रे डे

9

मेरा झुकाव दृश्य के ग्राफ में कम चीजों को रखने का सुझाव देना है । टॉम फोर्सिथ के इस लेख में विशेष रूप से देखें: " दृश्य रेखांकन - बस कहो नहीं ।"

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

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

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

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

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

इसके लायक क्या है, मैंने कभी भी गैर-शैक्षणिक उपयोग के लिए बनाए गए रेंडरर्स में से किसी में भी एक पेड़ जैसा दृश्य ग्राफ का उपयोग नहीं किया है (जाहिर है कि मैंने पहले भी पेड़ के समान दृश्य ग्राफ बनाया है, जो कि मैं इस निष्कर्ष पर पहुंचा था कि मैं अब आप से सहमत होने का प्रयास कर रहे हैं)।

मैं स्थानिक विभाजन विधियों का उपयोग करता हूं जो कि खेल की शैली के लिए उपयुक्त हैं (क्वाड-ट्री, ऑक्ट्री, बीएसपी, एट वगैरह) खेल में तार्किक संस्थाओं को समूह / खंगालने के लिए जो कि होना चाहिए (ए) इस फ्रेम को संसाधित करता है और (बी) यह फ्रेम। फिर मैं सूची (ब) से वस्तुओं के सेट को सिस्टम में फीड करना समाप्त करता हूं, जो विवरणों को प्रस्तुत करने के लिए तार्किक वस्तुओं को मैप करता है और उन विवरणों को गुणों के आधार पर बाल्टी में क्रमबद्ध करता है (उदाहरण के लिए, पारदर्शिता का उपयोग करने वाली कोई भी चीज़ "सामग्री के लिए" बाल्टी में भेज दी जाएगी। इसे बैक-टू-फ्रंट प्रस्तुत किया जाना चाहिए)। फिर मैं हर बाल्टी को क्रम में प्रस्तुत करता हूं, और प्रत्येक बाल्टी के लिए हर विवरण को क्रम में प्रस्तुत करता हूं। मुझे लगता है कि आप इसे "पेड़" कह सकते हैं, लेकिन यह सामान्य अवस्था को प्रदर्शित नहीं करता है / पारंपरिक वृक्ष-उन्मुख दृश्य रेखांकन करने वाले प्रसार विधियों को बदलना। YYMV,


उत्कृष्ट उत्तर के लिए +1। मैंने अनुशंसित लेख पढ़ा है। मूल रूप से, मैं लिंक किए गए ऑब्जेक्ट्स के पदों को अपडेट करने के लिए सीन ग्राफ का उपयोग करने में समझदारी करता हूं (उदाहरण: सैनिकों का एक सेट एक जहाज पर है। जैसा कि जहाज चलता है, सैनिक इसके साथ चलते हैं, और उनके हाथों में बंदूकें भी चलती हैं)। इसलिए, मेरी योजना इंटरफ़ेस वर्ग है: CGameObject, और दृश्य ग्राफ़ में डाली जाने वाली सभी वस्तुओं को इसका हिस्सा माना जाता है। आपकी सलाह के लिए बहुत-बहुत धन्यवाद।
बंकई.टोरि
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.