The Vector of a UV map consists of 3 channels as for any vector in 3D space (whether Generated, Object, World, etc.) and as can be accessed via the Separte XYZ node. The 'U' and 'V' correspond to the 'X' and 'Y' outputs but the 'Z' ('W' in UVW space) is always zero.
Is there any way of assigning values other than zero to that 'W' channel? Obviously not via the standard 'UV unwrap' functions (since those only deal with the surface mesh so W is always zero) - but is this possible via Python?
I have tried using BMesh to assign the UV coordinates as in this answer but that only assigns uv[0] and uv[1] but doesn't seem to allow uv[2].
I have tried using Vertex Colors as an alternative (as they do allow 3 channels) but those are only to 8-bit precision (ie, 0.0 to 1.0 in 256 distinct steps) and so are far from ideal. The other potential solution would be to store the vertex points in another data structure such as pixels in a 32-bit color image (similar to this answer but storing vertex data rather than object data), referenced via an Image Texture from a vertex ID assigned using Vertex Colors but that's just plain messy - it would be far simpler to be able to use a 3-channel UV map to store 3 channels of float-32bit data.
Any ideas as to how the 3rd UV channel can be assigned or does the code behind the scenes not even store it?