क्या मुझे प्रत्येक पात्र को अपना वीबीओ देना चाहिए या क्या मुझे उन्हें एक एकल वीबीओ में बैच देना चाहिए?


10

मैं एक 3 डी प्रथम व्यक्ति खेल बना रहा हूं। क्या मुझे प्रत्येक पात्र को अपना VBO देना चाहिए या क्या मुझे सभी पात्रों को एक ही VBO में बैच देना चाहिए? पेशेवरों / विपक्ष क्या हैं?


यह एक डुप्लीकेट प्रश्न है। क्या, मुझे यकीन नहीं है, लेकिन यह एक डुबकी है।
DeadMG

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

जवाबों:


11

यह वास्तव में प्रदर्शन और लचीलेपन के बीच एक विकल्प है, लेकिन मैं इसके बारे में अपनी राय सूचीबद्ध करूंगा।

एक एकल वीबीओ

सकारात्मक पक्ष हैं:

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

और नकारात्मक पक्ष हैं:

  • प्रबंधन करना मुश्किल है, हालांकि यह इस बात पर निर्भर करता है कि आप अपना कोड कैसे लिखते हैं, अगर यह ठीक से डिज़ाइन किया गया है आदि।
  • मुझे यह कहने में मुश्किल है कि मेरे पास सामान है जैसे VBO को अपडेट करना, हर वस्तु के लिए सही ऑफसेट सेट करना आदि।

व्यक्तिगत वीबीओ: एस

सकारात्मक पक्ष हैं:

  • लागू करने में आसान।
  • शुरुआत से ही प्रबंधन करना आसान है।

और नकारात्मक पक्ष हैं:

  • राज्य के बहुत सारे परिवर्तन। इससे प्रदर्शन में कमी आती है।
  • बहुत सारे ड्रा कॉल। यह प्रदर्शन को कम करेगा।

सारांश

मैं आपको अपने आवेदन को प्रोफाइल करने की सलाह दूंगा; डेटा में अपनी असली अड़चन आप देख सकते हैं। समयपूर्व अनुकूलन को (इस मामले में) अनावश्यक के रूप में दिखाया जा सकता है। हालाँकि, यह कहा जा रहा है, यदि आप अपने आवेदन में वास्तविक प्रदर्शन हानि की खोज करेंगे, तो व्यक्तिगत VBO: s परिदृश्य को देखते हुए, आप एक एकल VBO को लागू करना शुरू कर सकते हैं।

हालाँकि, जब तक इसकी आवश्यकता नहीं है (वस्तुओं की संख्या कम है, कुल मिलाकर कई राज्य नहीं बदलते हैं, आदि) मैं व्यक्तिगत वीबीओ के साथ जाने की सलाह दूंगा: जब तक आप यह नहीं देखेंगे कि यह काम नहीं होने वाला है।

संपादित करें

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


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

1
@ डैनियल: एक नया जाल बस VBO में अद्यतन / जोड़ा जाना चाहिए। मैं यह उल्लेख करना भूल गया कि यह कई ड्रॉ कॉल के साथ ठीक होगा। महत्वपूर्ण समय में प्रदर्शन में सबसे महत्वपूर्ण बात यह है कि राज्य में बदलाव को न्यूनतम रखा जाए। आप बस प्रत्येक ड्रॉ कॉल के लिए प्रोसेस करने के लिए सूचकांक की संख्या और एक ऑफसेट सेट कर सकते हैं, और यह ठीक है। लेकिन फिर भी, राज्य परिवर्तनों को यथासंभव कम रखें और जितना संभव हो उतना कम कॉल करें, यह इस उत्तर का बड़ा नमस्ते है, या कम से कम मैंने जो कहने की कोशिश की है। :-)
व्रोकलाई

2005 में बैच, बैच, बैच इस नतीजे पर पहुंचे कि आप अकेले कॉल ड्रॉ को प्रोसेस करके पूरी तरह से सीपीयू-बाउंड होने से पहले 1 गीगाहर्ट्ज के सीपीयू पर 10k और 25k बैच के बीच खर्च कर सकते हैं। जैसा कि 60Hz फ्रेम में कुछ सौ बैचों में अनुवाद किया गया है, एक ही VB में सबकुछ करना आवश्यक नहीं है, लेकिन यह सुनिश्चित करने में मदद करता है कि क्या आप एक ही VB में समान विशेषताओं (जीवनकाल, अद्यतन दर, गुण) के साथ ज्यामिति को बंडल करते हैं।
लार्स विकलंड

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