समय के लिए कई कणों का निर्माण करना। इस बार यह पूरी तरह से एक तकनीकी डिजाइन दृष्टिकोण से है।एक्सएनए - एक ही समय में
मेरी स्थिति यह है: मैंने जीपीयू-गणनाओं के आधार पर एक कण इंजन बनाया है, जो कि पूर्ण से दूर है लेकिन यह काम करता है। मेरा जीपीयू आसानी से पसीना तोड़ने के बिना 10k कणों को संभालता है और अगर मैं एक गुच्छा अधिक जोड़ सकता हूं तो मुझे आश्चर्य नहीं होगा।
मेरी समस्या: जब भी मेरे पास एक ही समय में बनाए गए बहुत सारे कण होते हैं, तो मेरी फ्रेम दर मुझसे नफरत करती है। क्यूं कर? बहुत सी सीपीयू-उपयोग, भले ही मैंने इसे लगभग केवल मेमोरी ऑपरेशंस रखने के लिए कम किया है।
- विधि कण बनाना चाहता है और एक कॉल करता है: कणों की
निर्माण अभी भी इस तरह के रूप में सीपीयू कॉल द्वारा किया जाता है।
- क्वाड कोने के रूप में बनाया गया है और एक बफर में संग्रहीत
- बफर GPU में डाला जाता है और मेरे सीपीयू अन्य बातों के
जब मैं लगभग 4 emitters फ्रेम प्रति एक कण बनाने है, पर ध्यान केंद्रित कर सकते हैं है मेरी एफपीएस कम हो जाता है (निश्चित रूप से, प्रति सेकेंड केवल 4 फ्रेम लेकिन 15 उत्सर्जक मेरे एफपीएस को 25 तक छोड़ देते हैं)। एक कण के
निर्माण:
//### As you can see, not a lot of action here. ###
ParticleVertex []tmpVertices = ParticleQuad.Vertices(Position,Velocity,this.TimeAlive);
particleVertices[i] = tmpVertices[0];
particleVertices[i + 1] = tmpVertices[1];
particleVertices[i + 2] = tmpVertices[2];
particleVertices[i + 3] = tmpVertices[3];
particleVertices[i + 4] = tmpVertices[4];
particleVertices[i + 5] = tmpVertices[5];
particleVertexBuffer.SetData(particleVertices);
मेरे विचार कर रहे हैं कि शायद मैं कणों को अक्सर, शायद वहाँ GPU, सब कुछ बना सकते हैं का एक तरीका है कि नहीं बनाना चाहिए या हो सकता है मैं सिर्फ डॉन ' टी नहीं जानते कि आप इन चीजों को कैसे करते हैं। ;)
संपादित करें: अगर मैं अक्सर कण नहीं बना रहा था, तो यह अभी भी अच्छा दिखने के लिए कामकाज क्या है?
तो मैं उम्मीद में यहां पोस्ट कर रहा हूं कि आप जानते हैं कि एक अच्छा कण इंजन कैसे डिजाइन किया जाना चाहिए और यदि शायद मैंने गलत मार्ग लिया हो।