معرفی کتابخانه bpy (بلندر پایتون) + کد و تصویر _ قسمت اول

معرفی کتابخانه bpy (بلندر پایتون) + کد و تصویر _ قسمت اول

مقدمه

به نام خدا و سلام خدمت همه‌ی همراهان عزیز بلندر فارسی. در این مقاله می‌خواهیم به یک موضوع و ویژگی جذاب در نرم‌افزار قدرتمند بلندر یعنی یکی از کتابخانه های پایتون در بلندر (بلندر پایتون)بپردازیم. این قابلیت جالب بلندر باعث شده کسانی که به برنامه نویسی و گرافیک علاقه‌مند هستند بتوانند به واسطه کدنویسی، انیمیشن‌سازی کنند. زبان برنامه نویسی که در بلندر استفاده می‌شود پایتون است. پس ما کتابخانه bpy (بلندر پایتون) را به شما معرفی می‌کنیم.

ویژگی های API بلندر پایتون

  • داده های رابط کاربری را که می‌تواند ویرایش‌کند (صحنه‌ها ، مش‌ها ، ذرات و غیره).
  • تنظیمات ، نقشه‌های صفحه و تم های کاربر را تغییردهید.
  • ابزارهایی را با تنظیمات خود اجرا کنید.
  • عناصر رابط کاربری مانند منوها ، هدرها و پنل ها را ایجادکنید.
  • ابزارهای جدید ایجادکنید.
  • ابزارهای تعاملی ایجاد‌کنید.
  • موتورهای رندر جدید ایجاد کنید که با بلندر ادغام‌شوند.
  • در تغییرات داده و خصوصیات آن مشترک‌شوید.
  • تنظیمات جدید را در داده‌های موجود بلندر تعریف‌کنید.
  • با استفاده از پایتون در نمای سه بعدی طراحی‌کنید.

لیستی سریع از موارد مفیدی که باید قبل از شروع بدانید…

  • Developer Extra <blender_manual:prefs-interface-dev-extras and Python Tooltips. را فعال کنید.
  • کنسول Python برای آزمایش یک خط عالیست زیرا دارای تکمیل خودکار است بنابراین می‌توانید به سرعت API را بررسی‌کنید.
  • نکات راهنمای دکمه ویژگی های Python و نام اپراتورها را نشان می دهد.
  • دکمه‌ context menu مستقیماً به این مستندات API پیوند می‌یابد.
  • بسیاری از نمونه‌های پایتون را می‌توان در منوی الگوی ویرایشگر متن یافت.

اجرای اسکریپت ها

دو روش متداول برای اجرای اسکریپت‌های پایتون، استفاده از ویرایشگر متن داخلی یا وارد کردن دستورات در کنسول پایتون‌است. هر دو ویرایشگر متن و کنسول پایتون از نوع فضایی هستند که می‌توانید از عنوان انتخاب‌کنید. به جای پیکربندی دستی فضاهای خود برای توسعه پایتون ، می‌توانید از فضای کاری اسکریپت‌نویسی که از زبانه‌های Topbar قابل دسترسی‌است استفاده کنید.

مطالعه بیشتر
معرفی کتابخانه bpy (بلندر پایتون) + کد و تصویر _ قسمت دوم

از طریق ویرایشگر متن می‌توانید پرونده‌های py. را باز کرده یا از کلیپ بورد جایگذاری کرده و سپس با استفاده از Run Script تست کنید. کنسول Python معمولاً برای تایپ کردن قطعه‌ها و آزمایش برای گرفتن بازخورد فوری استفاده‌می‌شود ، اما همچنین می‌تواند کل اسکریپت‌ها را در آن جایگذاری کند. اسکریپت‌ها همچنین می‌توانند از خط فرمان با بلندر اجرا شوند اما برای یادگیری اسکریپت در بلندر این ضروری نیست.

مفاهیم کلیدی

دسترسی به داده

دسترسی به Data-Blocks

شما می‌توانید با استفاده از Python API به داده‌های Blender به همان شیوه سیستم انیمیشن یا رابط کاربری دسترسی پیدا کنید. این بدان معنی‌است که هر تنظیماتی که می‌تواند از طریق یک دکمه تغییر کند با پایتون نیز قابل تغییر است. دسترسی به داده‌ها از فایل بلند بارگیری شده در حال حاضر با ماژول bpy.data انجام می‌شود. این دسترسی به داده‌های کتابخانه را فراهم می‌کند ، به عنوان مثال:

