يمكنك استيراد الشبكات المخصصة لإنشاء كل شيء من الشخصيات غير القابلة للعب إلى قماش متحرك لقارب شراعي. استخدمنا إعداد الاستيراد المخصص من المستورد لجلب شخصيات مخصصة أكثر غرابة، مثل مخلوقات الثقب الأسود الغامضة والروبوتات الخدمية الودية، إن لم تكن مدركة.
تتناول الأقسام التالية كيفية استخدامنا لـ التهيئة والجلد، وPBR (مظهر السطح)، وVFX لبناء واحدة من شخصياتنا الأكثر تعقيدًا التي أطلقنا عليها اسم "المخلوق". أردنا أن يتوهج، ويصدر بعض الضوء، ويترك آثارًا من دخان الجسيمات، وحركة سلسة تتطلب تهيئة هيكل مع عدد كافٍ من المفاصل لإنشاء الأمواج المقنعة من مجساته.

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


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

وجدنا أن الإرشادات التالية كانت مفيدة، حتى يتم استيراد شبكة الشخصية بشكل صحيح إلى الاستوديو:
- يجب أن تحمل المفاصل والعظام أسماء فريدة.
- يجب ألا تحمل الشبكات نفس اسم المفاصل والعظام.
- يجب ألا تحتوي الشبكات على أي تحويلات قبل التهيئة/الربط؛ بمعنى آخر، يجب أن تكون التحويلات 0 والمقاييس 1.
- يجب أن تواجه عُقد الشبكة للخارج (يجب ألا يبدو النموذج مقلوبًا).
- يجب ألا تحتوي الهياكل العظمية على أي عامل مقياس؛ يجب أن تكون جميع المفاصل [1، 1، 1].
الجلد
عندما انتهينا من هيكل المخلوق، كانت الخطوة التالية هي تهيئة الشبكة. يمكن أن تكون عملية التهيئة مهمة شاقة، لذا لتسهيل الأمور، من الأفضل أن تكون على دراية بإعدادات التهيئة الأولية المختلفة لتطبيق DCC الخاص بك للعثور على الإعداد الذي تفضله. نظرًا لأن هذه شخصية عضوية، فقد قمنا بتهيئتها مع الكثير من التلاشي على كل مفصل وتداخل بينها. بهذه الطريقة، يشعر الانحناء بالسلاسة وليس الحدة. تظهر لقطات الشاشة التالية تهيئة سيئة وتهيئة سلسة على التوالي:


وجدنا أن الإرشادات التالية أنتجت أفضل النتائج للتهيئة:
- يجب أن تكون تأثيرات التهيئة (بمعنى أنها تؤثر على جزء من النموذج عند تحريكه) بحد أقصى 4 تأثيرات لكل رأس.
- يجب أن تكون أسماء المفاصل والشبكات فريدة، سواء داخل بعضها البعض أو بينها.
- يجب أن يكون لأي مفصل تريد استيراده إلى الاستوديو تأثير على تهيئة النموذج، وإلا فلن يستورده المحرك. كلما كان ذلك ممكنًا، قم بتهيئة النموذج في وضعه الأصلي أو "وضع الربط".
استيراد الشبكة إلى الاستوديو
استيراد شخصياتك المخصصة إلى الاستوديو هو أحد أكثر الأجزاء إثارة في العملية، لأنك ستتمكن من رؤية إبداعاتك في اللعبة التي تقوم ببنائها!
لاستيراد الشبكة إلى الاستوديو:
قم بتصدير الشخصية من تطبيق DCC وتأكد من ما يلي:
- جميع العُقد والمقاييس والأسماء صحيحة.
- تحتوي الشخصية على جميع تسلسلات المفاصل والعظام وجميع الشبكات.
- يجب أن تكون جميع الشبكات أقل من 10,000 مثلث لكل جزء من الشبكة.
- يجب ألا يتجاوز الحجم الإجمالي للشبكة 2000 وحدة في أي محور.
- انظر متطلبات الشبكة للحصول على قائمة كاملة بمواصفات النموذج.

في المستورد، استورد ملف .fbx أو .obj المخصص.

اجعل المخلوق يتوهج
بمجرد أن كان نموذج المخلوق مستقرًا ولم يتطلب أي استيراد فوري آخر إلى الاستوديو، بدأنا في تجميع كائنات SurfaceAppearance والأضواء والتأثيرات البصرية. فعلنا ذلك لضمان أن جودة النموذج كانت جيدة بما يكفي قبل المضي قدمًا في وضع وتحرير أي جانب منه.

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

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

لاحظ أن SpotLights تضيف لمسة بصرية للمخلوق بالقرب من أسطح أخرى أو لاعب.

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

اجعل VFX تتبع الشخصية
لا يتم تحديث مواضع شبكة الشخصية المهيأة عندما يتحرك المخلوق، لذا كنا بحاجة إلى طريقة للتأكد من أن VFX وSFX والأضواء تتبع المخلوق بشكل صحيح. لتحقيق ذلك، أنشأنا نصًا للتحكم في VFX واستخدمنا CollectionService لإبلاغ الأجزاء التي تحتوي على VFX بمكان عظام المخلوق واتباعها.
وضعنا LocalScript التالي في StarterPlayer → StarterPlayerScripts. هذا يقوم بشكل أساسي بتشغيل وظيفة تحديث VFX.
نص محلي-- أضف هذه الشيفرة إلى نص محلي موجود يقوم بعمل اتصالات PreSimulationlocal RunService = game:GetService("RunService")local vfx = require(workspace.VfxUpdateModule)RunService.PreSimulation:Connect(vfx.updateVfx)نص وحدة-- هذه الوحدة تربط الأجزاء بالرسوم المتحركة بحيث يتم تحديثها أثناء-- تشغيل الرسوم المتحركة. إنها حل بديل للقيود الحالية-- مع المفاصل والعظام ولن تكون ضرورية دائمًا.---- المتطلبات:-- لتكون مشمولة، تحتاج النماذج إلى علامة "AnimatedVfxModel"، ومجلد-- يحتوي على جميع الأجزاء التي تريد مزامنتها مع الرسوم المتحركة. يجب أن تحتوي كل جزء على-- سمة تسمى "AttachedBoneName" تشير إلى اسم العظم الذي تريد الارتباط به. يجب أن تكون الأجزاء أيضًا في-- مواضعها الصحيحة بالنسبة للعظم المطلوب.---- للاستخدام:-- يجب أن يتطلب نص محلي هذه الوحدة، ثم يربط-- VfxUpdateModule.updateVfx بحدث RunService.PreSimulation.local VfxUpdateModule = {}local CollectionService = game:GetService("CollectionService")-- الإعداد - يجب أن يتم تشغيل هذا مرة واحدة على كل عميل.-- جمع جميع النماذج ذات العلامةlocal vfxModels = CollectionService:GetTagged("AnimatedVfxModel")local vfxTable = {} -- حيث سنخزن جميع الأجزاء والإزاحات-- تعيين جدول لكل نموذج سيحتوي على جميع أجزاء vfx والإزاحةfor _, model in vfxModels dovfxTable[model] = {}local vfxParts = model:FindFirstChild("VFX"):GetChildren() -- ابحث عن مجلد VFX-- ابحث عن العظم عبر السمة واحسب الإزاحة لكل جزء.for _,part in vfxParts dolocal name = part:GetAttribute("AttachedBoneName")local bone = model:FindFirstChild(name, true)if bone thenlocal offset = (bone.TransformedWorldCFrame:inverse() * part.CFrame)vfxTable[model][part] = {bone, offset}elsewarn("جزء Vfx يشير إلى عظم لم يتم العثور عليه.")endendendprint(vfxTable)-- التحديث - يجب ربط هذا بكل عميل RunService.PreSimulation-- انتقل عبر جميع النماذج، ثم قم بتحديث جميع الأجزاء على النموذج لتتناسب مع إطار العظم.function VfxUpdateModule.updateVfx()for model, vfxParts in vfxTable dofor part, bone in vfxParts dopart.CFrame = bone[1].TransformedWorldCFrame * bone[2]endendendreturn VfxUpdateModuleأنشأنا VFXUpdateModule ModuleScript لإخبار أي كائنات تم وضع علامة عليها بشكل مناسب بـ AnimatedVfxModel بالتحديث عند حدث التشغيل.
قمنا بوضع العلامات على مجموعات النماذج اللازمة بـ AnimatedVfxModel باستخدام قسم العلامات من خصائصها. يسمح استخدام العلامات لـ VFXUpdateModule بمعرفة أي كائن للبحث عنه كأول طفل VFX وتطبيق التحديث.

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

إليك كيفية إنشاء خرائط قوام المظهر السطحي:
كانت خرائط القوام لهذه الشخصية جميعها على "ورقة" واحدة لكل خريطة. جعل هذا المخلوق أكثر كفاءة مما يعني أننا اضطررنا للتعامل مع عدد أقل من خرائط القوام أو كائنات SurfaceAppearance.




بالنسبة للمناطق التي تحتاج إلى التوهج أو الإضاءة الذاتية، مثل "المجسات الملتفة"، استخدمنا أيضًا الشفافية على SurfaceAppearance للاندماج مع تلك الأجزاء.

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

إذا كنت تستخدم تطبيق DCC خارجي للتحريك، وجدنا أن الإرشادات التالية تعمل بشكل أفضل:
- اضبط معدلات الإطارات على الأقل 30 إطارًا في الثانية.
- أنشئ الرسوم المتحركة الخاصة بك مع نفس الشخصية التي تطبقها عليها.
- قم بتصدير بيانات الرسوم المتحركة الخاصة بك كملف .fbx منفصل.
نظرًا لأننا حركنا الشخصية خارج الاستوديو، كان علينا استخدام محرر الرسوم المتحركة لاستيراد ملف الرسوم المتحركة .fbx. يتيح لك المحرر اختيار أي صورة رمزية تحتوي على مفاصل أو محركات وتحريكها عبر نقاط في الجدول الزمني.
لاستيراد الرسوم المتحركة:
في علامة التبويب الصورة الرمزية في شريط الأدوات، انقر على محرر المقاطع.
حدد الشخصية المهيأة التي تريد تحريكها في روبلوكس. يجب أن تكون الشخصية هي نفسها التي تقوم بتهيئتها في تطبيق DCC الخارجي الخاص بك.
انقر على زر ⋯ في القسم العلوي الأيسر من نافذة المحرر، وحدد استيراد من رسوم متحركة FBX، وابحث عن ملف الرسوم المتحركة .fbx الذي قمت بتصديره.

عندما تكون راضيًا عن الرسوم المتحركة الخاصة بك، يمكنك تصديرها لاكتشاف معرف الرسوم المتحركة، الذي يمكنك استخدامه بعد ذلك في نصوص روبلوكس لتشغيلها. على سبيل المثال، يمكنك إضافة Script إلى مجموعة النموذج للشخصية المستوردة واستخدام الشيفرة التالية لتشغيل الرسوم المتحركة:
local animationId = "YOUR_ANIMATION_ID"local char = script.Parentlocal animController = char:FindFirstChildWhichIsA("Humanoid") or char:FindFirstChildOfClass("AnimationController")local animation = Instance.new("Animation")animation.AnimationId = "rbxassetid://" .. tostring(animationId)local animTrack = animController:LoadAnimation(animation)animTrack:Play(0, 1, 1)
النتائج النهائية
بعد بعض التعديلات النهائية على الألوان، وسطوع الأضواء، وبعض التأثيرات الجسيمية الإضافية لإعطائها تأثير هالة أقوى أمام النوافذ، إليك النتيجة النهائية في محطة الفضاء!
