インポートの構成
Godot には、インポート ドック、高度なインポート設定ダイアログ、継承されたシーンなど、インポートされたデータをカスタマイズするいくつかの方法が用意されています。これらを使用して、メッシュの調整、物理情報の追加、新しいノードの追加など、インポートされたシーンにさらに変更を加えることができます。またインポートプロセスの最後にコードを実行するスクリプトを記述して、任意のカスタマイズを行うこともできます。
該当する場合は、インポート後にシーンを構成するよりも、元のデータを変更することを優先してください。これにより3Dモデリングアプリケーションとインポートされたシーンの違いを最小限に抑えることができます。詳細については、モデルのエクスポートに関する考慮事項 および 名前にサフィックスを使用したノードタイプのカスタマイズ の記事を参照してください。
ワークフローのインポート
Godot は独自のシーン形式 (.tscn/.scn) のみを保存できるため、Godot は元の3Dシーンファイル (異なる形式を使用) を上書き保存することはできません。これはソースファイルに誤って変更を加えるのを防ぐための、より安全なアプローチでもあります。
シーンとそのマテリアルをカスタマイズできるようにするために、Godot のシーンインポーターでは、データのインポート方法に関するさまざまなワークフローが許可されています。
ファイルシステムドックで3Dシーンを選択した時のインポートドック
このインポートプロセスは、ニーズに応じて3つの個別のインターフェイスを使用してカスタマイズできます。
インポート ドック。ファイルシステムドックで3Dシーンを選択する。
高度なインポート設定 ダイアログ。ファイルシステムドックで3Dシーンをダブルクリックするか、インポートドックで 詳細設定... ボタンをクリックするとアクセスできます。これはGodot のオブジェクトごとのオプションをカスタマイズできます。
インポートヒント 。3Dモデリングソフトウェアのオブジェクト名に追加される特別なサフィックスです。これは3Dモデリングソフトウェアでオブジェクトごとのオプションをカスタマイズできます。
基本的なカスタマイズには、インポートドックを使用するだけで十分です。ただしマテリアルごとにマテリアルオーバーライドを定義するなど、より複雑な操作の場合は、高度なインポート設定ダイアログ、インポートヒント、またはその両方を使用する必要があります。
インポートドックの使用
ファイルシステムドックで3Dシーンを選択した後、インポートドックで次のオプションを調整できます:
ルートの型: ルートノードとして使用するノードタイプ。Node3D から継承するノードタイプを使用することをお勧めします。そうしないと、3D エディターでノードを直接配置できなくなります。
ルートの名前: インポートされたシーンのルートノードの名前。エディターでシーンをインスタンス化する場合 (または、ファイルシステムドックからドラッグ&ドロップする場合)、ルートノードの名前はファイル名に合わせて変更されるため、通常は目立ちません。
ルートスケールを適用: 有効にすると、ルートスケール がメッシュとアニメーションに直接 適用 され、ルートノードのスケールはデフォルトの (1, 1, 1) に維持されます。つまりインポートしたシーン内で後で子ノードを追加しても、その子ノードはスケールされません。無効にすると ルート スケール は代わりにルートノードのスケールを乗算します。
メッシュ
接線の確保: オンにすると、入力メッシュに接線データがない場合に、Mikktspace を使用して頂点接線を生成します。可能な場合は、このオプションに頼るのではなく、エクスポート時に3Dモデリングソフトウェアで接線を生成することをお勧めします。接線は法線マップと高さマップ、および接線を必要とするマテリアル/シェーダ機能を正しく表示するために必要です。接線を必要とするマテリアル機能が必要ない場合、これを無効にすると、ソースの3Dファイルに接線が含まれていなければ、出力ファイルのサイズが小さくなりインポートが高速化されます。
LODを生成: チェックすると、レンダリンパフォーマンスを向上させるために、遠くに表示される用の詳細度が低いメッシュを生成します。特に遠くからレンダリングされないメッシュは、LODの恩恵を受けられません。これを無効にすると、出力ファイルのサイズが小さくなりインポートが高速化されます。詳細については、Mesh level of detail (LOD) を参照してください。
シャドウメッシュの作成: チェックすると、インポート時にシャドウメッシュの生成が有効になります。これは可能な場合は頂点を結合して、品質を低下させることなくシャドウレンダリングを最適化します。これによりシャドウのレンダリングに必要なメモリ帯域幅が削減されます。シャドウメッシュの生成では、現在ソースメッシュよりも低いLODの使用はサポートされていません (ただし、シャドウレンダリングでは、関連する場合はLODが使用されます)。
ライト焼き込み: 3D シーン内のメッシュの グローバル イルミネーション モード を設定します。 静的ライトマップ に設定すると、メッシュのGIモードが 静的 に設定され、ライトマップベイク のインポート時に UV2 が生成されます。
ライトマップのテクセルサイズ: ライト焼き込み が Static Lightmaps に設定されている場合にのみ表示されます。ベイクされたライトマップ上の各テクセルのサイズを制御します。値が小さいほどライトマップの精度は高くなりますが、ライトマップのサイズが大きくなり、ベイク時間が長くなります。
スキン
名前付きスキンを使用: チェックされている場合、アニメーションに名前付き Skins を使用します。 MeshInstance3D ノードには、Skeleton3D ノードを指すスケルトン NodePath (通常は
..)、メッシュ、スキンの 3 つの関連プロパティが含まれています。Skeleton3D ノードには名前付きボーン、ポーズとレスト、親ボーンのリストが含まれています。
メッシュはメッシュを表示するために必要なすべての生の頂点データです。メッシュに関しては、頂点がどのようにウェイトペイントされるかを認識しており、多くの場合3Dモデリングソフトウェアからインポートされる内部番号を使用します。
スキンにはこのメッシュをこの Skeleton3D にバインドするために必要な情報が含まれています。3Dモデリングソフトウェアによって選択された内部ボーンIDごとに、スキンには2つのものが含まれています。1つ目はバインド ポーズマトリックス、逆バインドマトリックス、または略して IBM と呼ばれるマトリックスです。2つ目はスキンには各ボーンの名前 (Use Named Skins が有効になっている場合)、または Skeleton3D リスト内のボーンのインデックス (Use Named Skins が無効になっている場合) が含まれています。
これらの情報を組み合わせると、Godot に Skeleton3D ノードのボーンポーズを使用して各 MeshInstance3D からメッシュをレンダリングする方法を伝えるのに十分です。各 MeshInstance3D は Blender からエクスポートされたモデルでよくあるようにバインドを共有する場合や、Maya などの他のツールからエクスポートされたモデルでよくあるように、各 MeshInstance3D が個別のスキンオブジェクトを使用する場合があることに注意してください。
アニメーション
インポート: チェックすると、3Dシーンからアニメーションをインポートします。
フレームレート(FPS): 線形補間を使用してアニメーションカーブを一連のポイントにベイク処理するために使用される1秒あたりのフレーム数。この値は3Dモデリングソフトウェアでベースラインとして使用している値と一致するように設定することをお勧めします。値が高いほど動きの変化が速く、アニメーションの精度が高くなりますが、ファイルサイズとメモリ使用量が増加します。補間されるため、通常は30FPSを超えてもあまりメリットはありません (レンダリングフレームレートが高いほどアニメーションは滑らかに見えるため)。
前後のトリミング: キーフレームの変更がない場合は、アニメーションの先頭と末尾をトリミングします。これによりアニメーショントラックの内容に応じて、特定の3Dシーンで出力ファイルのサイズとメモリ使用量を削減できます。
不変トラックを削除: デフォルト値のみを含むアニメーショントラックを削除します。これによりアニメーショントラックの内容に応じて、特定の3Dシーンでの出力ファイルサイズとメモリ使用量を削減できます。
インポートスクリプト
パス: インポートスクリプトへのパス。インポートプロセスが完了した後に、カスタム処理のためのコードを実行できます。詳細については 自動化のためのインポートスクリプトの使用 を参照してください。
glTF
埋め込みテクスチャ処理: glTF シーン内に埋め込まれたテクスチャの処理方法を制御します。Discard All Textures はテクスチャをインポートしません。これは代わりに Godot でマテリアルを手動で設定する場合に使用します。Extract Textures はテクスチャを外部画像に抽出し、ファイル サイズを小さくし、インポートオプションをより細かく制御できるようにします。Embed as Basis Universal と Embed as Uncompressed は、それぞれVRAM圧縮有りと無しで、インポートされたシーンにテクスチャを埋め込んだままにします。
FBX
Importer Which import method is used. ubfx handles fbx files as fbx files. FBX2glTF converts FBX files to glTF on import and requires additional setup. FBX2glTF is not recommended unless you have a specific rason to use it over ufbx or working with a different file format.
Allow Geometry Helper Nodes はジオメトリヘルパーノードを有効または無効にします
Embedded Texture Handling: fbxシーン内に埋め込まれたテクスチャの処理方法を制御します。Discard All Textures はテクスチャをインポートしません。これは、代わりに Godot でマテリアルを手動で設定する場合に便利です。Extract Textures はテクスチャを外部画像に抽出し、ファイル サイズを小さくし、インポート オプションをより細かく制御できるようにします。Embed as Basis Universal と Embed as Uncompressed は、それぞれVRAM圧縮有りと無しで、インポートされたシーンにテクスチャを埋め込んだままにします。
高度なインポート設定ダイアログの使用
最初に表示されるタブは シーン タブです。右側のパネルで使用できるオプションはインポートドックと同じですが、3Dプレビューにアクセスできます。3Dプレビューはマウスの左ボタンを押したままマウスをドラッグすることで回転できます。ズームはマウスホイールを使用して調整できます。
高度なインポート設定ダイアログ (シーンタブ)。クレジット: Modern Arm Chair 01 - Poly Haven
ノードのインポートオプションの設定
シーン タブでは、左側のツリービューを使用して、シーンを構成する個々のノードを選択できます:
高度なインポート設定ダイアログ (マテリアルタブ) でノードを選択する
これによりノードごとのインポートオプションがいくつか公開されます。
インポートしない: チェックするとノードは最終的にインポートされたシーンには存在しません。これを有効にすると他のすべてのオプションが無効になります。
生成する > 物理: チェックすると MeshInstance3D ノードの 兄弟 であるコリジョンシェイプを持つ PhysicsBody3D の 親 ノードが生成されます。
生成する > ナビメッシュ: チェックされている場合、ナビゲーション の NavigationRegion3D 子 ノードが生成されます。Mesh + NavMesh は元のメッシュを表示したままにしますが、NavMesh Only はナビゲーションメッシュのみをインポートします (視覚的なメッシュなし)。NavMesh Only はナビゲーション用に簡略化されたメッシュを手動で作成した場合に使用します。
生成する > オクルーダー: チェックされている場合、メッシュのジオメトリをオクルーダーの形状のベースとして使用して、オクルージョン カリング の OccluderInstance3D 兄弟 ノードを生成します。Mesh + Occluder は元のメッシュを表示したままにしますが、Occluder Only はオクルーダーのみをインポートします (視覚的なメッシュなし)。Occluder Only はオクルージョンカリング用に簡略化されたメッシュを手動で作成したときに使用することを目的としています。
これらのオプションは、上記のオプションの一部が有効になっている場合にのみ表示されます。
物理 > ボディタイプ: 生成する > 物理 が有効な場合にのみ表示されます。作成する PhysicsBody3D を制御します。Static は StaticBody3D を作成し、Dynamic は RigidBody3D を作成し、Area は Area3D を作成します。
物理 > シェイプタイプ: 生成する > 物理 が有効な場合にのみ表示されます。Trimesh を使用すると、三角形ごとの正確な衝突が可能になりますが、Static ボディタイプでのみ使用できます。他のタイプは精度が低く、手動構成が必要な場合がありますが、どのボディタイプでも使用できます。静的レベルのジオメトリの場合は、Trimesh を使用します。動的ジオメトリの場合は、パフォーマンスを向上させるために可能な場合はプリミティブシェイプを使用するか、シェイプが大きく複雑な場合はDecompose Convexモードのいずれかを使用します。
Decomposition > 高度な設定: 物理 > シェイプタイプ が Decompose Convex の場合にのみ表示されます。チェックされている場合、高度な分解オプションを調整できます。無効にするとプリセットの 精度 のみを調整できます (通常はこれで十分です)。
Decomposition > 精度: 物理 > シェイプタイプ が Decompose Convex の場合にのみ表示されます。Decompose Convexに使用する精度を制御します。値が高いほど衝突の詳細度は高くなりますが、生成速度が遅くなり、物理シミュレーション中のCPU使用率が増加します。パフォーマンスを向上させるには、使用例に応じてこの値をできるだけ低く保つことをお勧めします。
オクルーダー > 簡略化距離: 生成する > オクルーダー が Mesh + Occluder または Occluder Only に設定されている場合にのみ表示されます。値が大きいほど、オクルーダーメッシュの頂点数が少なくなります (CPU使用率が低下します)。ただしオクルージョンカリングの問題 (誤検知や誤検知など) が増えます。カメラが特定のメッシュの近くにあるときに、オブジェクトが消えてしまう場合は、この値を減らしてみてください。
メッシュとマテリアルのインポートオプションの設定
高度なインポート設定ダイアログでは、個々のメッシュまたはマテリアルを選択する方法が2つあります。
ダイアログの左上隅にある メッシュ または マテリアル タブに切り替えます。
シーン タブのまま、左側のツリービューでオプションを展開します。メッシュまたはマテリアルを選択すると、メッシュ タブと マテリアル タブと同じ情報が、リストではなくツリービューで表示されます。
メッシュを選択すると、右側のパネルにさまざまなオプションが表示されます。
高度なインポート設定ダイアログ (メッシュタブ)
オプションは次のとおりです。
ファイルへ保存: Mesh リソース を外部ファイル (シーンファイルではありません) に保存します。通常メッシュを3Dシーンに配置するためにこれを使用する必要はありません。代わりに3Dシーンを直接インスタンス化する必要があります。ただしメッシュリソースに直接アクセスできると、 MeshInstance3D、 MultiMeshInstance3D、 GPUParticles3D、 CPUParticles3D などの特定のノードに役立ちます。- ファイルへ保存 を有効にした後に表示されるオプションを使用して、出力ファイルのパスも指定する必要があります。
.tresは大量のデータの書き込みには非効率的であるため、ファイルサイズを小さくして読み込み速度を速くするには.res出力ファイル拡張子を使用することをお勧めします。生成する > シャドウメッシュ: インポートドックの使用 で説明されている メッシュ > シャドウメッシュの作成 はシーン全体のインポートオプションで、これはメッシュごとのオーバーライドです。Default ではシーン全体のインポートオプションが使用され、Enable または Disable を設定すると、特定のメッシュに対して強制的に有効化または無効化できます。
生成する > ライトマップUV: インポートドックの使用 で説明されている メッシュ > ライト焼き込み はシーン全体のインポートオプションで、これはメッシュごとのオーバーライドです。Default ではシーン全体のインポートオプションが使用され、Enable または Disable を設定すると特定のメッシュに対して強制的に有効化または無効化できます。Static ライトベイクモードのシーンでこれを Enable に設定すると、このメッシュが Static Lightmaps を使用するように構成するのと同じです。Static Lightmaps ライトベイク モードのシーンでこれを Disable に設定すると、このメッシュが Static を使用するように構成するのと同じです。
生成する > LOD: インポートドックの使用 で説明されている メッシュ > LODの生成 はシーン全体のインポート オプションで、これはメッシュごとのオーバーライドです。Default ではシーン全体のインポートオプションが使用され、Enable または Disable を設定すると、特定のメッシュで強制的に有効化または無効化できます。
LOD > Normal Split Angle: メッシュLOD生成でジオメトリ エッジを保持するために必要な 2 つの頂点間の最小角度差。LOD生成で視覚的な問題が発生する場合は、この値を下げると改善される可能性があります (LOD生成の効率は低下します)。
LOD > Normal Merge Angle: メッシュLOD生成でジオメトリエッジを保持するために必要な2つの頂点間の最小角度差。LOD生成で視覚的な問題が発生する場合は、この値を下げると改善される可能性があります (LOD生成の効率は低下します)。
マテリアルを選択すると、右側のパネルにオプションが1つだけ表示されます。
高度なインポート設定ダイアログ (マテリアルタブ)
Use External がオンになっていて出力パスが指定されている場合、元の3Dシーンファイルに含まれているマテリアルの代わりに外部マテリアルを使用できます。以下のセクションを参照してください。
マテリアルを別々のファイルへ抽出する
Godot は 3Dモデリングソフトウェアで作成されたマテリアルをインポートできますが、デフォルトの構成はニーズに適さない場合があります。例えば:
3Dアプリケーションでサポートされていないマテリアル機能を設定したい。
異なるテクスチャフィルタリングモードを使用したい。このオプションはGodot 4.0以降、マテリアルで設定されます (画像では設定されません)。
カスタムシェーダなど、マテリアルの1つを全く別のマテリアルに置き換えたい。
Godotエディタで3Dシーンのマテリアルを変更できるようにするには、外部 のマテリアルリソースを使用する必要があります。
高度なインポート設定ダイアログの左上隅で、操作... > マテリアルを抽出 を選択します。
高度なインポート設定ダイアログで、全ての組み込みマテリアルを外部リソースに抽出する
このオプションを選択した後、マテリアルの .tres ファイルを抽出するフォルダーを選択し、抽出されたことを確認します。
高度なインポート設定サブダイアログでマテリアルの抽出を確認する
注釈
マテリアルを抽出した後、3Dシーンは外部マテリアル参照を使用するように自動的に構成されます。その結果、外部の .tres マテリアルを有効にするために、全てのマテリアルで Use External を手動で有効にする必要はありません。
Use External が有効になっている場合、高度なインポート設定ダイアログにはメッシュの元のマテリアル (3Dモデリングソフトウェアで設計されたもの) が表示され続けることに注意してください。つまりマテリアルのカスタマイズはこのダイアログでは表示されません。変更したマテリアルをプレビューするには、エディターを使用してインポートした3Dシーンを別のシーンに配置する必要があります。
Godot はソース3Dシーンを再インポートするときに、抽出されたマテリアルに加えられた変更を上書きしません。ただしソース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(scene: Node) 関数はインポートされたシーンを引数として受け取ります(パラメーターは実際にはシーンのルートノードです)。最終的に使用されるシーンを返す必要があります。別のものでもかまいません。
スクリプトを使用するには、インポートタブの「インポートスクリプト」カテゴリの「パス」オプションにスクリプトを指定します。
アニメーションライブラリの使用
Godot 4.0 以降では、glTFファイルからアニメーションのみをインポートし、それ以外はインポートしないことを選択できます。これは一部のアセットパイプラインで、モデルとは別にアニメーションを配布するために使用されます。たとえば、これによりすべてのキャラクターでアニメーションデータを複製することなく、複数のキャラクターに1セットのアニメーションを使用できます。
これを行うには、ファイルシステムドックで glTF ファイルを選択し、インポートドックでインポートモードをアニメーションライブラリに変更します。
インポートドックでインポートタイプをアニメーションライブラリに変更する
再インポート をクリックし、プロンプトが表示されたらエディターを再起動します。再起動後 glTF ファイルは PackedScene ではなく AnimationLibrary としてインポートされます。このアニメーションライブラリは AnimationPlayer ノードで参照できます。
インポートモードをアニメーションライブラリに変更した後に表示されるインポートオプションは、シーンインポート モードを使用する場合と同じように動作します。詳細については インポートドックの使用 を参照してください。
フィルタースクリプト
特別な構文でフィルタースクリプトを指定して、どのアニメーションのどのトラックを保持するかを決定することができます。
フィルタスクリプトは、インポートされた各アニメーションに対して実行されます。構文は2種類のステートメントで構成されます。1つ目は、フィルタリングするアニメーションを選択するためのもので、2つ目は、一致するアニメーション内の個々のトラックをフィルタリングするためのものです。すべての名前パターンは、大文字と小文字を区別しないマッチパターンを使用して実行され、? および * ワイルドカードを使用します(String.matchn() を内部で使用しています)。
スクリプトは (@ で始まる行で示される)アニメーション・フィルタ・ステートメントで開始する必要があります。たとえばインポートされた、名前が "_Loop" で終わるすべてのアニメーションにフィルタを適用する場合は:
@+*_Loop
同様に、追加のパターンをコンマで区切って同じ行に追加できます。これは、名前が"Arm_Left" で始まるすべてのアニメーションを追加し、そして"Attack" で終わる名前を持つすべてのアニメーションを除外する設定を追加した変更例です:
@+*_Loop, +Arm_Left*, -*Attack
アニメーション選択用のフィルタステートメントに続いて、トラック・フィルタリング・パターンを追加して、どのアニメーショントラックを保持または破棄するかを示します。トラック・フィルタ・パターンが指定されていない場合、一致するアニメーション内のすべてのトラックは破棄されます!
トラック・フィルタ・ステートメントは、アニメーション内の各トラックに順番に適用されることに注意することが重要です。これは、ある行のルールでトラックが追加されても、後のルールでそれを破棄できることを意味します。同様に、始めの方のルールによって除外されたトラックが、フィルタ・スクリプトのさらに下のルールによって再度追加される場合もあります。
例: "_Loop" で終わる名前を持つアニメーションにすべてのトラックを含めますが、名前に "arm" が含まれている場合を除き、"Skeleton" の "Control" で終わっているトラックは破棄します:
@+*_Loop
+*
-Skeleton:*Control
+*Arm*
上記の例では、"Skeleton:Leg_Control" のようなトラックは破棄されますが、"Skeleton:Head" や Skeleton:Arm_Left_Control などのトラックは保持されます。
+ または - で始まらないトラック・フィルタ行は無視されます。
ストレージ
デフォルトでは、アニメーションは組み込みとして保存されます。代わりにファイルに保存できます。これにより、アニメーションにカスタムトラックを追加し、再読み込み後も保持できます。
オプティマイザー(Optimizer)
アニメーションがインポートされると、オプティマイザーが実行され、アニメーションのサイズが大幅に縮小されます。一般に、アニメーションが有効になっているためにアニメーションが壊れている疑いがない限り、これは常にオンにする必要があります。
クリップ
1つのタイムラインから複数のアニメーションをクリップとして指定することができます。この機能を使うためには、モデルには default という名前のアニメーションを 1 つだけ用意しなければなりません。クリップを作成するには、クリップの量をゼロよりも大きい値に変更してください。クリップに名前を付けて、どのフレームで開始し、どのフレームで停止するかを指定し、アニメーションをループさせるかどうかを選択することができます。
シーンの継承
多くの場合、インポートされたシーンに変更を加えることが望ましい場合があります。デフォルトでは、ソースアセットが変更されると Godot はシーン全体を再インポートする必要があるため、変更は出来ません。
ただし、シーン継承*を使用してローカルに変更を加えることは可能です。**シーン > シーンを開く…* または シーン > クイックオープン… を使用してインポートしたシーンを開こうとすると、次のダイアログが表示されます。
インポートした3Dシーンをエディターで開くときのダイアログ
継承されたシーンの変更に対する制限は次のとおりです。
ベースシーンのノードは削除できませんが、ノードはどこにでも追加できます。
サブリソースは編集できません。代わりに上記のように外部に保存する必要があります。
それ以外はすべてが許可されています。