+4

Hướng dẫn làm Blender Addon

Mở đầu

Mình vừa tham gia một dự án về tích hợp AI vào Blender để hỗ trợ công việc tạo animation thông qua Blender Add-ons, mình chia sẻ các bước để tạo một Blender addon đơn giản.

Giới thiệu về blender

Blender là một phần mềm tạo nội dung 3D miễn phí và nguồn mở. Với Blender, bạn có thể tạo ra các hình ảnh 3D, hoạt hình 3D và các cảnh VFX. Bạn cũng có thể chỉnh sửa video. Blender được tích hợp đầy đủ các chức năng và cung cấp một loạt các công cụ thiết yếu, bao gồm Mô Hình Hóa, Kết Xuất, Hoạt Họa & Dàn Dựng, Biên Soạn Phim, Hiệu Ứng Đặc Biệt, Tổng Hợp, Tạo Chất Liệu, cùng rất nhiều thể loại Mô Phỏng khác. Blender là một ứng dụng cross-platform và có thể chạy trên các hệ điều hành Linux, macOS và MS-Windows.

Một điểm mạnh của Blender là cho phép người dùng tạo ra các chức năng mở rộng. Blender đi kèm với một số trình bổ sung được cài đặt sẵn, nhưng bạn cũng có thể tải xuống và cài đặt các trình bổ sung khác từ các nguồn bên ngoài. Các trình bổ sung này có thể giúp bạn nâng cao năng suất và sử dụng các tính năng mới mà Blender không có sẵn. Ngoài ra, Blender cũng cho phép người dùng tự tạo các trình bổ sung của riêng mình để mở rộng chức năng của phần mềm. Với khả năng tạo ra các chức năng mở rộng, Blender là một công cụ mạnh mẽ cho các nghệ sĩ và nhà phát triển trong lĩnh vực tạo hình 3D.

Quy trình phát triển blender add-on

image.png Có một hạn chế khi phát triển blender add-on là không có một công cụ riêng nào hỗ trợ toàn bộ quy trình phát triển blender add-on. Các bước làm khá thủ công.

  • Edit source: Bạn có thể dùng bất cứ trình soạn thảo Python nào để bắt đầu. Đặt toàn bộ source vào trong một thư mục
  • Import to Blender: Mở blender và cài đặt đường dẫn Addon đến thư mục vừa tạo
  • Test: Khởi chạy addon và kiểm tra các tính năng bạn vừa tạo
  • Update: Khi phát sinh bug hoặc thêm tính năng thì quay lại bước đầu tiên
  • Package: Đóng gói souce thành file cài đặt add-ons cho Blender

Blender Python API

Blender Python API bao gồm một loạt các modules cơ bản mà bạn có thể sử dụng để tương tác với và mở rộng chức năng của Blender. Dưới đây là một số trong số những modules quan trọng và phổ biến nhất:

  • bpy: Module bpy là trung tâm của Blender Python API. Nó cung cấp quyền truy cập đến hầu hết các chức năng, từ quản lý dữ liệu đến tương tác với giao diện người dùng:
    • bpy.data: Quản lý dữ liệu như objects, meshes, lamps, materials, textures, v.v.
    • bpy.context: Cung cấp thông tin về context hiện tại của Blender, như đối tượng đang được chọn, scene hiện tại, v.v.
    • bpy.ops: Thực hiện các hành động và tác vụ, như chuyển động objects, thay đổi thuộc tính, v.v.
  • bpy.types: Module này chứa các định nghĩa cho tất cả các loại dữ liệu và cấu trúc trong Blender, từ Object đến Material, Scene, v.v. Nó là cơ sở cho việc mở rộng và tạo các kiểu dữ liệu tùy chỉnh.
  • bpy.utils: Module này chứa các tiện ích hữu ích, như các hàm để đăng ký và gỡ đăng ký các classes, tải addons, và các tiện ích khác.
  • bpy.props: Đây là module chứa các định nghĩa cho các loại thuộc tính (properties) mà bạn có thể gán cho các classes của mình. Điều này hữu ích cho việc tạo giao diện người dùng tùy chỉnh và lưu trữ dữ liệu tùy chỉnh.

Cấu tạo Blender Addon

image.png Một Blender Addon sẽ có một Panel và một hoặc nhiều Operator. Trong đó, Panel là thành phần giao diện, cho phép người dùng tương tác qua cửa sổ nhập text, button, selectbox ...., Operator là các hành động cụ thể trong Blender ví dụ như tạo Object 3D, tạo animation, biến đổi dữ liệu ...

