Questions about landscape material and tiled landscapes vs single landscape

Hi, some questions I didn’t find a definitive answer for as of yet, regarding landscape materials and tiled landscapes vs single landscape (no world composition, no streaming chunks):

  • Does the amount of material parameters affect a material’s performance and compilation times? I have in mind a landscape master material, with material functions used for each landscape layer.

  • Does reusing a function in a landscape material (instead of using many different ones) give any performance gain?

  • Is there a way to automatically expose a material function’s parameter in a material where it’s used WITHOUT overwriting variable values of other instances of this mat. function that are in the same master material?

    (To avoid the hassle of creating a lot of function inputs first, and then exposing each one as a parameter in the master material where the function is used - kind of nonsense, cumbersome. I tried using “Prefix Parameter Names”. It worked, but as I said, if I reuse this function in a master material (for optimization) more than once, the values get overwritten, because the parameter names are not unique, obviously.

  • For a ~2 km x 2 km (resolution 2017), is it necessary to use world composition and tiles, in terms of loading and streaming performance?
    And for a ~1 km x 1 km landscape?
    Can it get slow to load after populating the level with all foliage, actors etc?

    The obvious con of using world composition is the more complicated, boring workflow of having to create streaming levels LODs, loading and unloading streaming levels all the time while working etc…

Thanks in advance for any answer. Will be much appreciated.

(there’s some other questions I’m not recalling right now. If I remember them I’ll post here later.)

Yes. Mostly it’s what you do, not the amount of parameters. But more things change, the more instructions are needed, the heavier the material.

No. It’s just a convenience but usually (depending on what of course) the function just adds a new block of code.

Material instances?
Literally every instance has it’s own set of parameters.

Ha, no you need specific inputs on functions for the instances to work right.

You MAY get better performance. It depends. Works fine as 1 landscape too, since it is very small all things considered.

loading times aren’t really that bad if you use the proper tools because of instancing. Render thread can get bad quick, but it is dependent on your models.

Personally, I find a loss of 10fps whenever using world comp vs same map tile.
I have a topic about this with reproduction steps in answer hub that no one seems to care about. You could go through it and do the same test yourself to make a determination of what you are better off using.

overall, the landscape material is a tier 1 performance killer. So when you bench mark make sure to use the same material, uniform.

Thanks a lot for your reply, MostHost LA!
Will spare me a lot of guesswork and tests. And I already do a lot of tests for those performance critical features.

This was very interesting to read also:

I will take this into consideration while making my levels. Thanks for that.

I actually had kind of a hard time using World Composition some months ago, because of the hitches when new tiles were being loaded until I found that this is an issue only in Play-in-Editor - generally not present or barely noticeable in Play in Standalone, cooked builds etc. It seems that the async load is not available in Play-in-editor.
but the main thing is, as I said, the annoying workflow right now for world comp., while you’re populating your level, testing, set dressing. You keep forgetting to change the current level, and so the actors end up in other tiles. Hehehe.

MostHost LA, still on this:

Do your landscape material had tessellation enabled?
I noticed my streaming tiles/levels heavier to load when my landscape material had tessellation enabled. I mean: if compared to a single landscape, no streaming. At least in play-in-editor.