Appearance Troubleshooting

From OpenSimulator

(Difference between revisions)
Jump to: navigation, search
(Introduction)
Line 1: Line 1:
 
= Introduction =
 
= Introduction =
  
Making an avatar appearance available in a simulator currently involves a large number of steps.   
+
Avatar appearance is a particularly complex issue in current OpenSimulator since it involves a complex interaction between a user's viewer (where the texture is actually created) and the simulator (which needs to send appearance information to the viewer, receive the baked textures and distribute those to other viewers)Moreover, the exact steps of this interaction vary depending on whether the user is freshly logging in or region crossing/teleporting to another region on the same or a different simulator.
  
# On login, the viewer needs to told what body parts and clothing it is wearing.
+
This document currently describes only the classic viewer-side texture baking. Server-side baking would do most if not all of these steps (especially the baking itself) in OpenSimulator instead. However, this is not yet implemented by OpenSimulator.
# The viewer then creates the appearance textures from this data (bakes them).
+
# The viewer uploads the baked textures to the simulator via the UploadBakedTexture HTTP capability.
+
# The simulator temporarily stores this asset data.
+
# The simulator sends asset UUIDs to other viewers in the region.
+
# If the viewer does not already have the baked texture asset, it requests it from the simulator via the GetTexture HTTP capability.
+
# Other avatars appear with those baked textures.
+
  
As you can imagine there are many points at which this process can go wrong.  If it does go wrong, you will often end up with a gas cloud instead of an avatar.  The text below lists the various ways in which avatar appearance can go wrong, diagnosis commands and some suggestions for trying to fix the situation.
+
= Steps =
  
'''Todo: Need to fill out this section with exactly what happens when a user teleports or crosses regions, both on the same region, regions on the same simulator and between regions on different simulators.'''
+
== Establishing avatar appearance on login ==
 +
 
 +
Making an avatar appearance available in a simulator on login currently involves a large number of steps. 
 +
 
 +
# On login, the simulator tells the viewer what body parts and clothing it is wearing.
 +
# The viewer creates the appearance textures from this data (bakes them).
 +
# The viewer uploads these new baked textures to the simulator via the UploadBakedTexture HTTP capability.
 +
# The simulator stores this asset data in the simulator cache but does not send it to the asset service.
 +
# The simulator tells other viewers that can see that avatar (either because they are in the same region or neighbouring regions) about the UUIDs of the baked textures uploaded for that avatar.
 +
# These other viewers then request the baked textures for these UUIDs.
 +
# When a viewer has received all the baked textures for such an avatar, then it is displayed instead of remaining as a cloud.
 +
<!-- Commented out since this is never true on login.  Will reuse this text when we write the region cross/teleport section -->
 +
<!-- # If the viewer does not already have the baked texture asset, it requests it from the simulator via the GetTexture HTTP capability. -->
 +
 
 +
As you can imagine there are many points at which this process can go wrong on, in the simulator, the sending viewer, the receiving viewer and at the network inbetween.  If it does go wrong, you will often end up with a gas cloud instead of an avatar.  The text below lists the various ways in which avatar appearance can go wrong, diagnosis commands and some suggestions for trying to fix the situation.
 +
 
 +
== Establishing avatar appearance on teleport/region cross to another region on the same simulator ==
 +
 
 +
In this case, the baked textures are already in the simulator's asset cache.  T
 +
 
 +
# The simulator tells other viewers that can see that avatar (either because they are in the same region or neighbouring regions) about the UUIDs of the baked textures it already has for that avatar.
 +
# These other viewers then request the baked textures for these UUIDs.
 +
# When a viewer has received all the baked textures for such an avatar, then it is displayed instead of remaining as a cloud.
 +
 
 +
== Establishing avatar appearance on teleport/region cross to another region on a different simulator ==
 +
'''Todo: Need to fill out this section.  The big issue here is that by default, current OpenSimulator does not send baked textures to the asset service.  Therefore, other simulators end up telling the viewer that it doesn't have baked textures and the viewer rebakes and resends them.'''
  
 
= Useful commands =
 
= Useful commands =

Revision as of 13:37, 21 February 2013

Contents

Introduction

Avatar appearance is a particularly complex issue in current OpenSimulator since it involves a complex interaction between a user's viewer (where the texture is actually created) and the simulator (which needs to send appearance information to the viewer, receive the baked textures and distribute those to other viewers). Moreover, the exact steps of this interaction vary depending on whether the user is freshly logging in or region crossing/teleporting to another region on the same or a different simulator.

