Blender 3D:新手到專業/高階教程/Blender 2.5x 指令碼/簡介
| 此頁面記錄了 Blender 2.5x 版本,該版本仍在開發中。 此處描述的資訊隨時可能更改。 |
Python 是一種功能強大的高階動態語言。Blender 2.5x 中使用的 Python 版本為 3.1。如果您不熟悉 Python,請從本教程開始(位於python.org)。如果您熟悉舊版 (2.x) Python,此頁面總結了 3.x 中的新增內容。
如果您熟悉舊版 Blender 中的 Python 指令碼編寫,請注意 2.5x 完全不同;舊版Blender模組已消失。現在可以透過bpy模組獲得大部分功能,但不要期望完全一一對應。
開啟一個新的預設 Blender 文件。如果您沒有自定義設定,底部會顯示一個時間軸視窗;將其更改為 Python 控制檯。也許可以增加其高度,以便一次檢視更多行。
首先,讓我們找出文件中存在哪些物件。在“>>>”提示符下,鍵入
bpy.data.objects
您應該會看到以下響應
<bpy_collection[3], BlendData.objects>
這實際上並沒有提供太多資訊。實際上,您這裡得到的是一個迭代器;要檢視其內容,只需執行通常的 Python 操作並將其轉換為列表即可。嘗試輸入以下內容
list(bpy.data.objects) #or being lazy: 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.delta_location += mathutils.Vector((1, 1, 1))
(請注意雙括號mathutils.Vector接受一個單個引數,該引數是 X、Y 和 Z 座標值的元組。)
當您按下 ENTER 時,您是否在觀看 3D 檢視?您應該會看到立方體跳到另一個位置。要使其再次移動,請按 UPARROW 調出上述命令,以便您可以使用 ENTER 再次執行它。執行此操作後,立方體將像之前一樣再跳一步。就是這樣——您正在編寫指令碼!
該bpy模組的內容分為幾個子模組(實際上是類,但沒關係),其中包括
- bpy.data— 這是您查詢當前文件內容的地方。
- bpy.types— 有關bpy.data.
- bpy.ops中物件型別的資訊— 運算子執行 Blender 的實際功能;這些運算子可以附加到熱鍵、選單項和按鈕上。當然,它們也可以從指令碼中呼叫。當您編寫附加元件指令碼時,它通常會定義新的運算子。每個運算子都必須具有唯一的名稱。
- bpy.context— 包含當前 3D 模式、哪些物件被選中等設定。還可以透過全域性變數C.
- 在控制檯視窗中訪問bpy.props
該mathutils模組
— 用於定義屬性的函式。這些函式允許您的指令碼將自定義資訊附加到場景,例如使用者可以透過介面元素調整這些資訊以控制指令碼的行為。- Vector定義了幾個重要的類,這些類在 Blender API 的其餘部分中大量使用。
- Vector: 2D 或 3D 座標的表示形式。
- Matrix: 表示任何型別線性變換的最通用方法。
- Euler: 一種表示旋轉的簡單方法,作為一組尤拉角,這僅僅是圍繞 X、Y 和 Z 軸的旋轉角度。容易出現諸如萬向節鎖等眾所周知的缺陷。
- Quaternion: 從表面上看,這是一種更抽象的數學方法來表示旋轉。但實際上,它具有許多良好的特性,例如沒有萬向節鎖,以及在兩個任意旋轉之間進行更平滑的插值。後者在角色動畫中尤為重要。