Jump to content

Oblivion Remastered - Runtime Virtual Texturing pop-in


Recommended Posts

Every time I load a save, teleport somewhere, or turn the camera towards a direction for the first time I can see textures of structures like walls or stairs gradually changing from lower to higher quality.

After extensive testing I've found that RVT (Runtime Virtual Texturing) is the source of the pop-in, because it's completely gone when setting r.VirtualTextures=0, but of course the game looks bad like that.

Settings I've already tried that didn't fix the issue:

r.VT.MaxUploadsPerFrame=64 or 128
r.VT.MaxContinuousUpdatesPerFrame=64 or 128
r.VT.MaxTilesProducedPerFrame=64 or 128
r.VT.NumTranscodeRequests=32 or 64
r.VT.NumFeedbackTasks=4
r.VT.ParallelFeedbackTasks=1
r.VT.PoolSizeScale=1.0 up to 4.0
r.VT.FeedbackFactor=4
r.VT.RVT.StreamingMips=3
r.VT.RVT.TileCountBias=2
r.VT.RVT.DirtyPagesKeptMappedFrames=60
r.VT.RVT.DirectCompress=0
r.VT.RefreshEntirePageTable=1

In the attached screenshot, left is 1 second after loading, right is 5 seconds after loading.

Could there be a way to improve RVT (make it faster?) in order to eliminate or at least reduce loading pop-in?

before-after2.png

Link to comment
Share on other sites

I have the same issue. It is especially bad in Imperial City. I can watch every brick load in nearly one at a time. It's so bad I cannot believe they shipped the game like this. 

Does everyone have this issue or is this something unique to my setup? I'm running on a 4090 at 4k resolution. The performance is pretty bad so I'm using DLSS Quality + Framegen to hit about 130-140 fps which feels good, however the texture pop-in is crazy. Even if I disable DLSS entirely I get ~60 FPS but the texture pop-in persists.  I've tried all sorts of engine.ini tweaks and none of them have helped.  This is frustrating as the game would be enjoyable if I could fix this one issue. I'd rather have the game load 2-3 seconds longer than deal with this pop-in. 

Link to comment
Share on other sites

4 hours ago, Daemondred said:

I have the same issue. It is especially bad in Imperial City. I can watch every brick load in nearly one at a time. It's so bad I cannot believe they shipped the game like this. 

Does everyone have this issue or is this something unique to my setup? I'm running on a 4090 at 4k resolution. The performance is pretty bad so I'm using DLSS Quality + Framegen to hit about 130-140 fps which feels good, however the texture pop-in is crazy. Even if I disable DLSS entirely I get ~60 FPS but the texture pop-in persists.  I've tried all sorts of engine.ini tweaks and none of them have helped.  This is frustrating as the game would be enjoyable if I could fix this one issue. I'd rather have the game load 2-3 seconds longer than deal with this pop-in. 

I have a RX 6750 XT, everyone likely has the same issue

Link to comment
Share on other sites

My OCD cannot handle being in Imperial City. I've been trying to fix this for several days now. I am getting closer, but it has been very difficult as the shipped .exe is fairly locked down. I think there are issues with the size of the Virtual Texture Streaming pools, and some of the other virtual texture streaming settings that aren't exposed within the console or won't take hold when putting them into a user defined engine.ini. 

For example, the r.VT.MaxUploadsPerFrame=64 or 128 value you tried is the same rabbit hole I started down myself. It doesn't really make an effect because the devs have set r.VT.MaxUploadsPerFrame.Streaming=4 which supercedes any other value. It also cannot be set to anything other than 4 in Engine.ini, it will have to be set likely in the basescalability.ini using a .pak mod, which I'm working on now.  But you *CAN* manually change r.VT.MaxUploadsPerFrame.Streaming=64 or 128 in game. This massively speeds up the process, but then you trade 4-5 seconds of slow texture pop-in for ~250ms of awful hitching as the engine tries to do it all at once. 

To really fix this problem the game needs to fully load the correct high res textures for everything that's in your FOV when entering a new area. In cities this is the worst because so many tiles are visible when loading and the way they have implemented Virtual Texture streaming you will have to watch them stream in every time you load or switch areas.  They likely need better compression on some textures, especially ones that don't necessarily contribute that much to the scene. The game badly needs some optimization from the dev studio. Until we get a fix from the developers or a real modkit where we can start fixing textures the best we can do is try to stream their textures faster.