This document currently describes only the classic viewer-side texture baking. Server-side baking would do most if not all of these steps (especially the baking itself) in OpenSimulator instead. However, this is not yet implemented by OpenSimulator.

Steps

Establishing avatar appearance on login

Making an avatar appearance available in a simulator on login currently involves a large number of steps.

  1. On login, the simulator tells the viewer what body parts and clothing it is wearing.
  2. The viewer creates the appearance textures from this data (bakes them).
  3. The viewer uploads these new baked textures to the simulator via the UploadBakedTexture HTTP capability.
  4. The simulator stores this asset data in the simulator cache but does not send it to the asset service.
  5. The simulator tells other viewers that can see that avatar (either because they are in the same region or neighbouring regions) about the UUIDs of the baked textures uploaded for that avatar.
  6. These other viewers then request the baked textures for these UUIDs.
  7. When a viewer has received all the baked textures for such an avatar, then it is displayed instead of remaining as a cloud.

As you can imagine there are many points at which this process can go wrong on, in the simulator, the sending viewer, the receiving viewer and at the network inbetween. If it does go wrong, you will often end up with a gas cloud instead of an avatar. The text below lists the various ways in which avatar appearance can go wrong, diagnosis commands and some suggestions for trying to fix the situation.

Establishing avatar appearance on teleport/region cross to another region on the same simulator

In this case, the baked textures are already in the simulator's asset cache. T

  1. The simulator tells other viewers that can see that avatar (either because they are in the same region or neighbouring regions) about the UUIDs of the baked textures it already has for that avatar.
  2. These other viewers then request the baked textures for these UUIDs.
  3. When a viewer has received all the baked textures for such an avatar, then it is displayed instead of remaining as a cloud.

Establishing avatar appearance on teleport/region cross to another region on a different simulator

Todo: Need to fill out this section. The big issue here is that by default, current OpenSimulator does not send baked textures to the asset service. Therefore, other simulators end up telling the viewer that it doesn't have baked textures and the viewer rebakes and resends them.

Useful commands

These commands are in OpenSimulator 0.7.4 and later and some will be in 0.7.3.1 and 0.7.3.

appearance show

Usage

appearance show [<first-name> <last-name>]

e.g.

appearance show Lord Lucan

This will show the asset UUID for each baked texture uploaded by the viewer for that user. For instance, a properly baked user may have something like

(test one)# appearance show Lord Lucan
For Lord Lucan in test one
Bake Type  UUID
Head       fd783d4a-b1d2-4bdc-89c7-88578b429ccc (uploaded)
UpperBody  d147b1f5-b99d-49d4-8492-6cd4c7da905e (uploaded)
LowerBody  e8aae819-e04b-4894-983a-15bd2d354b71 (uploaded)
Eyes       ae8fe60d-9d20-440d-989a-869d2ee1ed3d (uploaded)
Skirt      not set
Hair       4e354649-f880-4204-987a-8d744f531469 (uploaded)
Lord Lucan baked appearance texture is OK

The textures may be listed as (not found) if they have been uploaded by the viewer but can't be found in the asset cache. Or they may be listed as (not set) if the viewer has never uploaded this data.

If no name is given then data for all users is displayed.

appearance send

Usage

appearance send [<first-name> <last-name>]

e.g.

appearance send Lord Lucan

Send appearance baked texture IDs to other avatars in the scene. In theory, this should trigger other avatars to request those textures if they need them. This will have no effect if the original viewer never uploaded the texture IDs in the first place (i.e. if avatars are appearing as clouds). If avatars are grey instead, then this command may help. There is also a ResendAppearanceUpdates config which can periodically resend this data. We will discuss this later on.

If no name is given then all avatars resend their appearance texture UUIDs to all other avatars.

appearance rebake

Usage

appearance rebake <first-name> <last-name>

e.g.

appearance rebake Lord Lucan

Now, this sounds like it should be an enormously useful command. Unfortunately, it will only have any effect if the viewer has already successfully uploaded some baked texture data, even if that turned out to be corrupt. The viewer will very probably ignore any requests to rebake textures if it has not managed to perform an initial successful bake.

j2k decode

Usage

j2k decode <id>

e.g.

j2k decode ae8fe60d-9d20-440d-989a-869d2ee1ed3d

Attempt a JPEG2000 decode of the given asset. All baked textures are JPEG2000 files, so this can be useful to assess whether a given upload is corrupt or not. If the decode succeeds then it will tell you how many the number of layers and components in the JPEG2000 texture.

dump asset

Usage

dump asset <id>

e.g.

dump asset ae8fe60d-9d20-440d-989a-869d2ee1ed3d

