Quick answer: Set instance_count = N first. Then loop set_instance_transform(i, Transform3D(...)).

MultiMeshInstance3D set to 1000 grass blades. Only ~50 visible. Transforms not set; instances overlap at origin.

The Fix

@onready var mm: MultiMesh = $MultiMeshInstance3D.multimesh

func _ready():
    mm.transform_format = MultiMesh.TRANSFORM_3D
    mm.use_colors = true
    mm.instance_count = 1000

    for i in 1000:
        var pos = Vector3(randf_range(-50, 50), 0, randf_range(-50, 50))
        mm.set_instance_transform(i, Transform3D(Basis(), pos))
        mm.set_instance_color(i, Color(randf(), randf(), randf()))

instance_count + per-index transforms = visible variation. visible_instance_count caps rendered count if you want partial display.

Verifying

1000 distinct instances render. Without transforms: clump at origin.

“Set count. Set transforms. Spread.”

Related Issues

For shader uniform array, see uniform array. For shader UV flip, see UV flip.

Count + transforms. Crowd.