Someone with 1GB memory usage would be at 1024MB / 5MB (per texture) = 204,8 * 2432 = 498074 ARC rounded up.
I agree that for someone who single-handedly takes up the entire allocatable texture memory in non-BD Viewers we should have much higher values than measly 500k. I thought about making the usage and ARC the same, e.g one 1024x1024 = 5MB = 5120 ARC. Sounds good? Someone with 1GB usage would have 1024000 ARC baseline.
I agree that the ARC cost of textures should directly scale with the memory usage of textures. The way it's done by LL right now is horrible. Large textures with a magnitude more memory use hardly make a difference compared to tiny textures.
So, essentially 4 times the memory usage in a texture should mean 4 times the ARC value for that texture. Just like 4 times the triangles should mean 4 times the ARC for those triangles.
Consider the following tho, in regards to 1 byte equaling 1 ARC:
Let's presume a 600k limit for triangles and 100mb limit for textures - that would by those guidelines equal 700k ARC as a limit (ignoring small modifiers). However it would also mean somebody using 300k triangles could suddenly use 400mb of textures. An unrealistic trade-off, performance-wise.
So, a suggestion would be: 1M ARC limit (Yes, wait for it). 2 unrigged triangles count as 1 ARC, 1 rigged triangle counts as 2 ARC, 1 byte of textures counts as 4 ARC. Aformentioned higher ARC for rigged triangles because the viewer needs to go through them twice at least for the rigging pass - thrice if accounting for shadows adding another rigging pass to that. A metric ton of rigged triangles is bad for performance.
600k unrigged triangles + 175mb textures = 1M.
200k rigged triangles + 150mb textures = 1M.
300k unrigged triangles + 212mb textures = 1M.
And all things and mixtures in between, again ignoring small modifiers like blended (not masked) alpha textures, which might require a flat additional ARC value to them independant of size - texture size hardly affects the blended alpha impact, it can be heavy in either case.
Just a suggestion. I'm just coming up with this off the top of my head - it would need testing, testing and more testing and visiting actual SL places to see what the experience would be. Perhaps the limit needs to be 2M ARC, perhaps textures need to count higher, or unrigged triangles need to count less. Trial and error and performance measurements ahoy. I am also not sure how mesh LODs would get worked in. I've not looked at those calculations.
But a good way to start is to determine the maximum amount of textures you want on an avatar, determine the maximum amount of ARC purely based on that alone, and then work in the triangle tradeoff. In this case it would be 250mb of textures without triangle accounting.
Even then however i still have the issue that the Viewer doesn't know the size of a texture unless it downloads it. So even if it knew the size i'd have to tell it to download it first (even if i were to trash it immediately) how would the Viewer even keep track of this... this sounds like a monstrously complex and very easy to break tool, one that will probably never be accurate. Unless you know something i don't which is what i guess you do.
Nah, I don't have a Big Secret or anything - the complexity calculations kick in when textures are already being loaded, and I'm not sure where to insert any premature checks.
The way I do it is essentially checking the VRAM usage of loaded textures on every complexity update that is caused by anything texture related (loading attachments, detaching attachments, dirty textures - not for things like LOD updates and the like), and as soon as they cross a threshold jellybeaning kicks in.
While this does *not* prevent other textures of that avatar from being still downloaded *if* they have already been in the download pipeline, it does prevent further additional texture requests, which can help a lot - usually it stops a couple of megabytes above the set limit. Especially in scenes with multiple avatars that are above that, it can do a lot for performance.
EDIT:
That is to say, I'm doing this because I do explicit VRAM jellybeaning. The ARC fix for textures as described above could make this obsolete.