I’ve been scouring the web trying to find an explanation of what the position of a vertex actually means before and after each projection in the standard MVP chain. After reading and trying some things out, I understand it in a general sense:
- Initially, position is a multiple of the bounds of an object, in local object space
- After M, position is in world coordinates
- After V, position is in camera coordinates
- After P, position is in screen coordinates
What I’m trying to figure out for each of these is what exactly the units mean. Here’s what I understand so far - if anything is incorrect or you can fill in the gaps, I’d appreciate any help
Initial
Units are -0.5 to 0.5 along the 3 axes, with -0.5 and 0.5 corresponding to the bounds of the object. No surprises there.
Post-M
Units are in Unity’s world coordinate system. No surprises there.
Post-V
Units are in some kind of camera coordinate system. X and Y appear to be square, and a quad with an assigned X and Y range of 1 in MV spaces doesn’t appear to quite fill up the screen from bottom to top. No idea what units Z is in.
Post-P
X and Y units are in viewport coordinates, with -1 to 1 being the range horizontally and vertically? No idea what units Z is in.
Once you’re in post-P space, it appears you can use _ScreenParams to get the number of pixels and convert from viewport to pixel coordinates in XY.
So in a general sense, I’m looking for information on what the coordinates mean in each space, and what can be done with them.
I’m trying to create some custom billboarding. Here are a couple examples of what I hope to do with this information:
- Create a billboard that appears the same size regardless of distance from the camera.
- Create a billboard whose size is dependent on distance from the camera, but not linearly. E.g. a billboard that appears to be 0 pixels wide at 1000 game units, and 100 pixels wide at 10 game units, increasing along some kind of curve.