LOD problems - Trees Fix Revisited

[08OCT2020 Update]

I’m now convinced there is a bug in the FS2020 LOD and Tree Impostor implementation and/or configuration. I’ve spent a few hours modifying various specific values in the 10-asobo_species.xml file in order to isolate the effect of each category of values (min, max, etc…).

Given the XML file key names and the node structure, I’m pretty sure this file is controlling impostor configuration for the trees only. Impostors consist in replacing highly detailed individual trees with pre-rendered textured quad or billboards with a bunch of trees painted over. This saves a lot of draw calls and increases performance without any visual impact if done properly.

As a matter of fact, Microsoft has acquired a company specialized in this technology a few years back:
Microsoft acquires Simplygon to accelerate innovation in enabling 3D for everyone

Some useful links:
Vegetation optimization
Simplygon doc: Impostors

Back to the topic:

When experimenting I was able to make some of the trees fading away while moving closer and I suspected this was due to my changes. My understanding was that I was altering the ring distance for impostors and they were vanishing at a different distance than the distance the real 3D trees are supposed to replace.

However when reverting to the original file however I was having the very same behaviour: the closer you get to trees, the more they vanish, but as you are still closing in, they are reappearing after a short while. This is definitely a bug because simple distance eviction algorithm is binary: it is beyond or not.

Furthermore, when viewing the world in slew mode with the wide angle view, the trees are fading-in just at the right moment, that is when their size is large enough to cover a few pixels. Otherwise they are not showing and this is fine because they are usually appearing over a ground texture of the same colour. However, when in the cockpit or in zoom factors higher than 1, they are therefore appearing too late in view.

Therefore I’ve decided then to compare whether Tree LOD HIGH or ULTRA would make any difference. And yes it does!

Decideous trees are vanishing then reappearing as you get closer in ULTRA :

Conifer trees are vanishing then reappearing as you get closer in HIGH:

What is the source of the problem and what can be done?

I’m not sure because it seems modifying this file doesn’t really change the outcome much. However I’m pretty sure this file is using different values between the RTM and alpha and I’m wondering, should the ring distance be hard-coded in code, whether they also did synchronize the code in order to match the values in the file.

What is puzzling me is the Tree LOD setting is affecting different groups of trees and this further tells me the code has specific tables per tree-group which are hard coded and not in phase.

Of course I agree this is all just speculation but to me this shows there is a definitive bug in the tree ring distance handling.

What about buildings?

I believe the same bug exists in the code for the buildings. I don’t have any handy screenshots to share but it is very easy to try: start at LFMN, any runway, look toward the city to the East, and observe the following:

  • closest building are showing windows.
  • farthest buildings aren’t showing any window.
  • some buildings in the middle of the ‘no window’ ring are still showing windows!

NB: because of the distance between LFMN and Nice, it is best visible when Buildings LOD is set to HIGH.

This tells me buildings, like trees, are in different groups and the code is not handling these uniformly in regard to ring distance visibility. On top of this, when the simulator is displaying buildings with no windows they just look like texture-less entities like big color lego bricks and this is very distracting. It would be better the simulator is displaying windows on every building even if farther away and blurry so that it gives a sense of volume and reality.

I’m now filling a Zendesk with this information.