Avatar Rendering Complexity

From Second Life Wiki
Jump to navigation Jump to search
KBtip2.png See Also this page in the Knowledge Base
KBnote.png Note: The features described here are currently only fully implemented in the QuickGraphics Project Viewer. See Current Limitations below.

Avatar Rendering Complexity is a measure of how difficult it is to draw an avatar; it's a number that can range from just a few hundred to several hundred thousand. It is affected by your avatar shape and what you're wearing. Since drawing avatars can be one of the most expensive parts of rendering a Second Life scene, complexities at the upper end of the range can cause severe viewer performance problems. Being aware of your own complexity and that of those around you can be an important part of managing the performance of your viewer and how you affect the performance of others.

How Do I Prevent Avatar-Induced Viewer Lag, and Why Are Some Avatars Solid Colors?

If an avatar in your view is too complex for your system to draw efficiently, it may cause your viewer performance to degrade severely. To help manage this problem, there is a 'Maximum Avatar Complexity' preference setting (Preferences > Graphics). The default value of that preference depends on how powerful your graphics subsystem is and what graphics level you choose. Any avatar whose complexity is above the value of that setting is drawn as a solid color silhouette and without attachments, greatly reducing their impact on your viewer performance.

There is another factor that can cause an avatar to be drawn as a solid color: total attachment surface area. See How Do I Examine Complexity Values?, but most avatars will be well under these limits.

How Do I Find out the Complexity of My Avatar?

Whenever you change what your avatar is wearing, a small notice will appear in the upper right of your screen to tell you the new complexity value.

Your own avatar is always rendered fully even if you are over your own limit (if you want to slow down your viewer with your own avatar, you can).

How Do I Find out if the Complexity of My Avatar is Too High?

If some of the people around you are rendering you as solid color outlines, their viewer will report that to the simulator. The simulator will in turn tell your viewer to display a message to let you know in general terms whether or not you are being fully rendered. The message will appear in a notice along with the complexity of your avatar and will be updated if it changes significantly. Your viewer is not told which of the others around you are not rendering you or what their limits are.

If you don't mind that others are not seeing you and would rather not get these notices, you can suppress them by using Preferences > Notifications; look for the message "Warn me if my avatar complexity may be too high".

... but see Current Limitations below.

How Do I Examine Complexity Values?

Activate Advanced Menu > Perfomance Tools > Show avatar complexity information

If you do not have an "Advanced Menu" at the top of your viewer, you can enabled it in your Viewer Settings under the "Advanced" Tab. Check the box "Show Advanced Menu."

This displays three values as floating text above each avatar:

  1. The complexity of the avatar
  2. The 'rank' (how close the avatar is to your camera; the closest is 1, next closest is 2...)
  3. The attachment surface area in square meters

Each value is color coded from green to red to indicate how it relates to your own limits (values well under your limit are green, values at or over your limit are red and may be in bold type). Values shown in grey are ones for which you have no limit (your limit is set to zero).

This does not tell you how the complexity of your avatar relates to the limits set by those around you; there is no absolute "good" or "bad" value for complexity, just a relationship between each avatar's complexity and the limits of those who are viewing it at any one time.

How Do I Reduce My Own Complexity?

