GPU पर इलाके का निर्माण


9

अपने इंजन में मैं सीपीयू पर गणना किए गए पेर्लिन शोर एल्गोरिटम के उपयोग के साथ अनंत इलाके बनाता हूं।

इलाके का निर्माण इस प्रकार है:

  • यदि कैमरा अनलोड किए गए पैच के पास है, तो इसे बनाएं
  • दी गई सीमाओं के साथ 513x513 शोर सरणी की गणना करें
  • कम्प्यूटेशनल मानदंडों, स्पर्शरेखा, असामान्य, सूचकांकों
  • Vbo को डेटा पास करें

पेशेवरों:

  • जरूरत पड़ने पर ही पेश किया जाना चाहिए
  • टक्कर लगाना आसान

चोर

  • धीमे 64 513x513 पैच 3,1s (एक धागा) में बनाए जाते हैं। प्रत्येक टाइल के लिए ~ 20ms शोर निर्माण, ~ 25ms कोने, मानक, स्पर्शरेखा, बिटेंगेंट, सूचकांक। जब कैमरा तेज चलता है, तो उपयोगकर्ता टाइल लोडिंग को नोटिस कर सकता है।
  • स्मृति खपत ???

अब मैं सोच रहा था कि पूरी तरह से GPU पर इलाके पैदा करके इसे कैसे गति दें लेकिन कुछ संदेह हैं:

  • यदि शेड्स हर फ्रेम में चलते हैं, तो क्या यह कंप्‍यूटेशन पॉवर वेस्ट नहीं है, जो बार-बार शोर की गणना करता है? आरबीजीए बनावट में परिणाम लिखने से इसे टाला जा सकता है और बाद में विस्थापन के लिए वर्टेक्स शेडर में उपयोग किया जाता है, लेकिन स्मृति उपयोग में वृद्धि होती है। दूसरी ओर यदि निर्माण सुपर फास्ट होगा, तो केवल दृश्यमान टाइलें ही स्मृति में रहेंगी। हालाँकि, बफर का पता लगाने से जीपीयू-सीपीयू सिंक होता है जो ऐप को धीमा कर सकता है (क्या मैं सही हूं?)
  • यदि इलाके सिर्फ एक सपाट ग्रिड है जिसे वर्टेकर शेडर द्वारा विस्थापित किया गया है, तो टकराव के लिए दिए गए बिंदु पर ऊंचाई और सामान्य गणना करने के लिए सीपीयू पर समान काम करने की आवश्यकता है।
  • यह सिर्फ एक अवधारणा है, लेकिन हर चीज को गति देने के लिए मैं व्यूपोर्ट पर ग्रिड प्रोजेक्ट करने के बारे में सोच रहा था, इसलिए केवल न्यूनतम मात्रा का उपयोग किया जाता है। क्या आपको लगता है कि यह काम करेगा?

मेरा अंतिम प्रश्न है:

GPU पर अनंत इलाके बनाने के लिए सबसे अच्छी / सबसे तेज़ / मोटे तौर पर इस्तेमाल की जाने वाली तकनीक क्या है?


8
बस ध्यान दें कि GPU पर इलाके बनाने से टकराव का पता लगाना मुश्किल हो जाएगा, पता लगाने या इलाके के साथ किसी भी तरह की बातचीत को चुनना मुश्किल हो जाएगा।
MichaelHouse

1
GPU पर इलाके को उत्पन्न करने के लिए एक गणना shader (DX10 या 11) का उपयोग किया जा सकता है। लेकिन जैसा कि बाइट 56 ने कहा था, आपको इसके साथ बातचीत करने के लिए जीपीयू के मूल्यों को वापस खींचने की आवश्यकता होगी। msdn.microsoft.com/en-us/library/windows/desktop/…
अंडरस्कोरजेरो

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

बस मेरा अनुभव; मैंने वास्तव में यह सिर्फ अपारपी के साथ किया था और वास्तव में काम करने के लिए लानत है; लेकिन यह वास्तव में समाप्त होने की तुलना में धीमी गति से किया जा रहा है केवल सीपीयू काम करते हैं। मुझे लगता है कि gpu से / को डेटा भेजने के ओवरहेड के कारण। अगर मुझे सही ढंग से gpu की याद आती है तो केवल तभी काम होता है जब गणना डेटा के आकार की तुलना में बड़ी हो (और निरपेक्ष रूप से भी बड़ी हो)
रिचर्ड टिंगल

यह लेख आपको कुछ विचार दे सकता है http.developer.nvidia.com/GPUGems3/gpugems3_ch01.html
यिर्मयाह लेस्ली

जवाबों:


2

खैर अगर मुझे ऐसी चीज़ के लिए GPU का उपयोग करने की कोशिश करनी थी, तो मुझे लगता है कि मैं गणना / opencl / cuda के लिए जाऊंगा।

हालाँकि, GPU या CPU (जो मैं वास्तव में कर रहा हूं) का उपयोग करने की परवाह किए बिना, मैं इसे अतुल्यकालिक तरीके से करूंगा, यह निर्णय लेते हुए कि आपको वर्तमान फ्रेम के लिए कुछ नए इलाके की आवश्यकता है, बहुत देर हो चुकी है (उदाहरण के लिए 1000ms / 60 = 16.666ms पर विचार करें) और पूरा फ्रेम उसी में फिट होना चाहता है)।

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

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