2021 CCUG meeting week #46 summary: Graphics work

Bella’s Lullaby, September 2021 – blog post

The following notes were taken from my audio recording and chat log of the Content Creation User Group (CCUG) meeting held on Thursday, November 18th 2021 at 13:00 SLT. These meetings are chaired by Vir Linden, and agenda notes, meeting SLurl, etc, are are available on the Content Creation User Group wiki page.


This list reflects those viewers available via Linden Lab.

  • Release viewer: version version, formerly the Maintenance RC and dated November 10, promoted November 15 – this viewer now contains a fix for the media issues caused by the Apple Notarisation viewer.
  • Release channel cohorts (please see my notes on manually installing RC viewer versions if you wish to install any release candidate(s) yourself):
    • The Tracy Integration RC viewer version (dated Friday, November 5) issued Tuesday, November 9.
    • 360 Snapshot RC viewer, version, issued October 21.
    • Simplified Cache RC viewer, version, dated September 17, issued September 20.
  • Project viewers:
    • Performance Improvements project viewer updated to version (dated November 5) November 9.
    • Performance Floater project viewer, version, issued September 2.
    • Mesh Optimizer project viewer, version, issued September 1.
    • Legacy Profiles viewer, version, dated October 26, 2020.
    • Copy / Paste viewer, version, dated December 9, 2019.

General Viewer Notes

  • It is possible the 360 Snapshot RC viewer and the Simplified Cache RC viewers may be merged prior to either being individually promoted to de facto release status.

Graphics Work

  • The core of the graphics team is shifting emphasis from making performance changes to the rendering pipe to focusing on stabilising the changes thus far made. As Vir has elsewhere noted, the problem with moving operations between threads / to their own threads is that there can be undesired consequences which then must be addressed.
    • This work has comprises a number of elements, both in moving processes that should logically have their own threads, and in moving processing that can cause the main thread to stall while it is handling them (e.g. processes that talk to the graphics API, the texture upload to OpenGL, etc.) to other background threads.
  • Runitai Linden continues to update how avatar rigged meshes are rendered.
    • In short, he hopes to use the same approach to handling static meshes to rigged mesh (including Animesh creations), allowing the latter to be handled in batches, reducing the overall number of draw calls and giving a potentially substantial performance boost.
    • The improvements should be particularly noticeable when rendering the “onion layer” avatar meshes that have multiple layers and are segmented into multiple cuts. Runitai reports his testing shows a 50% improvement in rendering 20 avatars – but improvements will be hardware dependent.
    • There are some issues: as it stands, the updated code does change the order of sorting / rendering alphas, which could be problematic for some creators. If so, LL will look at what can be done to prevent this (as an aside to this, vertex ordering within Blender, etc.), should not be impacted). There are also limits on how far this can be taken due to things like how faces with unique textures or with separate materials must be handled.
    • Currently, Runitai plans to spend the next few weeks testing and improving the changes with a view to having a view publicly available in the New Year.
  • Part of the discussion centred on texture use (and over-use), which covered a number of elements including:
    • A reminder of why the use of 1024×1024 textures on every surface, no matter how small is really bad idea, both because of the amount of VRAM each texture (+ any associated materials) uses (up to 4MB each); and because even if the face used only exposes a small portion of the texture, the viewer still has to process the entire texture before it can be rendered at full resolution, so it’s just leaving people with a greater amount of time the texture is blurred in their view.
    • The pros and cons in using a texture atlas. On the plus, this always multiple textures to be handled as a single draw operation, and is done where possible. However, unlike a conventional game, texture use in Sl is less predictable (e.g. an avatar can use the same texture “as is”, alpha masked, alpha blended and as a specular map, impacting the ability to use it within any texture atlas.
  • Whilst on the back burner at present, it is hoped that Vulkan, if / when adopted, could solve a lot of texture batching and draw call issues on the Windows platform, as it has a “fundamentally different” way of handling the latter. However, any shift in graphics API is held depending the current clean-up of the rendering code. On October 30th, Runitai described the options under consideration as:
    • Using Vulkan (Windows) and Metal (Apple).
    • Running Vulkan extraction layers on top of G3D on Windows (and MoltenGL for Apple?)
    • Implementing an off-the-shelf multi-API extraction layer.
    • Home-brew a dedicated extraction layer.
    • Stick with OpenGL for Windows and use MoltenGL for Apple (as noted above).
    • Initially supporting Vulkan + OpenGL for Windows and then retiring OpenGL and running Vulkan extraction layers on top of G3D (no word on Apple solutions in this scenario).
  • As a part of the current  work, LL has tested using OpenGL Core Profile rather than the currently-used OpenGL Compatibility Profile.
    • Core Profile offers a performance win for nVidia GPUs – but presents a performance hit for AMD and Apple systems, so a determination on its use has yet to be made.
    • Core Profile also does not work GLOD for mesh uploads, so if adopted, GLOD support may be entirely dropped from the viewer in favour of the Mesh Optimiser (as found in the current Mesh Optimiser project viewer).
  • Other updates the graphics team are considering include:
    • Making VSync enabled by default in the viewer, which should give a more consistent rate at high (100+) FPS.
    • Removing the ability to uncheck OpenGL Vertex Buffers and Hardware Skinning, as disabling either isn’t particularly good for performance.

Have any thoughts?

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.