Пример #1
0
    public void RequestAvatarSpecification(
        UInt64 userId,
        specificationCallback callback,
        bool useCombinedMesh,
        ovrAvatarAssetLevelOfDetail lod,
        bool forceMobileTextureFormat,
        ovrAvatarLookAndFeelVersion lookVersion,
        ovrAvatarLookAndFeelVersion fallbackVersion,
        bool enableExpressive)
    {
        CAPI.ovrAvatar_SetForceASTCTextures(forceMobileTextureFormat);

        HashSet <specificationCallback> callbackSet;

        if (!specificationCallbacks.TryGetValue(userId, out callbackSet))
        {
            callbackSet = new HashSet <specificationCallback>();
            specificationCallbacks.Add(userId, callbackSet);

            IntPtr specRequest = CAPI.ovrAvatarSpecificationRequest_Create(userId);
            CAPI.ovrAvatarSpecificationRequest_SetLookAndFeelVersion(specRequest, lookVersion);
            CAPI.ovrAvatarSpecificationRequest_SetFallbackLookAndFeelVersion(specRequest, fallbackVersion);
            CAPI.ovrAvatarSpecificationRequest_SetLevelOfDetail(specRequest, lod);
            CAPI.ovrAvatarSpecificationRequest_SetCombineMeshes(specRequest, useCombinedMesh);
            CAPI.ovrAvatarSpecificationRequest_SetExpressiveFlag(specRequest, enableExpressive);
            CAPI.ovrAvatar_RequestAvatarSpecificationFromSpecRequest(specRequest);
            CAPI.ovrAvatarSpecificationRequest_Destroy(specRequest);
        }

        callbackSet.Add(callback);
    }
Пример #2
0
 private void InitFallbackTextureSet(ovrAvatarAssetLevelOfDetail lod)
 {
     FallbackTextureSets[(int)lod].DiffuseRoughness = FallbackTextureSets[(int)lod].DiffuseRoughness =
         Resources.Load <Texture2D>(FALLBACK_TEXTURE_PATHS_DIFFUSE_ROUGHNESS[(int)lod]);
     FallbackTextureSets[(int)lod].Normal = FallbackTextureSets[(int)lod].Normal =
         Resources.Load <Texture2D>(FALLBACK_TEXTURE_PATHS_NORMAL[(int)lod]);
     FallbackTextureSets[(int)lod].Initialized = true;
 }
Пример #3
0
    public void CheckFallbackTextureSet(ovrAvatarAssetLevelOfDetail lod)
    {
        if (FallbackTextureSets[(int)lod].Initialized)
        {
            return;
        }

        InitFallbackTextureSet(lod);
    }
Пример #4
0
 public void BeginLoadingAsset(
     UInt64 assetId,
     ovrAvatarAssetLevelOfDetail lod,
     assetLoadedCallback callback)
 {
     HashSet<assetLoadedCallback> callbackSet;
     if (!assetLoadedCallbacks.TryGetValue(assetId, out callbackSet))
     {
         callbackSet = new HashSet<assetLoadedCallback>();
         assetLoadedCallbacks.Add(assetId, callbackSet);
     }
     AvatarLogger.Log("Loading Asset ID: " + assetId);
     CAPI.ovrAvatarAsset_BeginLoadingLOD(assetId, lod);
     callbackSet.Add(callback);
 }
Пример #5
0
    internal void Initialize(
        IntPtr renderPart,
        ovrAvatarRenderPart_SkinnedMeshRenderPBS_V2 skinnedMeshRender,
        OvrAvatarMaterialManager materialManager,
        int thirdPersonLayer,
        int firstPersonLayer,
        int sortOrder,
        bool isCombinedMaterial,
        ovrAvatarAssetLevelOfDetail lod)
    {
        AvatarMaterialManager = materialManager;
        IsCombinedMaterial    = isCombinedMaterial;

        mesh = CreateSkinnedMesh(
            skinnedMeshRender.meshAssetID,
            skinnedMeshRender.visibilityMask,
            thirdPersonLayer,
            firstPersonLayer,
            sortOrder);

#if UNITY_ANDROID
        var singleComponentShader = "OvrAvatar/Avatar_Mobile_SingleComponent";
#else
        var singleComponentShader = "OvrAvatar/Avatar_PC_SingleComponent";
#endif

        var shader = IsCombinedMaterial
             ? Shader.Find("OvrAvatar/Avatar_Mobile_CombinedMesh")
             : Shader.Find(singleComponentShader);

        AvatarLogger.Log("Shader is: " + shader.name);

        mesh.sharedMaterial             = CreateAvatarMaterial(gameObject.name + "_material", shader);
        mesh.sharedMaterial.renderQueue = OvrAvatarMaterialManager.RENDER_QUEUE;

        bones = mesh.bones;

        if (IsCombinedMaterial)
        {
            AvatarMaterialManager.SetRenderer(mesh);
            InitializeCombinedMaterial(renderPart, (int)lod - 1);
            AvatarMaterialManager.OnCombinedMeshReady();
        }
    }
Пример #6
0
 public AvatarSpecRequestParams(
     UInt64 userId,
     specificationCallback callback,
     bool useCombinedMesh,
     ovrAvatarAssetLevelOfDetail lod,
     bool forceMobileTextureFormat,
     ovrAvatarLookAndFeelVersion lookVersion,
     ovrAvatarLookAndFeelVersion fallbackVersion,
     bool enableExpressive)
 {
     _userId                   = userId;
     _callback                 = callback;
     _useCombinedMesh          = useCombinedMesh;
     _lod                      = lod;
     _forceMobileTextureFormat = forceMobileTextureFormat;
     _lookVersion              = lookVersion;
     _fallbackVersion          = fallbackVersion;
     _enableExpressive         = enableExpressive;
 }
Пример #7
0
    internal void Initialize(
        IntPtr renderPart,
        ovrAvatarRenderPart_SkinnedMeshRenderPBS_V2 skinnedMeshRender,
        OvrAvatarMaterialManager materialManager,
        int thirdPersonLayer,
        int firstPersonLayer,
        bool combinedMesh,
        ovrAvatarAssetLevelOfDetail lod,
        bool assignExpressiveParams,
        OvrAvatar avatar,
        bool isControllerModel)
    {
        avatarMaterialManager = materialManager;
        isCombinedMaterial    = combinedMesh;

        mesh = CreateSkinnedMesh(
            skinnedMeshRender.meshAssetID,
            skinnedMeshRender.visibilityMask,
            thirdPersonLayer,
            firstPersonLayer);

        EnableExpressive = assignExpressiveParams;

#if UNITY_ANDROID
        var singleComponentShader = EnableExpressive
            ? avatar.Skinshaded_Expressive_VertFrag_SingleComponent
            : avatar.Skinshaded_VertFrag_SingleComponent;
#else
        var singleComponentShader = EnableExpressive
            ? avatar.Skinshaded_Expressive_SurfaceShader_SingleComponent
            : avatar.Skinshaded_SurfaceShader_SingleComponent;
#endif
        var combinedComponentShader = EnableExpressive
            ? avatar.Skinshaded_Expressive_VertFrag_CombinedMesh
            : avatar.Skinshaded_VertFrag_CombinedMesh;

        var mainShader = isCombinedMaterial ? combinedComponentShader : singleComponentShader;

        if (isControllerModel)
        {
            mainShader = avatar.ControllerShader;
        }

        AvatarLogger.Log("OvrAvatarSkinnedMeshPBSV2RenderComponent Shader is: " + mainShader != null
           ? mainShader.name : "null");

        if (EnableExpressive)
        {
            ExpressiveParameters = CAPI.ovrAvatar_GetExpressiveParameters(avatar.sdkAvatar);
            var eyeShader = avatar.EyeLens;

            Material[] matArray = new Material[2];
            matArray[0] = CreateAvatarMaterial(gameObject.name + MAIN_MATERIAL_NAME, mainShader);
            matArray[1] = CreateAvatarMaterial(gameObject.name + EYE_MATERIAL_NAME, eyeShader);

            if (avatar.UseTransparentRenderQueue)
            {
                SetMaterialTransparent(matArray[0]);
            }
            else
            {
                SetMaterialOpaque(matArray[0]);
            }
            // Eye lens shader queue is transparent and set from shader
            matArray[1].renderQueue = -1;
            mesh.materials          = matArray;
        }
        else
        {
            mesh.sharedMaterial = CreateAvatarMaterial(gameObject.name + DEFAULT_MATERIAL_NAME, mainShader);
            if (avatar.UseTransparentRenderQueue && !isControllerModel)
            {
                SetMaterialTransparent(mesh.sharedMaterial);
            }
            else
            {
                SetMaterialOpaque(mesh.sharedMaterial);
            }
        }
        bones = mesh.bones;

        if (isCombinedMaterial)
        {
            avatarMaterialManager.SetRenderer(mesh);
            InitializeCombinedMaterial(renderPart, (int)lod);
            avatarMaterialManager.OnCombinedMeshReady();
        }

        blendShapeParams = new ovrAvatarBlendShapeParams();
        blendShapeParams.blendShapeParamCount = 0;
        blendShapeParams.blendShapeParams     = new float[64];

        blendShapeCount = mesh.sharedMesh.blendShapeCount;
    }
Пример #8
0
 public static extern bool ovrAvatarAsset_BeginLoadingLOD(UInt64 assetId, ovrAvatarAssetLevelOfDetail lod);
