جاك كيرنر هو مهندس برمجيات أقدم في أفالانش ستوديوز.كما لو أن اللعبة لم تكن مجنونة بما يكفي من قبلمقدمة
تُعرف سلسلة ألعاب Just Cause و Avalanche Studios بتكنولوجيا العالم المفتوح ، حيث توفر طريقة لعب متنوعة ومثيرة. أحدث إصدار من اللعبة - Just Cause 4 - أضاف كوارث الرياح والطقس ، والتي أصبحت حداثة في كومة من التقنيات التي تعمق اللعب. لكن الظروف البيئية القاسية كانت في الأصل ليست مجرد وسيلة لمحاكاة عالم أكثر تصديقاً. يتم التحكم في غضب الطبيعة من قبل قوى الشر المعارضة ريكو رودريغيز. لقد اعتزمنا أن نجعل الريح تتجلى بشكل أكثر وضوحًا وأن الظروف الجوية القاسية لم تشبه الأحداث المفاجئة الغريبة في هذا العالم. تقدم هذه المقالة التقنيات التي طورناها لتنفيذ الريح بجميع مظاهره من وجهة نظر مادية ، وكذلك رد فعل كل الأشياء تجاهه.
[تحت القط حوالي 120 ميغابايت من ملفات GIF]JC4 العاصفة الاستوائية - مفهوم مبكر (فولتا)عرض لا يمكننا رفضه
نظرًا لأن تطوير Just Cause 3 على وشك الانتهاء ، فقد تحول معظم الفريق إلى مرحلة ما قبل الإنتاج Just Just 4 ، وكان على النواة الصغيرة العمل على تصحيحات JC3 والمحتوى القابل للتنزيل ("DLC"). Hamish Young and I ، مبرمج رئيسي ومصمم مركبة رائدة ، يركز على Mech Land Assault DLC. كان من المفترض أن نكون المصمم الرائد للفيزياء (وميكانيكا اللاعب) والمبرمج الرائد للفيزياء JC4 ، لكننا استوعبنا تمامًا من قِبل DLC في الوقت الذي تم فيه تصميم سلسلة الامتياز الجديدة ، وتم تحديد ميزاتها الجذابة ووظائفها المهمة. هذه المرة تم إنشاء نموذج أولي واسع النطاق لاختبار الميكانيكا الأساسية الجديدة ورد فعل ريكو على الريح. تمت كتابة مسودة للمخطط ، ووافق الناشر Square Enix على اتجاه التطوير الأولي. الشيء الوحيد المتبقي هو السيطرة على المفهوم. ولكن كيف نفعل ذلك دون المساومة على الأداء؟ بمجرد أن بدأنا المشروع ، هاجمنا المشكلة من جبهتين: 1. وضع حدود عريضة لتجنب أسوأ السيناريوهات (المفسد: لم ننجح) 2. فرز المظاهر المختلفة للأحوال الجوية القاسية ، وخاصة رياح الأعاصير ، قم بإنشاء نظام يوفر سلوكًا واقعيًا ، لكنه يتناسب جيدًا مع عدد الكائنات وكثافتها.

عاصفة رملية في JC4 - فن الحمل المبكر (Volta)السيطرة على الضرر
عنق الزجاجة في المحاكاة في الوقت الحقيقي ، وخاصة ألعاب العالم المفتوح ، هو عدد الأجسام البدنية المتصادمة. تنشأ النفقات الرئيسية بسبب حساب تصادمات العديد من الأجسام المتحركة التي تصطدم مع بعضها البعض ومع بيئة ثابتة (الإغاثة ، والمباني). هذا هو السبب في أن المحركات الفيزيائية مثل Havok تفصل بين الهيئات النشطة وغير النشطة. يتم فحص الهيئات النشطة للاصطدامات مع الهيئات الأخرى وتتطلب التكلفة الحسابية الكاملة. إذا كان الجسم النشط لا يتحرك لعدة إطارات ، فإن المحرك المادي يميزه على أنه غير نشط ، ومن هذه اللحظة يمكن تجاهله تمامًا حتى يتم "الاستيقاظ" من قِبل الجسم النشط المقترب. هذه الأجسام الخاملة عادةً ما تكون على الأرض ولا يتم إجراء اختبارات التصادم بينها وبين الأرض. من الواضح أن الوجود في كل مكان للرياح في العالم المفتوح سيشكل تهديدًا لهذا النظام ، لذلك كان من المهم بالنسبة لنا التأكد من أن الرياح ظلت معتدلة ومستحضرات تجميلية بحتة عندما تتعرض لمناطق كبيرة ، أو قوية وتنشط جسديًا عند حدوثها في أحجام صغيرة والأماكن التي تكون فيها الكمية الهيئات النشطة يحتمل أن تكون صغيرة. تحدثت عن هذه القيود لقسم التصميم الخاص بنا في المراحل الأولى من التطوير حتى لا يتم محاصرتها. في البداية ، بدا أن المصممين قد استمعوا وقرروا قصر مسارات الأحداث المناخية القاسية على طرق التدمير المحددة مسبقًا ، والتي يجب أن تطبق بموجبها قواعد أكثر صرامة لبناء العالم. وقد لاحظوا بعض هذه القيود. لكن الإغراء كان كبيرًا جدًا ، وتبين أن ضغط الزملاء الذين أرادوا جعل اللعبة جيدة قدر الإمكان لا يمكن التغلب عليها. ما كنت أفكر فقط؟ بعد ذلك مباشرة ، ابتكر المصممون إعصارًا بطول عدة كيلومترات ، مروراً بعاصمة البلاد - الجزء الأكثر اكتظاظًا بالسكان في الجزيرة. هذا الإعصار بجرأة ليس فقط نصف العاصمة ، ولكن أيضا بعض المبرمجين المطمئنين الذين لم يلتزموا بهذه الميزة الأساسية للعبة بشكل صارم للغاية.

