public override void OnInspectorGUI() { var attachment = (UsdPrimSource)target; var stageRoot = attachment.GetComponentInParent <UsdAsset>(); if (!stageRoot) { stageRoot = attachment.GetComponent <UsdAsset>(); } if (!stageRoot) { Debug.LogError("No stage root found"); return; } var scene = stageRoot.GetScene(); if (scene == null) { Debug.LogError("Invalid scene: " + stageRoot.usdFullPath); return; } var prim = scene.GetPrimAtPath(attachment.m_usdPrimPath); // // BEGIN GUI. // GUILayout.BeginHorizontal(); EditorGUILayout.LabelField("USD Prim: ", GUILayout.Width(100)); EditorGUILayout.SelectableLabel(attachment.m_usdPrimPath, EditorStyles.textField, GUILayout.Height(EditorGUIUtility.singleLineHeight)); GUILayout.EndHorizontal(); if (prim != null) { GUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Prim Type: ", GUILayout.Width(100)); EditorGUILayout.SelectableLabel(prim.GetTypeName(), EditorStyles.textField, GUILayout.Height(EditorGUIUtility.singleLineHeight)); GUILayout.EndHorizontal(); } EditorGUILayout.LabelField("USD Time: " + stageRoot.m_usdTimeOffset); m_showExpandedUi = GUILayout.Toggle(m_showExpandedUi, "Show USD Inspector"); if (!m_showExpandedUi) { return; } // // Attribute Grid. // // Separator. EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); if (prim == null) { EditorGUILayout.LabelField("(Prim is not valid/loaded in USD file)"); return; } DrawAttributeGui(prim, scene); // // Prim Composition Graph. // // Separator. EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); EditorGUILayout.LabelField("Prim Composition Graph", EditorStyles.boldLabel); // Since composition can only happen at the prim level, the prim is used to construct the // composition graph. The Pcp (Prim Cache Population) API is the lowest level of the // composition system, which means it's most powerful and most complicated. PcpNodeRefs // provide direct access to the in-memory composition structure. Note that unloaded prims // will not have a PrimIndex. // // The composition graph is typically less useful for users, since it's a complicated // structure to understand, but often there is a small handful of power users on a // production responsible for setting up the pipeline composition structure; for them this // visualization can be extremely helpful. WalkNodes(prim.GetPrimIndex().GetRootNode()); if (selectedAttribute != null && selectedAttribute.IsValid()) { DrawAttributeInfo(scene); } }