मैं एक ज्यामिति shader से प्रक्रियात्मक रूप से उत्पन्न दुनिया में भौतिकी को कैसे शामिल कर सकता हूं?


10

अनिवार्य रूप से मैं सीपीयू से GPU तक सुसंगत शोर पैदा करने की आवश्यकता को दूर करना चाहता हूं। वहां से, मैं इस शोर का उपयोग करते हुए तीन आयामी दुनिया के लिए इलाके भी उत्पन्न करना चाहता हूं क्योंकि स्वर बिंदुओं में घनत्व। इसके बाद, मैं उन घनत्वों को ले जाना चाहता हूं और बहुभुज (लंबवत उत्पन्न) उन्हें दुनिया के भूभाग का प्रतिनिधित्व करता हूं।

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

तो सवाल यह है: मैं अन्य चीजों के बीच टकराव से निपटने के लिए सीपीयू में वापस कोने का एक सबसेट कैसे प्राप्त कर सकता हूं?

और एक और सवाल: वहाँ एक आसान तरीका है कि वे वर्टिकल का एक सेट लें और GPU पर उनसे सूचकांक उत्पन्न करें?

मैं उलझन में हूं कि इन विभिन्न चीजों के लिए मुझे किस प्रकार के शेड का उपयोग करना चाहिए। मैं लोगों को सुनियों को इकट्ठा करने के लिए एक पिक्सेल शेडर का उपयोग करने और फिर कोने से इलाके की पीढ़ी से निपटने के लिए एक ज्यामिति shader का उपयोग करने के बारे में सुनता हूं और फिर किसी तरह डायनेमिक विकृतियों को करने के लिए एक शीर्ष shader को शामिल करता हूं।

मैं C # 4.0, .NET 4.0 और XNA गेम स्टूडियो 4.0 का उपयोग कर रहा हूं।


1
आप कहते हैं कि आप शीर्षक में एक ज्यामिति shader का उपयोग कर रहे हैं, लेकिन आप यह भी कहते हैं कि आप XNA4.0 का उपयोग कर रहे हैं, जहाँ तक मुझे पता है कि XNA 4.0 को DirectX 10 की आवश्यकता है (अधिक समान मंच के लिए विकसित करना आसान बनाने के लिए) केवल SM3.0 सुविधाओं का समर्थन करता है, इसलिए कोई ज्यामिति शेडर नहीं। forum.create.msdn.com/forums/p/31369/178924.aspx
रॉय टी।

और अब मैं XNA का उपयोग नहीं करूंगा या अपने डिजाइन को फिर से तैयार नहीं करूंगा। यह बात बताने के लिए धन्यवाद। मैं इसे देख रहा था और इस सीमा (कोई एसएम 4) का एहसास नहीं था। मुझे लगता है कि XNA.So के विचार के बिना, अभी भी एक सवाल है, एक DirectX केवल परिप्रेक्ष्य से, क्या मुझे जो चाहिए वह करने का एक तरीका है? या शायद XNA में एक वर्टेकर shader के साथ?

1
खैर XNA अभी भी उपयोग करने के लिए वैध है, जब तक कि आपको एक सिद्ध परीक्षण-मामला नहीं मिला है जहां विकृति और उत्पादन करना बहुत धीमा है। और यह कि आप एक अन्य टेस्ट-केस में साबित हुए हैं कि GPU deform + Generation और फिर वापस CPU में डेटा प्राप्त करना तेज है :)
रॉय टी।

वास्तव में। हमने पाया कि XNA का उपयोग करते हुए और सीपीयू पर सब कुछ रखने से हमें कोर कोर i7 पर 8 कोर और 8 धागे के साथ लगभग 3 मिलियन वर्टिकल लगभग 1 मिलियन वर्टिकल मिलते हैं, जो कि प्रति थ्रेड के कई वर्गों को समानांतर करता है। जब वास्तविक समय में ऐसा करने की कोशिश की जाती है और खिलाड़ी को देखने से पहले इलाके को उम्मीद से पेश किया जाता है, तो हमने प्रति सेकंड लगभग 20 फ्रेम हासिल किए। इसलिए, प्रत्येक तरीकों के साथ एक परीक्षण मामला निश्चित रूप से है।
माइकल जे। ग्रे

