سؤال

لدي (الأساسية) فوكسل تشغيل المحرك و نظام المياه التي تبدو (وأفترض أن يعمل أساسا) مثل هذا: https://www.youtube.com/watch?v=Q_TdeGIOOts (ليس لعبة).
الماء يتم تخزين القيم في 3d مجموعة من العوامات ، و كل 0.05 s يحسب تدفق المياه عن طريق التحقق من فوكسل أدناه المجاورة (y-1 و x-1 و x+1, z-1, z+1) و يضيف قيمة.
هذا النظام يعمل بشكل جيد (70+ fps) على كميات صغيرة من الماء ، ولكن عندما أبدأ حساب الماء على 8+ قطع, فإنه يحصل كثيرا.(أنا تعطيل كل تقديم أو مش الخلق إلى التحقق إذا كان هذا هو عنق الزجاجة ، ليس.لها محض تدفق العمليات الحسابية).
أنا لست من ذوي الخبرة جدا مبرمج لذلك أنا لا أعرف من أين أبدأ الأمثل ، وبصرف النظر عن إجراء العمليات الحسابية يحدث في coroutine كما فعلت بالفعل.
في هذا المنصب: https://gamedev.stackexchange.com/questions/55414/how-to-define-areas-filled-with-water (بالقرب من أسفل) الشمالية تشير إلى تشغيله في حساب تظليل.هذا هو الطريق للذهاب لي ؟ و كيف لي أن مثل هذا الشيء ؟
أي مساعدة هي موضع تقدير كبير.

هل كانت مفيدة؟

المحلول

إذا كنت حقا حساب فوكسل القائم على المحاكاة ، سيتم زيادة عدد الحسابات هندسيا ك حجم الزيادات ، لذلك سوف تنفد بسرعة تجهيز الطاقة على كميات أكبر.

حساب تظليل كبيرة للقيام المتوازية العمليات الحسابية بسرعة, على الرغم من أنها مختلفة جدا نموذج البرمجة أن يأخذ بعض التعود.حساب تظليل سوف ننظر في محتويات المخزن المؤقت (أي "مادة" بالنسبة لنا المدنيين) و تفعل أشياء بسرعة جدا -- في حالة المخزن المؤقت المحتمل أن يكون المخزن المؤقت/الملمس الذي بكسل القيم تمثل المياه الخلايا.إذا كنت تريد أن تفعل شيئا حقا بسيطة مثل زيادة لهم أعلى أو أسفل حساب تظليل يستخدم المعالجة المتوازية قوة GPU أن تفعل ذلك بسرعة.

الجزء الصعب هو أن وحدات معالجة الرسومات الأمثل المعالجة المتوازية.هذا يعني أنه لا يمكنك كتابة التعليمات البرمجية مثل "texelA.قيمة += texelB.قيمة" - دون إضافية من العمل على الجزء الخاص بك, كل جزء من المنطقة العازلة هو معالجتها مع الصفر معرفة ما يحدث في الأجزاء الأخرى.إلى مرجعية أخرى texels تحتاج إلى قراءة نسيج مرة أخرى بطريقة ما - بعض تقنيات قراءة نسيج واحد عدة مرات مع إزاحة (هذا GL سبيل المثال هل هذا لتنفيذ يطمس ، للآخرين القيام بذلك مرارا وتكرارا من خلال تجهيز الملمس ، ووضع النتيجة في المؤقتة الملمس ثم إعادة معالجة ذلك.

في مستوى 10000 قدم:نعم حساب تظليل هو أداة جيدة لهذا النوع من المشكلة لأنه ينطوي طن الذاتي حسابية مشابهة.ولكن لن يكون من السهل القيام به قبالة الخفافيش.إذا لم تكن قد فعلت التقليدية تظليل البرمجة قبل, قد ترغب في النظر في أن أول من التعود على طريقة عمل وحدات معالجة الرسومات.حتى الأدوات الأساسية (if-then-else أو حلقات) مختلفة جدا تأثيرات الأداء ويستخدم في الجرافيك والبرمجة يستغرق بعض الوقت للحصول على رأسك حول الاختلافات.حتى كتابة هذه السطور (1/10/13) يبدو Nvidia و Udacity تقدم مقدمة لحساب تظليل الحال والتي قد تكون وسيلة جيدة للحصول على ما يصل الى سرعة.

FWIW تحتاج أيضا جميلة الأجهزة الحديثة لحساب تظليل التي قد تحد من جمهورك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top