عاصفة ثلجية قوية في JC4 - فن مفهوم مبكر (فولتا)النهج العام
بشكل عام ، تتطلب فيزياء الطقس القاسية في JC4 المكونات التالية:
- يتم تطبيق نموذج السحب الهوائي على جميع الكائنات الديناميكية في العالم ، مع مراعاة شكلها وحجمها
- مصادر الرياح التي تتوافق في الشكل والتوزيع مع الظروف المناخية القاسية (العاصفة ، الإعصار) ، ولكنها توفر أيضًا أنماطًا لانتشار الرياح حول العالم
- تعظيم الاستفادة من الأنظمة المذكورة أعلاه بحيث تلائم اللعبة ميزانية الأحمال الحاسوبية
هذه المشاكل الثلاث تحتاج إلى حلها في وقت واحد ، وبأسرع وقت ممكن. تعتمد العديد من قرارات التصميم على إمكانية تنفيذ الجوانب الثلاثة جميعًا ، وخلال الأشهر الأولى شعرنا بعدم الرضا عن المصممين الذين انتظروا بصبر الفرصة للتجول مع النظام على نطاق واسع.
أولاً ، أنشأنا نموذجًا للسحب الديناميكي الهوائي. بعد اكتماله ، تعلم كل كائن فجأة الاستجابة بطريقة واقعية إلى حد ما إلى الريح. على سبيل المثال ، إذا سقط أي جسم منحدر أو تم إلقاؤه بواسطة انفجار ، فكل الأشياء تبطئ وتدور بشكل واقعي في الهواء ، وهذا بحد ذاته كان يستحق هذا الجهد بالفعل. لكن في ظل غياب مصادر الرياح ، كان من الصعب تحديد كيف ستتصرف في ظروف الرياح الشديدة. على الرغم من أننا فخورون بأنفسنا وحقيقة أن الخبرة والحدس ساعدتنا على إيجاد نهج سريع للمشاكل الأولى والثانية التي تفي بمتطلبات الأداء ، فقد قررنا أننا كنا محظوظين للغاية عندما بدأ الإصدار الأول من الإعصار العمل تمامًا كما توقعنا. رفعت جميع الكائنات الديناميكية ولفتها بطريقة واقعية إلى حد ما ، دون تناول وقت المعالج. ظهر مدير JC4 فرانشيسكو أنتوليني ، الذي سأل في كثير من الأحيان عن حالة الإعصار ، بجوار مكان عملي وعبر عن ارتياحه: أعتقد أنني ضيعت فرصة العار له بسبب شكوكي ؛ لكن في الواقع شعرت بنفس الطريقة.
من وجهة نظر مادية ، كان JC4 طفرة مقارنة مع JC3: إنه عالم أكثر كثافة ، مليئة ، نابضة بالحياة وجميلة ، والتي هي أكثر إثارة للاهتمام للتدمير. وكل هذا كان ممكنًا على نفس الأنظمة الأساسية المستهدفة (XBox One و PlayStation 4). ليس من المستغرب ، استغرق التحسين وقتا طويلا جدا. استفاد مديرنا الفني ديف باريت على الفور من مصلحتنا: كان لدينا مؤشرات الأداء اللازمة لـ JC3 ، لذلك تم تكليف رئيس قسم تطوير المحرك ، دانييل بييروني ، بتحديد التكلفة القصوى للأداء والذاكرة التي يمكن استخدامها لكل جانب فني. لقد أعطينا للفيزياء 8.5 مللي ثانية على 4 سلاسل من أصل 33 مللي ثانية ، وتم تخصيصها لإنشاء إطار بتردد 30 مرة في الثانية. شغل Havok جزءًا كبيرًا من هذه الميزانية للتعرف على التصادمات المحتملة بين الكائنات ، وحساب جهات الاتصال ، وحل القيود ، و "دمج" حركة جميع الهيئات النشطة لتحديد موقعها بعد 33 مللي ثانية من الوقت المحاكي. حسبت تقريبًا أن ميزانيتنا لجميع الحسابات المتعلقة بالديناميكا الهوائية والرياح يجب أن تكون تقريبًا 1 مللي ثانية على 4 خيوط. في الأساس ، تمكنا من البقاء ضمن الميزانية ، على الرغم من أنه من الأفضل أن نسأل دانيال عن هذا. الحل الموضح أدناه سريع بدرجة كافية في الوقت الفعلي عند حساب عدة مئات من الكائنات على وحدات المعالجة المركزية الحديثة. بالطبع ، يمكن تحسينه ، مثله مثل الكثير ، من خلال تكييفه للعمل على وحدة معالجة الرسومات.
في بقية المقال ، سأتحدث بإيجاز عن الطريقة التي حللنا بها كل مشكلة ، ولأولئك المهتمين ، سأقدم تفاصيل التطبيقات والحسابات الرياضية.
Wind in JC4 - فن مفهوم مبكر (استوديوهات Ironklad)نموذج المقاومة
كان هدفنا في إنشاء نموذج المقاومة هو تقييم قوى المقاومة وعزم الدوران ، والتي تشبه تقريبًا تلك التي يتم تطبيقها على مجموعة من الأشكال التعسفية في العالم الواقعي. لاحظ كم كان طموحنا هنا - لا أحد طالب بواقعية هائلة. ومع ذلك ، كان لدينا بعض المتطلبات. أولاً ، يجب على قوى المقاومة مواجهة حركة الجسم. ثانياً ، يجب حساب القوة من المعادلة الأساسية للسحب الديناميكي الهوائي ، أي تختلف وفقا لمساحة سطح الشكل ومربع سرعة الحركة من خلال الهواء. أخيرًا ، يجب أن يأخذ شكل الجسم وحجمه في الاعتبار بطريقة ما بحيث تتصرف الكائنات التي لها نفس مساحة السطح ولكن الأشكال المختلفة جدًا مختلفة. لقد كان من المغري أن أقارب شكل كل جسم تقريبًا وفقًا للمخطط المتوازي الذي يصفه ، لكنني اعتقدت أن هناك حاجة إلى شيء أكثر ، لأنه كان واضحًا - يمكن أن يختلف شكل العديد من الأشياء بشكل كبير عن صندوق أو حتى عدد صغير من الصناديق. إن تجربتي السابقة في العمل مع الأنظمة التي تقارب حجم الكائنات ثلاثية الأبعاد تقريبًا باستخدام voxels أو الكرات الكروية جعلني أبحث عن حل أفضل. لقد عرض علي اختيار معاملات المقاومة لكل كائن يدويًا ، لكنني أردت تجنب مرحلة أخرى من الضبط اليدوي في خط أنابيب معقد بالفعل. لذلك ، واصلت البحث عن طريقة تلقائية. وأنا سعيد لأنني لم تتراجع.
إن أبسط طريقة لتقييم ضغط الرياح على كل سطح من شكل تصادم أجسامنا هي أن تأخذ في الاعتبار فقط الرياح الواردة ، وتجاهل كل دوران الهواء حول الأجسام ولزوجة الهواء المحيط بها. كما لو أن مقاومة الهواء تتكون فقط من تحريك كتلة الهواء إلى الأمام أمام الجسم أو امتصاصه من ناحية أخرى. أظهر النموذج الأولي المبكر أن هذه الطريقة كانت جيدة بما فيه الكفاية لأغراضنا.
كانت المشكلة "الوحيدة" هي أن مجموع مساهمات الآلاف من المثلثات لكل شخصية على حدة أثناء تنفيذ اللعبة كان بترتيب أعلى من مستوى التكلفة المطلوب. في المشاهد "الثقيلة" ، يمكننا الوصول بسهولة إلى أكثر من 100،000 وجه. سيكون أمرا رائعا لو استطعنا حساب القوى مقدما. تتمثل الطريقة الأولى لـ "القوة الغاشمة" في حساب أولي للقوى الهوائية وعزم الدوران التي تنشأ عندما يتحرك الجسم بسرعات مختلفة في عدة اتجاهات في الهواء الثابت عندما يدور بسرعات زاوية مختلفة في اتجاهات مختلفة. لذلك حصلنا على جدول بحث يمكننا أن نأخذ منه القيم أثناء تنفيذ اللعبة. يمكن تخيل ذلك على أنه نفق ريح افتراضي ، يتم تضمينه أثناء تجميع المحتوى الخاص بنا ، حيث نضع كل الكائنات في دورها ونعرضها لسرعات مختلفة من الحركة أو الدوران ، ووضع كل كائن في زوايا مختلفة ، وفي كل مرة قياس القوى وعزم الدوران.
كيف سيبدو هذا الجدول؟ القيم المعروفة في وقت التشغيل هي السرعة الخطية والزاوية للجسم ، لذلك
، أي حوالي 300 كيلو بايت لكل كائن. ومع ذلك ، يعد هذا الترتيب على الأقل أكبر من استهلاك الذاكرة المسموح به.
لتقليل عدد العينات بشكل كبير ، استخدمت أسلوبين. أولاً ، قمت بتحويل الحساب إلى شكل خطي إلى مجموع المساهمات بناءً على الحساب المبدئي للقوى وعزم الدوران بشكل منفصل لجسم متحرك ودوران فقط. ثانياً ، قمت بتقريب هذا إلى صيغة تحليلية لاستقراء القيم عند السرعات التعسفية بناءً على رد فعل محسوب مسبقًا وبسرعة تبلغ 1 م / ث وسرعة 1 rad / s. هذا خفض الجدول pre-computed إلى 7 كيلو بايت فقط لكل كائن. لسوء الحظ ، لهذا اضطررت إلى إجراء عدة تقريبية. سبب المشكلة هو أنه حتى مع وجود نموذج بسيط للغاية للمقاومة ، فإننا نواجه حقيقة أن القوى المطبقة على الجسم ، أي الدوران والتشريد ، ليست مجرد مجموع القوى المطبقة بشكل منفصل للدوران والتشريد. على الرغم من أنني اضطررت إلى إضافة تقريبية ، فقد تمكنت من حفظ بعض المصطلحات الناتجة عن مزيج من التناوب عند الحركة ، على غرار مكون كوريوليس. يمكن العثور على نتيجة الصياغة في الملحق 1. ونتيجة لذلك ، بدلاً من تخزين القوى وعزم الدوران لكل عينة مباشرةً ، نقوم بتخزين ناقل الأعضاء
المستخدمة في الصيغ الخطية. تقابل كل عينة سرعة وحدة خطية بالنسبة للهواء عند 1 م / ث أو سرعة زاوي وحدة بالنسبة إلى الهواء عند 1 rad / s ، في اتجاه معين. تستخدم مكونات هذا المتجه في الصيغة ، والتي تأخذ في الاعتبار أيضًا السرعات الخطية والزاوية الحقيقية للكائن بالنسبة إلى الهواء عند حساب القوى وعزم الدوران التي تحتاج إلى تطبيقها على الكائن. الملحق 1 تفاصيل كيف يحدث هذا.
لتخزين جدول البحث ، استخدمنا خريطة مكعب ، أي يقول مكعب 3x3 خلايا مكعب تنقسم وجوهه إلى شبكات من الحجم ، مثل مكعب روبيك. نقوم بتخزين القيم في زوايا الخلايا ، بحيث يمكن لكل وجه تخزين قيم 4x4. في كل ركن من أركان الخلية ، نحسب المتجه الذي ينتقل من وسط المكعب إلى الزاوية ، ونطبيع هذا المتجه للحصول على اتجاه الوحدة. نحن نستخدم هذا الاتجاه وحدة الاتجاه كما
لزاوية الخلية. نتيجة لذلك ، نحصل على 6 جداول (واحد لكل حافة) من 16 عنصرًا لكل منها 19 قيمة تعويم ، أي ما يزيد قليلاً عن 7 كيلوبايت ، وهذا مناسب جدًا. هناك طرق لزيادة تقليل عدد العينات ، ولكن من خلال هذه الطريقة من السهل جدًا استيفاء اتجاه السرعة العشوائية: نظرًا لأنه يقع دائمًا في الخلية ، من الممكن دائمًا استخدام القيم الموجودة في الزوايا الأربع لهذه الخلية لإجراء الاستيفاء ثنائي الخط لهذا الاتجاه المحدد. تُستخدم تقنية الخرائط المكعبة والإكمال الداخلي ذي الخطين على نطاق واسع في التقديم ، لذلك من السهل جدًا العثور على معلومات عنها والرمز المقابل لها.
الشكل 1. خريطة مكعب من سرعات وحدة نسبة إلى الهواء. في هذا الشكل ، أبرزت باللون الأحمر خلية منفصلة من خريطة مكعبة لتوضيح المبدأ. وجود السرعة الخطية بالنسبة للهواء ، نعيد أخذ عينات من نفس الخريطة المكعبة للعثور على الخلية الزرقاء واستخدام المعاملات الأربعة المخزنة في زواياها. ثم نخلط جميع القيم وفقًا للصيغة في الملحق 1.على الرغم من أن هذا الأمر نجح في معظم الحالات ، فقد واجهنا صعوبات في تغيير مركز الكتلة أو حجم الأشياء في وقت التشغيل. يمكن العثور على حلولنا لهذه المشكلات في الملحقين 2 و 3.
عند تطوير هذا النموذج ، لم أكن متأكدًا من عدد العينات الكافية للحصول على سلوك جيد للأجسام التي تتحرك وتدور في الهواء ، لذلك لم أكن أعرف بالضبط ما إذا كان لدي ذاكرة كافية على القرص في وقت التشغيل. في موازاة ذلك ، بدأنا في إنشاء أصول تدمير جديدة لـ Havok ، بمئات الأجزاء من مختلف الأحجام ، وأحيانًا عدة مئات من الأجزاء لأصل واحد. اتضح لي أن بعض هذه الأصول سوف تتطلب نفس القدر من الذاكرة ، مثل العديد من الأصول الأخرى في المجموع ، إذا كان لكل شظية خريطة مكعب خاصة بها. نقل النموذج العام بشكل جيد بعض الخصائص الفريدة للأجسام المعقدة ، ولكنه كان أكثر من اللازم بالنسبة للشظايا الصغيرة. بالإضافة إلى ذلك ، لم أكن متأكداً من التكلفة في وقت التشغيل ، وكانت القدرة على العودة إلى نموذج التكلفة الأقل وسيلة جيدة لتقليل المخاطر. لذلك ، عثرت على صيغة مضغوطة جدًا (إجراء تقريبية سخية) تعتمد فقط على مربعات الكائنات المحيطة. يمكن العثور عليه في الملحق 4.
حجم الرياح
قدمنا مفهوم أحجام الرياح ، مع دعم فكرة أن رياح الأجسام القوية النشطة جسديًا يمكن أن تحدث فقط في المساحات المحدودة ، وبدأنا في تصنيفها وفقًا لشكل الرياح وتوزيعها. قسمنا أحجام الرياح إلى الأنواع الرئيسية التالية:
- حجم الرياح الأسطوانية المستخدمة في العواصف الثلجية والعواصف الرملية والعواصف الاستوائية
- حجم رياح الاعصار - مجموعة رأسية من الاسطوانات تتركز نسبة إلى شريحة رأسية تشوه بمرور الوقت
- أنفاق الرياح مكونة من عدة أشكال متصلة على شكل كبسولة (كبسولات تختلف نصف القطر عند نهايات مختلفة) ، وتشكل ما يشبه "ثقب"
تم انتقاد هذا التقييد للرياح بواسطة المجلد النهائي عدة مرات ، وفي اللحظة الأخيرة كادوا يتخلون عنها ، واستبدلوها بـ "رياح طبوغرافية". كان من المفترض أن تتوافق الرياح في كل مكان مع حركة السحب في الجو العلوي وتزود اللاعب بتدفق تصاعدي من الهواء عند اجتماعه مع ميل متزايد من التضاريس.
قمنا بتنفيذها ، لكن عدم وجود عرض واضح للرياح أجبرنا على التخلي عن هذه الوظيفة. كان لدى اللاعبين في قسم التقديم العديد من المهام بالفعل لبيع السحب والأنهار والشلالات والارتقاء إلى DirectX 12 وأكثر من ذلك بكثير.عند العودة إلى الماضي ، اتضح أن العواصف أصبحت أبسط أحجام الرياح ، سواء من حيث الشكل (الأسطوانة) وتوزيع الرياح (أحادي الاتجاه تقريبًا للعاصفة الرملية ، أو الدوران حول محور مركزي لعاصفة ثلجية). من ناحية أخرى ، تبين أن الأعاصير وأنفاق الرياح أكثر تعقيدًا وتستحق شرحًا أكثر تفصيلًا.اعصار
كانت لدينا فكرة واضحة وبسيطة عن كيفية تدوير الأجسام حول الإعصار ، لكننا لم نتفق على توزيع الرياح اللازمة لتحقيق هذه النتيجة. بدلاً من النقاش الذي لا نهاية له ، قمنا بتخصيص المكونات المختلفة لحقل الرياح في وقت التشغيل حتى يتمكن Hamish من تجربتها والعثور بسرعة على خيار عمل. يعد الإعصار أساسًا كومة من الأسطوانات الأفقية التي تقع مراكزها على الشريحة المركزية ، والتي تتشوه بمرور الوقت. في هذه الأسطوانات الأفقية ، قمنا بتحليل حقل رياح الإعصار إلى إحداثيات أسطوانية مع مكون الظل ، مكون شعاعي ، ومكون رأسي. يمكن ضبط كل مكون باستخدام منحنيات متغيرة.2. — . , , . . , .كما هو الحال مع العديد من الميزات الأخرى ، وكما هو الحال في صناعتنا ، غالبًا ما انتقلنا من Hamish إلى الإعداد حتى كانت النتيجة جيدة بما فيه الكفاية. قام هامش بتعديل المنحنيات حسب رغبته ، حيث قام بإلقاء عشرات الحاويات التي يبلغ طولها 12 مترًا على طول الإعصار للنظر في سلوكهم. اعتاد الحد الأقصى لسرعة الرياح المسجلة (حوالي 230 ميلا في الساعة) للاعصار. بعد بعض الوقت ، وجد Hamish أن إعداده كان معقدًا لأنه كان ضروريًا لجعل الريح في كل مكان تتوافق مع حركة دورانية بسيطة ، ولكن في الوقت نفسه جذب أشياء إلى الوسط. كانت السرعة الزاوية بالفعل جزءًا من الحقل ، ليس فقط الدفع ، ولكن أيضًا الكائنات الدوارة في الإعصار. كفل ذلك ، على سبيل المثال ، أن الكائنات الموجودة في الوسط ستدور في مكانها ، كما أردنا.لذلك ، طلب حميش البدء بالرياح ، في كل مكان المقابلة لهذه السرعة الزاوية في الوسط ، أي البدء بحقل السرعة لحقل الدوران المثالي ، والذي يمكن إضافة حقل الرياح المخصص إليه. بعد هذا الإعداد الأخير ، بدأت المنحنيات تتكون من المكونات التالية:- - عامل المكون الشعاعي (الحركة الشعاعية)
- هو عامل مكون الظل (الحركة الشعاعية)
- - عامل المكون الرأسي (الحركة الشعاعية)
- - مضاعف المكون الأفقي (الحركة الرأسية)
- - عامل المكون الرأسي (الحركة الرأسية)
أين هو الارتفاع فوق قاع الإعصار ، و هي المسافة من المركز. يتم إعطاء سرعة الرياح الإعصار بواسطة المعادلة:
عندما يتم تسريع الأجسام إلى سرعة الظل في الإعصار على مسافة معينة ، يكون مكون الظل في قوى مقاومة الهواء أساسًا صفر ، لأن كل من الهواء والجسم يتحركان على طول الظل في انسجام تام. يسحب ما تبقى من سرعة الرياح الجسم إلى الداخل ، حيث يجذب الكوكب أقمار صناعية لثني مسارها بحيث يبقى في المدار ؛ أيضًا ، يتم دفع الكائنات لأعلى للوصول إلى ارتفاعات أكبر. إن رفع الكائنات لأعلى هو أهم تحسين للأداء ، حيث يمنع الحسابات المكلفة لجهات اتصال مئات الكائنات والأرض. كما أنه يساعد مع ارتفاع الإعصار أنه يزيد من دائرة نصف قطرها عن طريق توزيع الأشياء مكانيا للحد من احتمال الاصطدام وحساب الاتصال. يتشكل إعصار في العالم الحقيقي من خلال تبادل الهواء عندما تكون طبقة من الهواء البارد على قمة طبقة من الهواء الدافئ.يرتفع الهواء الدافئ مثل دوامة حول مركز الإعصار ، وهو هواء بارد ينزل. لذلك ، من حيث المبدأ ، في وسط القمع ، يجب توجيه سرعة الرياح بقوة نحو الأسفل. كما ترون ، هذا لا يتم تنفيذه معنا من أجل تقليل احتمالية دفع الأشياء لأسفل على الأرض وسحبها إلى إعصار ، وإلا فإن هذا سيزيد من حساب التكاليف المرتفعة للاصطدامات.
3. (), (). الحقل الدوار للرياح التي بدأنا بها ، من أجل فهم أفضل ما إذا كان هناك مجال إضافي ضروري للتشغيل السليم للاعصار. في الإصدار الموجود على اليمين ، تتم إضافة حقل دوار. في المسافة ، نرى ريحًا سريعة جدًا ، في أي نقطة موجهة نحو 45 درجة من نصف القطر. يوضح القسم الرأسي على اليسار مقدار سحب الإعصار في الوسط. ثم هناك فترة انتقال صغيرة لا توجد فيها رياح تقريبًا ، ويوجد خلفها حقل دوار قوي في الوسط. تظهر قوة مجال الرياح في اللون ، الأحمر ، الأقوى.
الشكل 4. خطوط مسارات حول حقل الرياح اعصار - الشريحة المركزية للخط.الإعصار المباشر يبدو مملًا. ولتشويهها ، استخدمنا شريحتين مكعبتين متصلتين بالأطراف ، توجد 3 نقاط تحكم في المدار وتتحرك بسرعات مختلفة حول خط عمودي وهمي. يتغير الملف التعريفي الناتج مع مرور الوقت ، لذلك ينتقل ببطء من الشكل S إلى الشكل C والعكس صحيح. يوضح الملحق 5 كيف أنشأنا الخطوط. ومن المثير للاهتمام ، أن الإعصار في الوضع المشوه لم ينجح أيضًا. الأجسام التي تدور في مدار الإعصار المباشر منتشرة الآن حالما ابتعد الانقسام المركزي للإعصار عنهم وسقط للأسف على الأرض. لحل هذه المشكلة ، أضفنا مصطلحًا آخر للسرعة بسبب تشوه الإعصار نفسه. في النهاية ، يجب أن ينشأ هذا التشوه بشكل أساسي بسبب حركة الهواء ، وبدا من الطبيعي أن نضيف هذا المكون. هذا حل المشكلة بشكل جميل ، مما يتيح لنا خطوط المسار مشابهة جدا للصورة أدناه.
الشكل 5. خطوط مسارات حول حقل رياح الاعصار - ينحني الجزء المركزي بمرور الوقتالشكل 6. مثال على الإعصار في اللعبة ، إنه يدمر ويمتص كل شيء في طريقه. هذا هو Havok Visual Debugger (VDB) ، وهي أداة مفيدة للغاية تسمح لنا بمراقبة العناصر المحاكاة.أنفاق الرياح
تم تصميم أنفاق الرياح لتوفير التحكم المادي للرياح في أجزاء من العالم ، مثل الأودية والكهوف ، فضلاً عن أعمدة الدخان أمام المراوح الصناعية الضخمة ومدافع الرياح. يمكن استخدامها لتوجيه اللاعب في بعض المساحات أو المهام. استخدمت النماذج الأولية الأولى لدينا أسطوانة تقليدية مع مجال متجه منتظم بسرعات ثابتة موازية لمحور دوران الأسطوانة. كانت عملية وضع كل هذه الأسطوانات في المشهد مهمة شاقة ، لذا بدلاً من ذلك استخدمنا شريحة بيزييه المكعبة حولها دائرة من دائرة نصف قطرها متفاوتة. يتم تقريب هذا الشكل عن طريق تقسيم الشريحة المركزية إلى أشكال على شكل كبسولة ، أي على كبسولات مع أنصاف أقطار مختلفة حول الحواف. خضع مجال السرعة فيها لبعض التغييرات. في البداية ، كانت الرياح في النفق متشابكة مع الشريحة المركزية. وضعنا سرعات الرياح في كل نقطة تحكم في الشريحة ، وتم تحريفها من نقطة تحكم إلى نقطة أخرى على طول مقطع الشريحة. ومع ذلك ، سرعان ما اكتشف جوشوا إسبينوزا (المصمم الذي عمل على أنفاق الرياح وحركات اللاعب عليها) أنه يحتاج إلى مكونين آخرين. أحد المكونات هو المنبع ، مما يمنح اللاعب مصعدًا صناعيًا إضافيًا ، يشير دائمًا إلى أعلى. لقد أطلقنا على العنصر الآخر "التراجع" ، وهو يدفع اللاعب نحو اتجاه الوسط ، ولكن الأهم من ذلك هو حواف النفق ، متجهًا إلى الوسط إلى الصفر. أخيرًا ، ضمنت حدود الاختزال في الجزء الخارجي من النفق انتقالًا سلسًا من الجزء الخارجي إلى الجزء الخارجي من النفق. يتم تحديد سمك هذه الحدود كنسبة مئوية من نصف القطر ؛ انها تعمل على طول نفق الرياح بأكمله.

