はじめに
3Dシーンで実際の形状(立方体、球体、カプセルなど)を画面に表示させるには、どのノードを使えばいいのでしょう?その答えがMeshInstance3Dです。この記事では、3Dメッシュを扱う基本から、材質の設定まで解説します。
この記事を読むことで、基本的な3D形状の作成、材質の追加、そして複数のメッシュを組み合わせた複雑なモデルの構築方法が身につきます。

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

もっと使いこなす:カスタマイズできるパラメータ
まずは基本を動かしてみてから、余裕が出たら試してみてください。
| パラメータ | 型 | 説明 |
|---|---|---|
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について解説します。

シリーズ: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をもとに執筆しています。


コメント