باختصار
- حلّت المجموعات وتنظيم View Layer محل طبقات المشهد الثابتة في حقبة Blender 2.7x، بدءًا من Blender 2.8x.
- يمكن ربط الكائن الواحد بأكثر من مجموعة؛ ولا يؤدي ذلك إلى إنشاء كائن جديد.
- يمكن استبعاد مجموعة من View Layer النشط للتحكم بها ضمن تنظيم تلك الطبقة.
- تدير الخاصيتان `hide_viewport` و`hide_render` ظهور الكائن في سياقين مختلفين.
ما الذي ستتعلمه في هذا الدليل؟
قد تضم مشاهد التصيير المعماري هياكل المباني وعناصر التصميم الداخلي والأثاث وكثيرًا من الكائنات الأخرى. ومع ازدياد المحتوى، يصبح تجميع عناصر المشهد وإدارة طرق العرض المختلفة للعمل أمرًا مهمًا. تتيح واجهة Python API في Blender ربط الكائنات بالمجموعات، وتنظيم الأجزاء النشطة من التسلسل الهرمي للمجموعات عبر View Layer.
في هذا الدليل، ستتعلم إنشاء مجموعة جديدة باستخدام Python، وربطها بالمشهد، وإضافة الكائن النشط إليها، واستبعادها من View Layer النشط. كما سنتناول الفروق بين إعدادات ظهور الكائنات وتنظيم المجموعات وView Layer. تستند الأمثلة إلى وثائق Blender Python API الرسمية وشرح واجهات المشهد والكائنات المنشور لـ Blender 2.80.
المتطلبات
شغّل الأمثلة في بيئة Blender تتيح استخدام Python API. يصل الكود إلى المشهد النشط، وإلى الكائن النشط عند الحاجة، عبر bpy. ينشئ المثال الأول مجموعة جديدة مباشرةً باستخدام bpy.data.collections.new ويربطها بالمجموعة الجذرية للمشهد؛ ولا يتطلب وجود مجموعة نشطة مسبقًا. أما المثال المنفصل الذي يربط الكائن النشط بالمجموعة الجديدة، فيتجاوز خطوة الربط إذا لم يوجد كائن نشط.
لا تحدد الوثائق إصدارًا معينًا من Blender أو حساب مستخدم أو متطلبات برامج إضافية. لذلك تحقّق من سلوك API في إصدار Blender المثبّت قبل استخدام الكود. تشرح وثيقة المطورين الخاصة بـ Blender 2.80 تغييرات API في حقبة 2.8x، بينما توثّق صفحات API الحالية خصائص Scene وObject. ضع هذه الفروق في الحسبان عند العمل على سكربتات من إصدارات أقدم.
إعداد تنظيم المجموعات خطوة بخطوة
1. ميّز بين وظيفة المجموعات ووظيفة View Layer
في حقبة Blender 2.7x، كان بالإمكان تنظيم المشاهد باستخدام 20 طبقة ثابتة. ومع تغييرات API في 2.8x، انتقل تنظيم الكائنات إلى المجموعات، بينما انتقلت إدارة الأجزاء النشطة من التسلسل الهرمي للمجموعات ضمن سياقي العرض والتصيير إلى View Layer. لذا ينبغي عدم الخلط بين خصائص طبقات المشهد التي تظهر في السكربتات القديمة ونظام المجموعات الجديد.
تجمع المجموعات الكائنات ومجموعات أخرى ضمن تسلسل هرمي. وتحدد View Layer أيضًا الأجزاء النشطة من هذا التنظيم. إنشاء مجموعة لا ينقل الكائنات إليها تلقائيًا؛ إذ يجب إجراء الربط على نحو منفصل.
2. أضف مجموعة جديدة إلى المشهد
يربط المثال التالي مجموعة جديدة باسم Mimari_Govde تحت المجموعة الجذرية للمشهد النشط. ينشئ الكود المجموعة ثم يضيفها إلى التسلسل الهرمي للمشهد:
import bpy
scene = bpy.context.scene
collection = bpy.data.collections.new("Mimari_Govde")
scene.collection.children.link(collection)تنشئ bpy.data.collections.new مجموعة جديدة، بينما تربطها scene.collection.children.link بالمجموعة الجذرية للمشهد. لا يستخدم هذا المثال كائنًا نشطًا أو مجموعة نشطة مسبقًا. إذا كان الملف يحتوي بالفعل على مجموعة بالاسم نفسه، فتحقّق من تنظيم المشهد الحالي قبل تشغيل السكربت مجددًا.
3. اربط الكائن النشط بالمجموعة الجديدة
بعد إنشاء المجموعة، يمكن استخدام المثال التالي لربط الكائن النشط بها:
obj = bpy.context.object
if obj is not None:
collection.objects.link(obj)إذا وُجد كائن نشط، تُضاف إليه المجموعة؛ وإذا لم يوجد، فلن تُنفّذ العملية داخل الشرط. لا يؤدي هذا الربط إلى استنساخ الكائن. فوفقًا لوثائق المطورين في Blender، يمكن أن ينتمي الكائن نفسه إلى عدة مجموعات مع بقائه كائنًا واحدًا.
يساعد هذا التمييز في إنشاء تنظيم للمجموعات في المشاهد المعمارية من دون تكرار بيانات الكائنات. لكن الكود في المثال لا يزيل الكائن من مجموعته الحالية، بل يربطه أيضًا بالمجموعة الجديدة. لذلك افحص الروابط الأخرى للكائن في المشهد على نحو منفصل.
4. استبعد المجموعة من View Layer النشط
إذا كانت المجموعة فرعًا مباشرًا من المجموعة الجذرية للمشهد، فيمكن استبعادها عبر الوصول إلى LayerCollection المعني ضمن View Layer النشط:
bpy.context.view_layer.layer_collection.children["Mimari_Govde"].exclude = Trueيستبعد هذا السطر مجموعة Mimari_Govde من View Layer النشط. ولإعادة تفعيلها، اضبط قيمة exclude على False. يفترض الكود أن المجموعة تقع مباشرةً ضمن التسلسل الهرمي لـ View Layer. وإذا كانت المجموعة داخل مجموعة أخرى، فيجب الوصول إليها عبر موضعها الصحيح في التسلسل الهرمي.
تتحكم View Layer في الأجزاء النشطة من تنظيم المجموعات. ولا يعادل ذلك تغيير خصائص الظهور لكل كائن على حدة. عند تقييم النتيجة، ضع في الحسبان ما إذا كانت الكائنات مرتبطة بمجموعات أخرى، وبنية View Layer التي تستخدمها.
5. أدر ظهور الكائنات بشكل منفصل
إذا كنت بحاجة إلى التحكم في كائن محدد بدلًا من ظهور مجموعة، فيمكنك استخدام خصائص الكائن. تؤثر hide_viewport في ظهور الكائن ضمن منفذ العرض، بينما تؤثر hide_render في ظهوره أثناء التصيير. على سبيل المثال، لإخفاء الكائن النشط عند التصيير:
obj = bpy.context.object
if obj is not None:
obj.hide_render = Trueيغيّر هذا الإعداد ظهور الكائن في التصيير فقط. أما الخاصية المنفصلة الموثقة لإخفائه في منفذ العرض فهي hide_viewport. اختر الخاصية المناسبة للنتيجة المطلوبة، ولا تستخدم الإعدادين بالتبادل.
أخطاء شائعة
الاعتقاد بأن إنشاء مجموعة يضيف الكائنات إليها تلقائيًا: إنشاء المجموعة وربط الكائن بها عمليتان منفصلتان. اربط الكائن المعني بالمجموعة على نحو مستقل.
استخدام أساليب طبقات المشهد القديمة مع API الجديدة: تغيّر تنظيم المجموعات وView Layer مع 2.8x. لا تستخدم خصائص مثل object.layers في السكربتات القديمة من دون مقارنتها ببنية المجموعات الحالية.
الخلط بين ربط الكائن بمجموعة واستنساخه: يمكن أن ينتمي الكائن نفسه إلى عدة مجموعات. لا ينشئ الربط بمجموعة كائنًا جديدًا أو نسخة من الهندسة.
البحث في المستوى الخطأ من التسلسل الهرمي لـ View Layer: يفترض سطر الاستبعاد في المثال أن المجموعة فرع مباشر من الطبقة النشطة. أما الوصول إلى المجموعات الفرعية، فيجب ضبط مساره وفق التسلسل الهرمي الفعلي للمشهد.
اعتبار ظهور منفذ العرض وظهور التصيير إعدادًا واحدًا: hide_viewport وhide_render خاصيتان منفصلتان. حدّد ما إذا كانت المشكلة في منفذ العرض أم في مخرجات التصيير، ثم غيّر الخاصية المناسبة.
أثر ذلك في سير عمل العمارة والتصيير
يمكن استخدام المجموعات لضم هيكل المبنى أو الأثاث أو غيرها من عناصر المشهد التي ينبغي التحكم بها معًا. أما تنظيم View Layer فيدير الأجزاء النشطة من التسلسل الهرمي لهذه المجموعات. وقد يساعد هذا الأسلوب على إبقاء محتوى المشهد منظمًا واتخاذ قرارات الظهور على مستوى المجموعات، خصوصًا في المشاريع متعددة الأجزاء.
يمكن لمكاتب العمارة والمصممين الداخليين وفناني archviz الراغبين في إنشاء تنظيم قابل للتكرار باستخدام Python في مشاهد Blender الاستفادة من هذا الأسلوب. لكن المصادر لا تعد بالتوافق مع محرك تصيير معين، أو بتحسين الأداء، أو بتوفير مزايا للأجهزة. ينبغي التحقق من إصدار Blender المستخدم في المشاريع، والتسلسل الهرمي الفعلي للمجموعات، وسير العمل المتبع عند مشاركة الملف مع الآخرين.
الخطوات التالية
ابدأ بتشغيل مثال إنشاء المجموعة على نسخة من الملف. ثم جرّب خطوة الربط باستخدام كائن نشط، وتأكد من إمكانية وجود الكائن في أكثر من مجموعة. تحقّق من موضع المجموعة ضمن View Layer النشط قبل تطبيق كود الاستبعاد.
بعد ذلك، افحص الخاصيتين hide_viewport وhide_render كلًا على حدة، وحدّد مستوى الظهور الذي يلبي حاجتك. وإذا كنت ستستخدم السكربتات مع إصدارات مختلفة من Blender، فراجع وثائق API الخاصة بالإصدار الذي ستشغّل فيه الكود، واختبر التغييرات قبل تطبيقها على ملف المشروع.
المصادر والترخيص
تشرح وثيقة “Blender 2.80: Scene and Object API” (K2) في وثائق Blender Developer التغييرات التي طرأت على المجموعات وبنية View Layer. وتخضع وثائق Blender Python API الخاصة بـ Scene (K1) وObject (K4) لترخيص CC BY-SA 4.0. يكيّف هذا الدليل المعلومات التقنية الواردة في هذه المصادر إلى اللغة التركية ويشرحها بأمثلة أصلية.
المصادر
3 مصادرلا نعيد نشر نصوص المصادر؛ الاقتباسات القصيرة مشار إليها، وما تبقى ملخص وتعليق من إعدادنا.
يمكن لمكاتب العمارة وفرق التصيير في تركيا أن تجعل تنظيم المشاهد أكثر قابلية للتكرار عبر إدارة المجموعات باستخدام Python. كما أن إنشاء روابط بين مجموعات مختلفة من دون استنساخ الكائنات يوفّر طريقة عملية لتنظيم سير العمل، ولا سيما للفرق التي تتوسع مشاهدها.
مع ذلك، لا تعد هذه الأمثلة بتقليل زمن التصيير أو بتحسين الأداء على أجهزة معينة. ينبغي التحقق من إصدار Blender المستخدم في المشروع والتسلسل الهرمي للمشهد الفعلي، وتجربة الأتمتة أولًا على نسخة من الملف. كذلك، لا تقدم المصادر معلومات عن الحساب أو الأجهزة أو شروط الرسوم.
الأسئلة الشائعة
كيف يمكن إنشاء مجموعة جديدة في Blender باستخدام Python؟
تُنشأ المجموعة باستخدام `bpy.data.collections.new`، ثم تُربط بالتسلسل الهرمي لمجموعات المشهد عبر `scene.collection.children.link`. وينبغي إضافة الكائنات إلى المجموعة على نحو منفصل.
هل يمكن أن ينتمي الكائن نفسه إلى أكثر من مجموعة في Blender؟
نعم. وفقًا لوثائق المطورين في Blender، يمكن ربط الكائن نفسه بعدة مجموعات مع بقائه كائنًا واحدًا.
ما الفرق بين `hide_viewport` و`hide_render` في Blender؟
تتحكم `hide_viewport` في ظهور الكائن ضمن منفذ العرض، بينما تتحكم `hide_render` في ظهوره أثناء التصيير. وهما خاصيتان منفصلتان.



