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.