Is it possible to override the material of a GPUParticles3D?

Godot Version

v4.4

Question

Meshinstances have a surface override property which allows you to swap in a different material at runtime. Is it possible to do the same for particles or is a separate resource or node required?
Currently I’m using a solid albedo colour that changes depending on a couple of other variables to set the colour of MeshInstances:

var clr:Array=(colour_defaults[num] if colour_use_defaults else colour)
for thing in visibles:
	var targ_clr
	thing.set_surface_override_material(0,thing.mesh.material.duplicate())
	targ_clr = thing.get_surface_override_material(0).albedo_color
	for rgb in 3: targ_clr[rgb]=clr[rgb]
	thing.get_surface_override_material(0).albedo_color = targ_clr

The closest I’ve gotten with GPUParticles is this, which changes it for every instance in the scene:

var clr:Array=(colour_defaults[num] if colour_use_defaults else colour)
for thing in visibles:
	var targ_clr
	if thing is MeshInstance3D:
		thing.set_surface_override_material(0,thing.mesh.material.duplicate())
		targ_clr = thing.get_surface_override_material(0).albedo_color
	elif thing is GPUParticles3D:
		targ_clr = thing.draw_pass_1.material.albedo_color
	else: break
	for rgb in 3: targ_clr[rgb]=clr[rgb]
	if thing is MeshInstance3D: thing.get_surface_override_material(0).albedo_color = targ_clr
	elif thing is GPUParticles3D: thing.draw_pass_1.material.albedo_color = targ_clr

Fixed by just making two separate identical particle effect scenes. Not ideal but works

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.