Godot入門:MeshInstance3Dの使い方と活用法

はじめに

3Dシーンで実際の形状(立方体、球体、カプセルなど)を画面に表示させるには、どのノードを使えばいいのでしょう?その答えがMeshInstance3Dです。この記事では、3Dメッシュを扱う基本から、材質の設定まで解説します。

この記事を読むことで、基本的な3D形状の作成、材質の追加、そして複数のメッシュを組み合わせた複雑なモデルの構築方法が身につきます。




Godot 4の基本メッシュ種類
Godot 4では複数の基本メッシュが用意されています。プロジェクトの用途に合わせて選択できます。

MeshInstance3Dとは?

MeshInstance3Dは、3Dメッシュ(立方体、球体など)を3D空間に表示するノードです。見た目を持つ3Dノードの基本となり、ゲームの主人公やオブジェクト、環境すべてがこのMeshInstance3Dで構成されます。

MeshInstance3Dは「3D世界に形を与える役割」です。2DのSprite2Dに相当します。

継承ツリー:


MeshInstance3D
  ├── GeometryInstance3D
  │   ├── VisualInstance3D
  │   │   ├── Node3D
  │   │   │   └── Node
  │   │   └── ...
  │   └── ...
  └── ...

このノードを使うべき場面

MeshInstance3Dを使う場面:

  • プレイヤーキャラクターの体・頭・手足などのパーツを表示する
  • 敵キャラクター、NPCのモデルを表示する
  • 地形、建物、小道具などの環境要素を表示する
  • プロシージャルに(コード生成で)メッシュを作成して動的に表示する
  • 外部3Dモデル(Blender等で作成したもの)を Godot に読み込んで表示する

MeshInstance3Dを使わない場面:

  • 単なる空のアンカーポイントが必要なら → Node3Dを使う
  • 2D画像を3D空間に表示するなら → Sprite3Dを使う

主なプロパティと機能

プロパティ 説明
mesh Mesh 表示するメッシュ。BoxMesh、SphereMesh、CapsuleMeshなど
surface_material_override Material メッシュ全体に適用する材質。StandardMaterial3D、ORMMaterial3Dなど
cast_shadow ShadowCastingSetting 影の配置方法。OFF/ON/DOUBLE_SIDED
skeleton NodePath スケルタルアニメーション用の Skeleton3D ノードへのパス
layers int 描画レイヤー。カメラの撮影範囲やライトの影響を制御
visibility_range_begin float カメラからの距離がこの値より近いと描画されない(LOD制御)
visibility_range_end float カメラからの距離がこの値より遠いと描画されない(LOD制御)

重要メソッド:


# メッシュを割り当てる
mesh = BoxMesh.new()

# 材質を割り当てる
var material = StandardMaterial3D.new()
surface_material_override = material

# メッシュの情報を取得
get_mesh()
get_surface_override_material(surface_index)

# AABBで大まかなサイズを取得
get_aabb()

コード例1:基本的なメッシュと材質の設定


extends MeshInstance3D

func _ready() -> void:
    # BoxMesh を作成
    var box = BoxMesh.new()
    box.size = Vector3(2, 2, 2)  # 2x2x2のサイズ
    mesh = box

    # 材質を作成
    var material = StandardMaterial3D.new()
    material.albedo_color = Color.RED  # 赤色
    material.metallic = 0.5
    material.roughness = 0.3
    surface_material_override = material

    # 影を投影する
    cast_shadow = GeometryInstance3D.SHADOW_CASTING_SETTING_ON

コード例2:複数のメッシュを合成(PrismMeshとCapsuleMesh)


extends Node3D

