باختصار
- يمكن الوصول إلى المادة النشطة لكائن عبر bpy.context.view_layer.objects.active.
- تُحدَّد قيمتا Material.roughness وMaterial.metallic ضمن النطاق من 0 إلى 1.
- تُبرز الوثائق الحالية الخاصية surface_render_method لاختيار طريقة الشفافية.
- يتطلب خيار الإزاحة الفعلية للسطح تقسيمًا فرعيًا دقيقًا.
في هذا الدليل، ستتعلّم كيفية الوصول إلى المادة النشطة لكائن في المشهد باستخدام Python API في Blender، وتغيير إعدادات مظهرها الأساسية. تحدد وثائق API الحالية في Blender خصائص مثل roughness والانعكاس المعدني واللون وطريقة الشفافية ونهج الإزاحة. ويمكن استخدام الأمثلة نقطة انطلاق لتعديل أسطح شبيهة بالجدران والخشب والمعادن والزجاج في التصيير المعماري. تعمل الشيفرات هنا على مشهد ومادة موجودين؛ ولا تشمل خطوات إنشاء مادة من الصفر أو إعداد مادة قائمة على العقد.
ما الذي ستتعلمه في هذا الدليل؟
سترى أولًا كيفية فحص مادة الكائن النشط عبر Python. بعد ذلك، ستعدّل قيم اللون وroughness وmetallic، وتتعرف إلى معنى خيارات الشفافية والإزاحة، والقيود التي ينبغي مراعاتها.
قد يكون هذا النهج مفيدًا خصوصًا عند تكرار تعديلات المشهد أو عند الرغبة في تغيير قيم المواد باستخدام الشيفرة. لكن تغيير خصائص API وحده لا يضمن نتيجة مرئية بعينها. لا تقدم الوثائق المصدر بنية العقد الكاملة للمادة أو وصفة shader جاهزة لسطح معماري محدد. لذا تعامل مع مقاطع الشيفرة بوصفها عمليات صغيرة لتعديل إعدادات مادة موجودة.
المتطلبات
يجب أن يكون هناك مشهد مفتوح وكائن نشط في Blender.
يجب أن يكون للكائن النشط مادة معيّنة. لا يجري الكود أي تغييرات عند عدم وجود مادة نشطة.
في Blender Python API، يمكن الوصول إلى الكائن النشط باستخدام
bpy.context.view_layer.objects.active، وإلى مادته النشطة عبر خاصيةactive_materialللكائن.لا تشير هذه الأمثلة إلى الحاجة إلى حساب أو اشتراك أو إضافة منفصلة. المصدر هو وثائق API الحالية في Blender، ولا يقدم تعليمات تثبيت منفصلة لإصدار معين من Blender.
توضح الوثائق أن الخاصية use_nodes مهملة بدءًا من الإصدار 5.0، ومن المخطط إزالتها في الإصدار 6.0. ولأن هذا الدليل لا يعتمد على هذه الخاصية، فهي غير مستخدمة في مقاطع الشيفرة. وتذكر الوثائق أيضًا ضرورة استخدام surface_render_method بدلًا من blend_method القديم لاختيار طريقة مزج الأسطح الشفافة.
ضبط المواد خطوة بخطوة
1. تحقّق من مادة الكائن النشط
في الخطوة الأولى، احصل على الكائن النشط في Blender وتحقّق مما إذا كانت له مادة نشطة معيّنة. شغّل الشيفرة التالية في سياق Blender Python API:
obj = bpy.context.view_layer.objects.active
material = obj.active_material if obj else None
if material is not None:
print(material.name)إذا كان هناك كائن نشط، تسند الشيفرة مادته النشطة إلى المتغير. وعند وجود مادة، تطبع اسمها، لتتمكن من التحقق من المادة التي ستطبّق عليها الإعدادات التالية. إذا لم يوجد كائن نشط أو مادة، فلن تنتقل الشيفرة إلى تعديل الخصائص.
2. عدّل اللون وقيمتي roughness وmetallic
تتضمن كتلة بيانات Material الخصائص diffuse_color وroughness وmetallic. وتعرّف الوثائق diffuse_color على أنها مصفوفة ألوان من أربعة مكونات؛ أما roughness وmetallic فتقع قيمتاهما ضمن النطاق من 0 إلى 1. يضبط المثال التالي هذه الحقول باستخدام المتغير material الذي حصلت عليه في الخطوة السابقة:
if material is not None:
material.diffuse_color = (0.55, 0.35, 0.20, 1.0)
material.roughness = 0.6
material.metallic = 0.0هذه القيم أمثلة لإسناد قيم إلى حقول API المعنية، ولا تعني أنها تمثل القيم الفيزيائية الصحيحة لخشب أو طلاء أو معدن بعينه. عند إعداد المواد للتصيير المعماري، افحص مظهرها مع إضاءة المشهد وبنية المادة التي تستخدمها. ولا تفيد الوثيقة المصدر بأن هذه القيم تقابل وحدها قياسًا لسطح في العالم الحقيقي.
3. اختر طريقة الشفافية
تسرد الوثائق الحالية خيارين للخاصية surface_render_method: DITHERED وBLENDED. يتيح DITHERED الشفافية المعتمدة على التدرج الرمادي باستخدام hash، وتصفه الوثائق بأنه متوافق مع render passes وخصائص تتبع الأشعة. أما BLENDED فيوفر شفافية ملوّنة، لكنه غير متوافق مع render passes وتتبع الأشعة.
if material is not None:
material.surface_render_method = 'DITHERED'يحدد هذا الإعداد طريقة مزج الشفافية؛ فلا تفترض أنه ينشئ مظهرًا زجاجيًا بمفرده. لا يشرح المصدر كيفية إعداد جميع عقد shader أو قيم alpha اللازمة للشفافية. كما أن الخاصية القديمة blend_method موسومة بأنها مهملة؛ لذا يُفضّل استخدام الحقل surface_render_method الوارد في الوثائق الحالية عند كتابة سكربت جديد.
4. حدّد نهج الإزاحة
تسرد وثائق المواد الخيارات BUMP وDISPLACEMENT وBOTH للخاصية displacement_method. يحاكي BUMP مظهر الإزاحة باستخدام خرائط bump. أما DISPLACEMENT فيستخدم الإزاحة الفعلية للسطح فقط، ويتطلب تقسيمًا فرعيًا دقيقًا. ويجمع BOTH بين الإزاحة الفعلية ونهج bump.
if material is not None:
material.displacement_method = 'BUMP'هذا المثال إعداد أولي لا يتطلب تفاصيل هندسية فعلية. إذا أردت تجربة الإزاحة الفعلية، فضع في الحسبان شرط التقسيم الفرعي الدقيق الوارد في الوثائق؛ إذ لا يحدد المصدر عدد التقسيمات المطلوبة. لذلك، بدلًا من اقتراح قيمة محددة، اختبر الإعداد بحذر على المشهد والهندسة.
5. طبّق التغييرات معًا
يتيح تغيير عدة إعدادات ضمن شرط واحد إبقاء التحقق من المادة النشطة في مكان واحد. يجمع المثال التالي الحقول المستخدمة في الخطوات السابقة:
if material is not None:
material.roughness = 0.45
material.metallic = 0.0
material.surface_render_method = 'DITHERED'
material.displacement_method = 'BUMP'الأرقام هنا أمثلة، وليست وصفة عامة تناسب كل مشهد. افحص نتيجة التصيير وبنية المادة الحالية في ملفك بعد كل تغيير. لا يشمل هذا الدليل التطبيق الجماعي على مواد متعددة، أو إنشاء المواد، أو تعديل شجرة العقد.
أخطاء شائعة
الخطأ الأول هو افتراض أن للكائن النشط مادة بالضرورة. ولهذا يتضمن الكود فحصًا لـ None. والخطأ الثاني هو اعتبار الخيار BLENDED أفضل طريقة للشفافية في جميع الحالات: فالوثائق تذكر أنه غير متوافق مع render passes وتتبع الأشعة. أما الخطأ الثالث فهو اختيار DISPLACEMENT من دون مراعاة توفر تقسيم فرعي كافٍ للهندسة.
كذلك، لا تعتمد في الشيفرات الجديدة على الحقول المهملة مثل blend_method. ولا تستخدم الخاصية use_nodes كمفتاح تشغيل وإيقاف لسير عمل المواد الحالي؛ إذ تذكر الوثائق أن هذا الحقل مهمل منذ الإصدار 5.0، ومن المخطط إزالته في الإصدار 6.0، وأن ضبطه لا يؤثر. ولأن هذا الدليل لا يشرح كيفية إعداد شجرة العقد، فهو لا يقدم شيفرة لتعديلها.
أثر ذلك في سير عمل العمارة والتصوّر البصري
يستهدف هذا النهج المعماريين ومصممي الديكور الداخلي وفناني التصوّر البصري الراغبين في تغيير الخصائص الأساسية للمادة النشطة في المشهد باستخدام الشيفرة. ويوفر نقطة انطلاق عملية لتحديث قيم roughness أو metallic بانتظام ضمن المشروع نفسه؛ لكن المصادر لا تضمن تحسن الأداء أو تحدد متطلبات الأجهزة أو التوافق بين محركات التصيير. انتبه خصوصًا إلى توافق طريقة الشفافية مع render passes وتتبع الأشعة، وإلى كثافة الهندسة عند استخدام الإزاحة الفعلية.
الخطوات التالية
ابدأ بمادة كائن واحد نشط، وافحص النتيجة بعد كل تغيير. بعد ذلك، اختبر النهج نفسه في ملف مشروعك الفعلي، مستخدمًا المشهد وإعدادات التصيير التي تعمل بها. ولأتمتة أكثر تقدمًا، يمكنك مراجعة قسمي Material وObject في وثائق Blender API معًا؛ فهما يعرّفان خصائص المواد الحالية وطريقة وصول الكائن إلى مادته النشطة. تحقّق أيضًا من سلوك API في إصدار Blender الذي اخترته قبل استخدام سكربت جديد في الإنتاج.
المصدر والترخيص
يستند هذا الدليل إلى أوصاف الخصائص في وثائق Blender API لقسمي Material وObject. كلا المصدرين مرخص بموجب CC BY-SA 4.0؛ وقد جرى تكييف المحتوى إلى اللغة التركية، وإعادة صياغة أمثلة الشيفرة ضمن سياق تعديل المواد المعمارية.
المصادر
2 مصادرلا نعيد نشر نصوص المصادر؛ الاقتباسات القصيرة مشار إليها، وما تبقى ملخص وتعليق من إعدادنا.
بالنسبة إلى المكاتب الصغيرة والطلاب في تركيا، يمثل هذا النهج نقطة انطلاق سهلة لتغيير قيم المواد الحالية بسرعة والتفكير في التعديلات المتكررة بمنطق السكربتات. تعتمد الأمثلة الواردة في الدليل على API الخاصة بـ Blender؛ ولا تتضمن المصادر معلومات تفيد بالحاجة إلى أداة إضافية أو استثمار في الأجهزة.
مع ذلك، لا تنشئ الشيفرة وحدها مادة جاهزة للإنتاج. ينبغي التحقق خصوصًا من التوافق مع إعدادات التصيير عند استخدام الشفافية، ومن كثافة الهندسة عند استخدام الإزاحة، ومن سلوك API في إصدار Blender المستخدم. والطريقة الأكثر أمانًا هي التجربة أولًا في نسخة من الملف، ثم تقييم النتيجة وفقًا للمشهد.
الأسئلة الشائعة
كيف يمكن الوصول إلى المادة النشطة باستخدام Blender Python؟
يمكن الوصول إلى الكائن النشط عبر `bpy.context.view_layer.objects.active`. وتُرجع خاصية `active_material` للكائن مادته النشطة؛ وينبغي التحقق من وجود الكائن والمادة.
هل ينبغي استخدام blend_method أم surface_render_method للشفافية في Blender؟
توصي وثائق API الحالية باستخدام `surface_render_method` بدلًا من `blend_method` المهملة. وتدرج الوثائق الخيارين `DITHERED` و`BLENDED`.
ما المطلوب للإزاحة الفعلية في Blender؟
تستخدم طريقة `DISPLACEMENT` الإزاحة الفعلية للسطح وتتطلب تقسيمًا فرعيًا دقيقًا. ولا تحدد وثائق المصدر عددًا معينًا للتقسيمات الفرعية.



