3Dの概要

3Dゲームの作成は難しい場合があります。 その余分なZ座標により、2Dゲームをシンプルにするのに役立った多くの一般的な手法が機能しなくなります。 この移行を支援するために、Godotは2Dおよび3Dに同様のAPIを使用していることに言及する価値があります。 ほとんどのノードは同じであり、2Dバージョンと3Dバージョンの両方に存在します。 実際、3Dプラットフォーマーチュートリアル、または3Dキネマティックキャラクターチュートリアルを確認する価値があります。

3Dでは、数学は2Dよりもやや複雑です。したがって、wikiの ベクトル演算 エントリ(数学者やエンジニアではなく、ゲーム開発者向けに特別に作成されたもの)をチェックすることで、3Dゲームを効率的に開発する道を開くのに役立ちます。

Spatialノード

Node2D は2Dのベースノードです。Control は、すべてのGUIのベースノードです。 この推論に従って、3Dエンジンはすべての3Dに対して Spatial ノードを使用します。

../../_images/tuto_3d1.png

Spatial nodes have a local transform, which is relative to the parent node (as long as the parent node is also of or inherits from the type Spatial). This transform can be accessed as a 4×3 Transform, or as 3 Vector3 members representing location, Euler rotation (X, Y and Z angles) and scale.

../../_images/tuto_3d2.png

3Dコンテンツ

画像コンテンツの読み込みと描画が簡単な2Dとは異なり、3Dはもう少し難しくなります。コンテンツは、特別な3Dツール(通常DCCと呼ばれます)で作成し、Godotでインポートするために交換用のファイル形式にエクスポートする必要があります(3D形式は画像ほど標準化されていません)。

DCCで作成されたモデル

Godotに3Dモデルをインポートするには、2つのパイプラインがあります。最初の最も一般的な方法は、3Dシーンのインポート によるもので、アニメーション、スケルタルリグ、ブレンドシェイプなどを含むシーン全体を(DCCで見たとおりに)インポートできます。

2番目のパイプラインは、単純な.OBJファイルをメッシュリソースとしてインポートし、表示用に MeshInstance ノード内に配置できます。

生成されたジオメトリ

ArrayMesh リソースを直接使用して、カスタムジオメトリを作成することができます。単純に配列を作成し、ArrayMesh.add_surface_from_arrays() 関数を使用します。SurfaceTool というヘルパークラスも利用できます。これは、インデックス作成、法線、接線などの生成のためのより単純なAPIとヘルパーを提供します。

いずれの場合でも、頂点配列を作成して3D APIに送信するとパフォーマンスが大幅に低下するため、このメソッドは静的なジオメトリ(頻繁に更新されないモデル)を生成するためのものです。

即時ジオメトリ

代わりに、頻繁に更新される単純なジオメトリを生成する必要がある場合、Godotは、ポイントを作成するためのOpenGL 1.xスタイルの即時モードAPIを提供する特別なノード ImmediateGeometry を提供して点、線、三角形などを作成します。

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物理および、その他の分野はメートル法で調整されているため、(自分がすることを理解していないなら)違うスケールを使用するのは通常は良くない考えです。

When working with 3D assets, it's always best to work in the correct scale (set your DCC to metric). Godot allows scaling post-import and, while this works in most cases, in rare situations it may introduce floating-point precision issues (and thus, glitches or artifacts) in delicate areas, such as rendering or physics, so make sure your artists always work in the right scale!

Y軸は「上方向」に使用され、位置合わせが必要なほとんどのオブジェクト(ライト、カメラ、CapsuleCollider、Vehicleなど)では、Z軸は「向いている方向」として使用されます。この規則は、おおよそ次のことを意味します:

  • X軸は左右
  • Y軸は上下
  • Z軸は前後

空間と操作のギズモ

Moving objects in the 3D view is done through the manipulator gizmos. Each axis is represented by a color: Red, Green, Blue represent X, Y, Z respectively. This convention applies to the grid and other gizmos too (and also to the shader language, ordering of components for Vector3, Color, etc.).

../../_images/tuto_3d5.png

いくつかの便利なキーバインド:

  • 配置または回転をスナップするには、移動、スケーリング、または回転中に Ctrl を押します。
  • ビューを選択したオブジェクトの中央に配置するには、F を押します。

ビューメニュー

表示オプションは、ビューポートのツールバーの[ビュー]メニューで制御されます。

../../_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 has a limit of up to 8 lights per mesh. Aside from that, there is no limitation on the number of lights, nor of types of lights, in Godot. As many as desired can be added, as long as performance allows, and no more than 8 lights shine on a single mesh.