func _ready() -> void:
    # 本体用のカプセルメッシュ
    var body = MeshInstance3D.new()
    var capsule = CapsuleMesh.new()
    capsule.radius = 0.5
    capsule.height = 2.0
    body.mesh = capsule
    add_child(body)

    # 頭用の球体メッシュ
    var head = MeshInstance3D.new()
    var sphere = SphereMesh.new()
    sphere.radius = 0.4
    head.mesh = sphere
    head.position = Vector3(0, 1.5, 0)  # 体の上に配置
    add_child(head)

    # 両方に赤い材質を適用
    var red_material = StandardMaterial3D.new()
    red_material.albedo_color = Color.RED
    body.surface_material_override = red_material
    head.surface_material_override = red_material




StandardMaterial3Dの材質設定による見た目の変化
左から順に、異なるmetallic値とroughness値を指定した球体。光の反射の仕方が大きく異なります。

もっと使いこなす:カスタマイズできるパラメータ

まずは基本を動かしてみてから、余裕が出たら試してみてください。

パラメータ 説明
albedo_color Color 材質の基本色。RGBの他にアルファ値(透明度)も指定可能
albedo_texture Texture2D 基本色のテクスチャマップ
metallic float 金属らしさ(0.0〜1.0)。1.0に近いほど鏡面反射
metallic_texture Texture2D 部分的に金属度を変えるためのテクスチャ
roughness float 表面の粗さ(0.0〜1.0)。大きいほどツヤがなく見える
roughness_texture Texture2D 部分的に粗さを変えるためのテクスチャ
normal_map Texture2D 表面の細かい凹凸を表現するテクスチャ
emission Color 自己発光の色。光源がなくても輝いて見える
emission_texture Texture2D 部分的に発光させるためのテクスチャ
transparency TransparencyMode OPAQUE/ALPHA/ALPHA_SCISSOR等。透明度の処理方法

まとめ

MeshInstance3Dは、3D空間に実際の形状を表示するための必須ノードであり、BoxMesh・SphereMesh・CapsuleMeshといった基本メッシュと、StandardMaterial3Dによる材質設定で、ゲームの見た目の大部分を構成します。

  • 基本メッシュ(BoxMesh、SphereMesh、CapsuleMesh等)を組み合わせることで、複雑なキャラクターや環境を表現できる
  • StandardMaterial3Dの albedo_color、metallic、roughness で、現実的な材質表現が可能
  • 複数の MeshInstance3D をNode3Dの子にすることで、パーツを組み合わせたモデルが作られる

次回は、3D空間を映すカメラノード、Camera3Dについて解説します。




複合MeshInstance3Dモデルの構造
複数のMeshInstance3Dノードを階層化することで、複雑なキャラクターモデルを構築できます。

シリーズ:Godot 4 ノード解説

001〜040:各種ノード
  • 001 Node2D
  • 002 Sprite2D
  • 003 AnimatedSprite2D
  • 004 Label
  • 005 Button
  • 006 TextEdit
  • 007 Panel
  • 008 VBoxContainer / HBoxContainer
  • 009 TabContainer
  • 010 OptionButton
  • 011 CheckBox
  • 012 Slider
  • 013 LineEdit
  • 014 RichTextLabel
  • 015 Control
  • 016 NinePatchRect
  • 017 TextureRect
  • 018 ItemList
  • 019 Tree
  • 020 ColorPickerButton
  • 021 Timer
  • 022 AudioStreamPlayer / AudioStreamPlayer2D
  • 023 Marker2D
  • 024 Area2D
  • 025 CharacterBody2D
  • 026 RigidBody2D
  • 027 StaticBody2D
  • 028 TileMap
  • 029 Camera2D
  • 030 CollisionShape2D
  • 031 Polygon2D
  • 032 Line2D
  • 033 ParticleSystem2D / CPUParticles2D
  • 034 CanvasLayer
  • 035 Sprite3D
  • 036 SubViewport
  • 037 MultiplayerSpawner
  • 038 RemoteTransform2D
  • 039 NavigationAgent2D
  • 040 VisibleOnScreenNotifier2D
  • 051 Node3D
  • 052 MeshInstance3D
  • 053 Camera3D
  • 054 DirectionalLight3D
  • 055 CharacterBody3D

この記事はGodot 4.xをもとに執筆しています。

コメント