public void usdiSetupComponents(UsdMesh parent) { if (!m_setupRequierd) { return; } m_setupRequierd = false; GameObject go; if (m_nth == 0) { go = parent.gameObject; } else { string name = "Submesh[" + m_nth + "]"; var ptrans = parent.GetComponent <Transform>(); var child = ptrans.FindChild(name); if (child != null) { go = child.gameObject; } else { go = new GameObject(name); go.GetComponent <Transform>().SetParent(parent.GetComponent <Transform>(), false); } } m_trans = go.GetComponent <Transform>(); var meshSummary = parent.meshSummary; var meshData = parent.meshData; bool assignDefaultMaterial = false; if (meshSummary.num_bones > 0) { // setup SkinnedMeshRenderer var renderer = usdi.GetOrAddComponent <SkinnedMeshRenderer>(go, ref assignDefaultMaterial); m_renderer = renderer; usdiSetupBones(parent, ref meshData); if (renderer.sharedMesh != null && parent.master == null && renderer.sharedMesh.name.IndexOf("<dyn>") == 0) { m_umesh = renderer.sharedMesh; } else { m_umesh = usdiShareOrCreateMesh(parent); renderer.sharedMesh = m_umesh; } m_umesh.MarkDynamic(); } else { // setup MeshFilter and MeshRenderer var meshFilter = usdi.GetOrAddComponent <MeshFilter>(go); if (meshFilter.sharedMesh != null && parent.master == null && meshFilter.sharedMesh.name.IndexOf("<dyn>") == 0) { m_umesh = meshFilter.sharedMesh; } else { m_umesh = usdiShareOrCreateMesh(parent); meshFilter.sharedMesh = m_umesh; } m_umesh.MarkDynamic(); m_renderer = usdi.GetOrAddComponent <MeshRenderer>(go, ref assignDefaultMaterial); } #if UNITY_EDITOR if (assignDefaultMaterial) { Material[] materials = null; if (m_nth != 0) { var s = parent.submeshes[0]; if (s.renderer != null) { materials = s.renderer.sharedMaterials; } } if (materials == null) { materials = new Material[] { UnityEngine.Object.Instantiate(GetDefaultMaterial()) }; materials[0].name = "Material_0"; } m_renderer.sharedMaterials = materials; } #endif }