← Pixel Dreamer Studio

GPUParticles3D not showing in Godot 4

We broke each setting on purpose in a test scene and looked at what was drawn.

Check draw_pass_1 first: with no mesh there, Godot draws nothing. Then check emitting, the mesh size and visibility_aabb. A missing process material is different: you still see a spot, but it never moves.

Small orange square particles rising from one point in Godot 4.7
The script below, running in Godot 4.7. The particles are square because it uses no texture.

Start from a script that works

Put this on a Node3D in a new scene, with a Camera3D pointed at it. If you see particles, your camera and project are fine and the problem is in the settings of your effect.

extends Node3D
## The smallest effect that always shows: attach to a Node3D and run.

func _ready() -> void:
	var fx := GPUParticles3D.new()
	add_child(fx)

	var process := ParticleProcessMaterial.new()
	process.direction = Vector3.UP
	process.spread = 25.0
	process.initial_velocity_min = 1.0
	process.initial_velocity_max = 2.0
	process.gravity = Vector3.ZERO
	fx.process_material = process

	var mat := StandardMaterial3D.new()
	mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
	mat.billboard_mode = BaseMaterial3D.BILLBOARD_PARTICLES
	mat.vertex_color_use_as_albedo = true
	mat.albedo_color = Color(1.0, 0.7, 0.3)

	var quad := QuadMesh.new()
	quad.size = Vector2(0.2, 0.2)
	quad.material = mat
	fx.draw_pass_1 = quad

No mesh in Draw Passes

With draw_pass_1 empty, nothing was drawn at all. In the inspector, open Draw Passes and set Pass 1 to a new QuadMesh. To make the particles face the camera, give that mesh a material with Billboard Mode set to Particle Billboard, as the script above does.

No process material

Without one, the particles did not move. They stayed stacked at the position of the node, which looks like one small square. In the inspector, set Process Material to a new ParticleProcessMaterial.

Emitting is off, or a one-shot already played

With emitting off, nothing was drawn. A one-shot effect turns emitting off by itself, and once its particles ended the scene was empty again. Call restart() to play it again.

Mesh too small or lifetime too short

A 0.005 unit quad seen from 6 units away was almost invisible. With lifetime at 0.02 seconds, the particles ended right after they spawned, so only a small spot showed near the node.

Visibility box in the wrong place

visibility_aabb is the box Godot uses to decide if the effect is on screen. We moved it far from the emitter and nothing was drawn, even with the emitter in plain view. An effect that travels far from its node can vanish the same way when the box leaves the screen.

Make the box bigger: fx.visibility_aabb = AABB(Vector3(-10, -10, -10), Vector3(20, 20, 20)). The GPUParticles3D menu above the 3D viewport can also generate a box for you.

Tested in Godot 4.7 with the Compatibility renderer.

Want ready-made effects? Try the free Arcane VFX pack or the VFX Collection for Godot 4.