كل المقالات
تحديثات المنتج · 8 min read

ماء يتصرّف كما ينبغي: نظرة أولى على Numivo Water

نظرة أولى على Numivo Water لـ Unreal Engine: محيط وبحيرات وتحت الماء وكهوف بجودة سينمائية تُقاس مقابل صور مرجعية، وضوء وزَبَد قائمان على الفيزياء، وطفو Drop-a-Mesh الذي يجعل أي جسم يطفو أو يغرق دون أي إعداد.

Illustration of a stylised sea with a floating crate and a sinking statue

نبني نظام ماء لـ Unreal Engine بوعدين: ماء يبدو صحيحًا لأن الضوء واللون والزبد يُحسَبون فيزيائيًا (لا يُضبَطون يدويًا لكل مشهد) وماء يتصرّف: أسقِط أي ميش على السطح، فيطفو أو يميل أو يغرق بشكل صحيح، دون أي إعداد. إنه قيد التطوير النشط. يشرح هذا المنشور ما يغطّيه، وكيف نُحمّل أنفسنا المسؤولية بصور مرجعية، ولماذا الطفو هو الجزء الصعب الذي يتخطّاه الجميع، وأين يقع بجوار بقية مجموعة الأدوات.

أمواج عاصفة تنفجر مصطدمة بساحل صخري المعيار الذي يجب تجاوزه. لاحظ ما يجعل هذا حقيقيًا: زبد يُولَد من الأمواج المتكسّرة، وضباب يلتهم الجروف، وإحصاء الرؤوس البيضاء عبر الموج كله، لا شيء موضوع يدويًا، كله فيزياء. تلك هي العارضة التي وضعناها.

لماذا نظام ماء آخر؟

معظم ماء الألعاب يبدو رائعًا في حالة إضاءة واحدة بالضبط: تلك التي في لقطة شاشة المتجر. حرّك الشمس، وبدّل إلى غائم، وضع الكاميرا نصفها تحت خط الماء، فينهار.

هناك إخفاق ثانٍ أهدأ لا يقلّ أهمية: يكاد كل نظام ماء يعامل الأجسام الطافية كفكرة لاحقة. تحصل على قالب قارب، وصفحة تعليمات لتجهيز العوّامات، وافتراضًا ضمنيًا بأن لا أحد سيرمي صندوقًا عشوائيًا في البحر أبدًا. اللاعبون يرمون الصناديق في البحر باستمرار.

أردنا شيئين لا يتعايشان حاليًا في حزمة واحدة: مظهر بجودة سينمائية ينجو من أي إضاءة، وسلوك فيزيائي لا يتطلّب أي إعداد. لا يُبلَغ أيٌّ منهما بالعبث بالمعاملات حتى تبدو لقطة الشاشة جميلة، لأن لقطة الشاشة إطار واحد تحت شمس واحدة، وفي اللحظة التي يتغيّر فيها أحدهما، يُظهِر الماء المضبوط على الذوق حياكاته. فأساس المشروع ليس قائمة ميزات، بل اختبار قبول لا يستطيع إنسان أن يجادله: صورة فوتوغرافية.

يُقاس مقابل الصور، لا مقابل الذوق

يُبوَّب التطوير بصور مرجعية ذات عقود ثابتة للكاميرا والإضاءة: وحدات ضوء فيزيائية، ومحوِّل نغمات (tonemapper) مقفول، ومقياس فرق إدراكي يقرّر النجاح أو الرسوب، لا مزاج مدير فني في ذلك اليوم.

