• All submissions to this site are governed by Second Life Project Contribution Agreement. By submitting patches and other information using this site, you acknowledge that you have read, understood, and agreed to those terms.
Issue Details (XML | Word | Printable)

Key: VWR-1119
Type: New Feature New Feature
Status: Open Open
Priority: Major Major
Assignee: Unassigned
Reporter: Haravikk Mistral
Votes: 11
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
1. Second Life Viewer - VWR

Texture LOD

Created: 07/Jun/07 02:17 PM   Updated: 30/Sep/09 01:31 PM
Return to search
Component/s: Graphics, Performance
Affects Version/s: 1.15.0.x, 1.15.1.x, 1.16.0.x, 1.17.0.x, 1.18.3 Release Candidate, 1.18.0, 1.18.1.2, 1.18.2.0, 1.18.3.5, 1.18.4 Release Candidate, 1.18.4.3, 1.18.5 Release Candidate, First Look: WindLight, 1.22, 1.23
Fix Version/s: None

Issue Links:
Relates
 


 Description  « Hide
Currently it seems there is no option to adjust texture detail. This is fine, as textures tend to look bad at lower resolutions than they actually are, especially with writing etc as you lose the ability to read it as it goes blurry.

Anyway, one thing that from my tests seems to suggest that we are missing is a texture LOD! Currently textures are shown (and thus loaded into the graphics card) at FULL-SIZE, even if it's some distance away. What I propose then is that the further away an object is (and smaller it's size etc), the lower-res the textures become. JPEG-2000 is meant to make this fairly easy to do with its progressive file-format.
This can be an additional slider along with object etc. detail, and when right down will only display full-res textures if they occupy a reasonable amount of your screen space, otherwise they use lower and lower detail the further away they are until they only give the most general impression of what they are (a coloured smudge).

This is basically along the lines of 'mip-mapping' which is used in many games, and it means that textures in far away objects will occupy very little memory as the tiniest resolution versions are being used, while ones near you still look crisp and clear.

On these lines though, fix the damned LOD, it still seems to struggle to do its job, because it's either no taking into account all the factors (ie is oblivious to my plummeting frame-rates) or it is just plain broken.



 All   Comments   Change History      Sort Order: Ascending order - Click to sort in descending order
Lex Neva added a comment - 08/Jun/07 12:17 PM
I could be wrong, but I think SL does do mip-mapping.

Haravikk Mistral added a comment - 08/Jun/07 04:14 PM
Hmm, part of the problem with straight-up mip-mapping is that it only really reduces the amount of information that needs to be drawn on screen, but tends not to actually reduce the amount of texture information ending up on the graphics card. This is fine in games as it means you just put all the full-size images into the graphics card memory, and then only sample parts of it if it's far away. This reduces draw-time, but doesn't do anything for memory efficiency.

However, this isn't the same as actually sending smaller version of textures to the GPU, as this will reduce texture load which isn't as much a problem in main-stream games as the number of textures per scene is controlled. Meanwhile in SL unfortunately you could have hundreds, if not THOUSANDS of different textures in a scene at once, all having to be swapped in and out of the graphics card continuously because you have 1gb of de-compressed textures trying to fit onto a 256mb VRAM card for example.

This is really more a suggestion that a similar idea be applied to be the actual texture detail being used in the first place. So instead of a full-size 2mb texture being sent, a 512k one might be if it's in the distance.

It's one of the reasons that high-speed systems with the highest performing graphics card might not actually perform as well as a slower system with lots of RAM and/or VRAM, as the swapping because of SL seems to become horrendous and really starts to kick the ass out of a system. I mean, I've not tested it but if I could get a 512mb graphics card with similar (or worse) spec to my current one, then I would fully expect performance to improve in areas with a ton of textures. Purely because so much information is trying to get onto my graphics card all at once that it can't cope. When I was at a mall recently, a big, open-plan place with far too many vendors visible all at once, I found SL was pushing my 2gb of RAM to the limit. 2GB!!! I've ordered another 2gb that I wanted anyway, and expect that to make a huge difference as well if I go back, or go to a similar place, since less data will have to be swapped out to virtual memory.


MarquisDe Paine added a comment - 29/Jun/07 12:53 AM
I especially feel that avatar texture detail level should be progressive. People can wear clothes with huge textures, and there can be a lot of avatars in the same scene. A simple option to limit texture size to 512x512 would mean a 75% memory save, and progressively loading smaller textures for people farther away would have an even more dramatic impact.

Buildings etc. are trickier, as there can be a lot of text embedded into some images. The limiting algorithm needs to make sure that textures load at full detail up close.

But this is something that needs to be done. It is probably infeasible to educate all residents on the fact that a texture is always uncompressed in the gfx pipeline. People tend to think that if it will compress well it's not a problem.


eltee Statosky added a comment - 29/Jun/07 01:52 AM
SL already absolutely has this in multiple methods. Textures are always downloaded in progressive increments, the detail only coming in to the highest levels when you zoom in to them or they are drawn large on the screen or very close to your av. In addition depending on the setting you pick for your 'video card memory' SL will cap you at specific steps of this progression... i.e. if you pick you have a 32 meg graphics card, you will NEVER be sent 1024x1024 levels of detail, SL will send you the 256x256 stage and stop there. You can test this easily for yourself.

also for avatar clothing and skins those are 'baked' on your local computer, and absolutely will only be sent to/from SL for other people to see with a total resolution of 512x512 for the head, the torso, and the legs. You can 'use' a 1024x1024 texture for a shirt, but no one will actually be shown it, it will re-bake to a 'final' texture to be sent out on yer machine, as 512x512. On the flip side i believe if you use a 256x256 it will up-sample to 512 when combining with all the other texture layers for the final burned skin


Haravikk Mistral added a comment - 16/Aug/07 07:01 AM
The question then is if you see a texture at full-detail (you're close to it) and then move away, what detail level is it loading at? The performance problems in high-texture areas (e.g malls) implies that once you've downloaded a texture at full detail, the full texture will be swapped in an out of VRAM until you can no longer see that texture, even if you're far away.

What I'd like to see is textures only being swapped into VRAM at full-detail if you can still see that detail. Basically when deciding which textures to display. So scanning a scene might go like:
Texture B @ 50m = 64 x 64
Texture A @ 30m = 128 x 128
Texture B @ 10m = 512 x 512
Texture A @ 15m = 256 x 256

The end result is that Texture B will sit in RAM as the 512 x 512 version (if there is a version with even more detail then this will be cached but not in RAM unless it becomes needed). Texture A will be held in RAM at 256 x 256, with a higher detail version again being left on the hard-drive cache.
Now when textures are thrown into VRAM for rendering they are passed it at only the detail level required.


chalky white added a comment - 01/Feb/08 01:32 PM - edited
But surely what is proposed is how things are working now to some extent? I see a higher resolution kick in in steps as I get closer. But admittedly it often seems to get stuck at low resolution, which I tend to assume is my fault for having an old machine/graphics card.
Surely it is fundamental to jpeg2000 streaming that a low resolution version comes first, and then, as more data arrives, the resolution clicks up stepbystep. I assume that the viewer either requests a certain LOD, or else declines further data when the necessary detail is reached.
Does anyone have a good source on exactly what LL are doing ?