One method could be to create a 3D array of vectors. Each one would represent a direction and an agent "inside" the appropriate cube would have its direction influenced by the cube's vector.
Making a cell for every pixel plus the depth "pixels" would result in a huge amount of memory. To solve this problem, have the cubes represent 8, 27, etc "pixels" (2*2*2, 3*3*3, etc.). If this makes the direction vectors too grainy, then interpolate between cube's direction vectors.