Gemini 4: برمجة مشهد سينمائي ثلاثي الأبعاد في Blender بأسلوب Vibe Coding من موجّه واحد
من موجّه واحد إلى مشهد سينمائي في Blender من أربع لقطات
تسلسل لقطات مدته اثنتا عشرة ثانية يبدو أمرًا بسيطًا. لكنه في Blender عمل كثير: تنظيم المشهد، والإطارات المفتاحية، وحركات الكاميرا، وعمق الميدان، وورقة يجب أن تنثني كالورق لا كالقماش. ومعظم ذلك يتم نقرةً بعد نقرة داخل نافذة العرض.
لذلك أوكلنا المهمة كلها إلى وكيل. مع Gemini 4 في Eigent، حوّل موجّه واحد مشهد Cozy Kitchen إلى مشهد سينمائي من أربع لقطات. تيار هواء يرفع ورقة وصفة عن حاملها، ويحملها عبر المطبخ، ثم يسدلها فوق تارت فراولة. لم يفتح Gemini 4 نافذة Blender ولو مرة واحدة. كتب كود Blender Python، وشغّله دون واجهة، وراجع عمله بنفسه، وأصلح ما وجده.
سير العمل الكامل في لمحة
أنت تقدّم المشهد والموجز، ويتولى Gemini 4 الباقي من سطر الأوامر. كل مرحلة تترك ملفًا خلفها، لتتمكن من مراجعة العمل في أي خطوة.
| المرحلة | ما الذي يحدث | ما الذي تحصل عليه |
|---|---|---|
| القراءة | فتح المشهد دون واجهة وتحميل بيانات المهمة | تصيير تجريبي لنقطة بداية الورقة |
| التجهيز | إضافة حامل وصفات وقضيب ستارة ودلائل على الريح | ديكور يظهر فيه مصدر تيار الهواء |
| البناء | نمذجة ورقة الوصفة وإكسائها | RecipePage، ورقة رقيقة بوجهين عليها بطاقة وصفة مرسومة |
| التحريك | رسم مسار عبر الممر وانسدال فوق التارت | طيران سلس وطيّة استقرار مدعومة |
| التصوير | وضع أربع كاميرات وربطها بالقطعات | مونتاج من أربع لقطات مع عمق ميدان في 2 و3 |
| التحقق | قياس كل قاعدة في الموجز وإصلاح ما يفشل | سكربت فحص قابل لإعادة التشغيل في work/ |
| التسليم | تصيير الصور الثابتة ولوحة القصة وكتابة قائمة اللقطات | sequence.blend وshotlist.csv وstoryboard.png وتسع صور ثابتة |
إليك طريقة تنفيذ ذلك بنفسك خطوة بخطوة، بما في ذلك أمر واحد سنعدّه بشكل مختلف في المرة القادمة.
ما الذي ستحصل عليه
- مشروع Blender قابل للتعديل:
sequence.blendبحجم 13 ميغابايت، مع حزم جميع الصور ودون مكتبات مرتبطة. افتحه وتابع العمل. - قائمة لقطات:
shotlist.csv، صف لكل لقطة، مع نطاق الإطارات والكاميرا والحدث. - لوحة قصة:
storyboard.png، تسع لوحات معنونة بدقة 640×480 في شبكة 3×3. - تسع صور ثابتة: الإطارات 1 و48 و73 و120 و145 و192 و217 و264 و288.
- فيديو وصفحة معاينة:
sequence.mp4وpreview.html، بطلب متابعة قصير واحد.
قبل أن تبدأ
- تثبيت Eigent على جهازك.
- Gemini 4، عبر Eigent Cloud أو باستخدام مفتاح Gemini API الخاص بك.
- Blender على الجهاز نفسه. يتحكم Gemini 4 فيه من سطر الأوامر، لذا لا يحتاج إلى النافذة أبدًا. كان لدينا Blender 5.2 LTS مثبتًا. وتتضمن المهمة أيضًا صورة Docker تثبّت الإصدار
bpy5.2.2، إن كنت تفضّل تشغيله في بيئة معزولة. - حزمة المهمة. حزمتنا هي «recipe-page mishap» من بيئات البرمجة ثلاثية الأبعاد لدينا:
| الملف | ما الذي يقدّمه للوكيل |
|---|---|
PROMPT.md | الموجز، وهو الرسالة الوحيدة التي ترسلها |
agent_environment/input/kitchen.blend | مشهد Cozy Kitchen المُعدّ |
agent_environment/input/subjects.json | الكائنات التي تشكّل تارت الفراولة |
agent_environment/input/action.json | نقطة بداية الورقة وممر طيرانها عند الإطارات 120 و168 و192 |
agent_environment/input/presentation.json | إعدادات الصور الثابتة ولوحة القصة |
agent_environment/input/source_overview.png | معاينة للمشهد الأصلي دون تعديل |
agent_environment/scripts/ | presentation.py (يصيّر الصور الثابتة ولوحة القصة) وreview.py |
اختر Gemini 4
على Eigent Cloud، دون حاجة إلى مفتاح API:
- في الشاشة الرئيسية، افتح منتقي النماذج أسفل مربع الإدخال.
- ضمن Eigent، اختر Gemini 4 Argon.
باستخدام مفتاح Gemini API الخاص بك:
- افتح Settings → Models.
- ابحث عن Gemini وافتح إعداداته.
- الصق API key الخاص بك.
- اضبط model type على
gemini-4-argon. - انقر Save، ثم اختره ضمن Gemini في منتقي النماذج.
مستوى التفكير الافتراضي يكفي. شغّلناه بوضع Single Agent مع Full access، ليتمكن من تشغيل Blender وكتابة الملفات دون التوقف للسؤال.
جهّز مجلد المشروع
أنشئ مشروعًا في Eigent ووجّهه إلى مجلد يحتوي على شيئين فقط:
showcase-kitchen-draught/
PROMPT.md
agent_environment/
input/ # kitchen.blend, subjects.json, action.json, presentation.json, source_overview.png
scripts/ # presentation.py, review.py
أبقِ كل شيء آخر خارجه، وخاصة أي مُقيّم أو تشغيلات مرجعية أو ملاحظات عن نتائج سابقة. سنشرح السبب أدناه.
الصق الموجّه
انسخ الموجز أدناه إلى مربع الإدخال Cowork with وأرسله دون تغيير.
Animate the recipe-page mishap
Create a twelve-second cinematic in /app/input/kitchen.blend: a draught lifts a recipe page, carries it across the work area and leaves it draped on the strawberry tartlet identified in /app/input/subjects.json. Preserve the warm illustrated kitchen. Show the calm setup, motivated lift, flight, contact and settling through four connected shots, with visible, consistent wind clues and readable page motion.
## Action and photography
- Scene Sequence runs at 24 fps, frames 1–288, with camera-bound cuts at 1, 73, 145 and 217. Preserve visible source surfaces, material identity and world transforms within 2 mm; keep existing set pieces visible. Add the page, wind clues and staging as needed.
- RecipePage is an editable thin two-sided sheet, 0.13–0.17 m long and 0.09–0.12 m wide, with 100–12,000 native vertices, finite UVs and readable recipe marks.
- Use /app/input/action.json for the start plane and flight corridor. At frame 1, the page is within 10 mm of the start plane and its centroid within 20 mm of the start point. Through frame 48 the centroid stays within 8 mm of its initial pose; by 120 it moves at least 0.10 m. At frames 120, 168 and 192 it follows the corridor within 35 mm.
- Page centroid motion is at most 16 mm per frame, with successive displacement changes at most 5 mm. After best rigid alignment with frame 1, shape deformation is at least 4 mm RMS at one flight frame and 2 mm RMS at rest. Show convincing paper flutter, stiffness and supported contact folds, without penetration or stretched print.
- Throughout frames 241–288, at least 15% of page surface samples are within 8 mm of the actual selected strawberry-tartlet surface. Centroid variation over 264–288 is at most 3 mm; surface motion from 276 to 288 is at most 4 mm.
- Use four distinct cameras. Shot 1 may be orthographic; shots 2–4 use 35–85 mm perspective lenses. Shots 2 and 3 use depth of field focused within 25 mm of the page centroid at each shot's start, midpoint and end.
- At frames 120, 168, 192 and 264, frame the page in front of the active camera within the central 80%, with projected height 8–65% of the image. Within shots, camera motion is at most 25 mm and 4° per frame, with translation changes at most 8 mm; cuts are exempt.
- Compose purposeful shots with coherent screen direction, controlled focus, anticipation and a clear final reveal. Avoid disconnected poses, arbitrary camera moves or unreadable action.
## Handoff
Save sequence.blend, shotlist.csv, storyboard.png and stills/frame_NNN.png for frames 1, 48, 73, 120, 145, 192, 217, 264 and 288 in /app/output. The CSV columns are shot,start,end,camera,action, matching the native four-shot edit. Use labelled 640×480 panels in a 3×3 storyboard. Stills and storyboard match the saved scene under /app/scripts/presentation.py CPU settings with luminance SSIM ≥0.93; use that helper or equivalent images.
Keep the native project editable and below 192 MiB, with finite nondegenerate geometry, all used material/world images packed and no linked libraries. It must replay with Python auto-execution disabled; native constraints and ordinary driver expressions are allowed. Keep /app/input unchanged; use /app/work for work files. Blender Python, headless rendering and command-line tools are available.
كُتب الموجّه لحاوية Docker، لذا تبدأ مساراته بـ /app. عند تشغيله على جهاز Mac لدينا، ربطها Gemini 4 بمجلد المشروع من تلقاء نفسه: agent_environment/input وwork/ وoutput/.
بعض أجزاء هذا الموجز تقوم بالعمل الأهم:
- أرقام بدلًا من الصفات. «اجعله سينمائيًا» مجرد مزاج. أما «في حدود 35 ملم من الممر عند الإطار 168» فهو هدف يستطيع الوكيل قياسه وتحقيقه.
- محطات قصصية، لا قواعد فقط. بداية هادئة، وارتفاع مبرَّر، وطيران، وتلامس، واستقرار. الأرقام تُبقي الحركة صادقة، والمحطات تجعل منها قصة.
- الحفاظ على المطبخ. تبقى الكائنات الأصلية ضمن 2 ملم مع بقاء خاماتها كما هي. الوكيل يضيف إلى المشهد ولا يعيد بناءه.
- تسليم حقيقي. ملف
.blendمحزوم وقابل للتعديل، يُعاد تشغيله مع تعطيل التنفيذ التلقائي لـ Python. ملف يمكنك فتحه غدًا ومتابعة التحريك.
دع الوكيل يعمل
أرسل الموجّه. يخطط Gemini 4 للمهمة، ثم ينفذها عبر Blender Python. استغرق تشغيلنا نحو 50 دقيقة، من أول قراءة لملف حتى التدقيق الذاتي النهائي. إليك ما بناه بالترتيب:
- قرأ المشهد. فتح
kitchen.blendدون واجهة، وحمّل بيانات التارت والممر، وصيّر عرضًا تجريبيًا لنقطة البداية. - جهّز الديكور. حامل وصفات خشبي صغير تحت نقطة البداية، وقضيب ستارة عبر نافذة المطبخ.
- أضاف دلائل على الريح. حزام ستارة، وشرائط ساتان، وبطاقة على الحامل، وكلها تتطاير في الاتجاه نفسه ليظهر مصدر تيار الهواء.
- صنع الورقة. أبعاد
RecipePageهي 0.136 × 0.094 م مع 1,218 رأسًا، بوجهين، وعليها بطاقة وصفة رسمها بنفسه: «Recipe No. 14, Strawberry Tartlet». وتنتهي ملاحظات الطاهي بسطر لم نطلبه: «Keep recipe cards away from open kitchen window draughts!» - خطط للحركة. مسار سلس يمر بنقاط التحقق في الممر، ثم انسدال استقرار مُطابق لسطح التارت الفعلي.
- وضع أربع كاميرات. 42 ملم للبداية الهادئة، و48 ملم مع عمق ميدان عند f/5.6 للارتفاع، ولقطة تتبّع بعدسة 52 ملم للطيران، ولقطة رئيسية بعدسة 58 ملم للهبوط. وتربط علامات الخط الزمني كل كاميرا بقطعتها عند الإطارات 1 و73 و145 و217.
- راجع عمله بنفسه. كتب سكربت تحقق لكل قاعدة قابلة للقياس في الموجز، وشغّله، وأصلح ما وجده. كان الوجه المطبوع من الورقة يميل بعيدًا عن الكاميرا، فعكس زاوية الميل. وأضاف ثنيات إلى الستارة، وأبعد الورقة المستقرة عن التارتات المجاورة، ورفع الكاميرا الأخيرة لكشف ختامي أوضح.
- سلّم العمل. صيّر الصور الثابتة ولوحة القصة باستخدام
presentation.py، وكتبshotlist.csv، وأجرى تدقيقًا نهائيًا: كل كائن أصلي موجود، ولم يتحرك، ويحتفظ بخاماته الأصلية.
اقرأ قائمة اللقطات
افتح output/shotlist.csv: أربع لقطات، واحدة لكل كاميرا.
| اللقطة | الإطارات | الكاميرا | الحدث |
|---|---|---|---|
| 1 | 1–72 | Cam_Shot1 | بداية هادئة عند حامل الوصفات الخشبي بينما تتطاير شرائط النافذة مع تيار الهواء القادم وترتفع ورقة الوصفة |
| 2 | 73–144 | Cam_Shot2 | يحمل تيار الهواء ورقة الوصفة المرفرفة من الحامل صعودًا إلى ممر الطيران المرتفع |
| 3 | 145–216 | Cam_Shot3 | تنقضّ الورقة عبر سطح العمل في المطبخ وتنزلق نحو حامل الحلويات ذي الطابقين |
| 4 | 217–288 | Cam_Shot4 | تهبط الورقة وتستقر في قوس متماسك ومدعوم منسدلًا فوق تارت الفراولة |
ثم افتح storyboard.png. تسعة إطارات تروي القصة كاملة في لمحة: الورقة ساكنة، ثم ترتفع، وتعبر المطبخ، وتستقر فوق التارت.
تحقّق من الأرقام
يبقى سكربت التحقق الخاص بـ Gemini 4 في work/، لذا يمكنك إعادة تشغيله على المشروع المحفوظ في أي وقت. إليك ما قاسه على ملف sequence.blend النهائي لدينا:
| الفحص | ما يطلبه الموجز | النتيجة |
|---|---|---|
| نقطة البداية عند الإطار 1 | في حدود 20 ملم | 1.03 ملم |
| الثبات حتى الإطار 48 | انزياح لا يتجاوز 8 ملم | 6.69 ملم |
| المسافة المقطوعة حتى الإطار 120 | 0.10 م على الأقل | 0.152 م |
| ممر الطيران عند الإطارات 120 و168 و192 | في حدود 35 ملم | 0.00 ملم |
| سرعة الورقة | 16 ملم لكل إطار كحد أقصى | 9.35 ملم |
| الرفرفة أثناء الطيران | 4 ملم RMS على الأقل | 11.07 ملم |
| التلامس مع التارت، الإطارات 241–288 | 15% من الورقة على الأقل | 22.9% |
| اختراق الورقة للتارت | لا شيء | 0 مثلثات متداخلة |
| الاستقرار، الإطارات 264–288 | 3 ملم كحد أقصى | 0.37 ملم |
| تركيز عمق الميدان، اللقطتان 2 و3 | في حدود 25 ملم من الورقة | 0.19 ملم أو أقل |
| أسرع دوران للكاميرا | 4° لكل إطار كحد أقصى | 0.71° |
هذه فحوص الوكيل نفسه مقابل الموجز. وتتضمن حزمة المهمة أيضًا مُقيّمًا منفصلًا: 23 قاعدة مقيسة إضافة إلى حَكَم بصري يقيّم القصة والحِرفية وتشطيب الورق. إن أردت درجة رسمية، فشغّل grader/grade.sh بنفسك على المخرجات بعد انتهاء التشغيل، من خارج مجلد الوكيل.
شاهد النتيجة
يطلب الموجز مشروع Blender، لا فيديو. لذلك أرسلنا رسالة متابعة واحدة في المشروع نفسه، نطلب من Gemini 4 تصدير التسلسل بصيغة MP4 مع معاينة في المتصفح.
عاد بملف sequence.mp4 (288 إطارًا، 640×480 بترميز H.264، 3 ميغابايت) وملف preview.html. تعرض صفحة المعاينة المشهد السينمائي مع عدّاد إطارات مباشر، وانتقال بنقرة واحدة إلى كل لقطة من اللقطات الأربع، ولوحة القصة كاملة في الأسفل.
ما الذي سنعدّه بشكل مختلف
احتوى مجلد مشروعنا على أكثر مما يحتاجه الوكيل. فإلى جانب PROMPT.md وagent_environment/، كان فيه أيضًا ملف README.md الخاص بالمهمة، ومجلد grader/، ومجلد reference_runs/ من نماذج سابقة.
وهذا مهم. يختبر سكربت الفحص الخاص بـ Gemini 4 طباعة الورقة مقابل حد تمدد قدره 5%. هذا الرقم غير موجود في الموجّه، بل في ملف README، بجانب ملاحظات عن أسباب فشل التشغيلات السابقة. لم تقرأ سكربتات Gemini 4 المُقيّم ولا التشغيلات المرجعية أبدًا، لكن من المنطقي افتراض أن ملف README أثّر في أهدافه.
لذا تعامل مع تشغيلنا على أنه عرض توضيحي، لا نتيجة اختبار معياري. لاختبار عادل، أعطِ وكيلك شيئين فقط، PROMPT.md وagent_environment/، وأبقِ المُقيّم في مكان لا يستطيع رؤيته.
اجعله خاصًا بك
النمط نفسه يصلح لأي مشهد في Blender:
- حوّل الذوق إلى أرقام. التأطير، والسرعات، ومسافات التركيز، والتلامس. الأهداف القابلة للقياس تتيح لوكيلك فحص نفسه قبل أن تضغط زر التشغيل.
- أعطه ممرًا. بضع نقاط تحقق في ملف JSON توجّه الحدث دون أن تضع إطارًا مفتاحيًا واحدًا يدويًا.
- اطلب تسليمًا حقيقيًا. ملف
.blendمحزوم وقابل للتعديل، وقائمة لقطات، ولوحة قصة. تحصل على مشروع يمكنك مواصلة العمل عليه، لا مجرد تصيير. - دعه يتحقق. أفضل لحظة في تشغيلنا كانت حين لاحظ Gemini 4 أن الوجه المطبوع من ورقته يتجه بعيدًا عن الكاميرا، وأصلح ذلك قبل أن نراه.
كانت اثنتا عشرة ثانية من التحريك تعني ظهيرة كاملة داخل نافذة العرض. أما الآن فهي موجّه واحد، ومشروع يمكنك فتحه وتعديله وجعله خاصًا بك.
الشكر والتقدير: صُنع باستخدام Gemini 4 وEigent. المشهد: «Cozy Kitchen» (شاشة بدء Blender 3.5) من إعداد Nicole Morena، بترخيص CC-BY-SA؛ ويحتفظ المشهد المشتق وعمليات التصيير بالإسناد وشروط ShareAlike. الموجز وبيانات المهمة: عمل أصلي من Eigent. الموسيقى: «Quirk n Twerk» لـ The Soundlings (مكتبة الصوت في YouTube).



