Up to date

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

Import configuration

Godot provides several ways to customize the imported data, such as the import dock, the advanced import setting dialog, and inherited scenes. This can be used to make further changes to the imported scene, such as adjusting meshes, adding physics information, and adding new nodes. You can also write a script that runs code at the end of the import process to perform arbitrary customization.

Note that, when applicable, modifying the original data should be preferred to configuring the scene after import. This helps minimize the differences between the 3D modeling application and the imported scene. See the Model export considerations and Node type customization using name suffixes articles for more information.

匯入工作流程

由於 Godot 只能儲存自己的場景格式(.tscn/.scn),Godot 無法儲存原始 3D 場景檔案(使用不同的格式)。這也是一種更安全的方法,因為它可以避免對原始檔案進行意外更改。

為了允許自訂場景及其材質,Godot 的場景匯入器允許關於資料匯入方式的不同工作流程。

在檔案系統 Dock 中找到腳本。

在檔案系統 Dock 中找到腳本。

此匯入過程可根據您的需求使用 3 個獨立的介面進行自訂:

  • 匯入 塢站,在檔案系統塢站中點選一次選擇 3D 場景後。

  • 進階匯入設定**對話框,可以透過雙擊檔案系統擴充座中的 3D 場景或按一下匯入擴充座中的 **進階... 按鈕來存取該對話框。這允許您在 Godot 中自訂每個物件的選項。

  • 匯入提示,這是新增到 3D 建模軟體中的物件名稱的特殊後綴。這允許您在 3D 建模軟體中自訂每個物件的選項。

對於基本自訂,使用匯入底座就足夠了。但是,對於更複雜的操作(例如基於每種材質定義材質覆蓋),您需要使用「進階匯入設定」對話方塊、匯入提示或可能同時使用兩者。

使用模組

在檔案系統擴充座中選擇 3D 場景後,可以在匯入擴充座中調整下列選項:

  • 根型別: 用作根節點的節點型別。建議使用從 Node3D 繼承的節點型別。否則,您將無法直接在 3D 編輯器中定位節點。

  • **根名稱:**匯入場景中根節點的名稱。在編輯器中實例化場景(或從檔案系統停靠欄拖放)時,這通常不明顯,因為在這種情況下根節點被重新命名以配對檔案名稱。

  • **套用根比例:**如果啟用,**根比例**將直接「套用」在網格和動畫上,同時將根節點的比例保持為預設「(1, 1, 1)」。這意味著如果您稍後在匯入的場景中新增子節點,它將不會縮放。如果停用,**根比例**將乘以根節點的比例。

網格

  • 確保切線: 如果選中,如果輸入網格沒有切線資料,則使用「Mikktspace <http://www.mikktspace.com/>`__ 產生頂點切線。如果可能,建議讓 3D 建模軟體在匯出時產生切線,而不是依賴此選項。正確顯示法線和高度貼圖以及需要切線的任何材質/著色器功能都需要切線。如果您不需要需要切線的材質特徵,則停用此功能可減少輸出檔案大小,並在來源 3D 檔案不包含切線的情況下加快匯入速度。

  • 產生 LOD: 如果選中,則會產生網格的較低細節變體,這些變體將顯示在遠處以提高渲染效能。並非所有網格體都受益於 LOD,特別是如果它們從未從遠處渲染。停用此功能可以減少輸出檔案大小並加快匯入速度。請參閱 doc_mesh_lod 以了解更多資訊。

  • 建立陰影網格: 如果選中,則可以在匯入時產生陰影網格。這可以透過在可能的情況下將頂點焊接在一起來優化陰影渲染,而不會降低品質。這反過來又減少了渲染陰影所需的記憶體頻寬。陰影網格產生目前不支援使用比來源網格更低的細節等級(但陰影渲染將在相關時使用 LOD)。

  • 在 3D 場景中配置網格體的全域照明模式<class_GeometryInstance3D_property_gi_mode>`。如果設定為 靜態光照貼圖,則將網格體的 GI 模式設為 靜態 並在匯入時產生 UV2 以進行光照貼圖烘焙 <doc_using_lightmap_gi>`。

  • 光照貼圖紋理像素大小: 僅當 光照烘焙 設定為 靜態光照貼圖 時才可見。控制烘焙光照貼圖上每個紋素的大小。較小的值會產生更精確的光照貼圖,但代價是更大的光照貼圖尺寸和更長的烘焙時間。