الشكل 7. نفق الرياح مقسمة إلى سلسلة من الأرقام المتداخلة على شكل كبسولة. يحدث الفصل عندما يتغير اتجاه الشريحة ، أو عندما يتعذر إجراء الاستكمال الطولي الخطي لنصف القطر (A) أو سرعة الرياح (B). حسبنا المشتق الثاني من هذه المتغيرات على طول المفتاح لتحديد متى يتم تقسيمه.الشكل 8. تحرير أنفاق الرياح في محرك أبيكس. يتم تقسيم نفق الرياح إلى كبسولات بالطريقة الصحيحة ، اعتمادًا على الشريحة ، والتغيرات في نصف قطر وسرعة الرياح على طول الشريحة. كما هو مذكور في القسم التالي ، يمكنك أيضًا رؤية الفصل المكاني الذي يفرز الأشكال على شكل كبسولة في منحنيات مورتون. هذه الحسابات سريعة بما يكفي للتحديثات في الوقت الحقيقي ؛ بالإضافة إلى ذلك ، يمكنك التفاعل بسرعة مع نفق الرياح لاختباره. تم إجراء أداة التحرير من خلال إعادة صياغة بعض أجزاء أداة إنشاء النهر مع إضافة عرض تصحيح الأخطاء.الشكل 9. مثال على نفق ريح طويل يسمح للاعب بالتحرك في اتجاه المنبع إلى الجبل. يدفع تيار النهر ريك إلى البحر ، ويمكن للرياح أن تعيده سريعًا إلى داخل الأرض الواقعة على نفس النهر. لاحظ قسم الميكانيكا التابع للاعب أن رياح ريكو الجانبية كانت حادة جدًا ، لذا فإن التأثير الرئيسي للرياح هو تسريع اللاعب (مع ريح عادلة) أو الفرامل (رياح معاكسة) ومنحه رفعًا إضافيًا (مكون المنبع).الرقم 10. ريكو في بذلة في نفس نفق الرياح. هنا اللاعب لم يتحكم في الاتجاه. في البداية ، يفقد ريكو الارتفاع حتى يصل إلى الجزء الخارجي من نفق الرياح ، مما يؤدي إلى إبطاء انخفاضه تدريجياً. ثم يخلق الجزء المركزي تدفقًا صعوديًا كافيًا للتغلب على الجاذبية ويسرعها بسرعة إلى الوادي. قام Joshua Espinosa و Hamish Young و Rickard Granfeld بتطوير كود Wingsuit JC3 للتفاعل المناسب مع الريح.طلب الرياح الأمثل
مع إمكانية وجود مئات الأجسام النشطة ، يجب أن تكون عملية حساب الرياح المحلية في موقعها عملية سريعة. بدأنا في تحسين الاستعلامات عن طريق حساب AABB (المربع المحيط بمحاذاة المحور) لكل حجم للرياح وتخزينها في صفيف محزم بإحكام. هذا يسمح برفض القوة الغاشمة لأنه من الممكن التحقق بسرعة من الموقف فيما يتعلق بكل AABB دون تفويت ذاكرة التخزين المؤقت. في كل إطار AABB ، يتم تحديث أحجام الرياح في الصفيف للتحضير للطلب.
إذا كان الموضع داخل حجم العاصفة ، فنحن نحسب مباشرة تأثير الرياح باستخدام شكل أسطواني. بالنسبة للاعصار ، تحتاج إلى إجراء المزيد من العمليات الحسابية ، لأنه في الأعلى يكون أكبر بكثير من الأسفل ، في حين أن أعلى كثافة للكائنات في الأسفل. لا يؤدي حل AABB إلى قطع الكائنات بالقرب من الإعصار ، لذا استخدمنا أسطوانات مكدسة فوق بعضها البعض. أنها تنقل شكل اعصار أقرب بكثير وتستخدم لقص الكائنات قبل حساب الرياح. كان أحدث تحسين للاعاصير هو تجنب إسقاط موضع الاستعلام على الشريحة المركزية. كان هذا ممكنًا لأنه على الرغم من أن إعصار الشريحة هو نقاط محورية ثلاثية الأبعاد ، وبالتالي فهو منحنى حدودي ثلاثي الأبعاد ، في الممارسة العملية ، يتم توزيع نقاط التحكم المقربة به بشكل موحد ومتسلسل على طول العمودي ، مما يوفر لنا منحنى بسيط إلى حد ما. بشكل عام ، يتطلب إسقاط نقطة على خط ثلاثي الأبعاد أو العثور على نقطة على ذلك الشريحة بنفس الارتفاع بحثًا على هذا المفتاح. لكن بدلاً من ذلك ، قررنا تغيير الطريقة التي يتم بها أخذ عينات العمود الفقري باستخدام الارتفاع فوق قاع الإعصار كمعلمة أخذ عينات للفقرة نفسها. هذا يغير شكل الشريحة بشكل طفيف ، لكن الشريحة لا تزال تمر عبر نقاط الاستيفاء. ولكن في الوقت نفسه ، للعثور على نقطة على الشريحة في نفس الارتفاع ، يتعلق الأمر بنقل ارتفاع موضع الطلب إليها ، يليه تحديد ارتفاع النقطة في ارتفاع الطلب. بالنسبة لنقاط التحكم التي تقع بشكل غير متساوٍ على طول المحور العمودي ، يكون الفرق ملحوظًا ، ولكن عندما تكون متكافئة ، يكون هذا بالكاد مرئيًا. يمكننا أيضًا تغيير الطريقة التي يتم بها بناء المنحنى المركزي باستخدام وظيفة ارتفاع المكعب بدلاً من منحنى حدودي ، ولكن ، مثل العديد من التحسينات الأخرى ، ظهر هذا متأخراً.
تحتاج أنفاق الرياح أيضًا إلى التحسين ، لأن إسقاط كل نقطة استعلام على الشريحة المركزية لكل نفق ريح لم يتم النظر فيه. لحسن الحظ ، تمكنا من الاستفادة من التكنولوجيا التي تم تنفيذها في وقت واحد للأنهار من قبل Engin Silasun: قاعدة بيانات مكانية متفرق. نقسم المساحة إلى 32
. إذا لم تكن الخلية في قاعدة البيانات المكانية ، فلا توجد ريح عند نقطة الاستعلام الناتجة عن أنفاق الرياح. إذا تم العثور على الخلية ، فأنت بحاجة إلى إجراء فحص أكثر تكلفة. بالإضافة إلى ذلك ، يجب أن يكون هذا الفحص سريعًا إلى حد ما ، ولذا قمنا بقطع أنفاق الرياح إلى أشكال على شكل كبسولة. في الحالة العامة ، يتم استخدام الكبسولات لأنه من الممكن حساب المسافة إلى الجزء المركزي بتكلفة منخفضة. الأشكال المُشكلة على شكل كبسولة أغلى قليلاً ، ولكنها لا تزال أسرع من العثور على أقصر مسافة إلى شريحة مكعبة. خاصية أخرى لنظام كلي مكاني لأنفاق الرياح هي أنه يمكننا أن نتذكر مؤشر الخلية لكائن معين موجود في الإطار السابق واستخدامه بمثابة تلميح لتسريع الاستعلام في الإطار التالي ، لأنه على الأرجح موجود بالفعل في هذا أو في مكان مجاور الخلية.
الشكل 11. يتم إدخال الأشكال على شكل كبسولة من أنفاق الرياح في قاعدة بيانات مكانية متفرق وفقا للخلايا التي يعبرونها. والنتيجة هي مجموعة من 9 خلايا ، كل منها يحتوي على عدد قليل فقط من الشخصيات على شكل كبسولة.في الختام
أثبتت مجموعة التقنيات التي استخدمناها أنها فعالة للغاية. في حد ذاتها ، وتستخدم هذه التقنيات بنشاط في البرمجة. يكمن معظم العمل في اختيارهم وضمان تعاونهم الصحيح لحل المشكلة الحالية. هذا هو الحال بالنسبة لبرمجة ألعاب الفيديو: فهي مليئة بالمشاكل الصغيرة التي تتطلب حلولا بسيطة ولكنها موثوقة.
نموذج مقاومة الهواء مبسط للغاية ولا يعكس بعض الخصائص المهمة لتدفق السوائل الحقيقي. على سبيل المثال ، فإن ورقة بزاوية 45 درجة ستولد المزيد من الرفع مما في نموذجنا الخام. لكن الشيء الجيد في الأمر هو أنه لا يتم حساب القوى وعزم الدوران في وقت التشغيل ، والحل مع خريطة مكعب يتجنب محاكاة أكثر تفصيلا. في الواقع ، قمنا بفحص حساب القوى وعزم الدوران الذي تم إنشاؤه على الخريطة المكعبة بأكملها لكائن الاختبار (سيارة قديمة من JC4) باستخدام برنامج ديناميات السوائل الحاسوبية مفتوحة المصدر (OpenFOAM). أظهرت المقارنة أننا لم نكن بعيدين عن النتائج الصحيحة ، لكن "شكل" الخرائط المكعبية كان مختلفًا ، وأتوقع أنه سيختلف أكثر بالنسبة للكائنات الموجودة في شكل جناح. ومع ذلك ، فقد استغرق الأمر عدة ساعات لحساب البرنامج ، لذلك فمن الواضح أن هذا الحل غير مناسب للاستخدام على جميع الكائنات. استغرق أسلوبنا أقل من ثانية لكل كائن. لكنني أعتقد أنه سيكون من المثير للاهتمام للغاية أن يكون للألعاب التي تعتمد على الفيزياء معاملات ديناميكية هوائية سريعة ولكنها واقعية لجميع الكائنات. لنفترض أن ريكو يمكنه جمع الأشياء في طفرة ضخمة. لقد لعبت لفترة وجيزة مع هذه الفكرة ، وأراقب السقوط السريع وتناوب بذور طائرات الهليكوبتر القيقب ، وخلق نموذجا في مايا لمعرفة ما يحدث. لقد تبين أن النتيجة أفضل من المتوقع ، وقد تم تدوير الكائن ببطء عندما سقط. ولكن يبدو لي أنه من أجل التدوير السريع ، سيكون من الضروري تحسين نموذج مقاومة الهواء بشكل كبير. كما يحدث في كثير من الأحيان ، ببساطة لم يكن لدينا ما يكفي من الوقت.
الشكل 12. اليسار: كل اتجاهات سيارة زيتية قديمة من Just Cause 4 ، وضعت في نفق ريح افتراضي لملء خريطة مكعبة بشبكة 5 × 5 على كل وجه. يمين: Paraview نتائج تصور اتجاهين - بزاوية أعلاه (أعلاه) وخلف (أدناه). يشير اللون الأحمر إلى ارتفاع الضغط ، والأزرق يشير إلى انخفاض الضغط ، وتشير الخطوط إلى التدفقات.عملت الأعاصير والعواصف بشكل فعال جدا. لا يزال من الممكن تحسين تشوه الإعصار. إذا أمضينا المزيد من الوقت في هذا الأمر ، فربما نكون قادرين على صنع الأعاصير المائية (بالطبع ، مع أسماك القرش بدلاً من الأبقار) ، أو الدوامات أو الأعاصير النارية. كان لدينا فكرة أخرى - لتطوير مدفع يخلق اعصارًا صغيرًا.
تم استخدام أنفاق الرياح في أجزاء مختلفة من العالم للسيطرة على الرياح في الجزيرة ، على سبيل المثال ، في الأخاديد ، في البعثات ، حول بعض القواعد العسكرية. أنها تساعد اللاعب على عبور مساحات شاسعة من عالمنا المفتوح مع رياح صاعدة ذات موقع استراتيجي. لكنني أعتقد أنه سيكون من الأفضل استخدام فكرة الرياح الطبوغرافية ، والتي لم يكن لدينا وقت لتنفيذها. سيكون من المنطقي أكثر أن ننفذها أولاً ، فهذا من شأنه أن يمنحنا ريحًا منتظمة منتشرة لا تتطلب تقريبًا تقريبًا ، وستوفر أنفاق الرياح سيطرة محلية على الانحرافات عنها.
وأخيرا ، كانت فكرة استخدام حواجز الرياح بمثابة ميكانيكا للألعاب فكرة جيدة. قمنا بتطبيق نموذج أولي للعقبات ، والذي ظهر داخل الفريق ، لكننا تخلينا عنه بسبب ضيق الوقت للتنفيذ الصحيح. لم تكن الفيزياء الخاصة به سوى جزء من التكلفة الإجمالية لهذه الميزة ، والتي كان من المفترض أن يدعمها معظم فريق التطوير.
لكن لا شيء يمكن أن يصرفني عن مدى فخري بما تمكنا من فعله في JC4. إن تصوّرنا للأحوال الجوية القاسية وخاصة الأعاصير ، إلى جانب قدرة ريكو على التحرك في الفضاء ، جعل من الممكن إنشاء لعبة فريدة ومميزة للغاية. أتمنى أن تكون قد استمتعت بلعب لعبة JC4 مثلما فعلنا عندما أنشأناها.
الملحق 1: نموذج مقاومة الهواء
نحن نرى الجسم
يحددها شبكة
.
الشكل 13. الجسم .النظر في مثلث
:
الشكل 14. مثلث والسرعة في وسطها.الآن نحن بحاجة لكتابة القوة عنصري
بناء على هذا المثلث. من هنا نحتاج إلى مراعاة متطلباتنا:
يتوافق هذا بشكل جيد مع المتطلبات ، لأن القوة يتم توجيهها دائمًا تقريبًا إلى الجانب مقابل اتجاه الحركة ، بما يتناسب مع مساحة سطح المثلث ويتناسب مع مربع سرعة المثلث بالنسبة للهواء. للحصول على القوة المؤثرة على الجسم كله ، نحتاج فقط إلى تلخيص هذه القوى:
ونحن نسعى جاهدين لتقليل كل شيء إلى 1 م / ث و 1 راد / ث ، دعنا نعيد كتابته
:
والآن أول تقريب كبير:
هذا يعادل تقريبًا طول الوتر من المثلث بمجموع أطوال الجانبين. يُعرف هذا التقريب أيضًا باسم "مسافة كتلة المدينة" (مسافة مانهاتن). عندما كنت أعمل على هذه المهمة ، كنت فقط في مانهاتن ، لذلك سيكون من الغباء عدم استخدامها. لذلك لدينا ما يلي:
نتحلل:
في البداية ، قد يبدو هذا مخيفًا. ولكن بعد ذلك لاحظت أن هذا هو ما كنا نبحث عنه. لاحظ أنه تم العثور على المبالغ فقط
مع متوسط قيمته بين جميع المثلثات:
دعنا نشير إليها
. الآن يمكننا أن نكتب في النهاية:
حيث:
\ تبدأ {align *} \ vec {F} _t (\ hat {v}) & = \ sum {-A_i \ hat {v} \ cdot \ hat {n} _i \ \ hat {n} _i} \\ \ vec {F} _r (\ hat {\ omega}) & = \ sum {-A_i \ | \ hat {\ omega} \ times \ vec {OC_i} \ | (\ hat {\ omega} \ times \ vec { OC_i}) \ cdot \ hat {n} _i \ \ hat {n} _i} \\ \ vec {F} _c (\ hat {\ omega}) & = \ sum {-A_i (\ hat {\ omega} \ الأوقات \ vec {OC_i}) \ cdot \ hat {n} _i \ \ hat {n} _i} \\ \ overline {v_r} (\ hat {\ omega}) & = {1 \ over N} \ sum {\ | \ hat {\ omega} \ times \ vec {OC_i} \ | } \ end {align *}
لحظة هذه القوى بالنسبة لهذه النقطة
يمكن الحصول عليها بطريقة مماثلة. ونتيجة لذلك ، حصلنا على ما يلي:
حيث:
\ تبدأ {align *} \ vec {M} _t (\ hat {v}) & = \ sum {-A_i \ hat {v} \ cdot \ hat {n} _i \ (\ vec {OC_i} \ times \ hat {n} _i)} \\ \ vec {M} _r (\ hat {\ omega}) & = \ sum {-A_i \ | \ hat {\ omega} \ times \ vec {OC_i} \ | (\ hat {\ omega} \ times \ vec {OC_i}) \ cdot \ hat {n} _i \ (\ vec {OC_i} \ times \ hat {n} _i)} \\ \ vec {M} _c (\ hat {\ omega}) & = \ sum {-A_i (\ hat {\ omega} \ times \ vec {OC_i}) \ cdot \ hat {n} _i \ (\ vec {OC_i} \ times \ hat {n} _i)} \ end {align *}
بالنظر إلى التعريفات المذكورة أعلاه ، يمكننا الآن تشكيل ناقل
:
هذا هو ناقل من 19 القيم ونحن نشير إلى جدول العينة
، ولكن يمكننا العثور على قيم قريبة إلى حد ما ، ثم استخدامها إما مباشرة ، أو استخدامها لإقحام الإخراج. وفي هذه المرحلة ، يتم تشغيل الخريطة المكعبة الموضحة في المقال.
الملحق 2: مركز الكتلة
قد تلاحظ أن القيم الموضحة أعلاه يتم حسابها بالنسبة إلى نقطة تعسفية
. القوة الكلية المؤثرة على الجسم هي ببساطة مجموع كل القوى:
لحظات
يتم تعيين على النحو التالي:
واللحظة الإجمالية لهذه القوى بالنسبة لهذه النقطة
يساوي:
الآن هو مجرد تعريف رياضي ، صيغة لا يمكن استخدامها مباشرة لتغيير حركة الجسم ، لأن مركز الثقل في هذه الصيغة من خلال نظرية Schal تساوي:
نحن ندرك لحظة القوى فيما يتعلق ، وبالتالي:
وهو مفيد للغاية بالنسبة لنا إذا حسبنا القوة الكلية دون تغيير وتطبيق عزم الدوران التالي على مركز الكتلة:
في البداية ، قررت فقط أخذ أصل الجسم كنقطة في وسط متوازي الاضلاع بالجسم ، والذي يجب أن يظل قريبًا من مركز الكتلة وتوطين أخذ عينات الرياح في المكان الأكثر منطقية بالنسبة للجسم.الملحق 3: القياس
ظهر عيب آخر عندما تم إدخال البالونات في اللعبة. هذه الكرات عبارة عن أجسام كروية ، يمكن أن يختلف حجمها مع عامل 5 أو 10. كما هو الحال في مركز الكتلة ، فقد كان إعادة حساب الخواص الهوائية في وقت التشغيل مكلفًا للغاية. هل من الممكن استخلاص صيغة تحليلية؟الشكل 15 الجسم النظر مرة أخرى في الجسم ، ولكن الآن لكائن تحجيمها. نحصل على:
باستخدام نفس التقريبية مثل أول مرة ، واستبدال ، نحصل على:
لمركز كتلة الجسم تحجيمها .
الملحق 4: نموذج المقاومة المبسطة للتوازي المتوازي
هناك العديد من الطرق لتقريب القوى وعزم الدوران من أجل متوازي الاضلاع ، ويمكن الحصول على صيغ مختلفة. صغير بما فيه الكفاية وسهل التنفيذ في الكود والحسابات في وقت التشغيل ، ويمكن استنتاجه من خلال تجاهل تأثير الحركة الزاوية على القوة الخطية وتأثير السرعة الخطية على عزم الدوران. أخذ حجم متوازي الاضلاع ، يمكننا التوصل إلى الصيغ المدمجة التالية:
الملحق 5: مركز تورنادو
يتركز الإعصار حول منحنى مركزي يتغير شكله ببطء. قمنا بتنفيذ هذا باستخدام اثنين من مفاتيح بيزييه مكعب متتالية: للقاع و للقمة. المفتاح له نقاط تحكم ،
،
و
و تسيطر عليها نقاط ،
،
و
.
موقف الإعصار نفسه هو في نقطة على الأرض وأعلى نقطةيبدأ P 7 مباشرة فوق مستوى الطبقة السحابية ، لكنه يتأخر في الوقت المناسب ، يتبع ببطء الموضع على الأرض. منذ ترتبط المنحنيات في نهاية واحدة ، و
يتزامن في الفضاء. استخدمنا أيضًا 3 مدارات مرجعية أفقية للنقاط ،
و
.
اخيرا كان يقع بالضبط في نقاط الوسط بين و
و عند نقطة الوسط بين و
.
 |  |
إنشاء خدد مركز اعصار | مركز تورنادو خدد تطور في الوقت المناسب |
المراجع
- فقط سبب 4
- هافوك
- أسس هياكل البيانات متعددة الأبعاد ومتري . حنان صامت
- منحنى Z- النظام
- رسم الخرائط مكعب
- رغوة مفتوحة
- فولتا
- استوديوهات أيرونكلاد