क्या गेम ऑब्जेक्ट जो कैमरे के बाहर रखते हैं, वे एकता में कंप्यूटर / मोबाइल संसाधनों का उपभोग करते हैं?


11

एकता में, मान लें कि मेरे पास मेरे दृश्य में कुछ गेम ऑब्जेक्ट हैं जो कैमरे के लिए दिखाई नहीं दे रहे हैं और इसलिए गेम चल रहा है, जबकि इसे रेंडर नहीं किया गया है।

जब खेल चल रहा है तो क्या ये गेम ऑब्जेक्ट कंप्यूटर / मोबाइल संसाधनों का उपभोग करेंगे?

मुझे इन जैसे उपयोग के बारे में विवरण कहां मिल सकता है?

जवाबों:


13

आप जो चाहते हैं वह मेमोरी प्रोफाइलर है, जो यूनिटी के पास है। यहाँ: http://docs.unity3d.com/Manual/ProfilerMemory.html

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

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


5

मुझे लगता है कि आपको Frustrum Culling, या hiden सतह हटाने के बारे में भी पता होना चाहिए: http://en.wikipedia.org/wiki/Hidden_surface_determination

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


2
@ Gissipi_453, इन पंक्तियों के साथ शोध करते समय, क्वाड- और ऑक्ट-ट्री (स्थानिक डेटा छँटाई) पर भी शोध करते हैं
जॉन

3

छोटा जवाब हां है"; कुछ भी जो आपके खेल में उपयोग करने के लिए तैयार है वह स्मृति को ले जा रहा है।

विचार करने के लिए दूसरी चीज आपके फ्रेम-रेट की लागत है:

5 वस्तुओं, 5 अलग बनावट के साथ, अलग-अलग खींचे जाने के बीच में राज्य-परिवर्तन की आवश्यकता होती है। आप उपयोग नहीं किए गए बनावट को उतारकर कुछ मेमोरी को सहेजने में सक्षम हो सकते हैं।

सभी अलग-अलग बनावटों को एक एकल एटलस बनावट में लोड करने से, मेमोरी फ़ुटप्रिंट निश्चित हो जाता है और आप एक व्यक्तिगत बनावट को अनलोड नहीं कर सकते। एक बार बनाने के बाद, आपको केवल अपनी सभी वस्तुओं को खींचने के लिए एटलस को एक बार बांधना होगा।

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

कई बार कई ऐसे स्थान होते हैं, जहां कई राज्यों के बदलावों के लिए स्मृति की बढ़ी हुई लागत बेहतर होती है।

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

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


1

बहुत सारे उत्तर मुख्य रूप से आपके प्रश्न के ग्राफिक्स पहलू पर विचार कर रहे हैं।

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

ऑफ-स्क्रीन घटकों के प्रभाव को कम करने का सबसे सरल तरीका एक प्रणाली है जो ऑनबेकमेव अदृश्य और ऑनबेकनेम अदृश्य कॉलबैक पर आधारित है ।

void OnBecameVisible()
{
    myComplexComponent.enabled = true;
}
void OnBecameInvisble()
{
    myComplexComponent.enabled = false;
}

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


1

इसे जीवित रखने और इसकी स्थिति और अन्य गुणों को अपडेट करने के लिए मेमोरी की आवश्यकता होती है।

लेकिन यह कंप्यूटर / मोबाइल ग्राफिक संसाधनों का उपभोग नहीं करता है क्योंकि यह दिखाई नहीं देता है।

तो हाँ, यह मेमोरी संसाधनों का उपभोग करता है, लेकिन एक दृश्य गेम ऑब्जेक्ट की तरह ग्राफिक्स संसाधनों का नहीं।


बहुत बहुत धन्यवाद। यह एक बहुत ही सीधा जवाब है जिसकी मुझे तलाश थी।
गिसिपि_ 453

0

एक कार्यक्रम में जो कुछ भी है वह संसाधनों की खपत करता है; आपको नहीं लगता कि कार्यक्रम केवल आशाओं और सपनों पर चलते हैं, क्या आप?

सवाल यह होना चाहिए कि एक गेम ऑब्जेक्ट कितना संसाधन खपत करता है, और उस अंत तक मुझे लगता है कि यह एक बहुत ठोस जवाब है: http://answers.unity3d.com/questions/280455/how-much-memory-a-gameobject- consume.html

संक्षेप में, वे अपने दम पर नगण्य संसाधनों का उपभोग करते हैं। लेकिन तुम क्यों खेल वस्तुओं का एक गुच्छा सिर्फ अपने खेल में बैठे कुछ भी नहीं करना चाहेंगे? दिन के अंत में, आप वास्तव में उन गेम ऑब्जेक्ट्स को 'डू' बनाते हैं, वह है जो किसी भी प्रकार के ओवरहेड का कारण बनने वाला है- और केस रिसोर्स के आधार पर कितने संसाधनों की आवश्यकता होती है।


आपका बहुत बहुत धन्यवाद। तो क्या मुझे उन वस्तुओं को नष्ट करना चाहिए जो खेल के दौरान कैमरे की दृष्टि से बाहर हो गए हैं?
गिसिपि_ 453

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

@ कटु, एक बिंदु भी। धन्यवाद। जब तक वस्तु को प्रस्तुत करने की आवश्यकता नहीं है, मुझे इसे नष्ट नहीं करना चाहिए।
गिसिपि_453

@ कटु मैंने इस प्रश्न का उत्तर दिया: "क्या ये गेम ऑब्जेक्ट्स (मेरे दृश्य में ऑब्जेक्ट जो कैमरे को दिखाई नहीं दे रहे हैं) कंप्यूटर / मोबाइल संसाधनों का उपभोग कर रहे होंगे जब गेम चल रहा हो?" इसका उत्तर दिया जा रहा है: "हाँ। जो कुछ भी एक कार्यक्रम में है वह संसाधनों का उपभोग करता है"। और मैं दृश्य और संसाधन लागतों में खाली गेम ऑब्जेक्ट्स के प्रभावों की व्याख्या करने के लिए आगे बढ़ा।
असली सच

2
@ Gissipi_453 आपके प्रश्न का उत्तर देने के लिए, यह पूरी तरह से इस बात पर निर्भर करता है कि वास्तव में दृश्य में गेम ऑब्जेक्ट क्या कर रहे हैं, वे कितनी बार बनाए गए / हटाए गए हैं, और अन्य विचार हैं। यह जानना कि कब अनुकूलन करना अपने आप में एक कौशल है, लेकिन अंगूठे का नियम इसके बारे में चिंता नहीं करना है, जब तक कि कुछ के बारे में चिंता न हो। अतिरिक्त गेम ऑब्जेक्ट्स का ओवरहेड कुछ भी नहीं है, इसलिए चिंता न करें। कुछ उदाहरणों में, यदि आप वस्तुओं को बार-बार जोड़ / हटा रहे हैं, तो ऑब्जेक्ट पूलिंग एक जीवन रक्षक हो सकता है, और अन्य उदाहरणों में आप अन्य चालें कर सकते हैं। यह सब इस बात पर निर्भर करता है कि क्या है और वास्तव में समस्या क्या है।
सच सच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.