Quick answer: Unity ParticleSystem custom data showing as black in shader? Enable Custom Data module, configure streams, and read with the matching TEXCOORD index that Custom Vertex Streams maps it to.
A particle shader expects per-particle hue in TEXCOORD1.x, but it’s always zero. The Custom Vertex Stream wasn’t set up to feed it there.
Enable Custom Data
On the ParticleSystem, open the Custom Data module. Pick Custom1 (or 2), set Mode to Vector, and configure the 4 components with curves / constants.
Add a Custom Vertex Stream
In the Renderer module, expand Custom Vertex Streams. Add Custom1.xyzw (or a subset). It will be assigned to the next free TEXCOORD slot — note the index shown next to the stream.
Match in Shader
struct appdata { float4 customA : TEXCOORD1; // the index Unity assigned };The fragment shader can now read the per-particle data.
Verifying
Particles pick up the custom data — per-particle color or motion variation visibly responds to your curves.
“Custom data is module + vertex stream + matching shader semantic. Miss one and you get zero.”
Document the TEXCOORD layout in a comment at the top of the shader — it’s the kind of binding that breaks silently when modules get reordered.