3D 簡介
創造一個 3D 遊戲是具有挑戰性的。多了額外的 Z 軸使得許多有助於使製作 2D 遊戲變得簡單的常用技術不再起作用。為了幫助習慣這,值得一提的是,Godot 在 2D 和 3D 中使用了類似的API。大多數的節點都是相同的,並且存在於 2D 和 3D 版本中。事實上,可以看看 3D 平台遊戲教學或 3D 動力學角色教學,這些教學大部分與 2D 遊戲相同。
Godot 第三人稱射擊(TPS)範例,可於 Github 儲存庫 或 資源庫 取得。
在 3D 中,數學比 2D 稍微複雜一些。若想了解專為遊戲開發者(而非數學家或工程師)編寫的相關數學,請參考 向量數學 及 使用 3D 變換。
3D 工作區
3D 場景的編輯是在 3D 工作區進行。你可以手動切換到此工作區,當選取 Node3D 節點時也會自動切換。
和 2D 工作區類似,工作區選擇器下方的分頁可用來切換目前開啟的場景,或點選加號(+)按鈕建立新場景。左側與右側的工具欄也同樣來自 編輯器介紹。
在場景選擇器下方可以看到主工具列,主工具列下方則是 3D 檢視區(Viewport)。
主工具列
主工具列中有些按鈕和 2D 工作區相同。將滑鼠游標停留在按鈕上一秒,會顯示其快捷鍵與簡要說明。有些按鈕配合其他按鍵還有額外功能。以下依序說明各按鈕的主要用途與預設快捷鍵:
選取模式 ( Q ):可於檢視區中選取節點。左鍵點擊節點即可選擇,按住左鍵拖曳可框選多個節點。按住 Shift 點選可加入選取,按住 Shift 再次點擊已選節點則取消選取。在此模式下,可使用操作工具進行移動或旋轉。
移動模式 ( W ):啟用所選節點的移動(平移)模式。詳情請見 空間與操縱小工具 。
旋轉模式 ( E ):啟用所選節點的旋轉模式。詳情請見 空間與操縱小工具。
縮放模式 ( R ):啟用所選節點的縮放,並於各軸顯示縮放操作工具。詳情請見 空間與操縱小工具。
顯示點擊位置可選節點清單:如其名,當點擊處有多個節點時,會以右鍵選單方式列出可選節點清單。
鎖定 ( Ctrl + L ):將選取的節點鎖定,防止在檢視區中被選取或移動。再按一次按鈕(或使用 Ctrl + Shift + L )可解除鎖定。被鎖定的節點僅能於場景樹中選取,場景樹中會在節點名稱旁顯示鎖頭圖示,點擊鎖頭可直接解鎖。
群組選取節點 (Ctrl + G):將選取的節點群組化,方便同時操作。再次用 Ctrl + G 或在場景樹點擊解除群組按鈕即可解散。
尺規模式 ( M ):啟用後可於場景中點擊並拖曳來測量距離(單位:公尺)。
使用區域座標系 ( T ):啟用時,操作工具會依據目前節點的旋轉角度顯示,而非 全域檢視座標軸。
啟用吸附 ( Y ):啟用時,移動與旋轉會對齊網格。也可在操作時暫時按住 Ctrl 啟用吸附。吸附設定說明請見下方。
切換預覽太陽光:若場景中沒有 DirectionalLight3D,可啟用預覽太陽光作為光源。詳見 預覽環境與光源。
切換預覽環境:若場景中沒有 WorldEnvironment,可啟用預覽環境作為暫用顯示。詳見 預覽環境與光源。
編輯太陽與環境設定(三個點):開啟選單以調整預覽太陽光與環境設定。詳見 預覽環境與光源。
變形選單:包含三個選項:
吸附物件到底面:將物件吸附至實體地面。
變形對話框:開啟對話視窗以手動調整變形參數(平移、旋轉、縮放與矩陣)。
吸附設定:可調整平移、旋轉(角度)與縮放(百分比)的吸附設定。
檢視選單:可調整檢視選項並啟用額外檢視區:
此選單中也可顯示/隱藏網格(預設為 1x1 公尺)與原點(藍、綠、紅三軸交會處)。另外,也能切換顯示特定類型的操作工具。
眼睛圖示開啟代表小工具可見,關閉則為隱藏。半開則表示即使被不透明物體遮住也可見。
於檢視選單點擊 設定 可開啟視窗,變更 垂直視野(VFOV)*(單位:度)、*Z-近 與 Z-遠 值。
在檢視選單旁,可能會出現額外按鈕。章節開頭的工具列圖示中,出現了 Mesh 按鈕,是因為選取了 MeshInstance3D 節點。這些選單提供針對特定節點或選取區的快速操作與工具。
座標系
Godot 在 3D 中都使用 公制系統 ,1 單位等於 1 公尺。物理和其他領域都針對此比例進行調整。因此,除非您知道自己在做什麼,否則嘗試使用不同的比例通常是個壞主意。
使用 3D 素材時,最好使用正確的比例(將 DCC 設定為公制)。 Godot 允許在匯入後縮放,雖然這在大多數情況下都有效,但在極少數情況下,它可能會在算繪或物理等精細領域引入浮點精度問題(會出現毛刺或失真)。所以請確保藝術家始終以正確的比例工作!
Y座標用於 "向上 ", 但對於大多數需要對齊的物體(如燈光, 相機, 膠囊碰撞體, 載具等),Z軸用作" 指向"方向. 這個約定大致意味著:
X 是兩邊
Y 是上/下
Z 是前/後
請參閱此圖表與其他 3D 軟體進行比較:
圖片來源:「Freya Holmér <https://twitter.com/FreyaHolmer>」__
空間與操縱小工具
在 3D 檢視中,移動、旋轉、縮放物件都是透過操作工具完成。每個軸對應一種顏色:紅色、綠色、藍色分別代表 X、Y、Z。這個慣例同樣適用於網格與其他小工具(也適用於著色器語言中 Vector3、Color 等元件的順序)。
一些有用的鍵盤綁定:
在移動、縮放或旋轉時,按住 Ctrl 鍵可啟用吸附對齊。
要將視合集中在所選物件上, 按 F.
在檢視區中,按住箭頭可沿單一軸移動物件;按住弧線可旋轉物件;若要鎖定某一軸、在其餘兩軸自由移動,則可按住並拖曳彩色矩形區域。
將變形模式從 選取模式 切換到 縮放模式 後,箭頭會變成方塊,可拖曳方塊來縮放物件,操作方式類似移動。
使用 Blender 風格的變形快捷鍵
自 Godot 4.2 起,你可以啟用 Blender 風格的節點平移、旋轉與縮放快捷鍵。在 Blender 中,這些快捷鍵分別為:
G 平移
R 旋轉
S 縮放
在 3D 編輯檢視區中按下快捷鍵後,可用滑鼠移動或直接輸入數字,讓所選節點在 3D 單位下移動指定距離。你也可以輸入軸向字母來限制移動方向,再接著輸入數值(如用鍵盤輸入時)。
例如,若要將選取物件向上移動 2.5 單位,依序輸入以下指令(Godot 中 Y+ 為向上):
G-Y-2-.-5-Enter
如要在 Godot 使用 Blender 風格變形快捷鍵,請到編輯器設定的 快捷鍵 分頁,在空間編輯器(Spatial Editor)區段進行如下設定:
將 開始平移變形 綁定至 G。
將 開始旋轉變形 綁定至 R。
將 開始縮放變形 綁定至 S。
最後,請解除 縮放模式 的快捷鍵綁定,避免與 開始旋轉變形 衝突。
小訣竅
更多快捷鍵請見 3D / Spatial 編輯器 頁面。
Node3D 節點
Node2D 是 2D 的基礎節點。 Control 是所有 GUI 的基礎節點。同理,3D 引擎使用 Node3D 節點來處理所有 3D 內容。
Node3D 節點有一個本地轉換(local transform),它是相對於父節點的(只要父節點也是 或繼承自 Node3D 類型)。這個轉換可以作為 3×4 的 Transform3D 物件存取,或透過三個 Vector3 成員分別代表位置、歐拉旋轉(X、Y、Z 角度)與縮放。
3D 內容
2D 中載入圖像內容和繪圖都非常直觀,3D 則有所不同,會稍微困難一些。3D內容需要使用特殊的 3D 工具(通常稱為數位內容建立工具或Digital Content Creation工具,簡稱DCC)來建立,並匯出成可被 Godot 匯入的交換文件格式。這是必需的,因為 3D 格式不像圖像那樣標準化。
生成的幾何體
通過直接使用 ArrayMesh 資源可以建立自定義幾何體。只需要建立陣列並使用 ArrayMesh.add_surface_from_arrays() 函式即可。也可以使用輔助類 SurfaceTool,他提供了一個更直接的 API 和幫助工具,用於索引、生成法線和切線等。
在任何情況下,此方法都適用於生成靜態幾何體(不會經常更新的模型),因為建立頂點陣列並將它們提交給 3D API 會產生顯著的性能成本。
備註
想了解如何在 Godot 內部或使用外部工具進行原型設計,請參考 使用 CSG 設計關卡原型。
即時幾何體
如果你需要產生會經常更新的簡單幾何體,Godot 提供了特殊的 ImmediateMesh 資源,可用於 MeshInstance3D 節點。它提供類似 OpenGL 1.x 即時模式的 API,可用來建立點、線、三角形等。
3D環境中的2D
雖然 Godot 包含強大的 2D 引擎,但許多型別的遊戲在 3D 環境中使用 2D 效果。通過使用不旋轉的固定相機(正交或透視),可以使用諸如 Sprite3D 和 AnimatedSprite3D 等節點來建立混合了具有3D背景,更逼真的視差,光照/陰影效果等的 2D 遊戲。
當然,缺點是與普通2D相比增加了複雜性並降低了性能,並且缺乏以像素製作時的參考。
環境
除了編輯場景之外,編輯環境通常也很常見。 Godot 提供了一個 WorldEnvironment 節點,該節點允許更改背景顏色、模式(如放置一個天空盒時那樣),並應用多種型別的內建後處理效果。環境也可以在相機中被覆蓋。
預覽環境與光源
預設情況下,若 3D 場景中沒有 WorldEnvironment 節點,或沒有 DirectionalLight3D,編輯器會自動啟用預覽環境與光源。
預覽光源與環境僅會在編輯器中顯示,執行場景或匯出專案時並不會影響實際內容。
你可以從頂部選單點擊對應圖示,來啟用或關閉預覽光源與環境。
這些圖示旁的三個點下拉選單,可用來調整預覽環境與光源的屬性(啟用時有效)。
同一個專案下,所有場景都共用相同的預覽太陽與環境設定,所以請僅針對所有需要預覽光源與環境的場景做適用的調整。
攝影機
無論在 3D 空間中放置了多少物件,除非也將 Camera3D 節點 加入到場景中,否則將不會顯示任何內容。攝影機可以使用正交或透視投影:
相機與父視口或其祖先視口相關聯, 且僅顯示到他們上面. 由於場景樹的根是一個視口, 預設情況下會在其上顯示相機, 但如果需要子視口(作為算繪目標或畫中畫), 則需要自己的子相機才能顯示.
處理多台相機時, 每個視口都遵循以下規則:
如果場景樹中沒有相機,則第一個進入的相機將成為活躍相機。進入場景的其他相機將被忽略(除非它們被設定為 current)。
如果相機設定了“current”屬性,則無論場景中是否有其他相機,都會使用它。如果該屬性已設定,它將變為活動狀態,取代之前的相機。
如果活動相機離開了場景樹,則按樹形順序排列的第一台相機將取代它。
燈光
背景環境發出一些出現在表面的環境光。儘管如此,如果場景中沒有放置任何光源,除非背景環境非常明亮,否則場景會顯得相當暗。
大多數室外場景具有一個定向光 (太陽或月亮),而室內場景通常有數個點光源 (燈、火把等)。請參閱 3D 燈光與陰影 以獲取更多關於在 Godot 中設定光源的資訊。