跳轉至內容

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

來自 Wikibooks,開放世界中的開放書籍


Python 是一種功能強大的高階動態語言。Blender 2.5x 中使用的 Python 版本為 3.1。如果您不熟悉 Python,請從本教程開始(位於python.org)。如果您熟悉舊版 (2.x) Python,此頁面總結了 3.x 中的新增內容。

如果您熟悉舊版 Blender 中的 Python 指令碼編寫,請注意 2.5x 完全不同;舊版Blender模組已消失。現在可以透過bpy模組獲得大部分功能,但不要期望完全一一對應。

Blender 指令碼入門

[編輯 | 編輯原始碼]

開啟一個新的預設 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模組的內容分為幾個子模組(實際上是類,但沒關係),其中包括

  • bpy.data— 這是您查詢當前文件內容的地方。
  • bpy.types— 有關bpy.data.
  • bpy.ops中物件型別的資訊— 運算子執行 Blender 的實際功能;這些運算子可以附加到熱鍵、選單項和按鈕上。當然,它們也可以從指令碼中呼叫。當您編寫附加元件指令碼時,它通常會定義新的運算子。每個運算子都必須具有唯一的名稱。
  • bpy.context— 包含當前 3D 模式、哪些物件被選中等設定。還可以透過全域性變數C.
  • 在控制檯視窗中訪問bpy.props

mathutils模組

— 用於定義屬性的函式。這些函式允許您的指令碼將自定義資訊附加到場景,例如使用者可以透過介面元素調整這些資訊以控制指令碼的行為。

[編輯 | 編輯原始碼]mathutils該模組

  • Vector定義了幾個重要的類,這些類在 Blender API 的其餘部分中大量使用。
  • Vector: 2D 或 3D 座標的表示形式。
  • Matrix: 表示任何型別線性變換的最通用方法。
  • Euler: 一種表示旋轉的簡單方法,作為一組尤拉角,這僅僅是圍繞 X、Y 和 Z 軸的旋轉角度。容易出現諸如萬向節鎖等眾所周知的缺陷。
  • Quaternion: 從表面上看,這是一種更抽象的數學方法來表示旋轉。但實際上,它具有許多良好的特性,例如沒有萬向節鎖,以及在兩個任意旋轉之間進行更平滑的插值。後者在角色動畫中尤為重要。

Color

: RGB 顏色的表示形式以及轉換為/從 HSV 空間的轉換(沒有 alpha 通道)。
華夏公益教科書