天空:

  • 使用命名皮膚: 如果選中,則使用命名:ref:Skins <class_Skin> 進行動畫。 class_MeshInstance3D 節點包含 3 個相關屬性:指向 Skeleton3D 節點的骨架 NodePath(通常為``..``)、網格和皮膚:

    • class_Skeleton3D 節點包含骨骼列表,其中包含名稱、姿勢和休息、名稱和父骨骼。

    • 網格是顯示網格所需的所有原始頂點資料。就網格而言,它知道如何對頂點進行權重繪製,並使用通常從 3D 建模軟體匯入的一些內部編號。

    • 皮膚包含將此網格物件綁定到此 Skeleton3D 上所需的資訊。對於 3D 建模軟體選擇的每一個內部骨骼 ID,它都包含兩件事。首先,一個矩陣,稱為綁定姿勢矩陣、逆綁定矩陣,簡稱 IBM。其次,皮膚包含每個骨骼的名稱(如果啟用了**使用命名皮膚**),或者骨骼在 Skeleton3D 列表中的索引(如果禁用了**使用命名皮膚**)。

總而言之,這些資訊足以告訴 Godot 如何使用 Skeleton3D 節點中的骨骼姿勢來渲染每個 MeshInstance3D 的網格。請注意,每個 MeshInstance3D 可以共享綁定,這在從 Blender 匯出的模型中很常見,或者每個 MeshInstance3D 可以使用單獨的 Skin 對象,這在從其他工具(例如 Maya)匯出的模型中很常見。

動畫

  • 匯入: 如果選中,則從 3D 場景匯入動畫。

  • FPS: 用於透過線性內插將動畫曲線烘焙為一系列點的每秒影格數。建議配置此值以符合您在 3D 建模軟體中用作基線的值。較高的值會導致更精確的動畫和快速的運動變化,但代價是檔案大小和記憶體使用量更大。由於插值,超過 30 FPS 通常不會有太大好處(因為動畫在更高的渲染影格速率下仍然會顯得平滑)。

  • 修剪: 如果沒有關鍵影格更改,則修剪動畫的開頭和結尾。這可以減少某些 3D 場景的輸出檔案大小和記憶體使用量,具體取決於其動畫軌道的內容。

  • **刪除不可變軌道:**刪除僅包含預設值的動畫軌道。這可以減少某些 3D 場景的輸出檔案大小和記憶體使用量,具體取決於其動畫軌道的內容。

