Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

3D 簡介

創造一個 3D 遊戲是具有挑戰性的。多了額外的 Z 軸使得許多有助於使製作 2D 遊戲變得簡單的常用技術不再起作用。為了幫助習慣這,值得一提的是,Godot 在 2D 和 3D 中使用了類似的API。大多數的節點都是相同的,並且存在於 2D 和 3D 版本中。事實上,可以看看 3D 平台遊戲教學或 3D 動力學角色教學,這些教學大部分與 2D 遊戲相同。

在 3D 中,數學比在 2D 中稍微複雜一些,因此查看 wiki 中的 向量數學 (這是專門為遊戲開發人員建立的,而不是數學家或工程師)將有助於為您有效地開發 3D 遊戲。

Node3D 節點

Node2D 是 2D 的基礎節點。 Control 是所有 GUI 的基礎節點。同理,3D 引擎使用 Spatial 節點來處理所有 3D 內容。

備註

請注意,從 Godot 4 開始,「空間」節點現在稱為「Node3D」。任何對「空間」節點的 Godot 3.x 引用均指 Godot 4 中的「Node3D」。

../../_images/tuto_3d1.png

Spatial節點有一個局部變換(local transform),它是相對於父節點的(只要父節點也是 或者繼承自 Spatial 型別)。這個變換(transform)可以以 4×3 的 Transform 形式存取,也可以以 3 個 Vector3 成員並分別代表位置、歐拉旋轉(X、Y、Z 角度)和縮放的形式訪問。

../../_images/tuto_3d2.png

3D 內容

2D 中載入圖像內容和繪圖都非常直觀,3D 則有所不同,會稍微困難一些。3D內容需要使用特殊的 3D 工具(通常稱為數位內容建立工具或Digital Content Creation工具,簡稱DCC)來建立,並匯出成可被 Godot 匯入的交換文件格式。這是必需的,因為 3D 格式不像圖像那樣標準化。

手動製作的模型(使用 3D 建模軟體)

有兩種管道可以匯入 3D 模型到 Godot 中。第一種是最常見的一種,是通過 匯入 3D 場景,它允許匯入整個場景(就像它們在DCC中呈現的那樣),包括動畫、骨架綁定、混合形狀等。

第二種管道是通過匯入簡單的 .OBJ檔作為網格資源,然後可以將其放入 MeshInstance 節點中顯示。

生成的幾何體

通過直接使用 ArrayMesh 資源可以建立自定義幾何體。只需要建立陣列並使用 ArrayMesh.add_surface_from_arrays(),他提供了一個更直接的 API 和幫助工具,用於索引、生成法線和切線等。

在任何情況下,此方法都適用於生成靜態幾何體(不會經常更新的模型),因為建立頂點陣列並將它們提交給 3D API 會產生顯著的性能成本。

即時幾何體

If, instead, you need to generate simple geometry that will be updated often, Godot provides a special ImmediateMesh resource that can be used in a MeshInstance3D node. This provides an OpenGL 1.x-style immediate-mode API to create points, lines, triangles, etc.

3D環境中的2D

雖然 Godot 包含強大的 2D 引擎,但許多型別的遊戲在 3D 環境中使用 2D 效果。通過使用不旋轉的固定相機(正交或透視),可以使用諸如 Sprite3DAnimatedSprite3D 等節點來建立混合了具有3D背景,更逼真的視差,光照/陰影效果等的 2D 遊戲。

當然,缺點是與普通2D相比增加了複雜性並降低了性能,並且缺乏以像素製作時的參考。

環境

除了編輯場景之外,編輯環境通常也很常見。 Godot 提供了一個 WorldEnvironment 節點,該節點允許更改背景顏色、模式(如放置一個天空盒時那樣),並應用多種型別的內建後處理效果。環境也可以在相機中被覆蓋。

3D 視窗

編輯 3D 場景可以在 3D 分頁中完成。此分頁可以手動選擇,但在選擇 Spatial 節點時會自動啟用。

../../_images/tuto_3d3.png

預設的3D場景導覽控制類似於 Blender(旨在在免費軟體工作流程中具有某種一致性),但在編輯器設定中也包含了自定義滑鼠按鈕和行為的選項,能使編輯器操作可像其他的工具:

../../_images/tuto_3d4.png

座標系

Godot 在 3D 中使用的都是 `公制(metric)<https://zh.wikipedia.org/wiki/%E5%85%AC%E5%88%B6>`__ ,1 個單位等於 1 公尺。物理和其他區域都針對這個進行了調整。因此,嘗試使用不同的比例通常是個壞主意(除非您知道自己在做什麼)。