In the meantime, I finally released the first version of my Luxury Visuals - HDR mod that enables the native Unreal Engine 5 HDR rendering pipeline and bundles some visual tweaks that pair well with HDR. The next mod in that series I plan to release will attempt to better utilize VRAM for higher end GPUs with >24GB, which may allow us to tweak the Virtual Texture pools, improve VT residency, and possibly speed up texture streaming enough that it won't be so obnoxious every time you change areas. Stay tuned! 


 

Link to comment
Share on other sites

On 5/12/2025 at 10:06 PM, Daemondred said:

My OCD cannot handle being in Imperial City. I've been trying to fix this for several days now. I am getting closer, but it has been very difficult as the shipped .exe is fairly locked down. I think there are issues with the size of the Virtual Texture Streaming pools, and some of the other virtual texture streaming settings that aren't exposed within the console or won't take hold when putting them into a user defined engine.ini. 

For example, the r.VT.MaxUploadsPerFrame=64 or 128 value you tried is the same rabbit hole I started down myself. It doesn't really make an effect because the devs have set r.VT.MaxUploadsPerFrame.Streaming=4 which supercedes any other value. It also cannot be set to anything other than 4 in Engine.ini, it will have to be set likely in the basescalability.ini using a .pak mod, which I'm working on now.  But you *CAN* manually change r.VT.MaxUploadsPerFrame.Streaming=64 or 128 in game. This massively speeds up the process, but then you trade 4-5 seconds of slow texture pop-in for ~250ms of awful hitching as the engine tries to do it all at once. 

To really fix this problem the game needs to fully load the correct high res textures for everything that's in your FOV when entering a new area. In cities this is the worst because so many tiles are visible when loading and the way they have implemented Virtual Texture streaming you will have to watch them stream in every time you load or switch areas.  They likely need better compression on some textures, especially ones that don't necessarily contribute that much to the scene. The game badly needs some optimization from the dev studio. Until we get a fix from the developers or a real modkit where we can start fixing textures the best we can do is try to stream their textures faster.

In the meantime, I finally released the first version of my Luxury Visuals - HDR mod that enables the native Unreal Engine 5 HDR rendering pipeline and bundles some visual tweaks that pair well with HDR. The next mod in that series I plan to release will attempt to better utilize VRAM for higher end GPUs with >24GB, which may allow us to tweak the Virtual Texture pools, improve VT residency, and possibly speed up texture streaming enough that it won't be so obnoxious every time you change areas. Stay tuned! 


 

Nice work. Awaiting your mod for the RVT. Thank you.

Link to comment
Share on other sites

So ... this problem has proven more difficult than I thought to tackle. I think I need to rip apart all of the texture pools, figure out how they were setting up LODBias, make sure they have enough VRAM, and then put them back together in a way that actually makes sense.  The game is constantly trying to load huge textures in when it's not needed at all. No one needs some 8k texture of a brick that's 50 pixels wide at most. They really didn't optimize texture streaming at all and I haven't found a clean way to run the game without it either. 

For now, here's one thing you can do that helps somewhat, but can't be changed through a simple engine.ini line:

Try this in the console:

r.VT.MaxUploadsPerFrame.Streaming 128

You can test various values for this cvar by using r.VT.Flush in the console which flushes all the tiles and restreams them. You can watch how it speeds things up. It doesn't fix the problem, but it at least reduces how long you have to watch tiles stream in .... 

I have found a way to make it stick by using a .pak to modify the basescalability.ini and WindowsEngine.ini files but that's not trivial and then you end up having conflicts with anyone else that tries to modify the same files. Also makes it more likely that things will break when the game eventually updates. With my luck they'll update the proper fix for this problem right around the time I figure it out finally.  But if it's possible for me to fix this with just modifications to the Texture Pools and LODBias settings then I'll release it as a mod. If nothing else this should help those of you being tortured by this like I was. It's mostly noticeable with max quality textures enabled. That's the other solution - lower texture quality and this becomes much less noticeable. Which is likely why I see so many people claiming they have never had this problem and telling people to do silly things like reinstall the game or their video card drivers as if that could resolve a problem like this.
 

Link to comment
Share on other sites

I have pulled my hair out trying everything to resolve this. Unfortunately, using very large very high resolution streaming virtual textures was a serious design flaw for a game where you change scenes frequently. Use them out in the open world sure, but in every zone? You can't disable them as they are used everywhere for nearly every surface.

I have been playing around with setting the LODBias higher for various texture groups. The problem is it's not entirely clear to me what each texture group is for or how changing either the max texture size or LODBias will impact the problem. All of the texture groups default to 16k max textures with LODBias=0. The size of the texture streaming pools and the LODBias overall is then adjusted based on which settings you pick. So when you choose Ultra quality textures from the settings it just changes LODBias to 0 for everything and slightly increases the vram for streaming pools. Then when you load into an area in Imperial City, every brick, every stone in the floor, the doors, etc are all using those huge 16k Virtual Textures that then stream tiles based on what is visible. If you want to see how it works you can try using r.VT.Borders 1 in the console and then r.VT.Flush and you'll see how many tiles need to stream in upon loading.

I understand now why they tried to clamp down on high FOV settings as it just makes the problem worse. VT works by only streaming in the tiles that are visible, so the more view distance and the higher the FOV, the more tiles that are required when that scene trys to load in. On high settings the LOD Bias of 0 has it streaming in high quality VTs even for distant objects which is why you can watch the tiles on the wall on the opposite side of an area stream in within a second or two of loading. Ideally, those tiles would have recognized that a lower mipmap is sufficient and only streamed the higher res one in as you get close enough to see it. The problem is that unlike mipmap streaming normal textures where performance tuning is well understood and LODBias can be used more effectively, VT textures are computationally expensive to sample and AF is disabled for them when streamed. So we get very jarring texture pop-in for any scene with a lot of VT Tiles, especially if you move your camera shortly after loading (Imperial City is by far the worst). 

Someone made a poor design decision to save a little on VRAM usage at the cost of performance, and clearly didn't think through the architecture of the game itself. The whole reason there are so many individual areas is that in 2006 you had to work around VRAM constraints so if you wanted nice textures you needed relatively small scenes.

I am not aware of any easy way to fix this short of the modding community providing all new textures that could replace everywhere VTs were used and then disable the VT system entirely. That would be a huge overhaul, but that hasn't stopped modders before! I think it's lame Bethesda would release the game out of nowhere with performance issues like this, but the company has a long history of releasing things far before they were ready and relying on the user community to solve most of the problems on their own. 

As time permits, I'll keep looking for a possible solution I've overlooked but for now the best I can do is speed up the horrible texture streaming or just live with it. I am still on the fence whether slow but slightly less noticeable texture pop-in over 5-10 seconds is better or worse than extremely noticeable and hitch inducing fast loading for 400-500ms. The devs must have decided the former as they intentionally limit the VT system throughput well below the engine default. 

Link to comment
Share on other sites

So after pulling my hair out some more I made moderate progress on a collection of settings that appear to help mitigate the really bad pop-in most places in the world. Frankly, the Imperial City is the worst place I've found so far and it's not even close. It's shocking they did so little optimization for such a heavily used area. Also, so much of it is wasted on high res wall bricks.  Which is what my latest mod has tried to tackle without messing too much with the fidelity of the rest of the world. Using LODBias on a few select Texture Groups and upping the throughput on the virtual texture streaming system I cut down the time it takes to fully stream all the VT tiles to your default FOV when entering most Imperial City areas from 4-5 seconds to about 350ms.  Now it feels more like a hitch, which is something I've been able to get used to as it's not too much different than all the other random hitches this game has. 

I want to play a lot more tonight to make sure there isn't any glaring stability issues before I package it up. I'll likely have a 1.0 release out tomorrow for those that want to test it out. 

Link to comment
Share on other sites

Also - If any modders out there are more knowledgeable about where Oblivion Remastered stores textures and how much we can see without official mod tools I would like to know how difficult it would be to find the specific base textures for the walls, floors, and steps in the major Imperial City zones. I was able to figure out which TextureGroup they belong to through trial and error more or less, and have use LODBias for that whole group to mitigate the worst of the texture pop-in for now, however the real fix that won't reduce fidelity in parts of the world that aren't a problem would be to either replace those textures with smaller or better compressed versions, or be able to assign them to a new TextureLODGroup so I can put all the offending textures into one group to increase their LODBias without impacting all the rest. That's a bit more complex than anything I've tried to do so far and if someone else has already tried this or would know where to start I'd appreciate the tips! 

Link to comment
Share on other sites

@Nyanyanyanyanyan

After trying seemingly millions of different configurations, I found a handful of settings that actually seem to do anything. I won't say it fixes the problem ... but it does speed it up! It's so fast it just feels like any other of the hitches this game has. I prefer it to the slow loading personally even if it's a bit jarring at first.  Let me know what you think:

Luxury Visuals - Texture Streaming Optimizations (TSO)

Link to comment
Share on other sites

×
×
  • Create New...