Import Script

  • 路徑: 匯入腳本的路徑,可以在匯入過程完成後執行程式碼以進行自訂處理。請參閱 doc_importing_3d_scenes_import_script` 以了解更多資訊。

glTF

  • 嵌入紋理處理: 控制如何處理嵌入到 glTF 場景中的紋理。 放棄所有紋理**不會匯入任何紋理,如果您希望在 Godot 中手動設定材質,這會很有用。 **提取紋理 將紋理提取到外部圖像,從而縮小檔案大小並更好地控制匯入選項。 **嵌入為基礎通用**和**嵌入為未壓縮**將紋理嵌入到匯入的場景中,分別使用和不使用 VRAM 壓縮。

使用高級匯入設定對話方塊

你看到的第一個分頁是**場景**分頁。右側面板中的選項與“匯入”面板相同,但是你還可以看到 3D 預覽。按住滑鼠左鍵並拖動滑鼠就能夠旋轉 3D 預覽。縮放可以通過滑鼠滾輪調整。

高級匯入設定對話方塊(場景分頁)

高級匯入設定對話方塊(場景分頁)。作者:Modern Arm Chair 01 - Poly Haven

訊號與屬性

在**場景**分頁中,可以在左側的樹狀視圖中單獨選中構成場景的節點:

在高級匯入設定對話方塊(場景分頁)中選中節點

在高級匯入設定對話方塊(材質分頁)中選中節點

這樣就會出現針對節點的匯入選項:

  • **跳過匯入:**勾選後,該節點不會出現在最終匯入的場景中。啟用這個選項會禁用其他所有選項。

  • **生成 > 物理:**勾選後,會生成一個 PhysicsBody3D 父節點,碰撞形狀會作為該 MeshInstance3D 節點的*兄弟節點*。

  • 生成 > 導覽網格:**勾選後,會生成一個 NavigationRegion3D *子節點*用於進行:ref:`導覽 <doc_navigation_overview_3d>`。**Mesh + NavMesh 會保持原有網格可見,而 NavMesh Only 則只會匯入導覽網格(不帶視覺化表示)。NavMesh Only 應該在手動製作了用於導覽的簡化網格時使用。

  • 生成 > 遮擋器:**勾選後,會生成一個 OccluderInstance3D *兄弟節點*用於進行:ref:`遮擋剔除 <doc_occlusion_culling>`,會使用網格的幾何體作為遮擋器形狀的基礎。**Mesh + Occluder 會保持原有網格可見,而 Occluder Only 則只會匯入遮擋器(不帶視覺化表示)。Occluder Only 應該在手動製作了用於遮擋剔除的簡化網格時使用。

僅當啟用上述某些選項時,這些選項才可見:

  • 物理 > 身體型別: 僅當啟用 生成 > 物理 時才可見。控制應建立的PhysicsBody3D。 Static 建立 StaticBody3D,Dynamic 建立 RigidBody3D,Area 建立 Area3D。

  • 物理 > 形狀型別: 僅在啟用 生成 > 物理 時才可見。 修剪網格**允許精確的每個三角形碰撞,但它只能與**靜態**主體型別一起使用。其他型別不太精確,可能需要手動配置,但可以用於任何體型。對於靜態關卡幾何體,請使用 **Trimesh。對於動態幾何體,如果可能的話使用原始形狀以獲得更好的性能,或者如果形狀較大且複雜,則使用凸分解模式之一。

  • 分解 > 進階: 僅當 物理 > 形狀型別分解凸面 時才可見。如果選中,則允許調整高級分解選項。如果停用,則只能調整預設的**精度**(通常就足夠了)。

  • **分解>精確度:**僅當**物理>形狀型別**為**分解凸**時才可見。控制用於凸分解的精度。較高的值會導致更詳細的碰撞,但代價是產生速度較慢,且物理模擬期間 CPU 使用率增加。為了提高效能,建議在您的用例中保持該值盡可能低。

  • 遮擋器 > 簡化距離: 僅當 產生 > 遮擋器 設定為 網格 + 遮擋器僅遮擋器 時才可見。較高的值會導致遮蔽網格的頂點數較少(導致 CPU 使用率降低),但代價是更多的遮蔽剔除問題(例如誤報或漏報)。如果相機靠近某個網格時遇到不該消失的物體,請嘗試減少該值。

設定外部編輯器

在「進階匯入設定」對話方塊中,有兩種方法可以選擇單一網格或材質:

  • Logo 會顯示在螢幕的最上方。

  • 留在**場景**標籤中,但展開左側樹狀視圖上的選項。選擇網格或材質後,這會顯示與 網格材質 分頁相同的信息,但以樹視圖而不是列表的形式顯示。

如果選擇網格,右側面板中會出現不同的選項:

進階匯入設定對話框(網格分頁)

進階匯入設定對話框(網格分頁)

常見的使用情景如下:

  • 儲存到檔案: 將:ref:class_Mesh *資源*儲存到外部檔案(這不是場景檔案)。您通常不需要使用它來將網格放置在 3D 場景中 - 相反,您應該直接實例化 3D 場景。但是,直接存取網格資源對於特定節點非常有用,例如 class_MeshInstance3D、class_MultiMeshInstance3D、class_GPUParticles3D 或 class_CPUParticles3D。 - 您還需要使用啟用**儲存到檔案**後出現的選項指定輸出檔案路徑。建議使用“.res”輸出檔案副檔名以獲得更小的檔案大小和更快的載入速度,因為“.tres”對於寫入大量資料效率低下。

  • 產生 > 陰影網格: **網格 > 建立陰影網格**場景範圍匯入選項的每個網格覆蓋,如 使用模組 中所述。 **預設**將使用場景範圍的匯入選項,而**啟用**或**停用**可以在特定網格上強制啟用或停用此行為。

  • 產生 > 光照貼圖 UV: 網格 > 光照烘焙 ** 場景範圍匯入選項的每個網格覆蓋,如 :ref:`doc_importing_3d_scenes_using_the_import_dock` 所述。 **預設**將使用場景範圍的匯入選項,而**啟用**或**停用**可以在特定網格上強制啟用或停用此行為。 - 在具有 **靜態 光照烘焙模式的場景中將其設定為 啟用 相當於配置此網格以使用 靜態光照貼圖。在具有 靜態光照貼圖 光照烘焙模式的場景上將其設定為 停用 相當於配置此網格以使用 靜態

  • 產生 > LOD: 網格 > 產生 LOD** 場景範圍匯入選項的每個網格覆蓋,如 使用模組 中所述。 **預設**將使用場景範圍的匯入選項,而**啟用**或**停用**可以在特定網格上強制啟用或停用此行為。

  • LOD > 法線分割角度: 在網格 LOD 產生中保留幾何邊緣所需的兩個頂點之間的最小角度差。如果在產生 LOD 時遇到視覺問題,降低該值可能會有所幫助(但代價是 LOD 生成效率較低)。

  • LOD > 法線合併角度: 在網格 LOD 產生中保留幾何邊緣所需的兩個頂點之間的最小角度差。如果在產生 LOD 時遇到視覺問題,降低該值可能會有所幫助(但代價是 LOD 生成效率較低)。

如果選擇一種材質,右側面板中只會出現一個選項:

“進階匯入設定”對話方塊(“材質”標籤)

“進階匯入設定”對話方塊(“材質”標籤)

當選取 使用外部 並指定輸出路徑時,您可以使用外部材質而不是原始 3D 場景檔案中包含的材質;請參閱下面的部分。

匯入紋理

雖然 Godot 可以匯入在 3D 建模軟體中編寫的材質,但預設配置可能不適合您的需求。例如:

  • 您想要配置 3D 應用程式不支援的材質功能。

  • 您想要使用不同的紋理篩選模式,因為此選項是在 Godot 4.0 以來的材質中配置的(而不是在圖像中)。

  • 您想要將其中一種材質替換為完全不同的材質,例如自訂著色器。

為了能夠在 Godot 編輯器中修改 3D 場景的材質,您需要使用*外部*材質。

在「進階匯入設定」對話方塊的左上角,選擇「操作...> 提取材質

在「進階匯入設定」對話方塊中將所有內建材料提取到外部資源

在「進階匯入設定」對話方塊中將所有內建材料提取到外部資源

選擇此選項後,選擇一個資料夾來擷取素材``.tres``檔案,然後確認擷取:

在「進階匯入設定」子對話方塊中確認材料提取

在「進階匯入設定」子對話方塊中確認材料提取

備註

萃取材質後,3D 場景將自動配置為使用外部材質參考。因此,您無需在每種材質上手動啟用**使用外部**來使外部``.tres``材質生效。

啟用「使用外部」時,請記住「進階匯入設定」對話方塊將繼續顯示網格的原始材質(在 3D 建模軟體中設計的材質)。這意味著您對材質的自訂在此對話方塊中不可見。若要預覽修改後的材質,您需要使用編輯器將匯入的 3D 場景放置在另一個場景中。

重新匯入來源 3D 場景時,Godot 不會覆寫對萃取材質所做的變更。但是,如果來源 3D 檔案中的材質名稱發生更改,則原始材質和提取的材質之間的連結將會遺失。因此,您需要使用「進階匯入設定」對話方塊將重新命名的材質與現有擷取的材質相關聯。

上述操作可以在對話方塊的“材料”標籤中完成,方法是選擇材料,啟用“儲存到檔案”,然後使用啟用“儲存到檔案”後出現的“路徑”選項指定儲存路徑**。

使用匯入腳本實作自動化

此處可提供一個腳本來在匯入後處理整個場景。該腳本適合拿來做後處理、用來更改材質、或是對幾何做有趣的處理等等。

透過右鍵點選檔案系統停靠欄並選擇 新建 > 腳本…,建立不附加到任何節點的腳本。在腳本編輯器中,編寫以下內容:

@tool # Needed so it runs in editor.
extends EditorScenePostImport

# This sample changes all node names.
# Called right after the scene is imported and gets the root node.
func _post_import(scene):
    # Change all node names to "modified_[oldnodename]"
    iterate(scene)
    return scene # Remember to return the imported scene

# Recursive function that is called on every node
# (for demonstration purposes; EditorScenePostImport only requires a `_post_import(scene)` function).
func iterate(node):
    if node != null:
        print_rich("Post-import: [b]%s[/b] -> [b]%s[/b]" % [node.name, "modified_" + node.name])
        node.name = "modified_" + node.name
        for child in node.get_children():
            iterate(child)

post_import 函式會將匯入的場景作為參數 (該參數實際上就是場景的根節點)。必須回傳最終要被使用的場景。回傳的可以是不同場景。

動畫樹

從 Godot 4.0 開始,可以選擇僅從 glTF 檔中匯入動畫。在某些素材管道中,使用動畫和模型分開的方式,比如,給多個角色使用一套動畫,而每個角色不必有重複的動畫資料。

那麼,請在檔案系統欄目中選擇 glTF 檔,然後在匯入欄中更改匯入模式為動畫庫:

在匯入欄目中將匯入型別更改為動畫庫

在匯入欄目中將匯入型別更改為動畫庫

按一下 重新匯入 ,並根據提示重啟編輯器。重啟後, glTF 檔將作為 AnimationLibrary 匯入,而不是 PackedScene 。然後,可以使用 AnimationPlayer 節點引用此動畫庫。

更改匯入模式為動畫庫後,可見的匯入選項與使用場景匯入模式時相同。有關更多資訊,請參閱 使用模組

篩選腳本

也可以指定一個特殊格式的篩選腳本,用來判斷哪些動畫中的哪些軌道要保留。

篩選腳本會依據每個匯入的動畫上執行。腳本的格式由兩種陳述式組成,第一種陳述式是用來選擇要篩選哪些動畫,第二種則是用在符合的動畫上篩選個別軌道。名稱的模式使用不區分大小寫的表示式來配對,使用 ?* 字元作為萬用字元 (內部使用 String.matchn() )。

腳本必須以動畫篩選陳述式來開頭 (表示為以 @ 為首的行)。舉例來說,若要套用篩選到所有名稱以 "_Loop" 結尾的匯入動畫:

@+*_Loop

同樣地,也可以在同一行中加上其他模式,並以逗號來分隔。下列修改後的範例也會 包含 所有以 "Arm_Left" 開頭的動畫,但同時 排除 所有名稱以 "Attach" 結尾的動畫:

@+*_Loop, +Arm_Left*, -*Attack

緊接著用來選擇動畫的篩選陳述式之後,要寫的便是用來判斷哪些軌道要保留,哪些要放棄的篩選模式。若沒有指定篩選模式,則相符動畫中的所有軌道都會被放棄!

有一點需要注意的是軌道篩選陳述式會依據動畫中各個軌道的順序來套用,這表示一行選擇了保留軌道的陳述式之後可能出現另一個規則來放棄保留軌道。同樣地,若先前的規律條件排除了一個軌道,篩選腳本後方的規則仍然可以將該軌道重新包含進來。

舉例來說:包含動畫中所有名稱以 "_Loop" 結尾的動畫,但放棄所有以 "Control" 結尾且會對 "Skeleton" 造成效果的動畫,除非名稱中有 "Arm"

@+*_Loop
+*
-Skeleton:*Control
+*Arm*

在上述例子中,如 ”Skeleton:Leg_Control" 軌道會被放棄,而如 "Skeleton:Head""Skeleton:Arm_Left_Control" 軌道則會被保留。

不以 +- 開頭的軌道篩選規則會被忽略。

儲存

預設情況下,動畫會以內建形式保存。也可以將動畫儲存於檔案中。這樣即使重新匯入後,在動畫中新增的自定軌道也能被保留。

最佳化器

動畫匯入後會執行最佳化工具。最佳化工具能有效降低動畫的大小。一般來說,應該維持開啟最佳化工具,除非遇到動畫疑似因為最佳化而損壞的情況。

動畫片段

可以指定來自單一時間軸中的多個動畫作為剪輯。模型必須只能有一個命名為 default 的動畫才能建立剪輯。要建立剪輯,請將剪輯數量調整為大於零的任意數。接著便能為剪輯命名、選擇開始與結尾的影格、以及選擇動畫是否要循環。

場景繼承

許多情況下我們會希望能更改匯入的場景。但在預設情況下無法更改,因為若修改了原始素材 (重新從 3D 模型程式中匯出的原始 .dae, .gltf, .obj 檔案),Godot 會重新匯入整個場景。

但,我們可以通過 場景繼承 來建立區域修改。試著打開匯入場景,會顯示下列視窗:

在編輯器中開啟匯入的 3D 場景時的對話框

在編輯器中開啟匯入的 3D 場景時的對話框

繼承場景中,修改只有下列限制:

  • 節點無法移除 (但可以在任何地方新增節點)。

  • 子資源無法編輯 (可以使用上面說明的方法將子資源保存在外部)

除此之外,可以任何事。