Dumps an asset to a file with the same name as the ID given. Can be useful for taking a closer look at textures in an external program (e.g. jiv on Linux) if they have been apparently successfully uploaded.

Problems and resolutions

General

  • In all these situations, one can force the client to attempt a rebake using the ctrl+alt+r key combination. This is always worth trying.
  • Remember, it's possible that the viewer has successfully baked but for some reason the upload of the textures to the simulator has failed, or the simulator has failed to redistribute them to other viewers. In this case, a viewer rebake may work.
  • Another general tip is to try clearing the viewer cache and logging back in.
  • One should also try a different viewer, either an old viewer such as Imprudence or a newer viewer such as Kokua or Firestorm. Different viewers may have different ways of baking textures or may have issues with bugs.
  • If possible, one should also try a different simulator. Even if simulators are running exactly the same version of OpenSimulator, they can be running on a different software stack (e.g. Mono rather than Windows .NET) or different hardware. There may be differences in behaviour that stem from this.
  • Try a quiet region. Regions with a lot of avatars and objects may be dealing with a lot of traffic that may cause appearance issues. To test this, you could go to a quieter region or ideally even a local installation of OpenSimulator.
  • If you use the same name in the same viewer for multiple different grids, try using a different installation of the viewer instead. On some viewers, it may be possible to get confused between different inventories on different grids where the avatar has the same name. This is especially true in the case of viewers which were not explicitly written to access different grids (though historically the Linden viewer seems to have been okay in this respect).

This is probably only a small selection of issues. Please add more as you encounter them if you know of workarounds or fixes.

Cloudy avatars

The avatar does not have sufficient clothing or body-parts to bake textures

There is a minimum set of body parts and clothing a viewer requires to bake an appearance texture. There are the shape, hair, skin and eyes body parts, and the shirt and trousers clothing. Without these, the viewer will never attempt to bake a texture.

Solution

Make sure your avatar has this minimum set of body parts and clothing.

One of the assets for a bodypart/clothing is corrupt or missing

Sometimes the necessary data to perform the bake may be corrupt or missing.

Solution

Try switching to a different set of clothing and body parts (e.g. using the "replace outfit" option), or create the minimum set from scratch and see if wearing these helps.

The required clothing or bodypart inventory has not downloaded

Sometimes the required clothing or bodypart items for your appearance may not have downloaded, especially on a busy sim where you have a very large inventory and a viewer that aggressively requests inventory data.

Solutions

  • Try a quieter region. As above, these have less traffic that may crowd out your appearance information (this is a diagnostic test rather than a long term solution).
  • You may also want to try a viewer which is less aggressive about downloading all inventory information on login.
  • Try turning off or on HTTP inventory if your viewer supports this option. Newer viewers (version 2, 3 and associated third party viewers) download inventory information using HTTP inventory capabilities rather than via UDP. In principle, this should result in a much better experience since large inventories do not crowd out other UDP messages (avatar movement, object updates, etc.). However, it may be worth changing this setting to see if it helps.

The viewer graphics code is failing to successfully bake textures

We've seen some graphics drivers fail to successfully bake textures. Sometimes this depends on where the baking is done (e.g. if the viewer is on a second screen).

Solution

Update your graphics drivers. Attempt a bake with a simple set of body parts/clothing and on your main screen.

An external OpenSimulator configuration system is not fully creating the necessary bodypart/clothing entries

This can be a problem with older configuration systems which are not viewer 2 aware, where it was enough to create inventory and avatar entries but item links in the "Current Outfit" folder are necessary. One would only expect to see this with initial avatar setup.

Solution

Try an avatar created using the "create user" ROBUST or simulator console command (if running in standalone mode). On OpenSimulator 0.7.4 this will by default create the minimum clothing and inventory links to display an avatar. On OpenSimulator 0.7.3.1 you will need to set CreateDefaultAvatarEntries = true in the [UserAccountService] section of Robust.ini or Robust.HG.ini (it is still set true by default on standalone).

Grey avatars

Sometimes avatars may appear grey rather than cloudy.

The message containing appearance information has been lost

For some reason, the packet containing appearance information is sometimes ignored by the viewer. The "appearance send" command above may help diagnose this.

Solution

Try setting ResendAppearanceUpdates = true setting in the [Appearance] section of OpenSim.ini. This will resend appearance data every 60 seconds. This will probably not help if avatars are clouds, since this usually signals a failure to upload the data in the first place.

In OpenSimulator 0.7.4 this setting is not on by default (it is not present in OpenSimulator 0.7.3.1 and before). In OpenSimulator 0.7.5 it will be on by default.

If this works then you will need to update your configuration system.

General
About This Wiki