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(); } }
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; }
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(); } }