Blender3D PipelineGLBPythonThree.js

Blender 是什麼?從一人的內部工具,到全世界共用的 3D 創作平台

··閱讀約 6 分鐘

很多人第一次打開 Blender,會先被密密麻麻的按鈕嚇到。那些介面串起的是一條完整的 3D 製作管線:從空白場景開始,做出模型、材質、動畫與燈光,最後算成影片,或交給網站與遊戲即時呈現。

誰做的?從 NeoGeo 的內部工具開始

Blender 的起點可以追到荷蘭開發者 Ton Roosendaal。他在動畫工作室 NeoGeo 工作時,為團隊打造一套自有 3D 工具;最早的 Blender 原始檔日期是 1994 年 1 月 2 日。它起初是工作室每天拿來製作動畫的內部軟體,後來才走向公開。

公司後來結束營運,Blender 的未來一度不確定。2002 年成立的 Blender Foundation 發起 Free Blender 募資,社群在七週內籌到 10 萬歐元,買回原始碼並以 GNU GPL 開源。這段歷史很重要:Blender 不是先有龐大企業,再推出免費版;它是被使用者一起救回來的工具。

Blender 能做什麼?

建模是最容易理解的一段。你可以從方塊開始拉出家具、建築與角色,也能像捏黏土一樣雕刻高細節表面。接著是 UV、材質與貼圖,決定木頭、金屬、皮膚或玻璃看起來如何。

角色需要骨架綁定與動畫;布料、煙霧、流體和破壞效果可以交給模擬。Cycles 和 Eevee 負責算圖,Compositor 處理畫面合成,Video Sequencer 能剪輯影片,Grease Pencil 則讓 2D 線條和 3D 場景放在同一個空間。幾何節點與 Python API 還能把重複工作變成規則或程式。

KeepOnFirst 3D Studio 動漫風格場景的前期概念圖
本站 3D Studio 的前期概念圖。Blender 的工作,是把視覺方向整理成能被網站即時載入的場景資產。

有哪些作品真的用 Blender 做?

Blender Foundation 長期用 Open Movies 驗證軟體,從 Elephants Dream、Big Buck Bunny、Sintel 到 Spring,製作過程和素材也回到社群。這些短片不只展示畫面,同時逼出角色、毛髮、渲染和資產管理等實際需求。

它也早已走出開源展示片。Blender Foundation 的 2022 年報記錄,西班牙動畫長片 Unicorn Wars 全片以 Blender 製作,印度電影 RRR 也有大量視覺特效工作使用 Blender。獨立創作者、小型工作室到大型製作,都可能把它放進流程的不同位置。

它不是什麼?

Blender 不是素材庫,打開後不會自動出現完整世界;它比較像一間空的工作室。它也不是主要拿來發布網站或執行遊戲的引擎。雖然能做互動預覽與影片,但真正把內容送到玩家或讀者面前,通常仍由 Three.js、Unity、Unreal 或其他 runtime 負責。

這也解釋了為什麼 Blender 和 Three.js 常一起出現。Blender 負責做內容,Three.js 負責在瀏覽器裡即時播放與互動。中間最常用的交接格式是 glTF;如果把模型、材質、貼圖與動畫包成單一二進位檔,就是副檔名 .glb 的 GLB。

從 Blender 到網站:一條可重做的資產管線

本站的 3D Studio 不是手動把幾十個物件逐一匯出。我把場景生成、命名、材質設定與 GLB 匯出寫進 Python。需要修改時,重新執行腳本就能得到同樣結構的新資產;網站只要載入固定路徑,不必跟著改一串物件。

這種做法特別適合產品變體、城市資料、批次縮圖和 CI。Blender 可以不開視窗,在背景模式讀取 .blend、執行 Python、輸出 GLB 或預覽圖。所謂 Headless 不是另一個版本,只是把原本要用滑鼠完成的流程交給命令列。

看看 Blender 資產在本站 Three.js 場景裡如何呈現

Blender Headless 匯出 GLB Starter

先準備 source.blend 和 export_glb.py,接著用背景模式執行。雙破折號後面的值不會被 Blender 自己解析,可以安全地傳給 Python 腳本。

bash
blender --background source.blend --python export_glb.py -- build/scene.glb
python
import bpy
import sys
from pathlib import Path

args = sys.argv[sys.argv.index('--') + 1:]
output = Path(args[0]).resolve()
output.parent.mkdir(parents=True, exist_ok=True)

bpy.ops.object.select_all(action='SELECT')
bpy.ops.export_scene.gltf(
    filepath=str(output),
    export_format='GLB',
    use_selection=True,
    export_apply=True,
    export_cameras=False,
    export_lights=False,
)

print(f'GLB={output}')
print(f'BYTES={output.stat().st_size}')

實際上線前還要檢查貼圖是否有打包、材質是否符合 glTF、動畫是否需要輸出、座標方向是否正確,以及檔案大小是否符合網站預算。Headless 自動化的價值不只是省一次點擊,而是讓這些規則每次都能被重複驗證。

初學者應該從哪裡開始?

先別急著做完整角色。用一個方塊練習移動、旋轉、縮放,再做簡單材質和燈光,最後匯出 GLB 放進瀏覽器。當你能從 Blender 完整走到 Three.js,再回頭學雕刻、骨架或幾何節點,會比較知道每個功能解決什麼問題。

Blender 的功能確實龐大,但不需要一次學完。先選一條想完成的輸出路徑,比照著功能表逐項學習更容易留下成果。

上一篇:Three.js 是什麼?從瀏覽器 3D 到捲動文章

參考資料