bpy.data.objects
<bpy_collection[3], BlendDataObjects>
bpy.data.scenes
<bpy_collection[1], BlendDataScenes>
bpy.data.materials
<bpy_collection[1], BlendDataMaterials>

دسترسی به مجموعه‌ها

مشاهده خواهید کرد که از یک فهرست و همچنین یک رشته می‌توان برای دسترسی به اعضای مجموعه استفاده‌کرد. برخلاف فرهنگ لغت پایتون ، هر دو روش موجود است. اما ممکن‌است هنگام اجرای بلندر ، نمایه یک عضو تغییر کند.

list(bpy.data.objects)
[bpy.data.objects["Cube"], bpy.data.objects["Plane"]]
bpy.data.objects['Cube']
bpy.data.objects["Cube"]
bpy.data.objects[0]
bpy.data.objects["Cube"]

دسترسی به خصوصیات (Attributes)

هنگامی که یک بلوک داده مانند یک ماده ، یک شی ، مجموعه و غیره دارید ، می توان به ویژگی‌های آن دسترسی پیدا کرد دقیقاً مانند این که تنظیمات را با استفاده از رابط گرافیکی تغییر دهید. در واقع ، راهنمای ابزار برای هر دکمه همچنین ویژگی Python را نشان می‌دهد که می‌تواند به شما در یافتن تنظیماتی برای تغییر در یک اسکریپت کمک کند.

bpy.data.objects[0].name
'Camera'
bpy.data.scenes["Scene"]
bpy.data.scenes['Scene']
bpy.data.materials.new("MyMaterial")
bpy.data.materials['MyMaterial']

برای آزمایش اینکه به چه داده ای دسترسی پیدا کنید ، استفاده از کنسول Python که نوع فضای آن خاص است ، مفید است. این از تکمیل خودکار پشتیبانی می‌کند و به شما راهی سریع برای کاوش داده‌های پرونده می‌دهد.

مثالی از مسیر داده ای که به سرعت از طریق کنسول پیدا می شود:

bpy.data.scenes[0].render.resolution_percentage
100

bpy.data.scenes[0].objects["Torus"].data.vertices[0].co.x
1.0

ایجاد / حذف داده ها

وقتی با سایر API های Python آشنا شدید ، ممکن‌است تعجب کنید که با فراخوانی کلاس نمی‌توان بلوک‌های داده جدیدی در API bpy ایجاد کرد:

bpy.types.Mesh()
Traceback (most recent call last):
  File "<blender_console>", line 1, in <module>
TypeError: bpy_struct.__new__(type): expected a single argument

این بخشی عمدی از طراحی API است. Blender Python API نمی‌تواند داده بلندر را که در خارج از پایگاه اصلی بلندر وجود دارد (از طریق bpy.data قابل دسترسی‌است) ایجاد کند ، زیرا این داده‌ها توسط Blender مدیریت می‌شوند (ذخیره ، بارگذاری ، واگرد ، ضمیمه و غیره)

مطالعه بیشتر
معرفی کتابخانه bpy (بلندر پایتون) + کد و تصویر _ قسمت دوم

داده ها از طریق روش‌های موجود در مجموعه ها در bpy.data اضافه و حذف می‌شوند ، به عنوان مثال:

mesh = bpy.data.meshes.new(name="MyMesh")

print(mesh)
<bpy_struct, Mesh("MyMesh.001")>
bpy.data.meshes.remove(mesh)

خصوصیات سفارشی

پایتون می‌تواند به خصوصیات موجود در هر بلوک داده‌ای که دارای شناسه‌است دسترسی پیدا کند (داده‌هایی که می‌توانند از طریق bpy.data مرتبط شوند و به آنها دسترسی داشته باشند). هنگام اختصاص یک ملک ، می‌توانید نام خود را انتخاب‌کنید ، این نام‌ها در صورت نیاز ایجاد می شوند یا اگر از قبل وجود داشته باشند ، دوباره نوشته‌می‌شوند.

این داده ها با فایل مخلوط ذخیره می‌شوند و با اشیا کپی می‌شوند ، به عنوان مثال:

bpy.context.object["MyOwnProperty"] = 42

if "SomeProp" in bpy.context.object:
    print("Property found")

# Use the get function like a Python dictionary
# which can have a fallback value.
value = bpy.data.scenes["Scene"].get("test_prop", "fallback value")