مرجعان قانونيان، وقد اختيرا ليكونا متضادين:

  • بحيرة صافية، الكاميرا في خط الماء. نصف هواء، نصف ماء، حدّ متموّج بلا شريط تشوّه؛ ماء أخضر من النوع الساحلي يزداد لونه عمقًا مع المسافة؛ كوستيك على الصخور يطابق السطح فوقها؛ جذوع غارقة تنكسر بشكل صحيح عند السطح البيني. هذه تختبر الانكسار، وعبور خط الماء، وامتصاص اللون تحت الماء دفعةً واحدة.
  • ساحل عاصف تحت غيم كامل. لا شمس، لا شريط تلألؤ: يجب أن يُقرأ البحر عبر انعكاس السماء الناعم، وأخضر-رمادي مخفّض التشبّع، وإحصاء الرؤوس البيضاء، والضباب فوق الجروف. عوّامة تركب الموج بدورة وميلان معقولين؛ السلوك جزء من القبول، لا الصورة الساكنة وحدها.

المرجع الغائم متعمَّد أن يكون أحد الاثنين. الماء المضاء بالشمس يجامل كل مُصيِّر (renderer) على الأرض: تلألؤ الانعكاس يخفي جمًّا من الخطايا. انزع الشمس، فيتعيّن على الماء أن يحمل الإطار بخشونة الانعكاس واللون والحركة وحدها. ذلك هو الاختبار الصادق، وهو الذي تتجنّبه معظم الأنظمة بهدوء. محيط لا يبدو جيّدًا إلا في الشمس لا يُطلَق.

يُحدَّد جانب الكاميرا بصرامة جانب الماء نفسها، لأن مقارنة الصور لا تكون عادلة إلا حين لا تستطيع الكاميرا الغش. هذا يعني شدّات ضوء فيزيائية حقيقية (شمس ظهيرة نحو 100٬000 لوكس، لا مِنزلق سطوع اعتباطي)، وتعريضًا ثابتًا، وتهيئة ثابتة لتحويل النغمات والبلوم لكل مرجع. غيّر محوِّل النغمات، ويمكن جعل أي ماء يطابق أي صورة، ولهذا بالضبط يُثبَّت محوِّل النغمات أولًا.

Drop-a-Mesh: أن تطفو دون واجب منزلي

اسحب أي ميش إلى جسم ماء Numivo فيتصرّف بشكل صحيح فورًا: يبني النظام وكيلًا فيزيائيًا تلقائيًا، ويحسب الحجم المُزاح لكل إطار من ارتفاع الموجة الفعلي، ويستنتج يطفو-أم-يغرق من الكثافة الحقيقية.

شعاب مرجانية تُرى عبر ماء أزرق صافٍ تحت الماء مكانٌ، لا معالجة لاحقة. يُمتَصّ اللون مع العمق، ويتسرّب الضوء نازلًا في أعمدة، ويجب عبور السطح البيني فوق الرأس بنظافة. يوجد مرجع البحيرة ليُبقي الثلاثة صادقين دفعةً واحدة.

يطفو جذع ويتدحرج على جانبه الطويل. يتمايل صندوق. يغرق تمثال حجري. لا تجهيز، لا وضع عوّامات، لا سكربتات. تحت الغطاء:

  • يُحوَّل شكل التصادم إلى فوكسل تلقائيًا (بشكل غير متزامن، ويُخزَّن مؤقتًا لكل أصل فلا يحدث إلا مرة) لقياس حجم الجسم الحقيقي؛
  • يُحسَب الطفو فيزيائيًا كل إطار من الحجم المُزاح مقابل كثافة الماء، والماء العذب والمالح يختلفان حقًا (المالح أكثف، فيركب الصندوق نفسه أعلى في البحر منه في بحيرة)؛
  • يطفو-أم-يغرق يأتي من الكثافة، الكتلة على حجم الوكيل: لا يوجد مربع "هل ينبغي أن يطفو هذا؟" كوضع افتراضي، لأن الافتراضي هو الفيزياء؛
  • تنشأ الاستقرارية من كيفية توزّع حجم الوكيل: الصناديق ثقيلة الأعلى تنقلب، والأبدان المُثقَّلة عند العارضة تُعدّل نفسها، واللوح يستلقي مسطّحًا؛
  • الأجسام الطافية تقترن عائدةً إلى السطح: تموّجات، وآثار ذيلية، وحلقة زبد عند خط الماء، ومؤثرات رذاذ عند الاصطدام.