Пример #9
0
 public static extern void ovrAvatarSpecificationRequest_SetLevelOfDetail(IntPtr specificationRequest, ovrAvatarAssetLevelOfDetail lod);
    internal void Initialize(
        IntPtr renderPart,
        ovrAvatarRenderPart_SkinnedMeshRenderPBS_V2 skinnedMeshRender,
        OvrAvatarMaterialManager materialManager,
        int thirdPersonLayer,
        int firstPersonLayer,
        int sortOrder,
        bool isCombinedMaterial,
        ovrAvatarAssetLevelOfDetail lod,
        bool assignExpressiveParams,
        OvrAvatar avatar,
        bool isControllerModel)
    {
        AvatarMaterialManager = materialManager;
        IsCombinedMaterial    = isCombinedMaterial;

        mesh = CreateSkinnedMesh(
            skinnedMeshRender.meshAssetID,
            skinnedMeshRender.visibilityMask,
            thirdPersonLayer,
            firstPersonLayer,
            sortOrder);

        EnableExpressive = assignExpressiveParams;

#if UNITY_ANDROID
        var singleComponentShader = EnableExpressive
            ? avatar.Skinshaded_Expressive_VertFrag_SingleComponent
            : avatar.Skinshaded_VertFrag_SingleComponent;
#else
        var singleComponentShader = EnableExpressive
            ? avatar.Skinshaded_Expressive_SurfaceShader_SingleComponent
            : avatar.Skinshaded_SurfaceShader_SingleComponent;
#endif
        var combinedComponentShader = EnableExpressive
            ? avatar.Skinshaded_Expressive_VertFrag_CombinedMesh
            : avatar.Skinshaded_VertFrag_CombinedMesh;

        var mainShader = IsCombinedMaterial ? combinedComponentShader : singleComponentShader;

        if (isControllerModel)
        {
            mainShader = Shader.Find("OvrAvatar/AvatarPBRV2Simple");
        }

        AvatarLogger.Log("OvrAvatarSkinnedMeshPBSV2RenderComponent Shader is: " + mainShader != null
            ? mainShader.name : "null");

        if (EnableExpressive)
        {
            ExpressiveParameters = CAPI.ovrAvatar_GetExpressiveParameters(avatar.sdkAvatar);

            var eyeShader = avatar.EyeLens;

            Material[] matArray = new Material[2];
            matArray[0] = CreateAvatarMaterial(gameObject.name + MAIN_MATERIAL_NAME, mainShader);
            matArray[1] = CreateAvatarMaterial(gameObject.name + EYE_MATERIAL_NAME, eyeShader);

            if (avatar.UseTransparentRenderQueue)
            {
                // Initialize shader to use transparent render queue with alpha blending
                matArray[0].SetOverrideTag("RenderType", "Transparent");
                matArray[0].SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
                matArray[0].SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
                matArray[0].EnableKeyword("_ALPHATEST_ON");
                matArray[0].EnableKeyword("_ALPHABLEND_ON");
                matArray[0].EnableKeyword("_ALPHAPREMULTIPLY_ON");
                matArray[0].renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent;
            }
            else
            {
                // Initialize shader to use geometry render queue with no blending
                matArray[0].SetOverrideTag("RenderType", "Opaque");
                matArray[0].SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
                matArray[0].SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
                matArray[0].DisableKeyword("_ALPHATEST_ON");
                matArray[0].DisableKeyword("_ALPHABLEND_ON");
                matArray[0].DisableKeyword("_ALPHAPREMULTIPLY_ON");
                matArray[0].renderQueue = (int)UnityEngine.Rendering.RenderQueue.Geometry;
            }
            // Eye lens shader queue is transparent and set from shader
            matArray[1].renderQueue = -1;
            mesh.materials          = matArray;
        }
        else
        {
            mesh.sharedMaterial = CreateAvatarMaterial(gameObject.name + DEFAULT_MATERIAL_NAME, mainShader);
            if (avatar.UseTransparentRenderQueue && !isControllerModel)
            {
                // Initialize shader to use transparent render queue with alpha blending
                mesh.sharedMaterial.SetOverrideTag("RenderType", "Transparent");
                mesh.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
                mesh.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
                mesh.sharedMaterial.EnableKeyword("_ALPHATEST_ON");
                mesh.sharedMaterial.EnableKeyword("_ALPHABLEND_ON");
                mesh.sharedMaterial.EnableKeyword("_ALPHAPREMULTIPLY_ON");
                mesh.sharedMaterial.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent;
            }
            else
            {
                // Initialize shader to use geometry render queue with no blending
                mesh.sharedMaterial.SetOverrideTag("RenderType", "Opaque");
                mesh.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
                mesh.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
                mesh.sharedMaterial.DisableKeyword("_ALPHATEST_ON");
                mesh.sharedMaterial.DisableKeyword("_ALPHABLEND_ON");
                mesh.sharedMaterial.DisableKeyword("_ALPHAPREMULTIPLY_ON");
                mesh.sharedMaterial.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Geometry;
            }
        }
        bones = mesh.bones;

        if (IsCombinedMaterial)
        {
            AvatarMaterialManager.SetRenderer(mesh);
            InitializeCombinedMaterial(renderPart, (int)lod - 1);
            AvatarMaterialManager.OnCombinedMeshReady();
        }
    }