# dictionaries can be assigned as long as they only use basic types.
collection = bpy.data.collections.new("MyTestCollection")
collection["MySettings"] = {"foo": 10, "bar": "spam", "baz": {}}

del collection["MySettings"]

توجه داشته باشید که این خصوصیات را فقط می توان انواع اساسی پایتون اختصاص داد:

  • int ، float ، string
  • آرایه ای از ints یا float
  • فرهنگ لغت (فقط کلیدهای رشته پشتیبانی می‌شوند ، مقادیر نیز باید انواع اصلی باشند)

این خصوصیات در خارج از پایتون معتبر هستند. آنها می‌توانند توسط منحنی متحرک شوند و یا در مسیرهای راننده استفاده‌شوند.

متن نوشته (Context)

اگرچه دسترسی به داده‌ها مستقیماً با نام یا به صورت لیست مفید است ، اما کار با انتخاب کاربر معمول‌تر است. زمینه همیشه از طریق bpy.context در دسترس است و می توان از آن برای بدست آوردن شی فعال ، صحنه ، تنظیمات ابزار به همراه بسیاری از ویژگی های دیگر استفاده کرد.

مطالعه بیشتر
3 روش تکثیر اشیاء در نرم افزار بلندر + تصویر

برخی موارد استفاده معمول عبارتند از:

bpy.context.object

bpy.context.selected_objects

bpy.context.visible_bones

توجه داشته باشید که زمینه فقط خواندنی‌است ، به این معنی که این مقادیر نمی‌توانند مستقیماً اصلاح‌شوند. اما می‌توان آنها را با اجرای توابع API یا با استفاده از داده AP تغییر داد.

بنابراین bpy.context.active_object = obj خطایی ایجاد خواهد کرد ولی bpy.context.view_layer.objects.active = obj مطابق انتظار کار می‌کند.

ویژگی‌های زمینه بسته به جایی که به آنها دسترسی پیدا می‌کنند تغییر می‌کنند. 3D Viewport دارای اعضای متن متفاوتی از کنسول Python است ، بنابراین هنگام دسترسی به ویژگی‌های زمینه که وضعیت کاربر شناخته شده‌است ، مراقب باشید.

اپراتورها (ابزارها)

اپراتورها ابزاری هستند که کاربر معمولاً از طریق دکمه ها ، موارد منو یا میانبرهای کلید به آنها دسترسی پیدا می کند. از دید کاربر، آنها ابزاری هستند اما پایتون می‌تواند این موارد را با تنظیمات خاص خود از طریق ماژول bpy.ops اجرا کند.

مثال ها:

bpy.ops.mesh.flip_normals()
{'FINISHED'}

bpy.ops.mesh.hide(unselected=False)
{'FINISHED'}

bpy.ops.object.transform_apply()
{'FINISHED'}

نظرسنجی اپراتور ()

بسیاری از اپراتورها عملکرد “نظرسنجی” دارند که بررسی می‌کند مکان نما در یک منطقه معتبر است یا اینکه شی در حالت صحیح قرار دارد (حالت ویرایش ، حالت رنگ آمیزی و غیره). وقتی عملکرد نظرسنجی یک اپراتور در پایتون خراب شود ، یک استثنا مطرح می‌شود.

به عنوان مثال ، فراخوانی bpy.ops.view3d.render_border () از کنسول خطای زیر را ایجاد می‌کند:

RuntimeError: Operator bpy.ops.view3d.render_border.poll() failed, context is incorrect

در این حالت زمینه باید 3D Viewport با یک دوربین فعال باشد.

برای جلوگیری از استفاده از بندهای try-except در هرجایی که اپراتورها فراخوانی می شوند ، می توانید با تابع نظرسنجی () عملگرها فراخوانی‌می‌شود تا بررسی‌کند آیا می‌تواند اپراتور را در زمینه فعلی اجرا کند.

if bpy.ops.view3d.render_border.poll():
    bpy.ops.view3d.render_border()

سخن آخر…

امیدوارم این مقاله برای شما مفید بوده باشد و توانسته باشد شما را تا حدودی با کتابخانه bpy آشنا کرده باشد. از اینکه تا انتهای مقاله با ما همراه بودید از شما سپاسگزاریم. در قسمت بعدی این مقاله هم ما را همراهی کنید. این مقاله از سایت بلندر برداشت شده‌است.

آیا این مقاله برای شما مفید بود؟
بله
تقریبا
خیر

مقالات مرتبط

پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *