Project Sunshine-Server Side Appearance
From Second Life Wiki
Server Side "Texture Baking" Viewer Release
Structure of Server side texture baking
Viewer Architecture changes
In order to accomodate the back-end server code we have refactored a significant portion of the avatar appearance pipeline. There is now a new "project" in the indra directory called "llappearance" which defines a set of interface and functional classes that are shared between the viewer and the back end rendering system. These classes were pulled out of newview, and range from avatar definitions (LLVOAvatar), to tex layers and visual parameters. In addition, a number of texture functions and classes have been moved from newview to llrender. In some cases, these classes were subclassed to contain the viewer-specific functionality back in newview.
Since some of the functionality of the classes was moved to a different directory while other pieces stayed, many merge tools will get confused and not necessarily move your changes to the correct place and in some cases may believe that the proper solution is to remove your fixes or be unable to merge the patches at all. Expect that there will be some manual merging necessary, especially if your viewer has made avatar/appearance changes or tweaks. We will assist whenever possible with questions about the new architecture or merge questions, but the new changes will be necessary for viewers to have after we start to roll out new servers.
New Network Protocols
To support the new featureset, a few of the network protocols have been modified or added to:
- login now returns a texture fetch url for any baked texture requests
- Agent Appearance message now contains an extra visual parameter to indicate that it is a new-style message
- Agent Appearance message has an extra (optional) block to indicate appearance version number and current outfit folder version number
- Regions now have a new capability to request an appearance message which will return or regenerate the agent appearance message
- Regions will soon have a new capability to request an increase in current outfit folder verion (see below).
Forwards and Backwards Compatibility
This project was designed under the assumption that viewers will be updated before the server code gains widespread adoption. However, the server code will take a while to test, scale up, and roll out. As such, the viewer code provided can work fine on the grid as it stands today. The new code should still upload new baked textures and use the old protocols on the main grid. Once a new viewer connects to a new server, that user's appearance message will be converted to a server-generated message that will persist even once you return to an old region. New-style appearance messages will remain flagged as such even when sent by an old region. Since textures are fetched from a central service, updated viewers will be able to fetch an avatar's textures even if the server does not support it.
If you force a rebake or change your outfit while standing on an old-style region, however, your viewer will revert to uploading its own bakes. These will be overwritten when you return to a new-style region.
Our testing regions on Aditi are set up next to some server-trunk regions so that you can test these transitions. Please be certain to test with multiple viewers so that you can verify that avatar appearance is consistent from multiple users.
Status of viewer repository
This code is provided as pre-alpha quality. We have done a recent merge from viewer-development, and QA has done a quick test to verify that there are not major regressions. However, it is not production ready and there will be additional patches and bug fixes that will need to be intergrated before release. We are releasing the current state of code to get feedback, identify and isolate bugs, and provide extra time for alternate viewers to start the merging process. Please do not merge this into your main repository, but start a fresh fork that can be merged in once the code is stabilized.
Initial testing appears to indicate that this viewer does the correct thing in most cases of login, region crossing between new and old simulators, etc. There are a few known bad edge cases currently:
- Saving a wearable item while making no other changes to your appearance does not update your appearance. We're adding a new capability that will compensate for this case, and a fallback for old regions in the mixed-grid case.
- Initial appearance message after transitioning from an old region to a server-bake region may send an inaccurate appearance, with COF version = 0.
- Bakes on aditi will be overlayed with some hex values (the first few digits of their UUIDs). This is temporary and on purpose (for determining whether an image is a local or a server-generated bake). This will be removed before release.
Keep checking in for additional information on known issues and updates. More code will be pushed periodically as we fix the remaining issues and make any refinements.
While the code is not finished, it does appear to be functional enough to test and we do not anticipate additional major refactoring. Please start your merge work soon, and let us know when your release schedule will allow you to present the new viewers to your userbase. Once we start rolling out the new server code on the main grid, viewers that have not been updated will fail to resolve avatar appearance for themselves and others. Avatars that have changed their appearance on a new-style region will continue to appear incorrectly even after moving back to current server-trunk regions.
Reporting Bugs, assistance with merge issues
The viewer should work as it does today on the main grid. There are regions on Aditi that have the new code ( SunshineTest, SunshineTest1 ).
Bugs and edge cases with the current state of code, whether in the viewer code or the back-end service should be filed in JIRA under project sunshine (SUN). If you are a developer and cannot access this project, contact User:Oz_Linden.
If you are having trouble with the new re-architecture or merging your appearance changes into the new codebase, please reach out to Nyx Linden (nyx at lindenlab.com).
Source code & build links