Quick answer: Output Mesh has its own attribute binding section. Open the node, expand Material Parameters, and bind your custom attribute to the matching Dynamic Parameter on the mesh material. Unbound attributes default to zero.

VFX Graph Initialize sets a Custom Color attribute. Output Particle Quad respects it. Output Mesh ignores it — every mesh particle renders white.

The Symptom

Per-particle attributes (color, custom scalars) appear correctly on quad outputs but not on mesh outputs in the same system. Setting attributes in Initialize/Update has no visible effect on mesh.

What Causes This

Output Mesh outputs use the assigned material’s shader to render. The shader sees particle attributes only via Dynamic Parameter nodes. Without explicit binding from VFX Graph attribute → material parameter, the shader uses material defaults.

The Fix

Step 1: Add Dynamic Parameter to material. Open the mesh material’s shader/Shader Graph. Add a Dynamic Parameter node (index 0). Wire its outputs into BaseColor.

Step 2: Bind in Output Mesh node.

Output Mesh:
  Material Parameters:
    + Dynamic Parameter 0:  bind to Color

VFX Graph now writes Color into Dynamic Parameter 0 each draw, and the shader reads it.

Custom Attributes

For non-standard attributes (a custom scalar “Heat”):

  1. Initialize Particle → Set Heat = 0.5.
  2. Output Mesh → bind Heat to Dynamic Parameter 1 (or any free slot).
  3. Material reads the value via the corresponding Dynamic Parameter component.

Verifying

Spawn one mesh particle. Set its color attribute to red. Mesh should render red. If still default-colored, the binding or material Dynamic Parameter is missing.

“Output Mesh wants explicit bindings. Dynamic Parameter on material. Output Mesh maps to it.”

Related Issues

For VFX Graph events not firing, see events. For Niagara mesh attributes, see Niagara mesh.

Bind in node. Map in shader. Color flows.