跳轉至內容

Blender 3D:從新手到專業/高階教程/Python 指令碼/簡介

來自華夏公益教科書

Python 是一種功能強大、高階、動態的語言。Blender 2.67 中使用的 Python 版本是 3.3。如果您不熟悉 Python,請先閱讀 Python 書籍。如果您熟悉舊版本的 Python (2.x),此頁面 總結了 3.x 中的新增內容。

如果您熟悉舊版 Blender 中的 Python 指令碼,請注意 2.5x/2.6x 是完全不同的;舊的 Blender 模組已不存在。許多功能現在可以透過 bpy 模組獲得,但不要期望完全的 1:1 對應關係。

Blender 指令碼入門

[編輯 | 編輯原始碼]

開啟一個新的預設 Blender 文件。如果您沒有自定義設定,底部將有一個時間軸 視窗;將其更改為 Python 控制檯 。也許可以增加它的高度,以便您可以一次看到更多行。

首先,讓我們找出文件中存在哪些物件。在“>>>”提示符下,鍵入

bpy.data.objects

您應該會看到響應

<bpy_collection[3], BlendDataObjects>

這實際上並沒有那麼有資訊量。實際上,您這裡有一個迭代器;要檢視其內容,只需執行通常的 Python 操作,將其轉換為列表。嘗試輸入以下內容

list(bpy.data.objects) #or bpy.data.objects[:]

這次響應應該是

[bpy.data.objects["Camera"], bpy.data.objects["Cube"], bpy.data.objects["Lamp"]]

這向您展示瞭如何在 3D 檢視視窗中引用三個預設物件。

讓我們獲取對 Cube 物件的引用,以便更方便地訪問它:鍵入

Cube = bpy.data.objects["Cube"]

現在讓我們嘗試查詢其一個屬性的值:鍵入

Cube.delta_location

您應該會看到響應

Vector((0.0, 0.0, 0.0))

Vector 型別來自 Blender 提供的 mathutils 模組。但與 bpy 不同,它不會自動匯入到 Python 控制檯中。因此,讓我們將其匯入以供後續使用:鍵入

import mathutils

好的,現在讓我們嘗試更改預設 Cube 的位置:鍵入

Cube.delta_location += mathutils.Vector((1, 1, 1))

(請注意雙括號:mathutils.Vector 接受一個引數,它是一個 X、Y 和 Z 座標值的元組。)

當您按下  ENTER  時,您是否在觀看 3D 檢視?您應該會看到立方體跳到另一個位置。要使其再次移動,請按  UPARROW  將上面的命令帶回來,以便您可以使用  ENTER  再次執行它。這樣做後,立方體將像以前一樣再跳一步。就這樣——您正在編寫指令碼!

bpy 模組

[編輯 | 編輯原始碼]

bpy 模組的內容分為多個子模組,其中包括

  • bpy.data — 這裡您會找到當前文件的內容。
  • bpy.types — 有關 bpy.data 中物件型別的詳細資訊。
  • bpy.ops運算子執行 Blender 的實際功能;這些可以附加到熱鍵、選單項和按鈕。當然,它們也可以從指令碼中呼叫。當您編寫外掛指令碼時,它通常會定義新的運算子。每個運算子必須有一個唯一的名稱。
  • bpy.context — 包含設定,例如當前的 3D 模式、哪些物件被選中等等。也可以透過全域性變數 C 在控制檯視窗中訪問。
  • bpy.props — 用於定義屬性的函式。這些允許您的指令碼將自定義資訊附加到場景,例如使用者可以透過介面元素調整這些資訊來控制指令碼的行為。

mathutils 模組

[編輯 | 編輯原始碼]

mathutils 模組定義了幾個重要的類,這些類在 Blender API 的其餘部分中被大量使用。

  • Vector:表示 2D 或 3D 座標。
  • Matrix:表示任何型別的線性變換的最通用方式。
  • Euler:一種直接的方式,將旋轉表示為一組尤拉角,尤拉角是繞 X、Y 和 Z 軸的旋轉角。易於出現著名的陷阱,例如 萬向節鎖
  • Quaternion:從表面上看,這是一種更抽象的數學方法,用於表示旋轉。但實際上,它具有許多很好的特性,例如沒有萬向節鎖,並且在兩個任意旋轉之間插值更平滑。後者在角色動畫中尤為重要。
  • Color:表示 RGB 顏色,並轉換為/從 HSV 空間(沒有 alpha 通道)。

另請參閱

[編輯 | 編輯原始碼]
華夏公益教科書