هناك لوحة صغيرة على الـ actor للتجاوزات: فرض الطفو، فرض الغرق، مِنزلق تخميد، مفاتيح الأثر الذيلي والرذاذ، لكن التجاوز يُقيّس الفيزياء بدل أن يستبدلها. افرض طفو صخرة كبيرة، وستظل تتمايل بالدورة الصحيحة وتترك الأثر الصحيح؛ إنما تتصرّف كأنها أخفّ. هذا التمييز يهمّ: النتائج المفروضة التي تتجاهل المُحلّ (solver) تبدو كمجسّمات مُلصَقة بمستوٍ، ويلاحظها اللاعبون فورًا.

هدف التصميم صريح، وهو عرض توضيحي نريد أن نتمكّن من تشغيله مباشرةً: يسحب أحدهم عشرين مجسّمًا عشوائيًا إلى البحر، فيتصرّف كل شيء وحده، دون فتح نافذة إعدادات واحدة أولًا. إن احتاج ذلك العرض إلى شرح، فقد فشلت الميزة.

ماذا يغطّي

الماء القريب من الساحل، والمحيط المفتوح، وتحت الماء، وبِرَك الكهوف كلها من الطراز الأول: أمواج قائمة على الطيف بموج طويل وبحر متقاطع منفصلين، وزبد من أمواج تتكسّر فعلًا، وكوستيك يقود أعمدة الضوء تحت الماء، واستقرار تحت المؤثرات السينمائية.

تفاصيل تهمّ إن كنت تعتني بالماء:

  • الأمواج تأتي من أطياف علم المحيطات (النماذج الإحصائية نفسها المستخدمة لوصف البحار الحقيقية)، بانتشار اتجاهي وموج طويل يُتحكَّم به بشكل مستقل. تصير حالة البحر قرارًا جويًا: "عاصفة متصاعدة، موج طويل من الغرب"، بدل ثلاثين مِنزلقًا منفصلًا تدفعها حتى يبدو عاصفًا.
  • الزبد ليس قناعًا مرسومًا. ينشأ حيث تتكسّر الأمواج فعلًا، ويشيخ مع الوقت، ويتخطّط تحت الريح. الزبد المرسوم أشيع علامة على ماء زائف، لأنه لا يتحرّك مع الفيزياء التي يُفترض أن يمثّلها.
  • تحت الماء مكان حقيقي. امتصاص لون صحيح بحسب العمق (الأحمر يذهب أولًا، ثم الأخضر، تاركًا الأزرق العميق الذي يعرفه الجميع من لقطات الغوص)، وأعمدة ضوء مستنبطة من حقل الكوستيك نفسه الذي يضيء القاع، وعبور عند خط الماء دون شريط التشوّه الصلب الكلاسيكي.
  • بِرَك الكهوف تنال معالجتها الخاصة: ماء ساكن أو بالكاد يتحرّك، اضطرابات القطرات، انعكاسات في شبه ظلام، لأن بركة داخلية هادئة تكشف إخفاقات مختلفة عن المحيط المفتوح.
  • المشاهد السينمائية معايير قبول، لا فكرة لاحقة. يجب أن يظلّ السطح مستقرًا تحت عمق المجال، وضبابية الحركة، وحبيبات الفيلم، لا fireflies انعكاسية تظهر فقط بعد تطبيق الحبيبات، ولا لمعان يحوّله تحرّك كاميرا بطيء إلى ومض متقطّع.

لماذا الطفو هو الجزء الذي يتخطّاه الجميع

يمكن تزييف المظهر بشيدر جيّد، لكن السلوك لا: طفو-وغرق مقنِع يحتاج تقدير حجم لحظيًا ومُحلًّا مستقرًا، وهذا صعب حقًا، فتُطلق معظم الأنظمة قالب قارب وتتوقّف.

