Skip to main content
mousebear
Honored Contributor
November 15, 2021

Meta Avatars SDK (Feedback/Issues)

  • November 15, 2021
  • 161 replies
  • 71094 views

Do you have any feedback and/or issues in regards to the Meta Avatars SDK? Use this place to discuss, as we'll have members of the engineering team reviewing this thread!

 

Read the blog on the Meta Avatars SDK here: https://developer.oculus.com/blog/meta-avatars-sdk-now-available/

 

Refer to the Meta Avatars SDK documentation here: https://developer.oculus.com/documentation/unity/meta-avatars-overview/

161 replies

Up and Coming
April 7, 2022

Hi, I just updated Meta Avatars unity package from 9.1 to latest 12.0. It works great on Quest2 but on Quest1 I get the following exceptions. I am using Unity 2020.3.32 with Vulkan and Universal Render Pipeline (URP).

Spoiler
Texture creation failed. 'R16G16B16A16_UNorm' is not supported for Render usage on this platform. Use 'SystemInfo.IsFormatSupported' C# API to check format support.
UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
UnityEngine.Logger:Log(LogType, Object, Object)
UnityEngine.Debug:LogError(Object, Object)
UnityEngine.Texture:ValidateFormat(GraphicsFormat, FormatUsage)
UnityEngine.RenderTexture:.ctor(Int32, Int32, Int32, GraphicsFormat, Int32)
Oculus.Skinning.GpuSkinning.OvrGpuSkinnerBase`1:.ctor(String, Int32, Int32, GraphicsFormat, FilterMode, Int32, OvrExpandableTextureArray, Shader)
Oculus.Skinning.GpuSkinning.OvrGpuSkinnerJointsOnly:.ctor(Int32, Int32, GraphicsFormat, FilterMode, Int32, OvrExpandableTextureArray, OvrExpandableTextureArray, SkinningQuality, Shader)
Oculus.Skinning.GpuSkinning.OvrAvatarGpuSkinnedRenderableBase:AddGpuSkinningObjects(OvrAvatarPrimitive)
Oculus.Skinning.GpuSkinning.OvrAvatarGpuSkinnedRenderableBase:ApplyMeshPrimitive(OvrAvatarPrimitive)
Oculus.Avatar2.Ov
[ovrAvatar2 OvrAvatarGpuSkinnedRenderable] Exception applying primitive (Oculus.Avatar2.OvrAvatarPrimitive) - System.NullReferenceException: Object reference not set to an instance of an object.
at UnityEngine.Object.set_name (System.String value) [0x00000] in <00000000000000000000000000000000>:0
at Oculus.Skinning.GpuSkinning.OvrGpuSkinnerBase`1[TDrawCallType]..ctor (System.String name, System.Int32 width, System.Int32 height, UnityEngine.Experimental.Rendering.GraphicsFormat texFormat, UnityEngine.FilterMode texFilterMode, System.Int32 depthTexelsPerSlice, Oculus.Skinning.GpuSkinning.OvrExpandableTextureArray neutralPoseTexture, UnityEngine.Shader skinningShader) [0x00000] in <00000000000000000000000000000000>:0
at Oculus.Skinning.GpuSkinning.OvrGpuSkinnerJointsOnly..ctor (System.Int32 width, System.Int32 height, UnityEngine.Experimental.Rendering.GraphicsFormat texFormat, UnityEngine.FilterMode texFilterMode, System.Int32 depthTexelsPerSlice, Oculus.Skinning.GpuSkinning.OvrExpandableTextureArray n
Texture creation failed. 'R16G16B16A16_UNorm' is not supported for Render usage on this platform. Use 'SystemInfo.IsFormatSupported' C# API to check format support.
UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
UnityEngine.Logger:Log(LogType, Object, Object)
UnityEngine.Debug:LogError(Object, Object)
UnityEngine.Texture:ValidateFormat(GraphicsFormat, FormatUsage)
UnityEngine.RenderTexture:.ctor(Int32, Int32, Int32, GraphicsFormat, Int32)
Oculus.Skinning.GpuSkinning.OvrGpuSkinnerBase`1:.ctor(String, Int32, Int32, GraphicsFormat, FilterMode, Int32, OvrExpandableTextureArray, Shader)
Oculus.Skinning.GpuSkinning.OvrGpuSkinnerJointsOnly:.ctor(Int32, Int32, GraphicsFormat, FilterMode, Int32, OvrExpandableTextureArray, OvrExpandableTextureArray, SkinningQuality, Shader)
Oculus.Skinning.GpuSkinning.OvrAvatarGpuSkinnedRenderableBase:AddGpuSkinningObjects(OvrAvatarPrimitive)
Oculus.Skinning.GpuSkinning.OvrAvatarGpuSkinnedRenderableBase:ApplyMeshPrimitive(OvrAvatarPrimitive)
Oculus.Avatar2.Ov
[ovrAvatar2 OvrAvatarGpuSkinnedRenderable] Exception applying primitive (Oculus.Avatar2.OvrAvatarPrimitive) - System.NullReferenceException: Object reference not set to an instance of an object.
at UnityEngine.Object.set_name (System.String value) [0x00000] in <00000000000000000000000000000000>:0
at Oculus.Skinning.GpuSkinning.OvrGpuSkinnerBase`1[TDrawCallType]..ctor (System.String name, System.Int32 width, System.Int32 height, UnityEngine.Experimental.Rendering.GraphicsFormat texFormat, UnityEngine.FilterMode texFilterMode, System.Int32 depthTexelsPerSlice, Oculus.Skinning.GpuSkinning.OvrExpandableTextureArray neutralPoseTexture, UnityEngine.Shader skinningShader) [0x00000] in <00000000000000000000000000000000>:0
at Oculus.Skinning.GpuSkinning.OvrGpuSkinnerJointsOnly..ctor (System.Int32 width, System.Int32 height, UnityEngine.Experimental.Rendering.GraphicsFormat texFormat, UnityEngine.FilterMode texFilterMode, System.Int32 depthTexelsPerSlice, Oculus.Skinning.GpuSkinning.OvrExpandableTextureArray n
Texture creation failed. 'R16G16B16A16_UNorm' is not supported for Render usage on this platform. Use 'SystemInfo.IsFormatSupported' C# API to check format support.
UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
UnityEngine.Logger:Log(LogType, Object, Object)
UnityEngine.Debug:LogError(Object, Object)
UnityEngine.Texture:ValidateFormat(GraphicsFormat, FormatUsage)
UnityEngine.RenderTexture:.ctor(Int32, Int32, Int32, GraphicsFormat, Int32)
Oculus.Skinning.GpuSkinning.OvrGpuSkinnerBase`1:.ctor(String, Int32, Int32, GraphicsFormat, FilterMode, Int32, OvrExpandableTextureArray, Shader)
Oculus.Skinning.GpuSkinning.OvrGpuSkinnerJointsOnly:.ctor(Int32, Int32, GraphicsFormat, FilterMode, Int32, OvrExpandableTextureArray, OvrExpandableTextureArray, SkinningQuality, Shader)
Oculus.Skinning.GpuSkinning.OvrAvatarGpuSkinnedRenderableBase:AddGpuSkinningObjects(OvrAvatarPrimitive)
Oculus.Skinning.GpuSkinning.OvrAvatarGpuSkinnedRenderableBase:ApplyMeshPrimitive(OvrAvatarPrimitive)
Oculus.Avatar2.Ov
[ovrAvatar2 OvrAvatarGpuSkinnedRenderable] Exception applying primitive (Oculus.Avatar2.OvrAvatarPrimitive) - System.NullReferenceException: Object reference not set to an instance of an object.
at UnityEngine.Object.set_name (System.String value) [0x00000] in <00000000000000000000000000000000>:0
at Oculus.Skinning.GpuSkinning.OvrGpuSkinnerBase`1[TDrawCallType]..ctor (System.String name, System.Int32 width, System.Int32 height, UnityEngine.Experimental.Rendering.GraphicsFormat texFormat, UnityEngine.FilterMode texFilterMode, System.Int32 depthTexelsPerSlice, Oculus.Skinning.GpuSkinning.OvrExpandableTextureArray neutralPoseTexture, UnityEngine.Shader skinningShader) [0x00000] in <00000000000000000000000000000000>:0
at Oculus.Skinning.GpuSkinning.OvrGpuSkinnerJointsOnly..ctor (System.Int32 width, System.Int32 height, UnityEngine.Experimental.Rendering.GraphicsFormat texFormat, UnityEngine.FilterMode texFilterMode, System.Int32 depthTexelsPerSlice, Oculus.Skinning.GpuSkinning.OvrExpandableTextureArray n
Unknown packet type (20) received
241004 [info ] {PERF}: cpu load cur=0.31 min=0.04 max=0.36 avg=0.21
Texture creation failed. 'R16G16B16A16_UNorm' is not supported for Render usage on this platform. Use 'SystemInfo.IsFormatSupported' C# API to check format support.
UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
UnityEngine.Logger:Log(LogType, Object, Object)
UnityEngine.Debug:LogError(Object, Object)
UnityEngine.Texture:ValidateFormat(GraphicsFormat, FormatUsage)
UnityEngine.RenderTexture:.ctor(Int32, Int32, Int32, GraphicsFormat, Int32)
Oculus.Skinning.GpuSkinning.OvrGpuSkinnerBase`1:.ctor(String, Int32, Int32, GraphicsFormat, FilterMode, Int32, OvrExpandableTextureArray, Shader)
Oculus.Skinning.GpuSkinning.OvrGpuSkinnerJointsOnly:.ctor(Int32, Int32, GraphicsFormat, FilterMode, Int32, OvrExpandableTextureArray, OvrExpandableTextureArray, SkinningQuality, Shader)
Oculus.Skinning.GpuSkinning.OvrAvatarGpuSkinnedRenderableBase:AddGpuSkinningObjects(OvrAvatarPrimitive)
Oculus.Skinning.GpuSkinning.OvrAvatarGpuSkinnedRenderableBase:ApplyMeshPrimitive(OvrAvatarPrimitive)
Oculus.Avatar2.Ov
[ovrAvatar2 OvrAvatarGpuSkinnedRenderable] Exception applying primitive (Oculus.Avatar2.OvrAvatarPrimitive) - System.NullReferenceException: Object reference not set to an instance of an object.
at UnityEngine.Object.set_name (System.String value) [0x00000] in <00000000000000000000000000000000>:0
at Oculus.Skinning.GpuSkinning.OvrGpuSkinnerBase`1[TDrawCallType]..ctor (System.String name, System.Int32 width, System.Int32 height, UnityEngine.Experimental.Rendering.GraphicsFormat texFormat, UnityEngine.FilterMode texFilterMode, System.Int32 depthTexelsPerSlice, Oculus.Skinning.GpuSkinning.OvrExpandableTextureArray neutralPoseTexture, UnityEngine.Shader skinningShader) [0x00000] in <00000000000000000000000000000000>:0
at Oculus.Skinning.GpuSkinning.OvrGpuSkinnerJointsOnly..ctor (System.Int32 width, System.Int32 height, UnityEngine.Experimental.Rendering.GraphicsFormat texFormat, UnityEngine.FilterMode texFilterMode, System.Int32 depthTexelsPerSlice, Oculus.Skinning.GpuSkinning.OvrExpandableTextureArray n
Texture creation failed. 'R16G16B16A16_UNorm' is not supported for Render usage on this platform. Use 'SystemInfo.IsFormatSupported' C# API to check format support.
UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
UnityEngine.Logger:Log(LogType, Object, Object)
UnityEngine.Debug:LogError(Object, Object)
UnityEngine.Texture:ValidateFormat(GraphicsFormat, FormatUsage)
UnityEngine.RenderTexture:.ctor(Int32, Int32, Int32, GraphicsFormat, Int32)
Oculus.Skinning.GpuSkinning.OvrGpuSkinnerBase`1:.ctor(String, Int32, Int32, GraphicsFormat, FilterMode, Int32, OvrExpandableTextureArray, Shader)
Oculus.Skinning.GpuSkinning.OvrGpuSkinnerJointsOnly:.ctor(Int32, Int32, GraphicsFormat, FilterMode, Int32, OvrExpandableTextureArray, OvrExpandableTextureArray, SkinningQuality, Shader)
Oculus.Skinning.GpuSkinning.OvrAvatarGpuSkinnedRenderableBase:AddGpuSkinningObjects(OvrAvatarPrimitive)
Oculus.Skinning.GpuSkinning.OvrAvatarGpuSkinnedRenderableBase:ApplyMeshPrimitive(OvrAvatarPrimitive)
Oculus.Avatar2.Ov
[ovrAvatar2 OvrAvatarGpuSkinnedRenderable] Exception applying primitive (Oculus.Avatar2.OvrAvatarPrimitive) - System.NullReferenceException: Object reference not set to an instance of an object.
at UnityEngine.Object.set_name (System.String value) [0x00000] in <00000000000000000000000000000000>:0
at Oculus.Skinning.GpuSkinning.OvrGpuSkinnerBase`1[TDrawCallType]..ctor (System.String name, System.Int32 width, System.Int32 height, UnityEngine.Experimental.Rendering.GraphicsFormat texFormat, UnityEngine.FilterMode texFilterMode, System.Int32 depthTexelsPerSlice, Oculus.Skinning.GpuSkinning.OvrExpandableTextureArray neutralPoseTexture, UnityEngine.Shader skinningShader) [0x00000] in <00000000000000000000000000000000>:0
at Oculus.Skinning.GpuSkinning.OvrGpuSkinnerJointsOnly..ctor (System.Int32 width, System.Int32 height, UnityEngine.Experimental.Rendering.GraphicsFormat texFormat, UnityEngine.FilterMode texFilterMode, System.Int32 depthTexelsPerSlice, Oculus.Skinning.GpuSkinning.OvrExpandableTextureArray n
[ovrAvatar2 entity] [2] OnUserAvatarLoaded
UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
UnityEngine.Logger:Log(LogType, Object, Object)
UnityEngine.Debug:Log(Object, Object)
Oculus.Avatar2.OvrAvatarLog:Log(ELogLevel, String, String, Object)
Oculus.Avatar2.OvrAvatarLog:LogInfo(String, String, Object)
Oculus.Avatar2.OvrAvatarEntity:InvokeOnUserAvatarLoaded()
Oculus.Avatar2.OvrAvatarEntity:CheckLoadedAssets()
Oculus.Avatar2.<LoadAsync_Finalize_Internal>d__277:MoveNext()
UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)

 

 

 

any help appreciated, thanks!
/anders.

Up and Coming
April 25, 2022

Hi, any updates on this mouse_bear ? This forum seems to be mostly for questions answered by other users, but since you state in the thread post "we'll have members of the engineering team reviewing this thread" I would appreciate some kind of update if any engineer has picked up on the reported issue.

kind regards,

Anders.

Inspiring
April 25, 2022

I too would love a dialoge with the engineering team on this too as I am curious if real time spot and point of lights on the Avatars are coming. Perhaps there is a reason they were not included and thus is not coming any time soon which is fine, but would love to know if so.  I am not sure how Meta feels, but I believe the Meta Avatars are important, expecially for casual users who seem to enjoy the consistency. I for one would love my Meta Avatar in Walk About Mini Golf versus the generic ones.  I would be very open to working with Meta to implement them in my dark ride "Into the Metaverse".  

Up and Coming
April 8, 2022

also, using latest Meta Avatars 12 on some machines Unity cannot build giving error

Plugins: Failed to load 'Assets/Oculus/Avatar2/Plugins/Win64/libovrbody.dll' with error 'A dynamic link library (DLL) initialization routine failed.

Up and Coming
April 25, 2022

Hi, any updates on this mouse_bear ? 

kind regards,

Anders.

New Participant
May 1, 2022

Been getting this error, not sure how to resolve it.  Have Oculus Integration v39 and Meta Avatars v12 of the Unity SDKs.

 

Refreshing native plugins compatible for Editor in 7.60 ms, found 15 plugins.

=================================================================
Native Crash Reporting
=================================================================
Got a UNKNOWN while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================

=================================================================
Managed Stacktrace:
=================================================================
=================================================================
Plugins: Failed to load 'Assets/Oculus/Avatar2/Plugins/Win64/libovrbody.dll' with error 'A dynamic link library (DLL) initialization routine failed.




 

Participant
May 10, 2022

hey thanks for putting this thread together. I have been struggling in getting the avatars to interact with objects (pokes, grabs, etc). What's the correct way in adding interactions to the avatars?

 

Is there something I am missing here? I wasn't able to find any documentation on it or any sample scenes showing it. I found a thread on it (https://forums.oculusvr.com/t5/Unity-VR-Development/Experimenting-with-wiring-Oculus-Interaction-SDK-to-New-Meta/m-p/959584#M20577) but it seems a bit hacky and I still haven't gotten that working. 

Up and Coming
June 14, 2022

The documentation shows how to get your userID, but not how to set the userID on a remote avatar. My work flow is currently:

  1. Get user ID on local machine
  2. Send user ID & RecordStreamData() to remote model
  3. Instantiate remote avatar on networked client
  4. Get user ID from remote model
  5. ??? Apply User ID some how ???
  6. Use ApplyStreamData() for positioning avatar

What do I need to do in step 5?

June 14, 2022

Hi cazforshort-

 

You don't really need to worry about the user ID of an Avatar once you have loaded it using LoadUser(). So it sounds like the way you need to apply the remote avatar's user ID is to call LoadUser() - but that only needs to be done once.

 

Please see: https://developer.oculus.com/documentation/unity/meta-avatars-load-avatars/

 

I hope this helps. Let me know if it doesn't.

 

-Mike

Up and Coming
July 13, 2022

It is needed if I want other users in the same room to see my avatar and me to see theirs? 

Right now all the users just end up looking like me.

Up and Coming
June 29, 2022

Hello! I've come across what I believe is a bug in the Meta Avatar SDK v13+

 

Bug: “Bones do not match bindpose” error appears when using UNITY skinning.

 

Unity Version 2021.3.3f1

Oculus Integration SDK v41

OVRPLugin: 1.73.0

Meta Avatar SDK v14.0.0.44.95

 

Explanation:

Currently setting the avatar skinner to UNITY will cause a “Bones do not match bindpose” error in Unity both in editor and on device (Quest 2).

 

Steps to Repro:

  1. In Unity 2021+ Import Oculus Integration SDK v41
  2. Import Meta Avatar SDK V14
  3. Open the example scene “MirrorScene” in Oculus/Avatar2/Example/Scenes/MirrorScene
  4. In the scene, select the AvatarSDKManagerHorizon gameobject, and on it’s OvrAvatarManager component, under Skinning Settings, make sure the only skinner supported is UNITY.
  5. Run the game.

 

Note: This is reproducible in any scene with the avatar skinners forced to UNITY.

 

Results:

The following error will appear:

Twitter: @RickEM
New Participant
July 7, 2022

Hi there.

We have encountered an issue (or at least unexpected behavior) when loading a built-in avatar using either LoadAssetsFromZipSource or LoadAssetsFromStreamingAssets. It seems that if we are creating and loading multiple avatars using the same built-in avatar but with different desired LOD levels then we get a result of (UnmatchedLoadFilters) from OvrAvatarEntity_LoadUriWithFilters on subsequent calls. This behavior appeared after upgrading to Meta Avatars 12 from a much earlier version. This situation can arise when two player that have not configured their custom avatars enter multiplayer together. The local player uses higher LOD levels than the remote player (for performance reasons) but both players are using the first built-in avatar (avatar 0) by default.

 

The ideal behavior would be to have the ability to load different / additional LOD levels for a built-in avatar as needed rather than having to restrict all applications of a specific built-in avatar to certain LOD levels or having to load all levels in a worst case. I'll look forward to hearing more. Thanks!

July 27, 2022

Mitigating The Changes In File Locations In SDK v14 And Newer


What Happened

In order to make our shaders easier to be used by apps integrating the Meta Avatars SDK we moved several files from the Examples folder in the Meta Avatars SDK to Assets/Oculus/Avatar2/Scripts/ShaderUtils in SDK version v14 and newer. Here are the files that were moved:

 

Assets/Oculus/Avatar2/Scripts/ShaderUtils/AvatarCustom.cginc

Assets/Oculus/Avatar2/Scripts/ShaderUtils/AvatarCustomTypes.cginc
Assets/Oculus/Avatar2/Scripts/ShaderUtils/AvatarSubmesh.cginc
Assets/Oculus/Avatar2/Scripts/ShaderUtils/OvrAvatarMotionVectorsCore.hlsl
Assets/Oculus/Avatar2/Scripts/ShaderUtils/OvrAvatarVertexFetch.hlsl

Assets/Oculus/Avatar2/Scripts/ShaderUtils/OvrDecodeFormats.cginc
Assets/Oculus/Avatar2/Scripts/ShaderUtils/OvrDecodeUtils.cginc

 

This had the unfortunate consequence of potentially breaking projects that were referring to these shaders and includes from the previous location. 

 

Mitigation

When upgrading the SDK version from a version prior to v14 to v14+, please delete the files under Assets/Oculus/Avatar2 from your project before installing the new version of the Meta Avatars SDK. If this is your practice before taking an upgrade then you likely were not affected by this change.

 

If, however, you have added or modified files under the Avatar2 directory structure and cannot delete the entire directory structure safely, then please make sure to delete the following files after importing the newer version of the SDK:

 

Oculus/Avatar2/Scripts/Skinning/GpuSkinning/Shaders/OvrDecodeFormats.cginc

Oculus/Avatar2/Scripts/Skinning/GpuSkinning/Shaders/OvrDecodeUtils.cginc


We apologize for any inconvenience this has caused.

 

Up and Coming
July 30, 2022

Hi Anonymous , 

that still doesn’t seem to fix the 400 error I’m seeing with Normcore. 

Participant
August 3, 2022

I have a question regarding using avatars cross-platform. I've managed to get the preset avatars loading in for other platforms (ex. SteamVR). However when it comes to networking, if a player on SteamVR joins a player on Quest, the player on SteamVR won't be able to load in the Quest player's user avatar. It uses a random preset for the Quest user, presumably because it's trying to use the CDN to load the Quest user's avatar with their user id, but there is no access token on SteamVR so the call fails.

 

So my question is: for cross-platform multiplayer, is there a way for an Oculus player's user-created avatar to load for other players who aren't on an Oculus platform? Thanks

New Participant
August 16, 2022

Thanks for the question StefaSic . I am in the same boat as you are. Can we have an official statement on this please Anonymous? Thanks!

Participant
August 29, 2022

Hey OVA_PL , I managed to figure out having Steam VR players load Oculus users' custom avatars in crossplay. I don't know if it was just recently added or if I'm just blind and completely missed it before, but the documentation has this page about crossplay that explains how you can do it. Pretty much you have to set up your app for Federated Authentication, and then you can create federated users and generate a federated user access token for Steam users to set as the access token for the OvrAvatarEntitlement.

Up and Coming
August 3, 2022

Is there documentation on what all the ovrAvatar2EntityFeatures mean?

I'm trying to use ApplyStreamData and I find if I copy the same features as the NetworkLoopback example, my avatar stays in A-pose. If I enable CAPI.ovrAvatar2EntityFeatures.Animation it at least starts moving its hands and arms, but its face still doesn't move.

 

If I had more information about what those ovrAvatar2EntityFeatures are supposed to change, maybe it would help show what is different about our setup that leads to this difference in behaviour?

 

EDIT: Okay, I found this:

https://developer.oculus.com/documentation/unity/meta-avatars-ovravatarentity/#entity-features

It still doesn't quite make sense to me why the NetworkLoopback example doesn't have this enabled but it's necessary for me to not got A-pose.