Well, what I was really trying to describe was for which situations you can pre-compute a perspective divide, and which you can't.kulor wrote: ↑Wed Aug 03, 2022 7:23 amTilt would be pitch, not FOV. Dynamic FOV would be something like, being able to zoom in with a sniper rifle in a game like Goldeneye or MDK, or I seem to recall Ocarina of Time animates camera position with FOV to get this kind of "background zooming out" effect...it's a bit hard to explain, if I can find it I'll give it a link here. I've never seen an SNES game with an adjustable FOV, that was only something that started cropping up with real polygon engines in 5th gen stuff.
For the purposes of a perspective plane, "FOV" should really just be your horizontal scaling factor. I don't really understand why the SNES shouldn't do this? Pilotwings and Mario Kart do both have independent horizontal scale. F-Zero and Final Fantasy VI could change horizontal scale but not independently of vertical scale, due to the compromise I mentioned. Mario Kart and Pilotwings don't exploit this extra parameter do to a dolly zoom... but not because it would be difficult. Their engines can do it, as far as I can tell. I think only because it's a pretty striking aesthetic effect, and they don't want it. Most movies don't do dolly zooms either. A consistent view scaling is usually important to keep the viewer oriented.
So, we're rasterizing a tited quad. You have a horizontal scale and vertical position at the far/horizon/top scanline, and a different horizontal scale and vertical position at the bottom scanline. You interpolate between them from top to bottom, but the vertical spacing of that interpolation needs to be corrected with a division step (perspective divide).
So, if you want to use a pre-computed table for the perspective divide, anything that changes the vertical spacing/scale of the scanlines would require a different table. Tilting the plane or adjusting the distance to the horizon would change the spacing.
FOV by itself wouldn't, as it should just change the two horizontal scales you're interpolating between. In the compromise used by F-Zero/FF6, FOV can't be separately controlled from the vertical draw distance, so they couldn't do an effective dolly zoom, but they can and do adjust it while tilting.
So... in my estimation dynamic FOV isn't the thing that should be harder on the SNES, and all the examples I looked at do indeed have dynamic tilt, even though independent horizontal scale is a little bit harder.
So the bottom line, I think, is that unless the only thing the camera can do is rotate and translate around the plane (i.e. no tilting), you can't get away with tabling the divide. FZ/FF6 do 1 divide and 2 multiplies per HDMA line. MK/PW do 4 multiplies and get independent horizontal scale. The latter probably needs a DSP to get below the 1-scanline per HDMA line computation threshold, though as I mentioned I think interpolating every second line would be enough to get it back under that metric.
I'm not actually sure how much performance tabling the divide could buy, here... I haven't spent much time considering it, because I didn't want to give up dyanmic control of the perspective, which already seems practical.
Anyway, if you're doing all 4 multiplies, you sure can do a dolly zoom, if you want it. I don't think that's unfeasible for SNES at all! It might be tricky to put that particular effect to good artistic use, though. Like that OOT scene is the classical hitchcock thing where you're using it to frame a person's face within the scene... doing it with only a tilted plane is going to be a bit more limited, visually.