الحقيقة الهندسية المزعجة أن شيدر الماء الجميل مشكلة محلولة، أما مُحلّ الطفو العام فلا. تزييف مظهر موجة مشكلة نسيج ونورمال؛ وجعل ميش اعتباطي لم يُرَ من قبل يجلس بشكل صحيح في تلك الموجة مشكلة فيزياء يجب أن تعمل بمعدّل الإطارات، وتنجو من خطوات زمنية سريعة، ولا تنفجر حين تلتقي صخرة بألف مثلث بموج عاصف طويل. تلك الفجوة سبب أن "الماء" في معظم المحرّكات يعني "مستوى جميل لا يمكنك التفاعل معه"، وسبب أن الجزء التفاعلي، حين يوجد، قارب مصنوع يدويًا.

سدّ تلك الفجوة (جعل السلوك آليًا كالمظهر) هو سبب وجود هذا المشروع وسبب حاجته إلى انضباط الصور المرجعية زائد مُحلّ حقيقي بدلًا من عطلة نهاية أسبوع من عمل الشيدر.

متى تستطيع استخدامه؟

إنه قيد التطوير كامتداد لـ Unreal Engine، بطرح على مراحل: تصل معاينة طفو حركية قبل مُحلّ الفيزياء الكامل، فيمكن ملء المشاهد مبكرًا. لا نعلن تاريخًا؛ الصور المرجعية تقرّر متى يكتمل.

التدريج متعمَّد. تأتي معاينة حركية (تتبع الأجسام سطح الموجة دون محاكاة قوى كاملة) أولًا، فيستطيع الفنانون إسقاط الميشات وملء بحر بينما لا يزال المُحلّ الثقيل يُصلَّب: تشعر بالنتيجة قبل نهائية الفيزياء بوقت طويل. يتبع ذلك المُحلّ الكامل، والوكيل التلقائي، واللوحة المكتملة. يظهر التقدّم والمعالم على خارطة الطريق العلنية، لا في مفاجأة يوم الإطلاق.

مجموعة الأدوات التي سيصدر بجوارها (النثر، ودمج الميش، والشبكات، والقياس) مجانية للتجربة اليوم. إن أردت أن تُخطَر لحظة وجود بناء ماء علني، فإن Discord المرتبط من الموقع هو المكان الذي سيُعلَن فيه أولًا، وحيث تُنشَر مقارنات نجاح/رسوب الصور المرجعية حال حدوثها.

أسئلة سريعة

هل سيتطلّب أدوات Numivo الأخرى؟ لا، إنه امتداد في العائلة نفسها، مصمَّم ليقف وحده. لكنه يشارك المبدأ نفسه: تُخبَز النتائج إلى بيانات أصلية للمحرّك حيثما أمكن فيزيائيًا، فتمتلك ما تصنعه.

أي إصدارات محرّك؟ إصدارات Unreal Engine 5 الحالية. تهبط التفاصيل على خارطة الطريق مع اقتراب الامتداد من بناء علني، بدل أن تُوعَد الآن وتُراجَع لاحقًا.

بم يختلف هذا عن ماء المحرّك المدمج؟ أنظمة الماء المدمجة قوية في المظهر ضعيفة في التفاعل العام: الطفو عادةً مكوّن منفصل مضبوط يدويًا. كل الفكرة هنا أن المظهر والسلوك يأتيان من نظام واحد ذي أساس فيزيائي، مع بوابة الصورة المرجعية التي تُبقي المظهر صادقًا عبر الإضاءات.

لماذا الإعلان قبل الإصدار؟ لأن طريقة الصورة المرجعية نفسها هي الفكرة. نفضّل إظهار العارضة علنًا وأن نُقاس بها على أن نكشف شيئًا مكتملًا لا يستطيع أحد تمحيصه. هذا المنشور هو تلك العارضة، مكتوبةً، فحاسِبونا بها.