[...] I start with an image resource:
vil_image_resource_sptr pResource = vil_load_image_resource(name);

Then, as Ian suggested, I use pResource->pixel_format() to determine what I will call my "native" view:

vil_image_view<vxl_uint_16> nativeView = pResource[0]->get_view(i, ni, j, nj);

But now I need to know what the different planes are [...]
If I understand it correctly: your plane info can be derived from
int di = nativeView.istep();
int dj = nativeView.jstep();
int dp = nativeView.planestep();

E.g., if di=6 and dp=2 (and assuming 3 planes), you would have your 3x2 bytes per pixel contiguously,
while with di=2 you have the 16-bit values for one plane and one image row physically next to each other.

--      Peter.