जवाबों:


3

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

ज्यामिति शेड्स ज्यामिति शेड्स वास्तव में संशोधित कर सकते हैं और वर्टेक्स बफर में कोने जोड़ सकते हैं। आप इसे वापस सीपीयू में पढ़ सकते हैं। मैंने इसमें गौर नहीं किया है, लेकिन यह निश्चित रूप से संभव है।

बस दूसरे CPU का उपयोग करें , आप बस CPU पर इसकी गणना क्यों नहीं करते हैं? तथ्य यह है कि यह GPU पर shaders में चलता है, यह बताता है कि आपका विरूपण एल्गोरिथ्म स्थानीय है, यानी आप आसानी से अपनी टक्कर की जाँच के लिए बस relavent भागों को उत्पन्न कर सकते हैं।

उदाहरण के लिए, मैंने कुछ समय पहले एक नौकायन खेल बनाया था। समुद्र ने तरंगों के साथ पानी को विकृत करने के लिए शीर्ष और ज्यामिति शेड का उपयोग किया। मैंने सीपीयू पर गणना की उसी एल्गोरिथ्म का उपयोग लहरों में नाव की गति के लिए नाव के नीचे कुछ बिंदुओं पर किया। मुझे यकीन है कि आप अपने स्वर मानचित्र के लिए कुछ ऐसा ही कर सकते हैं।

पिक्सेल शेड्स अंतिम विकल्प, आपने अपने प्रश्न में भी इसका उल्लेख किया है: पिक्सेल shader में घनत्व उत्पन्न करते हैं और इसे 3D बनावट में लिखते हैं। आप इसे सीपीयू और शेड्स से काफी हानिरहित तरीके से एक्सेस कर सकते हैं। पिक्सेल शेडर इस कार्य के लिए एकदम सही है, लेकिन इस पद्धति में बहुत अधिक ओवरहेड है। वॉल्यूम बनावट, साथ ही शीर्ष और भू में से नमूना लेना। shaders, और CPU पर बनावट पढ़ने के लिए।

मैं आपकी परियोजना की बारीकियों को नहीं जानता, लेकिन मैं हमेशा इसके लिए सीपीयू का उपयोग करूंगा। हर तरह से शेड्स पर घनत्व की गणना करें, लेकिन प्रतिपादन के लिए ग्राफिक्स कार्ड का उपयोग करने के लिए छड़ी।


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

अपने नौकायन उदाहरण के साथ, आप आसानी से GPU के लिए तरंगों के माध्यम से बिखरने वाली नाव के तरंग परिणाम को कनेक्ट करने में सक्षम नहीं होंगे?
Deceleratedcaviar

1
आप एक ही रेंडरिंग सिस्टम रख सकते हैं, यानी जीपीयू पर इलाके को जेनरेट और रेंडर कर सकते हैं, लेकिन सीपीयू में आपके लिए जरूरी इलाके के हिस्सों को मिरर कर दें। समान एल्गोरिथ्म और समान मापदंडों का उपयोग करते हुए, आपको सीपीयू पर वही क्षेत्र मिलेगा जैसा कि आप स्क्रीन पर देखते हैं।
हन्नेश जूल 18'11

@ डैनियल सीधे तरंग एल्गोरिथ्म के साथ नहीं है, लेकिन नाव के विस्थापन बनावट के साथ पानी के जाल को विकृत करना संभव है, जिसके पीछे प्रत्येक नाव "drags" होती है।
हन्नेश जूल 18'11

आह! यह एक लाजवाब विचार है :)। लेकिन यह शायद कई वाटरक्राफ्ट को बहुत अच्छी तरह से समर्थन नहीं करता है।
deceleratedcaviar
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.