image.png

Ảnh ví dụ của một panel

Định nghĩa Operator: Mỗi operator là một class kế thừa từ 'bpy.types.Operator'.

class MyCustomOperator(bpy.types.Operator):
    bl_idname = "object.my_custom_operator"
    bl_label = "Do Something"

    def execute(self, context):
        # Code logic ở đây
        return {'FINISHED'}

Định nghĩa Panel: Mỗi Panel là một class kế thừa từ 'bpy.types.Panel'

class MyCustomPanel(bpy.types.Panel):
    bl_label = "My Custom Panel"
    bl_idname = "OBJECT_PT_my_custom_panel"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category = 'My Addon'

    def draw(self, context):
        layout = self.layout
        layout.operator("object.my_custom_operator")

Ví dụ cơ bản

Trong ví dụ này sẽ tạo một addon đơn giản để vẽ nội dung text được nhập từ Panel vào không gian 3D View của Blender.

1. Edit Source

Trước tiên, tạo một thư mục có tên "myaddon". Tạo một file simpleaddon.py trong thư mục myaddon. Thêm đoạn code như sau vào file simpleaddon.py:

import bpy

# Định nghĩa Operator
class SimpleTextOperator(bpy.types.Operator):
    bl_idname = "object.simple_text_operator"
    bl_label = "Draw Text"

    def execute(self, context):
        # Lấy text từ thuộc tính tùy chỉnh trong Scene
        text_to_draw = context.scene.simple_text_input
        # Tạo một text object mới
        bpy.ops.object.text_add(location=(0, 0, 0))
        text_obj = bpy.context.object
        text_obj.data.body = text_to_draw
        return {'FINISHED'}

# Định nghĩa Panel
class SimpleTextPanel(bpy.types.Panel):
    bl_label = "Simple Text Panel"
    bl_idname = "OBJECT_PT_simple_text"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category = 'Text Addon'

    def draw(self, context):
        layout = self.layout
        # Tạo trường nhập text
        layout.prop(context.scene, "simple_text_input")
        # Tạo nút để kích hoạt Operator
        layout.operator("object.simple_text_operator")

# Đăng ký và Gỡ đăng ký Addon
def register():
    bpy.utils.register_class(SimpleTextOperator)
    bpy.utils.register_class(SimpleTextPanel)
    bpy.types.Scene.simple_text_input = bpy.props.StringProperty(
        name="Text",
        default="Enter text here"
    )

def unregister():
    bpy.utils.unregister_class(SimpleTextOperator)
    bpy.utils.unregister_class(SimpleTextPanel)
    del bpy.types.Scene.simple_text_input

if __name__ == "__main__":
    register()

# Thông tin Addon
bl_info = {
    "name": "Simple Text Addon",
    "author": "Your Name",
    "version": (1, 0),
    "blender": (4, 0, 0),
    "description": "Draw text in Blender",
    "category": "Object",
}

Trong đoạn code trên, bạn có thể thấy các thành phần cơ bản của một Blender Addon được định nghĩa bao gồm một operator (SimpleTextOperator) và một panel (SimpleTextPanel). Lưu ý: Sau khi đinh nghĩa xong các Operator và Panel, bạn cần register class để Blender có thể sử dụng các class đó. Bước register class được thực hiện trong hàm register như ở trên.

2. Import to Blender Để Import Addon vừa tạo vào Blender, bạn mở Ứng dụng Blender, vào mục Edit > Preferences > Add-ons, chọn Install, và tìm file simpleaddon.py

image.png

Sau khi tên của Addon hiện trong list danh sách, bạn click chọn để kích hoạt nó.

image.png

Sau bước trên, một giao diện panel xuất hiện ở trên cửa sổ blender, và chúng ta có thể sử dụng nó:

image.png

Hình ảnh kết quả test: image.png

3. Package

Với các addon phức tạp gồm nhiều file, folder, việc đóng gói là cần thiết để người dùng có thể dễ dàng cài đặt và sử dụng. VIệc đóng gói rất đơn giản, bạn chỉ cần nén thư mục dự án đã tạo thành file .zip là hoàn tất, Khi Install vào Blender, bạn thực hiện giống như bước số 2, Blender sẽ tự unzip và install addon.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí