مشاهد سينمائية بالكاميرا بدون تعديل: إطارات مفتاحية، استيفاء، وحيل وضع المتفرج
طريقتان لتحريك الكاميرا في اللعبة الأصلية (فانيلا) — دالة نقل آنية، أو سجل الخط الزمني. ما الذي يميز كل طريقة، والتنعيم الذي يمنعها من الظهور بمظهر آلي.
لا يوجد كائن كاميرا في اللعبة الأصلية (فانيلا)، لذا فإن المشهد السينمائي هو أحد وهمين.
الطريقة 1: نقل اللاعب في كل نبضة (tick)
الطريقة القديمة والشاملة. ضع اللاعب في وضع المتفرج (spectator)، ثم حركه على طول مسار:
gamemode spectator @s
tp @s 100.0 70.0 200.0 -90.0 10.0
نبضة واحدة tp لكل نبضة من سلسلة دالات. تعمل على كل الإصدارات ولا تحتاج إلى شيء خاص. المشاكل كلها تتعلق بالسلاسة:
- 20 إطارًا مفتاحيًا في الثانية. لقطة مدتها عشر ثوانٍ تعني 200 سطر
tp. - الخطوات الخطية تبدو ميكانيكية. حركات الكاميرا الحقيقية تتسارع وتتباطأ بسلاسة.
- التدوير يلتف بشكل سيء. الانتقال من زاوية انحراف 170 إلى -170 هو دوران بمقدار 20 درجة، لكن الاستيفاء الساذج يدور 340 درجة في الاتجاه الخاطئ. قم بتطبيع فرق الزاوية إلى النطاق -180...180 قبل التنقل.
إنشاء هذه الأسطر هو الغرض من أداة الإطارات المفتاحية (keyframe tool) — تضع عددًا قليلاً من المواضع وتصدر الدالة لكل نبضة مع تطبيق التنعيم.
التنعيم (Easing)
الفرق بين الهواة والمشاهدة هو منحنى الاستيفاء (interpolation curve). بين إطارين مفتاحيين، مع t من 0 إلى 1:
linear t
ease-in-out t < 0.5 ? 2t² : 1 − 2(1−t)²
smoothstep t² × (3 − 2t)
smoothstep هو الافتراضي الآمن. طبقه على الموضع والدوران معًا وإلا ستصل الكاميرا قبل أن تنتهي من الدوران.
الطريقة 2: سجل الخط الزمني (timeline registry)
تضيف الإصدارات الأحدث تنسيق خط زمني يصف اللقطة بأكملها كبيانات بدلاً من مئات عمليات النقل:
data/<namespace>/timeline/intro.json
إطارات مفتاحية بأوقات وأنماط استيفاء، يتم تشغيلها بأمر واحد. المزايا:
- أصغر بكثير. ستة إطارات مفتاحية بدلاً من مائتي عملية نقل.
- الاستيفاء أصلي (native)، لذا لا توجد حسابات تنعيم يدوية.
- مستقل عن معدل الإطارات — لا يتلعثم بالطريقة التي تتلعثم بها عملية النقل لكل نبضة على خادم محمل.
التكلفة هي أنه موجود فقط في الإصدارات الحديثة، لذا فإن الخريطة التي تستهدف العملاء القدامى لا تزال بحاجة إلى الطريقة 1.
إبقاء اللاعب في مكانه
كلتا الطريقتين تحاربان شيئين:
- مدخلات اللاعب. يسمح وضع المتفرج للاعب بالتحليق بعيدًا في منتصف اللقطة. إعادة النقل في كل نبضة تتجاوز ذلك، وهو أحد الأسباب التي تجعل طريقة القوة الغاشمة مستمرة.
- تحميل المقاطع (Chunk loading). كاميرا تحلق في مكان غير محمل تظهر فراغًا. قم بـ
/forceloadالمسار قبل اللقطة وأزله بعدها.
إخفاء واجهة المستخدم (HUD)
/gamerule doImmediateRespawn، وضع المتفرج، وF1 يوصلونك إلى معظم الطريق. للحصول على إطار نظيف، حزمة موارد تقوم بإفراغ رسوم واجهة المستخدم (HUD sprites) تزيل علامة التصويب وشريط الأدوات دون أن يضغط اللاعب على أي شيء — راجع دليل واجهة المستخدم.
ضع الإطارات المفتاحية على مسار وقم بتصدير إما دالة لكل نبضة أو ملف JSON للخط الزمني باستخدام Cutscene & Timeline Builders.