Hood view reflections are lagging

I don’t know if this was the case with Motorsport 6 and/or the Xbox One version of Horizon 2 as well, but it’s a bit strange.

When in hood view, the reflections are created by copying the screen buffer into a texture and then UV mapping that onto the car model. This allows the full scenery including other cars to reflect, so it’s a good solution overall.

For some reason though, in FH3 this has a delay, so the reflections appear to come from the previous frame and not the current one. This is most noticeable if you turn the camera left and right when in hood view, there’s a resulting jello effect.

It also suggests that there are two alternating buffers for the reflection texture - the texture is captured from the back buffer before the hood and UI are rendered and motion blur is done, it’s not just a copy of the front buffer. This makes things even more strange. Why keep multiple buffers for something that doesn’t need it?

If it used the front buffer as the source of course there’d be a one frame delay, but it would also make the UI reflect.

The jello effect could also be caused by the UV mapping itself lagging behind, but that is also a bit weird.

I haven’t seen this happening in any of the Xbox 360 iterations of Forza as far as I can remember.

It doesn’t happen in chase view which uses a cube map, nor does it in cockpit view where any reflections seem to come from the scenery’s local cube maps.

As an artifact, this is really puzzling.

They’re not modulating the normals in the G-buffer with motion vectors for the motion blur pass and afterwards drawing the reflections using those modulated normals… are they…? :thinking:

I’ll get no rest until I figure this out. :stuck_out_tongue:

Watch the reflections on the Meyers Manx headlight pods (on the Xbox). Now there is some real lag. More like a slideshow.

1 Like

Yeah, they seem to be a special case and use the car’s cube map, but rendered at a low frame rate, even with resulting tearing. I wonder what makes its frame rate drop that much compared to chase view?

Since the pods face towards the camera, the screen space reflections used on the hood wouldn’t work (since the screen only contains what’s in front). In cockpit view, the pods reflect the local cube maps from the scenery (the same are used on building windows) and fade between them.

I also noticed now that when you’re in hood or cockpit view, other cars get their reflections from the local cube maps as well. So apparently, when in those views, the player car’s cube map normally isn’t rendered at all. When in chase view though, other cars use the same cube map as the player car.

This gets rather strange in drone mode. Other cars nearby the player car will reflect what’s around the player car, until you fly the drone far enough away for the scenery around the player car to be unloaded. Then they will just reflect the skybox.

I hope there is a fix for the jello effect in hood view and that they could do some optimization to get the cube map up to 30 fps.

I noticed that the Xbox 360 Forza Horizon titles have the same jello effect on hood reflections. So it’s been inherited down the line.

I’ve made some more observations regarding reflections and how they work in the game.

A cube map rendered at 30fps is used on the player car and other nearby cars when in chase view.

The screen is copied into a texture and used for reflections in the hood view.

A few local cube maps are rendered and used for reflective surfaces in the scenery (windows, metals, water puddles, and so on), as well as reflective details in cockpit view. These cube maps are cross-faded to smooth the transitions between updates and seem to update about every ten seconds, although it’s probably variable.

As noted above, the Meyers Manx and possibly other cars have an additional low frame rate, low resolution cube map for details where using the local cube maps for reflections would not look right. But I don’t think 15 fps looks right either.

The road and larger water bodies use planar reflections, with the scenery rendered upside down relative to the ground elevation beneath the camera. Since this causes parallax errors where the scenery undulates, cars are rendered upside down relative to the ground elevation beneath them so their reflections appear in the right place. In cockpit view, car reflections are left out.

Cockpit view of course also has a texture reflecting the steering wheel, the driver’s hands and some dashboard features; plus a texture for the rear view mirrors.

Unlike the Horizon titles on the Xbox 360, cockpit view does not use a copy of the screen for reflections but relies solely on the local cube maps and the low res cube map as on the Manx headlights.

So, they’re combining a bunch of methods depending on which work best in a particular case and how many things they can do at the same time. Overall I’m impressed, but it still goes to show that reflective surfaces is still one of the trickiest things to do convincingly in real-time.