使用 3D 素材時,最好使用正確的比例(將 DCC 設定為公制)。 Godot 允許在匯入後縮放,雖然這在大多數情況下都有效,但在極少數情況下,它可能會在渲染或物理等精細領域引入浮點精度問題(會出現毛刺或失真)。所以請確保藝術家始終以正確的比例工作!

Y座標用於 "向上 ", 但對於大多數需要對齊的物體(如燈光, 相機, 膠囊碰撞體, 載具等),Z軸用作" 指向"方向. 這個約定大致意味著:

  • X 是兩邊

  • Y 是上/下

  • Z 是前/後

請參閱此圖表與其他 3D 軟體進行比較:

3D座標系對比圖

圖片來源:「Freya Holmér <https://twitter.com/FreyaHolmer>」__

空間與操縱小工具

在 3D 視圖中移動物體是通過操縱器小工具完成的。每個軸用一種顏色表示:紅、綠、藍分別代表 X、Y、Z。這種慣例也適用於網格和其他小工具(也適用於著色器語言、Vector3、Color 等元件的順序)。

../../_images/tuto_3d5.png

一些有用的鍵盤綁定:

  • 在移動, 縮放或旋轉時, 按 Ctrl 鍵, 可進行吸附放置或旋轉.

  • 要將視合集中在所選物件上, 按 F.

Using Blender-style transform shortcuts

Since Godot 4.2, you can enable Blender-style shortcuts for translating, rotating and scaling nodes. In Blender, these shortcuts are:

  • G for translating

  • R for rotating

  • S for scaling

After pressing a shortcut key while focusing on the 3D editor viewport, move the mouse or enter a number to move the selected node(s) by the specified amount in 3D units. You can constrain movement to a specific axis by specifying the axis as a letter, then the distance (if entering a value with the keyboard).

For instance, to move the selection upwards by 2.5 units, enter the following sequence in order (Y+ is upwards in Godot):

G-Y-2-.-5-Enter

To use Blender-style transform shortcuts in Godot, go to the Editor Settings' Shortcuts tab, then in the Spatial Editor section:

  • Bind Begin Translate Transformation to G.

  • Bind Begin Rotate Transformation to R.

  • Bind Begin Scale Transformation to S.

  • Finally, unbind Scale Mode so that its shortcut won't conflict with Begin Rotate Transformation.

視圖選單

視圖選項由視口工具列中的“視圖”功能表控制。

../../_images/tuto_3d6.png

你可以通過這個功能表在編輯器的 3D 視圖中隱藏小工具:

../../_images/tuto_3d6_1.png

要隱藏特定型別的小工具,你可以在“視圖”功能表中把它們切換掉。

../../_images/tuto_3d6_2.png

預設環境

從專案管理器中建立時,3D環境具有預設的天空.

../../_images/tuto_3d8.png

鑒於基於物理的渲染工作方式, 建議總是使用一個預設環境, 以便為物件提供間接和反射光.

攝影機

無論在 3D 空間中放置多少物體,除非在場景中新增了 Camera,否則不會顯示任何內容。相機可以在正交或透視投影中工作:

../../_images/tuto_3d10.png

相機與父視口或其祖先視口相關聯, 且僅顯示到他們上面. 由於場景樹的根是一個視口, 預設情況下會在其上顯示相機, 但如果需要子視口(作為渲染目標或畫中畫), 則需要自己的子相機才能顯示.

../../_images/tuto_3d11.png

處理多台相機時, 每個視口都遵循以下規則:

  • 如果場景樹中沒有相機,則第一個進入的相機將成為活躍相機。進入場景的其他相機將被忽略(除非它們被設定為 current)。

  • 如果相機設定了“current”屬性,則無論場景中是否有其他相機,都會使用它。如果該屬性已設定,它將變為活動狀態,取代之前的相機。

  • 如果活動相機離開了場景樹,則按樹形順序排列的第一台相機將取代它。

燈光

背景環境發出一些出現在表面的環境光。儘管如此,如果場景中沒有放置任何光源,除非背景環境非常明亮,否則場景會顯得相當暗。

大多數室外場景都有定向光(太陽或月亮),而室內場景通常有多個位置光(燈、手電筒等)。有關在 Godot 中設定燈光的更多信息,請參閱 doc_lights_and_shadows`。