As the title explains we’re getting the issue where Low textures in our scalability settings is causing much lower landscape geometry resolution than we would expect. This is an issue for us mainly as it potentially causes consistency issues in multiplayer between users using different settings, not to mention the obvious visual discrepancies for the client.
If you could update me on this or how we can fix this that would be great.
I’ll be happy to dig into this and try to find what may be occurring. UE-11872 was marked as a duplicate of UE-11542, which should have been fixed in 4.8. I attempted to reproduce this on my end but thus far have been unsuccessful. Do you have any specific steps I can take to recreate this? Is it limited to a single landscape/map/project or does this occur in a clean, blank project with no additional content?
I’m happy to hear you are no longer experiencing this issue. One of my coworkers suggested that exporting the heightmap may be forcing the editor to do a rendering pass, which might be what fixed the error. Have you built the level lately using the “Build” button? It is possible that the level, once built, would not show this same error.
So the problem in the “Low” case is you are roughly 112 MB over their texture streaming budget. The total pool size set via the [TextureStreaming] PoolSize value in the BaseEngine.ini is supposed to be be enough for all the textures needed to have on screen at a decent resolution.
If the current scene is over budget then the engine will stream out textures that are needed for rendering and shouldn’t be streamed out, or may not be able to stream in textures that should be. Landscape textures have higher priority but it seems the situation is so bad nothing is being streamed in at all.The main cause seems to be UI textures, which are not streamable if they’re setup with mipmaps (which is recommended for UI textures) leaving very little for actual streaming textures.
Is there a particular reason you are loading a number of UI textures into memory?
One way to manage textures and other resources for UIs that are not normally needed, but have a lot of resources (eg character selection) is to use a streaming level where a Level Blueprint is responsible for bringing up the UI. I would try streaming in the level when you need the UI, and then unload it when you’re done. All the UI resources that the streaming level referenced would then be unloaded.
Let me know if you have further questions or need additional assistance.
Hi Adam, that would be great, thank you.
We’re using landscape proxies first created long before 4.8 so that could be our problem. I’ve attached a level with one of our proxies in with the issue, hopefully you’ll get it on your end too.
Worth noting I tried pasting just the Landscape proxy into UE4 4.8.1 Public release but I didn’t see any issues. Pasting it into a blank level in our 4.12.5 however DID cause the issue to re-occur.
Also attached a screenshot showing what it’s looking like on Low and Epic texture settings my end.
Thanks for looking into this.
If you remove the landscape material from the landscape, are you still seeing the error? I attempted moving this into a 4.12.5 project but thus far have not successfully reproduced the error on my end. Are there any additional steps I need to take to recreate this?
Removing the material doesn’t fix the error no. I’m not sure what additional steps I can take to repro this as it only seems to happen within our Project. Simply opening our level and changing Texture quality scalability should be enough.
I brought the landscape into a blank project to test on my end, which is attached here. Can you download the project and see if the error reproduces in this environment?
Unfortunately it’s not happening for me in that project when opening in 4.12.5
Can you try the console command “RecreateLandscapeCollision” and see if it makes a difference in your project? Unfortunately I have been unsuccessful in reproducing this on my end. If this does not fix the error, and you are comfortable with it, can you upload a project where this is occurring and post it here? If privacy is a concern, we can make the post private so that only you and Epic staff can see the post.
So interestingly I’ve managed to ‘fix’ this.
I couldn’t replicate this is in an empty project and the console command didn’t seem to fix it so I tried a few other things - it turns out simply exporting the heightmap is enough to cause the Landscape to regenerate its geometry correctly - I don’t even need to re-import afterwards.
I’m not sure how this ‘fix’ works but maybe it will help anyone else currently using old Landscapes and running into this issue.
Incase you’re interested I’ve attached an image of two landscape proxies next to each other whilst on Low Texture Quality. One has been exported and one hasn’t.
Thanks again for taking the time to look into this
Hey Adam, sorry to drag this up again, I’ve noticed we’re still getting this - it looks like simply restarting the Editor causes the error to occur again - I tried building geometry while I was on Ultra and it didn’t help. Do you have any other ideas? We’re a bit stumped with this.
edit - just noticed you didn’t specify build geometry, I’ll try doing a full build and get back to you
Do you have a sample project this reproduces in I can take a look at? Since we haven’t had much luck outside of the project in question, if you have a sample it may help to determine what is going on.
Just as a follow up I tried a full build and the problem persists after restarting the Editor.
This is a very odd issue for certain. Just to ensure I fully understand, can you confirm this is what you are seeing:
- When you restart the editor, the landscape collision is incorrect on low texture scalability. This is especially telling due to multiplayer as some clients will have different information than others due to this issue.
- Exporting the heightmap fixes the error without a need to re-import, but restarting the editor returns the landscape to the incorrect collision.
- “RecreateLandscapeCollision” does not fix the error, nor does building the level, either as build geometry or a full build.
- Moving the landscape to a new project does not reproduce the error, only in the first project.
On one of the links above, Eric Ketchum mentions this in regards of texture scalability:
In the case of Landscapes, you are affecting the level of detail in the mip detail computation with the variable r.Streaming.MipBias=2.5 (Default Value for Low Texture Setting). You can however open the Output log and type in r.Streaming.MipBias=0 manually and the engine will use lower texture settings for the other variables but will use the high Mip Computation value.
Have you tried this on your end?
Yep, that’s all correct. I can’t recreate this outside of our project.
I saw that, however I was going to use that as a last resort as it would affect things other than the landscape geometry?
Yes, it would affect all textures rendered, but I believe it may be a good possible solution to the error you are seeing on your end.
Hi again Adam,
I’ve tried entering r.Streaming.MipBias=0 into the output log but I didn’t see any change both in PIE and in Editor. I am going to try modifying default scalability for our project with the setting and get back to you. I definitely would prefer a ‘proper’ fix for this as it’s less than ideal. I noticed other people who had this bug reported it fixed when updating to 4.10 which leaves me very confused.
Unfortunately I haven’t had time to spare on repro for this however I did discover something interesting - despite everything I’ve read to the contrary it seems that r.StreamingPoolSize is the setting that causes this issue. r.Streaming.MipBias=0 has no effect in a build, in PIE, or editor using both the console and DefaultScalability. Once our StreamingPoolSize gets to around 300-400 however we notice a sudden switch to the inaccurate geometry shown in the original post. For now we will probably use this setting as a workaround.
Apparently my post from Friday did not appear, I apologize for the delayed response due to this. I am still looking into this error on my end. Unfortunately, I haven’t been able to reproduce it yet with r.StreamingPoolSize, but I will continue to delve in on my end. If in the meantime you find any additional reproduction steps that will help to recreate this error, please post them here and I’ll be happy to take a look.