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ノードには、親ノードに相対的なローカルな幾何学変換があります(親ノードもSpatial型であるか、または継承している限り)。この変換は、4x3 Transform として、または位置、オイラー回転(x、y、zの角度)およびスケールを表す3 Vector3 メンバーとしてアクセスできます。

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

3Dアセットについて作業するときは、常に正しいスケールで作業することが最善です(DCCツールをメートル法に設定します)。 Godotはインポート後のスケーリングは可能で、ほとんどの場合これは機能しますが、まれにレンダリングや物理などのデリケートな領域で浮動小数点精度の問題(グリッチやアーティファクトなど)が発生する可能性があるため、アーティストは常に適切なスケールで作業するようにしてください!

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

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

空間と操作のギズモ

3Dビューでのオブジェクトの移動は、マニピュレーターギズモを介して行われます。各軸は色で表されます。赤、緑、青はそれぞれX、Y、Zを表します。この規則は、グリッドおよびその他のギズモにも適用されます(また、シェーダー言語、Vector3、Colorなどのコンポーネントの順序にも適用されます)。

../../_images/tuto_3d5.png

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

  • To snap placement or rotation, press Ctrl while moving, scaling or rotating.
  • To center the view on the selected object, press 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のライトの数やライトのタイプに制限はありません。必要な数を追加できます(パフォーマンスが許す限り)。