We have and are hearing lots of complaints about how some number of avatars lag our Second Life™ experience. If you open up the Viewer Stats (Ctrl-Shift-1) and look at server performance (Simulator: Time Dilation, Sim FPS, Physics FPS, and others), you often find the region server performing well; TD=0.999, Sim FPS=44-45, Physics=44=45. Even with lots of avatars in a region. So, it isn’t region/simulator lag that is the problem. Over the last year large steps in reducing simulator lag have been taken with CDN being the most recent. The lag is now in our viewer.
There is a value the viewer displays labeled Avatar Render Cost (ARC). In November 2011 I wrote about ARC and how to use it, as it had recently changed. (See: #SL ARC Replaced) Things have changed since then. We now find the value displayed in two different ways. Try: Top Menu->Advanced (press Ctrl-Alt-D if you do not have that menu item)->Performance Tools->Show Draw Weight for Avatars. This will display a colored text above avatars showing their ‘render cost’. This does clutter the screen, but makes it easy to see which avatar has what ARC.
The other option is to display the values using: Top Menu Develop (Ctrl-Alt-Q) ->Show Info->Show Avatar Render Info. This puts the information in a table in the lower right area of the screen. You see the same values either way. You do get more information with this display. You will see more of the values used by the Debug Settings, which I’ll get to.
From the Open Source UG and Oz we learn the Lindens are planning on adding some controls to the viewer’s User Interface (UI) to help with users with viewer performance. Those controls will use the Debug Settings listed below, with some function clean up. But, we can use those controls now, sort of.
Apparently some prompting by Jonathan Yap has got Oz started down this path, which looks to be pretty neat.
The controls coming to the UI are in a set of Render controls we can find in the Second Life Debug Settings RenderAutoMute*:
- renderautoHideSurfaceAreaLimit – Maximum surface area of a set of proximal objects in world before automatically hiding geometry to prevent system overload.
- RenderAutoMaskAlphaDeferred – Use alpha masks where appropriate in the Advanced Lighting Model
- RenderAutoMaskAlphaNonDeferred – Use alpha masks where appropriate when not using the Advanced Lighting Model
- RenderAutoMuteByteLimit – Maximum bytes of attachments before an avatar is rendered as a simple impostor (0 for no limit).
- RenderAutoMuteFunctions – Developing feature to render some avatars using simple impostors or colored silhouettes. (Set to 7 for all functionality)
- RenderAutoMuteLogging – Show extra information in viewer logs about avatar rendering costs
- RenderAutoMuteRenderWeightLimit – Maximum render weight before an avatar is rendered as a simple impostor (0 to not use this limit).
- RenderAutoMuteSurfaceAreaLimit – Maximum surface area of attachments before an avatar is rendered as a simple impostor (0 to not use this limit).
The two settings you can use now to get a bit better performance are; RenderAutoMuteFunctions and RenderAutoMuteRenderWeightLimit. Set to 7 and 60,000 respectively for a trial. Values from 1 to 6 give odd results. Use 0 for off and 7 for on. Values for 30k to 100k affect which avatars get rendered as silhouettes. The higher the number the more high ARC avatars render.
There is currently no clear relationship between this number and the avatar’s ARC value. Oz is planning to make the settings values more meaningful. These Debug Settings are sort of a left over from something and have never been made user friendly/meaningful. So, for now setting RenderAutoMuteRenderWeightLimit to an on screen ARC/Draw Weight value does not mean that avatar will be rendered as a silhouette. You’ll have to experiement.
The RenderAutoMute* controls are those likely to make it to the UI soon.
As you use these you will find that other settings affect how these settings work. Your RenderVolumeLODFactor is used to calculate ARC/Draw Weight. Changing it changes how your viewer reports the values, which in turn changes which avatars get filtered for silhouetting.
If you are one of those that sets RenderVolumeLODFactor to 4 or higher, you will supposedly see lots of silhouettes when you try to use these settings. Personally, trying it I could see that it made a difference. Whatever the case, if you are tweaking for performance, having RenderVolumeLODFactor higher than 1.5 doesn’t make sense and 1 is probably better. Think of the higher setting as turning off more optimization to get better image render at FPS cost.
Another factor is how close your camera is, as that affects the LoD value being used by the camera for any specific item in view. I still could not relate what I was seeing to any change in RenderVolumeLODFactor value.
I also found that when you set these and then enter a region affects some of the numbers you see. I saw a lot of 0 weight avatars as silhouettes, which can’t be right. I assume the viewer never rendered the avatar enough to get a full value for weight and so shows it as 0.
At some point we’ll likely see these settings as controls in the UI. With holidays and no change windows, I guess after the first of 2015.
What is more interesting is the discussion about providing users feedback. Oz suggests we may see a notice pop up when we enter a region something like: X of Y people nearby have simplified your rendering. While I like the idea, I suspect it may be a bit complicated to implement. But… may be not.
I think having a popup appear when you wear something, like when trying on a demo, telling you what the item is doing to your Draw Weight/ARC would be more conducive to smart shopping and down the road push better design.
It does look like this issue is coming around for new consideration.