Quick answer: Mesh.SetVertexBufferParams must declare attribute. Shader Graph reads via UV2/UV3/Color matching the slot.
Custom mesh with per-vertex weight in TexCoord4. Shader Graph UV4 input reads zeros. Vertex buffer params didn't include UV4.
The Fix
var mesh = new Mesh();
mesh.SetVertexBufferParams(vertexCount,
new VertexAttributeDescriptor(VertexAttribute.Position),
new VertexAttributeDescriptor(VertexAttribute.Normal),
new VertexAttributeDescriptor(VertexAttribute.TexCoord0),
new VertexAttributeDescriptor(VertexAttribute.TexCoord4, VertexAttributeFormat.Float32, 4)
);
mesh.SetVertexBufferData(vertexData, 0, 0, vertexCount);
// Shader Graph: UV4 input → pipe into Vertex Position offset / fragment
Buffer layout and Shader Graph slot must agree. UV4..7 are conventional homes for custom per-vertex floats.
Verifying
Per-vertex weight drives shader (e.g. emission). Without descriptor: zero.
“Buffer says UV4. Graph reads UV4. Data flows.”
Related Issues
For Shader Graph vertex offset, see vertex position. For SubGraph property, see SubGraph.
Match buffer to graph slot.