Quick answer: Connect to the master node’s Vertex Position input (Object space). Add Position (Object) + offset, write back. For instanced offsets, declare property as Hybrid Instanced.
You add a sine wave offset for grass sway. Connect the result to fragment color thinking it’s a position pipe. Geometry doesn’t move because vertex pipeline never saw the offset.
The Fix
Shader Graph Master Stack:
Vertex:
Position: [Object Position] + [sin(Time) * Up * 0.1]
Fragment:
Base Color: [Sample Texture 2D → UV]
// Position node setup
Position(Object) → Add → Vector3(0, sin(Time)*0.1, 0) → Vertex Position
The master Vertex Position input expects Object-space positions. Compute offsets in any space, but transform back to Object before writing.
Per-Instance Sway
Blackboard Property: Float "_PhaseOffset"
Hybrid Instanced: true
Time + _PhaseOffset → sin → multiply by Up → add to Position
Verifying
Apply material to a plane. Vertices ripple. Without the connection: flat plane. Disable Hybrid Instanced: all instances move identically (no per-instance phase).
“Vertex Position input. Object space write. Hybrid for instances.”
Related Issues
For Shader Graph keyword type, see keyword type. For custom function include, see custom function.
Vertex pipe wired. Geometry moves.