There are many possible causes for having higher avatar complexity than you want. If you're looking to remove some complexity and help everyone towards a smoother, more enjoyable Second Life experience here are some tips (in approximate order of likelihood):

  1. Try removing your hair or shoes first and see how much complexity you lose. Many older sculpt-based hairs and shoes (and even some newer mesh ones that are improperly made) can have 60-250K complexity in a single attachment. Try removing these first. If you have one attachment that's putting you over limit try looking for an item that is similar but made out of mesh. Then TRY THE DEMO and see how much complexity the new item adds to your score. The average well-designed avatar attachment should not exceed 3-10K complexity.
  2. It might be that you're just wearing too much stuff. Over the years a lot of residents have acquired thousands of items in our inventories, and sometimes we try to wear a little too much of that all at once. Sometimes it's to get a specific look, or for a special event, or just we're too lazy to take it off to begin with. The idea that "it has a script that turns it invisible—that's good enough, right?" is sadly not a correct one. These hidden attachments will still add to your overall complexity (sometimes even more so than when they are visible). Try going through your "Current Outfit" folder and removing unneeded attachments. An excellent example of this would be removing your mesh feet while wearing a pair of knee high boots. No one can actually see your feet inside the boots, yet every viewer will still have to "think" about them. Removing them and then adding your feet back when you remove the boots later will help everyone lag less. If you are still substantially over your target complexity, try removing excess jewelry, pets or other avatar attachments.
  3. You might be wearing poorly designed mesh. It can be really difficult at times to distinguish the difference between a well-made mesh and a inefficiently designed one. Outwardly their appearance is often almost identical. The difficulty in making this distinction has led to a sort of urban myth in SL that "all mesh causes lag." It does not. Inefficient mesh can degrade viewer FPS performance; however, most mesh is actually more efficient than its sculpt and prim predecessors. The easiest way to tell how much complexity an item will add to your avatar is to try the DEMO. If you're trying to understand what the difference between a well-made mesh and a poorly designed mesh is, the poorly made ones often have overly dense wireframes (https://wiki.secondlife.com/wiki/Wireframe) due to their very high triangle count. This is visible when viewing the item in the viewer Wireframe mode. If you keep your camera in third-person mode and the wireframe view appears solid there is a really high likelihood that item will have very high complexity. The more easily you can see through your avatar in this mode, the more likely it is that your complexity score will be low (presuming that you have already removed invisible attachments). Just because something was labeled "High Quality Mesh" on the Marketplace does not necessarily mean it will have low complexity.

Why Do Some of My Attachments Raise My Complexity So Much?

One of the biggest contributors to an attachment's high complexity is the number of sculpted prims (sculpties) it's made out of. A lot of older hairs, shoes and non-human avatars have incredibly high sculpt counts.

Other major factors include how many partially transparent (alpha) textures the object has as well as whether the object contains parts that are shiny or glowing, displays animated textures or media, or emits particles.

If your attachment is made out of mesh reading this page may provide a little more insight into what is going on behind the scenes: https://wiki.secondlife.com/wiki/Mesh/Rendering_weight

I Want to See My Friend in Full Detail, Even over My Limit

If there are specific avatars you want fully rendered even if they are over your limit, you can right-click on them and select "Always Render Fully"; this is not persistent between sessions (every time you log in to Second Life you will have to re-select "Always Render Fully" on that person each time you see them, if their complexity is still over your limit).

Can I Reduce Lag while Still Drawing Other Avatars, and What Is an Impostor?

You can reduce the impact of drawing avatars without going all the way to the solid color outlines. The setting "Max. # of non-impostors" controls the number of avatars nearest to your camera that will be fully rendered; any avatars beyond that number will be drawn as an Impostor. An Impostor is drawn with fewer lighting and texture effects, making it look less realistic (some people describe it as looking like a cardboard cutout). Impostors are also updated less frequently (the further they are from your camera, the less frequently they are updated).

Drawing more distant avatars as Impostors does not improve performance as much as the complexity limit, but it looks better. You can use both methods together by, for example, setting your complexity limit fairly high so that it affects only the most expensive avatars while setting the non-impostor limit so that only avatars nearest you are drawn in full detail.

Current Limitations

The viewer displays messages to tell you about how many of the people around you may not be rendering you. These messages are based on information from the simulator that ultimately comes from other viewers. At present, not all viewers are sending that information to the simulator, so the messages may misrepresent how often your avatar is being drawn. The accuracy of these messages will improve as this technology is incorporated into more viewers.

Related Debug Settings

The following settings interact with these features:

RenderAvatarMaxNonImposters
The maximum number of avatars closest to your camera who may be fully rendered. Avatars beyond those will be rendered as 'imposters', which means that the rendering will be a little simpler and they will be updated less frequently. Increasing this value can cost you in performance if you're in a crowd.
RenderAvatarMaxComplexity
Any avatars over this complexity will be drawn as solid color outlines. Changing this value directly may cause problems; use the slider in the advanced graphics preferences floater
RenderAutoMuteSurfaceAreaLimit
The limit for the total surface area of attachments before switching to solid color rendering. The default (1000 square meters) is intended to protect against deliberate abuse and should rarely be encountered.
If RenderAvatarMaxComplexity is set to zero, this limit is also unlimited.
ShowMyComplexityChanges
How long to display notices about complexity and rendering, in seconds. Setting to zero disables the notices.