From 563a86f5d0d4c09ce87ba64af6a9e23aa53b076f Mon Sep 17 00:00:00 2001 From: David Lanier Date: Thu, 15 Feb 2024 11:47:17 +0100 Subject: [PATCH] HYDRA-307: Add the FootPrint node as an Hydra example --- .../flowViewportAPIExamples/CMakeLists.txt | 1 + .../flowViewportAPIMayaLocator.cpp | 2 +- .../footPrintNode/CMakeLists.txt | 102 +++ .../footPrintNode/mhFootPrintNode.cpp | 666 ++++++++++++++++++ .../mayaUsd/render/mayaToHydra/CMakeLists.txt | 1 + .../FootPrintNodeTest/add_NodeCreated.png | Bin 0 -> 2374 bytes .../FootPrintNodeTest/add_NodeDeleted.png | Bin 0 -> 1563 bytes .../FootPrintNodeTest/add_NodeDeletedRedo.png | Bin 0 -> 1563 bytes .../FootPrintNodeTest/add_NodeDeletedUndo.png | Bin 0 -> 2399 bytes .../add_NodeDeletedUndoAgain.png | Bin 0 -> 2399 bytes .../FootPrintNodeTest/add_NodeHidden.png | Bin 0 -> 1563 bytes .../FootPrintNodeTest/add_NodeMoved.png | Bin 0 -> 2399 bytes .../add_NodeMovedAfterDeletionAndUndo.png | Bin 0 -> 2411 bytes .../FootPrintNodeTest/add_NodeUnhidden.png | Bin 0 -> 2399 bytes .../add_VP2AndThenBackToStorm.png | Bin 0 -> 2411 bytes .../footPrint_AfterModifs.png | Bin 0 -> 2080 bytes .../footPrint_BeforeModifs.png | Bin 0 -> 1836 bytes .../footPrint_VP2AndThenBackToStorm.png | Bin 0 -> 2080 bytes .../loadingFootPrintScene.png | Bin 0 -> 3041 bytes .../multipleNodes_AfterModifs.png | Bin 0 -> 2394 bytes .../multipleNodes_BeforeModifs.png | Bin 0 -> 2327 bytes .../multipleNodes_Node1Hidden.png | Bin 0 -> 1982 bytes .../multipleNodes_Node1Unhidden.png | Bin 0 -> 2394 bytes .../multipleNodes_VP2AndThenBackToStorm.png | Bin 0 -> 2394 bytes ...iewports_VP2AndThenBackToStorm_modPan3.png | Bin 0 -> 2078 bytes ...iewports_VP2AndThenBackToStorm_modPan4.png | Bin 0 -> 1924 bytes .../multipleViewports_VP2_modPan3.png | Bin 0 -> 1563 bytes .../multipleViewports_VP2_modPan4.png | Bin 0 -> 1563 bytes .../multipleViewports_viewPanel1.png | Bin 0 -> 2078 bytes .../multipleViewports_viewPanel4.png | Bin 0 -> 1924 bytes .../render/mayaToHydra/testFlowViewportAPI.py | 1 + .../render/mayaToHydra/testFootPrintNode.py | 296 ++++++++ .../testFootPrintNode/testFootPrintNode.ma | 219 ++++++ .../testFootPrintNodeSaved.ma | 245 +++++++ 34 files changed, 1532 insertions(+), 1 deletion(-) create mode 100644 lib/mayaHydra/flowViewportAPIExamples/footPrintNode/CMakeLists.txt create mode 100644 lib/mayaHydra/flowViewportAPIExamples/footPrintNode/mhFootPrintNode.cpp create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeCreated.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeDeleted.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeDeletedRedo.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeDeletedUndo.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeDeletedUndoAgain.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeHidden.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeMoved.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeMovedAfterDeletionAndUndo.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeUnhidden.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_VP2AndThenBackToStorm.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/footPrint_AfterModifs.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/footPrint_BeforeModifs.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/footPrint_VP2AndThenBackToStorm.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/loadingFootPrintScene.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/multipleNodes_AfterModifs.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/multipleNodes_BeforeModifs.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/multipleNodes_Node1Hidden.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/multipleNodes_Node1Unhidden.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/multipleNodes_VP2AndThenBackToStorm.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/multipleViewports_VP2AndThenBackToStorm_modPan3.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/multipleViewports_VP2AndThenBackToStorm_modPan4.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/multipleViewports_VP2_modPan3.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/multipleViewports_VP2_modPan4.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/multipleViewports_viewPanel1.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/multipleViewports_viewPanel4.png create mode 100644 test/lib/mayaUsd/render/mayaToHydra/testFootPrintNode.py create mode 100644 test/testSamples/testFootPrintNode/testFootPrintNode.ma create mode 100644 test/testSamples/testFootPrintNode/testFootPrintNodeSaved.ma diff --git a/lib/mayaHydra/flowViewportAPIExamples/CMakeLists.txt b/lib/mayaHydra/flowViewportAPIExamples/CMakeLists.txt index f05a524afd..d7ee60f200 100644 --- a/lib/mayaHydra/flowViewportAPIExamples/CMakeLists.txt +++ b/lib/mayaHydra/flowViewportAPIExamples/CMakeLists.txt @@ -1 +1,2 @@ add_subdirectory(flowViewportAPIMayaLocator) +add_subdirectory(footPrintNode) diff --git a/lib/mayaHydra/flowViewportAPIExamples/flowViewportAPIMayaLocator/flowViewportAPIMayaLocator.cpp b/lib/mayaHydra/flowViewportAPIExamples/flowViewportAPIMayaLocator/flowViewportAPIMayaLocator.cpp index d5cf868ab9..dc35e8cf4b 100644 --- a/lib/mayaHydra/flowViewportAPIExamples/flowViewportAPIMayaLocator/flowViewportAPIMayaLocator.cpp +++ b/lib/mayaHydra/flowViewportAPIExamples/flowViewportAPIMayaLocator/flowViewportAPIMayaLocator.cpp @@ -554,7 +554,7 @@ MStatus FlowViewportAPIMayaLocator::initialize() MAKE_INPUT(nAttr); CHECK_MSTATUS ( nAttr.setDefault(5.0, 5.0, 5.0) ); - //Create dummy output attribute to trigger a call to the compute function on demand. as it's in the compute fonction that we add our scene indices + //Create dummy input attribute to trigger a call to the compute function on demand. as it's in the compute fonction that we add our scene indices mDummyInput = nAttr.create("dummyInput", "dI", MFnNumericData::kInt, 1.0, &status); MAKE_INPUT(nAttr); CHECK_MSTATUS ( nAttr.setDefault(1) ); diff --git a/lib/mayaHydra/flowViewportAPIExamples/footPrintNode/CMakeLists.txt b/lib/mayaHydra/flowViewportAPIExamples/footPrintNode/CMakeLists.txt new file mode 100644 index 0000000000..2d7847955e --- /dev/null +++ b/lib/mayaHydra/flowViewportAPIExamples/footPrintNode/CMakeLists.txt @@ -0,0 +1,102 @@ +set(TARGET_NAME mayaHydraFootPrintNode) + +add_library(${TARGET_NAME} SHARED) + +# ----------------------------------------------------------------------------- +# sources +# ----------------------------------------------------------------------------- +target_sources(${TARGET_NAME} + PRIVATE + mhFootPrintNode.cpp +) + +set(HEADERS + PRIVATE +) + +# ----------------------------------------------------------------------------- +# compiler configuration +# ----------------------------------------------------------------------------- +target_compile_definitions(${TARGET_NAME} + PRIVATE + # M3dView needs this (technically, MNativeWindowHdl.h) + # private atm because M3dView is only used in .cpp right now + # gcc will NOT set this automatically + $<$:LINUX> + # Not sure if msvcc sets this automatically, but won't hurt to redefine + $<$:_WIN32> + MFB_ALT_PACKAGE_NAME="${TARGET_NAME}" # This is used by Pixar HdSceneIndexPluginRegistry::Define to create a unique name +) + +# ----------------------------------------------------------------------------- +# include directories +# ----------------------------------------------------------------------------- +if(DEFINED MAYAUSD_VERSION) + target_compile_definitions(${TARGET_NAME} + PRIVATE + MAYAUSD_VERSION=${MAYAUSD_VERSION} + ) +endif() + +if(DEFINED MAYAHYDRA_VERSION) + target_compile_definitions(${TARGET_NAME} + PRIVATE + MAYAHYDRA_VERSION=${MAYAHYDRA_VERSION} + ) +endif() +if(DEFINED MAYAHYDRA_CUT_ID) + target_compile_definitions(${TARGET_NAME} + PRIVATE + MAYAHYDRA_CUT_ID=${MAYAHYDRA_CUT_ID} + ) +endif() + +mayaHydra_compile_config(${TARGET_NAME}) + +# ----------------------------------------------------------------------------- +# link libraries +# ----------------------------------------------------------------------------- +target_link_libraries(${TARGET_NAME} + PRIVATE + mayaHydraLib +) + +# ----------------------------------------------------------------------------- +# properties +# ----------------------------------------------------------------------------- +maya_set_plugin_properties(${TARGET_NAME}) + +# ----------------------------------------------------------------------------- +# run-time search paths +# ----------------------------------------------------------------------------- +if(IS_MACOSX OR IS_LINUX) + mayaUsd_init_rpath(rpath "lib/maya") + if(DEFINED MAYAUSD_TO_USD_RELATIVE_PATH) + mayaUsd_add_rpath(rpath "../../${MAYAUSD_TO_USD_RELATIVE_PATH}/lib") + elseif(DEFINED PXR_USD_LOCATION) + mayaUsd_add_rpath(rpath "${PXR_USD_LOCATION}/lib") + endif() + if (IS_LINUX AND DEFINED MAYAUSD_TO_USD_RELATIVE_PATH) + mayaUsd_add_rpath(rpath "../../${MAYAUSD_TO_USD_RELATIVE_PATH}/lib64") + endif() + if(IS_MACOSX AND DEFINED MAYAUSD_TO_USD_RELATIVE_PATH) + mayaUsd_add_rpath(rpath "../../../../Maya.app/Contents/MacOS") + endif() + mayaUsd_add_rpath(rpath "../") + mayaUsd_install_rpath(rpath ${TARGET_NAME}) +endif() + +# ----------------------------------------------------------------------------- +# install +# ----------------------------------------------------------------------------- +install(TARGETS ${TARGET_NAME} + DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/maya) + +if(IS_WINDOWS) + install(FILES $ + DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/maya OPTIONAL) +endif() + +set(LIBFILENAME ${CMAKE_SHARED_LIBRARY_PREFIX}${TARGET_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}) +set(PLUG_INFO_LIBRARY_PATH "../../../${LIBFILENAME}") +set(PLUG_INFO_RESOURCE_PATH "resources") \ No newline at end of file diff --git a/lib/mayaHydra/flowViewportAPIExamples/footPrintNode/mhFootPrintNode.cpp b/lib/mayaHydra/flowViewportAPIExamples/footPrintNode/mhFootPrintNode.cpp new file mode 100644 index 0000000000..7cc30fdd4c --- /dev/null +++ b/lib/mayaHydra/flowViewportAPIExamples/footPrintNode/mhFootPrintNode.cpp @@ -0,0 +1,666 @@ +// +// Copyright 2024 Autodesk, Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//////////////////////////////////////////////////////////////////////// +// DESCRIPTION: +// +// This plug-in demonstrates how to draw a simple mesh like foot Print in an easy way within a Hydra viewport. +// This node is only visible in a Hydra viewport, it won't be visible in viewport 2.0. +// +// For comparison, you can reference a Maya Developer Kit sample named footPrintNode which uses Viewport 2.0 override to draw. +// To create an instance of this node in maya, please use the following MEL command : +// +// createNode("MhFootPrint") +// +//////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//Flow viewport headers +#include +#include + +//Hydra headers +#include +#include +#include +#include +#include +#include +#include +#include + +PXR_NAMESPACE_USING_DIRECTIVE + +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- +// Node implementation with Hydra scene index +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- +class MhFootPrint : public MPxLocatorNode +{ +public: + MhFootPrint(); + ~MhFootPrint() override; + + MStatus compute( const MPlug& plug, MDataBlock& data ) override; + + bool isBounded() const override; + MBoundingBox boundingBox() const override; + + void setupFlowViewportInterface(); + void UpdateFootPrintPrims(); + void TriggerACallToCompute(); + + static void * creator(); + static MStatus initialize(); + + //Attributes + static MObject mSize; + static MObject mWorldS; + static MObject mColor; + static MObject mDummyInput; //Dummy input to trigger a call to compute + static MObject mDummyOutput;//Dummy output to trigger a call to compute + + static MTypeId id; + static MString nodeClassification; + +private: + ///get the value of the size attribute in centimeters + float _GetSizeInCentimeters() const; + ///get the value of the color attribute, returned as a 3D Hydra vector + GfVec3f _GetColor() const; + ///Create the Hydra foot print primitives + void _CreateAndAddFootPrintPrimitives(); + ///Remove the Hydra foot print primitives + void _RemoveFootPrintPrimitives(); + ///Update the MObject of this node + void _UpdateThisMObject(); + + ///Counter to make the hydra primitives unique + static int _counter; + + /// Sole path to be used in the retained hydra scene index for the sole primitive + SdfPath _solePath; + /// Heel path to be used in the retained hydra scene index for the heel primitive + SdfPath _heelPath; + + ///Hydra retained scene index to add the 2 foot print primitives + HdRetainedSceneIndexRefPtr _retainedSceneIndex {nullptr}; + + ///To be used in hydra viewport API to pass the Maya node's MObject for setting callbacks for data producer scene indices + MObject _thisMObject; + ///To check if the MObject of this node has changed + MObject _oldMObject; + ///To hold the afterOpenCallback Id to be able to react when a File Open has happened. + MCallbackId _cbAfterOpenId = 0; + ///To hold the attributeChangedCallback Id to be able to react when the 3D grid creation parameters attributes from this node change. + MCallbackId _cbAttributeChangedId = 0; + + /// Init flag to do things only once for this node + bool _init = false; +}; + +namespace +{ + // Foot print data + constexpr int soleVertsCount = 21; + constexpr int heelVertsCount = 17; + + static const VtArray solePoints = { + { 0.00f, 0.0f, -0.70f }, + { 0.04f, 0.0f, -0.69f }, + { 0.09f, 0.0f, -0.65f }, + { 0.13f, 0.0f, -0.61f }, + { 0.16f, 0.0f, -0.54f }, + { 0.17f, 0.0f, -0.46f }, + { 0.17f, 0.0f, -0.35f }, + { 0.16f, 0.0f, -0.25f }, + { 0.15f, 0.0f, -0.14f }, + { 0.13f, 0.0f, 0.00f }, + { 0.00f, 0.0f, 0.00f }, + { -0.13f, 0.0f, 0.00f }, + { -0.15f, 0.0f, -0.14f }, + { -0.16f, 0.0f, -0.25f }, + { -0.17f, 0.0f, -0.35f }, + { -0.17f, 0.0f, -0.46f }, + { -0.16f, 0.0f, -0.54f }, + { -0.13f, 0.0f, -0.61f }, + { -0.09f, 0.0f, -0.65f }, + { -0.04f, 0.0f, -0.69f }, + { -0.00f, 0.0f, -0.70f } + }; + + static const VtArray heelPoints= { + { 0.00f, 0.0f, 0.06f }, + { 0.13f, 0.0f, 0.06f }, + { 0.14f, 0.0f, 0.15f }, + { 0.14f, 0.0f, 0.21f }, + { 0.13f, 0.0f, 0.25f }, + { 0.11f, 0.0f, 0.28f }, + { 0.09f, 0.0f, 0.29f }, + { 0.04f, 0.0f, 0.30f }, + { 0.00f, 0.0f, 0.30f }, + { -0.04f, 0.0f, 0.30f }, + { -0.09f, 0.0f, 0.29f }, + { -0.11f, 0.0f, 0.28f }, + { -0.13f, 0.0f, 0.25f }, + { -0.14f, 0.0f, 0.21f }, + { -0.14f, 0.0f, 0.15f }, + { -0.13f, 0.0f, 0.06f }, + { -0.00f, 0.0f, 0.06f } + }; + + //Number of sole triangles is soleVertsCount - 2 + static const VtIntArray soleFaceVertexCounts = { + 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, + 3, 3, 3, 3 + }; + + //Number of heel triangles is heelVertsCount - 2 + static const VtIntArray heelFaceVertexCounts = { + 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3 + }; + + static const VtIntArray soleFaceVertexIndices = { + 2, 1, 0, + 3, 2, 0, + 4, 3, 0, + 5, 4, 0, + 6, 5, 0, + 7, 6, 0, + 8, 7, 0, + 9, 8, 0, + 10, 9, 0, + 11, 10, 0, + 12, 11, 0, + 13, 12, 0, + 14, 13, 0, + 15, 14, 0, + 16, 15, 0, + 17, 16, 0, + 18, 17, 0, + 19, 18, 0, + 20, 19, 0 + }; + + static const VtIntArray heelFaceVertexIndices = { + 2, 1, 0, + 3, 2, 0, + 4, 3, 0, + 5, 4, 0, + 6, 5, 0, + 7, 6, 0, + 8, 7, 0, + 9, 8, 0, + 10, 9, 0, + 11, 10, 0, + 12, 11, 0, + 13, 12, 0, + 14, 13, 0, + 15, 14, 0, + 16, 15, 0 + }; + + //For the maya bounding box + static const MPoint corner1( -0.17, 0.0, -0.7 ); + static const MPoint corner2( 0.17, 0.0, 0.3 ); + + //Create the Hydra primitive and add it to the retained scene index + void _CreateAndAddPrim(const HdRetainedSceneIndexRefPtr& retainedSceneIndex, const SdfPath& primPath, const VtArray& points, const VtIntArray& faceVertexCount, const VtIntArray& faceVertexIndices, const GfVec3f& scale, const GfVec3f& displayColor) + { + using _PointArrayDs = HdRetainedTypedSampledDataSource>; + using _IntArrayDs = HdRetainedTypedSampledDataSource; + + const _IntArrayDs::Handle fvcDs = _IntArrayDs::New(faceVertexCount); + const _IntArrayDs::Handle fviDs = _IntArrayDs::New(faceVertexIndices); + + const VtIntArray vertexColorArray(points.size(), 0);//Is an index in the vertex color array, 1 per vertex,but we only have one same color for all verts (index 0) + + const HdContainerDataSourceHandle meshDs = + HdMeshSchema::Builder() + .SetTopology(HdMeshTopologySchema::Builder() + .SetFaceVertexCounts(fvcDs) + .SetFaceVertexIndices(fviDs) + .Build()) + .SetDoubleSided(HdRetainedTypedSampledDataSource::New(true))//Make the mesh double sided + .Build(); + + const HdContainerDataSourceHandle primvarsDs = + HdRetainedContainerDataSource::New( + + //Create the vertices positions + HdPrimvarsSchemaTokens->points, + HdPrimvarSchema::Builder() + .SetPrimvarValue(_PointArrayDs::New(points)) + .SetInterpolation(HdPrimvarSchema:: + BuildInterpolationDataSource( + HdPrimvarSchemaTokens->vertex)) + .SetRole(HdPrimvarSchema:: + BuildRoleDataSource( + HdPrimvarSchemaTokens->point)) + .Build(), + + //Create the vertex colors + HdTokens->displayColor, + HdPrimvarSchema::Builder() + .SetIndexedPrimvarValue( + HdRetainedTypedSampledDataSource::New( + VtVec3fArray{ + displayColor, + })) + .SetIndices( + HdRetainedTypedSampledDataSource::New( + vertexColorArray + ) + ) + .SetInterpolation( + HdPrimvarSchema::BuildInterpolationDataSource( + HdPrimvarSchemaTokens->varying)) + .SetRole( + HdPrimvarSchema::BuildRoleDataSource( + HdPrimvarSchemaTokens->color))//vertex color + .Build() + ); + + //Apply the size of the prim as a scale matrix + GfMatrix4d transform; + transform.SetIdentity(); + transform.SetScale(scale); + + //Create the primitive + HdRetainedSceneIndex::AddedPrimEntry addedPrim; + addedPrim.primPath = primPath; + addedPrim.primType = HdPrimTypeTokens->mesh; + addedPrim.dataSource = HdRetainedContainerDataSource::New( + //Create a matrix + HdXformSchemaTokens->xform, + HdXformSchema::Builder() + .SetMatrix(HdRetainedTypedSampledDataSource::New( + transform)).Build(), + + //create a mesh + HdMeshSchemaTokens->mesh, + meshDs, + HdPrimvarsSchemaTokens->primvars, + primvarsDs + ); + + //Add the prim in the retained scene index + retainedSceneIndex->AddPrims({addedPrim}); + } + + //Callback when an attribute of the maya node changes + void attributeChangedCallback(MNodeMessage::AttributeMessage msg, MPlug& plug, MPlug & otherPlug, void* footPrintData) + { + if (! footPrintData){ + return; + } + + MhFootPrint* footPrint = reinterpret_cast(footPrintData); + + MPlug parentPlug = plug.parent(); + if ( + (plug == MhFootPrint::mSize) || + (parentPlug == MhFootPrint::mColor) || + (plug == MhFootPrint::mColor) + ){ + footPrint->UpdateFootPrintPrims(); + } + } + + //Get the color attribute value which is a double3 + void GetDouble3AttributeValue(double3& outVal, const MObject& node, const MObject& attr) + { + MPlug plug(node, attr); + if (plug.isNull()){ + return; + } + + MObject oDouble3; + plug.getValue(oDouble3); + + MFnNumericData fnData(oDouble3); + fnData.getData( outVal[0], outVal[1], outVal[2] ); + } +}//end of anonymous namespace + +//Static variables init +int MhFootPrint::_counter = 0; +MObject MhFootPrint::mSize; +MObject MhFootPrint::mColor; +MTypeId MhFootPrint::id( 0x90573 ); +MString MhFootPrint::nodeClassification("hydraAPIExample/geometry/footPrint"); +MObject MhFootPrint::mWorldS; +MObject MhFootPrint::mDummyInput; +MObject MhFootPrint::mDummyOutput; + +namespace { + //Callback after a File Open + void afterOpenCallback (void *clientData) + { + if (! clientData){ + return; + } + + //Trigger a call to compute so that everything is initialized + MhFootPrint* footPrintInstance = reinterpret_cast(clientData); + footPrintInstance->TriggerACallToCompute(); + } +} + +MhFootPrint::MhFootPrint() +{ + _solePath = SdfPath(std::string("/sole_") + std::to_string(_counter)); + _heelPath = SdfPath(std::string("/heel_") + std::to_string(_counter)); + _counter++; + + //Add a callback after a load scene + _cbAfterOpenId = MSceneMessage::addCallback(MSceneMessage::kAfterOpen, afterOpenCallback, ((void*)this)) ; + + _retainedSceneIndex = HdRetainedSceneIndex::New(); +} + +MhFootPrint::~MhFootPrint() +{ + //Remove the callbacks + if (_cbAfterOpenId){ + CHECK_MSTATUS(MSceneMessage::removeCallback(_cbAfterOpenId)); + _cbAfterOpenId = 0; + } + + if (_cbAttributeChangedId){ + CHECK_MSTATUS(MMessage::removeCallback(_cbAttributeChangedId)); + _cbAttributeChangedId = 0; + } + + //Remove our retained scene index from hydra + Fvp::DataProducerSceneIndexInterface& dataProducerSceneIndexInterface = Fvp::DataProducerSceneIndexInterface::get(); + dataProducerSceneIndexInterface.removeViewportDataProducerSceneIndex(_retainedSceneIndex, pxr::FvpViewportAPITokens->allViewports); +} + +//Create the Hydra foot print primitives in the retained scene index +void MhFootPrint::_CreateAndAddFootPrintPrimitives() +{ + using _PointArrayDs = HdRetainedTypedSampledDataSource>; + using _IntArrayDs = HdRetainedTypedSampledDataSource; + + //Get the value of the size and color attributes + const float fSize = _GetSizeInCentimeters(); + const GfVec3f displayColor = _GetColor(); + const GfVec3f scale = {fSize,fSize,fSize};//convert size into a 3d uniform scale which we'll convert into a scale matrix + + _CreateAndAddPrim(_retainedSceneIndex, _solePath, solePoints, soleFaceVertexCounts, soleFaceVertexIndices, scale, displayColor); + _CreateAndAddPrim(_retainedSceneIndex, _heelPath, heelPoints, heelFaceVertexCounts, heelFaceVertexIndices, scale, displayColor); +} + +//Remove the 2 primitives from the retained scene index +void MhFootPrint::_RemoveFootPrintPrimitives() +{ + _retainedSceneIndex->RemovePrims({_solePath, _heelPath}); +} + +//To update we need to remove the previous primitives and create new ones +void MhFootPrint::UpdateFootPrintPrims() +{ + _RemoveFootPrintPrimitives(); + _CreateAndAddFootPrintPrimitives(); +} + +void MhFootPrint::TriggerACallToCompute() +{ + { + MPlug plug(thisMObject(), mDummyInput); + if (!plug.isNull()) + { + int dummyInputVal; + if (plug.getValue(dummyInputVal)) + { + plug.setValue(dummyInputVal + 1);//Dirty one parameter that affects the mDummyOutput attribute + MPlug plugOutput(thisMObject(), mDummyOutput); + if (!plugOutput.isNull()) + { + int dummyOutputVal; + plugOutput.getValue(dummyOutputVal);//This will trigger a call to compute + } + } + } + } +} + +void MhFootPrint::_UpdateThisMObject() +{ + if (! _thisMObject.isNull()){ + return; + } + + MObject currentMObj = thisMObject(); + if (_oldMObject.isNull() || _oldMObject != currentMObj){ + _thisMObject = currentMObj; + _oldMObject = _thisMObject; + } +} + +void MhFootPrint::setupFlowViewportInterface() +{ + static const SdfPath noPrefix = SdfPath::AbsoluteRootPath(); + + _UpdateThisMObject(); + + //Remove the callback + if (_cbAttributeChangedId){ + CHECK_MSTATUS(MMessage::removeCallback(_cbAttributeChangedId)); + _cbAttributeChangedId = 0; + } + //Add the callback when an attribute of this node changes + _cbAttributeChangedId = MNodeMessage::addAttributeChangedCallback(_thisMObject, attributeChangedCallback, ((void*)this)); + + //Remove the previous data producer scene index in case it was registered, if that occurs it's because _thisMObject has changed and we want to update the maya callbacks on the node + Fvp::DataProducerSceneIndexInterface& dataProducerSceneIndexInterface = Fvp::DataProducerSceneIndexInterface::get(); + dataProducerSceneIndexInterface.removeViewportDataProducerSceneIndex(_retainedSceneIndex, pxr::FvpViewportAPITokens->allViewports); + + //Data producer scene index interface is used to add the retained scene index to all viewports with all render delegates + dataProducerSceneIndexInterface.addDataProducerSceneIndex(_retainedSceneIndex, noPrefix, (void*)&_thisMObject, FvpViewportAPITokens->allViewports,FvpViewportAPITokens->allRenderers); +} + +// Retrieve value of the size attribute from the node +float MhFootPrint::_GetSizeInCentimeters() const +{ + const MObject obj = thisMObject(); + + MPlug plug(obj, MhFootPrint::mSize); + if (!plug.isNull()) + { + MDistance sizeVal; + if (plug.getValue(sizeVal)) + { + return (float)sizeVal.asCentimeters(); + } + } + + return 1.0f; +} + +// Retrieve value of the color attribute from the node +GfVec3f MhFootPrint::_GetColor() const +{ + const MObject obj = thisMObject(); + MPlug plug(obj, MhFootPrint::mColor); + if (!plug.isNull()) + { + double3 color; + GetDouble3AttributeValue(color, obj, MhFootPrint::mColor); + return {(float)color[0], (float)color[1], (float)color[2]}; + } + + return GfVec3f(0.f,0.f,1.f); +} + +MStatus MhFootPrint::compute( const MPlug& plug, MDataBlock& dataBlock) +{ + if( ! _init){ + _CreateAndAddFootPrintPrimitives(); + _init = true; + } + + //The MObject can change if the node gets deleted and deletion being undone, so always update it in our records + MObject currentMObj = thisMObject(); + if (_oldMObject.isNull() || _oldMObject != currentMObj){ + + _thisMObject = currentMObj; + _oldMObject = _thisMObject; + + setupFlowViewportInterface(); + } + + if (plug == mWorldS) + { + if (plug.isElement()) + { + MArrayDataHandle outputArrayHandle = dataBlock.outputArrayValue( mWorldS ); + outputArrayHandle.setAllClean(); + } + dataBlock.setClean(plug); + + return MS::kSuccess; + } + + return MS::kUnknownParameter;; +} + +bool MhFootPrint::isBounded() const +{ + return true; +} + +MBoundingBox MhFootPrint::boundingBox() const +{ + const double multiplier = _GetSizeInCentimeters(); + return MBoundingBox( corner1 * multiplier, corner2 * multiplier);//corner1 and 2 are the bounding box corner of our geometry +} + +void* MhFootPrint::creator() +{ + return new MhFootPrint(); +} + +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- +// Plugin Registration +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- + +//Macro to create input attribute for the maya node +#define MAKE_INPUT(attr) \ + CHECK_MSTATUS(attr.setKeyable(true) ); \ + CHECK_MSTATUS(attr.setStorable(true) ); \ + CHECK_MSTATUS(attr.setReadable(true) ); \ + CHECK_MSTATUS(attr.setWritable(true) ); \ + CHECK_MSTATUS(attr.setAffectsAppearance(true) ); + +//Macro to create output attribute for the maya node +#define MAKE_OUTPUT(attr) \ + CHECK_MSTATUS ( attr.setKeyable(false) ); \ + CHECK_MSTATUS ( attr.setStorable(false) ); \ + CHECK_MSTATUS ( attr.setReadable(true) ); \ + CHECK_MSTATUS ( attr.setWritable(false) ); + +MStatus MhFootPrint::initialize() +{ + MFnUnitAttribute unitFn; + MFnNumericAttribute nAttr; + + mSize = unitFn.create( "size", "sz", MFnUnitAttribute::kDistance); + MAKE_INPUT(unitFn); + CHECK_MSTATUS ( unitFn.setDefault(1.0) ); + + mWorldS = unitFn.create("worldS", "ws", MFnUnitAttribute::kDistance, 1.0); + unitFn.setWritable(true); + unitFn.setCached(false); + unitFn.setArray( true ); + unitFn.setUsesArrayDataBuilder( true ); + unitFn.setWorldSpace( true ); + + mColor = nAttr.create("color", "col", MFnNumericData::k3Double, 1.0); + MAKE_INPUT(nAttr); + CHECK_MSTATUS ( nAttr.setDefault(0.0, 0.0, 1.0) ); + + //Create dummy input attribute to trigger a call to the compute function on demand. as it's in the compute fonction that we add our scene indices + mDummyInput = nAttr.create("dummyInput", "dI", MFnNumericData::kInt, 1.0); + MAKE_INPUT(nAttr); + CHECK_MSTATUS ( nAttr.setDefault(1) ); + + //Create dummy output attribute to trigger a call to the compute function on demand. as it's in the compute fonction that we add our scene indices + mDummyOutput = nAttr.create("dummyOutput", "dO", MFnNumericData::kInt, 1.0); + MAKE_OUTPUT(nAttr); + CHECK_MSTATUS ( nAttr.setDefault(1) ); + + CHECK_MSTATUS ( addAttribute(mSize) ); + CHECK_MSTATUS ( addAttribute(mColor)); + CHECK_MSTATUS ( addAttribute(mDummyInput)); + CHECK_MSTATUS ( addAttribute(mDummyOutput)); + CHECK_MSTATUS ( addAttribute(mWorldS)); + + CHECK_MSTATUS ( attributeAffects(mSize, mWorldS)); + CHECK_MSTATUS ( attributeAffects(mDummyInput, mDummyOutput)); + return MS::kSuccess; +} + +MStatus initializePlugin( MObject obj ) +{ + MStatus status; + MFnPlugin plugin( obj, PLUGIN_COMPANY, "2025.0", "Any"); + + status = plugin.registerNode( + "MhFootPrint", + MhFootPrint::id, + &MhFootPrint::creator, + &MhFootPrint::initialize, + MPxNode::kLocatorNode, + &MhFootPrint::nodeClassification); + if (!status) { + status.perror("registerNode"); + return status; + } + + return status; +} + +MStatus uninitializePlugin( MObject obj) +{ + MStatus status; + MFnPlugin plugin( obj ); + + status = plugin.deregisterNode( MhFootPrint::id ); + if (!status) { + status.perror("deregisterNode"); + return status; + } + return status; +} diff --git a/test/lib/mayaUsd/render/mayaToHydra/CMakeLists.txt b/test/lib/mayaUsd/render/mayaToHydra/CMakeLists.txt index 116f04a372..43fb994461 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/CMakeLists.txt +++ b/test/lib/mayaUsd/render/mayaToHydra/CMakeLists.txt @@ -21,6 +21,7 @@ set(INTERACTIVE_TEST_SCRIPT_FILES testStageVariants.py testNurbsPrimitives.py testPolygonPrimitives.py + testFootPrintNode.py cpp/testColorPreferences.py cpp/testCppFramework.py cpp/testMayaSceneFlattening.py diff --git a/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeCreated.png b/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeCreated.png new file mode 100644 index 0000000000000000000000000000000000000000..3127eb25268e4bbef5977367256c26be164b7bac GIT binary patch literal 2374 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~V9glC$suNIKWzyTr{7^Xen z9tos4^WEHv!2%%Sme#g&Kov(kT^vIy=DfYTF;C_=V?*L;&(x(NPcOM?aTi?KwMkcf z{XwPtr01SZdpdNT_s(XSV14|Z&c>~G)tXN$@i?D)a(?&iySLvnw=Cvhk}>;!|IC|n zb{6*b_1p~aUcKGP&TznrlY^nNfnfs2C^Z@cWTk?W`OoDTHps7!x34QJ{P^SY?SFq3 zyRYB3@7?e8^!4-J=LXC%VQiebQ>Lqazg_j;Uw6}g|C3Emx3`mDFJJSafB&0*`dWYN z85>(?H+}r{RDPeuz4v!qGpl4BB@G3I^n?W>7FaI&sHUv)c>aWfnGFY=babVz&vg3q zSn=$#Le*)6@L+_xI|V%Y^rCaqC5Twwu=OMU$ys@ZDoKHVcAz3xa3n-Z>I?VjCxi%z>5XEY=yXlQZVNsm9o7 zdn?F7?a{_qCZ_75SEoa-OMY)YW6SnTS)sr`n&-H|JFo5kH|8=iT?{*HIFm0bWj71U zyNuTlC5~O1x|g4YCC}5M?BRx-qb?2)!a0ujRTNBZIKbPIoSrkS{?Eth^UvDyO>=j6 z&?VUCZ2K}l_l#AAFk_?l8LP6E=Gy`S72XzVhYrSaaLiVdu|DLesE~6>N>09-=g`4g zpxEZGk;iwedUbJec%S0Kdn_$yZ&X)$5nN-yS91HJdgFdcd%^Q&$D()J^~^=n!iHgK5dcF13vfgn|{|^<#G1+oPtv< zEsG`d*XYOndAWM$@xpLZm4a7uT900=`Fz&B{_oG{_xIX=w|JM;^Rr#P?*H?R=Rcma zwy&+9{drpg_q}=53^|8q)apE42UJjhW-*5bH>4<>t*ooTmJiGmr0)d zaqH#woSBjw?wfa)d_DfWxIbC`&VEL-i!%?-lGoRk`4B&CgT=1z_kO?2e_Wb-I`R?Y z|I@}7XCD3Hwx_MysfBr6I@_U~V{Bh;i2r;#z5TuZ*H3XD8)kEIY?ca7?^Rv9v^AyW zu<@~nK(D(-czLui=baCY(7Cj+-*#gNYq`3D&aH*>Su|uWaB{3J_}Oy%_pu`vUu}?Q zI`nEvWM{j@!GAz;Guf;PP_BGgtt|35ROi8lJ02%i`A!tzwyH6|&o gg_HXkj@s`umR!oQ9oVeF-TYzjboFyt=akR{0EoRt5C8xG literal 0 HcmV?d00001 diff --git a/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeDeleted.png b/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeDeleted.png new file mode 100644 index 0000000000000000000000000000000000000000..698720d403378478cdf31cff7328fbdae4968e31 GIT binary patch literal 1563 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~V9glC$suNIKWzyTr{7^Xen z9tos4^WEHv!2%%Sme#g&3=FI@JzX3_D(1Ys>d4EWC~)Awa7_X%q2M(IvW`#NQ_dWK`@#MMl-@_SwQ3BFz0&!i%Hv8i$B1!8h4q_;OXk; Jvd$@?2>@-#gd4EWC~)Awa7_X%q2M(IvW`#NQ_dWK`@#MMl-@_SwQ3BFz0&!i%Hv8i$B1!8h4q_;OXk; Jvd$@?2>@-#g+He?k0OYffHRP_Gd_WA1+mEO;rGv~}+wuZUA1#{-se*5s}&kwb}|Ic4u z=HD-IU0krzihrzQb~Q-4XmyI1=s;n~s@CMKOjQHMURTI%lN(6D&hv4TBW zCj|us9%#sZjt%|2?Mep+M?uLoyV5nS4GiwdrytJfbBYvd*JN@}JpD03OPIqz`{9la zN7%W26%OPad3>nCsP>(yh?>BITb#$ez3r|64b9%XG`jfyu}O~&fkx^2$m-wS`+NKP z>EF&AuUA$$;Mi+k`s?5C{(VNJF%jN2Y>bS2$F6+5H0zLIp}1Iqz@v|sq#hg2aA?>o z)HnT_R9|NUL$$J;_%%5&tFY|b@%P*I1@4<#;KRbQV^ZPtt2b|^-#@#z&oWn6W-=%X z7q4fGXw<#8ZueD?k{i2Ck3YG#R$lJjo}X_XPCIM}^y%6j-cKLriSCx!Yv^ROF1zF8 z3^ToThd?qx$_&q+Z?~`fdv4Xo=pS>f`{mzAO%|Ngef@N2XF-ggLxcIAw+q{qRUStr z7oAa*e0Zbu(Jd)P#yZ1Ag@w823#Y71vDh{vr#87poQX-gyrcd9GzsB{H|91RaErYj z{P_5u_(y%KRtpN;n6a}@dZts+$EtgOg?>x_R#ey^c>K$eA2IchKBcevDHnbYU)FnASRi6&{=T1=_dkm}yl$P*)Sej} z$G;Xx>94s_GUddj9?zs%YGs`#e@IC`zU~f;XS1VA?7p6RxTm_P$mqLN19Rp7zw-YL z*FArJ{Nt4Gp?|(y&aX4Kn`ig;L-)q}AMaJ$|119WbH;J&VtodSH5=s%KxyvW-o9Gn z)-&f>n4}Hrg6Eq}n{Lkk{t9S1sN&s1lBRkM@Rf&QEO z_O&dt?ACobOiVE+OA;R6W=XZ$RJ%v4_o=Wz!uvQ|)*Eg=sw{iOZ&+Wv!3Ips!2HAj nOj)DUXb=ptRPaaIFMW-IFgJrAu)Tx3UBuw&>gTe~DWM4fC_Mhc literal 0 HcmV?d00001 diff --git a/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeDeletedUndoAgain.png b/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeDeletedUndoAgain.png new file mode 100644 index 0000000000000000000000000000000000000000..0747c652844a4223c7f2300858e0e72c53076a9b GIT binary patch literal 2399 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~V9glC$suNIKWzyTr{7^Xen z9tos4^WEHv!2%%Sme#g&KoxgAT^vIy=DfYTF;C{YWW&W1eyPi+Ou5vl%~^0`hnUXs z-grd@?%$p{wq9`ue6tP+He?k0OYffHRP_Gd_WA1+mEO;rGv~}+wuZUA1#{-se*5s}&kwb}|Ic4u z=HD-IU0krzihrzQb~Q-4XmyI1=s;n~s@CMKOjQHMURTI%lN(6D&hv4TBW zCj|us9%#sZjt%|2?Mep+M?uLoyV5nS4GiwdrytJfbBYvd*JN@}JpD03OPIqz`{9la zN7%W26%OPad3>nCsP>(yh?>BITb#$ez3r|64b9%XG`jfyu}O~&fkx^2$m-wS`+NKP z>EF&AuUA$$;Mi+k`s?5C{(VNJF%jN2Y>bS2$F6+5H0zLIp}1Iqz@v|sq#hg2aA?>o z)HnT_R9|NUL$$J;_%%5&tFY|b@%P*I1@4<#;KRbQV^ZPtt2b|^-#@#z&oWn6W-=%X z7q4fGXw<#8ZueD?k{i2Ck3YG#R$lJjo}X_XPCIM}^y%6j-cKLriSCx!Yv^ROF1zF8 z3^ToThd?qx$_&q+Z?~`fdv4Xo=pS>f`{mzAO%|Ngef@N2XF-ggLxcIAw+q{qRUStr z7oAa*e0Zbu(Jd)P#yZ1Ag@w823#Y71vDh{vr#87poQX-gyrcd9GzsB{H|91RaErYj z{P_5u_(y%KRtpN;n6a}@dZts+$EtgOg?>x_R#ey^c>K$eA2IchKBcevDHnbYU)FnASRi6&{=T1=_dkm}yl$P*)Sej} z$G;Xx>94s_GUddj9?zs%YGs`#e@IC`zU~f;XS1VA?7p6RxTm_P$mqLN19Rp7zw-YL z*FArJ{Nt4Gp?|(y&aX4Kn`ig;L-)q}AMaJ$|119WbH;J&VtodSH5=s%KxyvW-o9Gn z)-&f>n4}Hrg6Eq}n{Lkk{t9S1sN&s1lBRkM@Rf&QEO z_O&dt?ACobOiVE+OA;R6W=XZ$RJ%v4_o=Wz!uvQ|)*Eg=sw{iOZ&+Wv!3Ips!2HAj nOj)DUXb=ptRPaaIFMW-IFgJrAu)Tx3UBuw&>gTe~DWM4fC_Mhc literal 0 HcmV?d00001 diff --git a/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeHidden.png b/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeHidden.png new file mode 100644 index 0000000000000000000000000000000000000000..698720d403378478cdf31cff7328fbdae4968e31 GIT binary patch literal 1563 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~V9glC$suNIKWzyTr{7^Xen z9tos4^WEHv!2%%Sme#g&3=FI@JzX3_D(1Ys>d4EWC~)Awa7_X%q2M(IvW`#NQ_dWK`@#MMl-@_SwQ3BFz0&!i%Hv8i$B1!8h4q_;OXk; Jvd$@?2>@-#g+He?k0OYffHRP_Gd_WA1+mEO;rGv~}+wuZUA1#{-se*5s}&kwb}|Ic4u z=HD-IU0krzihrzQb~Q-4XmyI1=s;n~s@CMKOjQHMURTI%lN(6D&hv4TBW zCj|us9%#sZjt%|2?Mep+M?uLoyV5nS4GiwdrytJfbBYvd*JN@}JpD03OPIqz`{9la zN7%W26%OPad3>nCsP>(yh?>BITb#$ez3r|64b9%XG`jfyu}O~&fkx^2$m-wS`+NKP z>EF&AuUA$$;Mi+k`s?5C{(VNJF%jN2Y>bS2$F6+5H0zLIp}1Iqz@v|sq#hg2aA?>o z)HnT_R9|NUL$$J;_%%5&tFY|b@%P*I1@4<#;KRbQV^ZPtt2b|^-#@#z&oWn6W-=%X z7q4fGXw<#8ZueD?k{i2Ck3YG#R$lJjo}X_XPCIM}^y%6j-cKLriSCx!Yv^ROF1zF8 z3^ToThd?qx$_&q+Z?~`fdv4Xo=pS>f`{mzAO%|Ngef@N2XF-ggLxcIAw+q{qRUStr z7oAa*e0Zbu(Jd)P#yZ1Ag@w823#Y71vDh{vr#87poQX-gyrcd9GzsB{H|91RaErYj z{P_5u_(y%KRtpN;n6a}@dZts+$EtgOg?>x_R#ey^c>K$eA2IchKBcevDHnbYU)FnASRi6&{=T1=_dkm}yl$P*)Sej} z$G;Xx>94s_GUddj9?zs%YGs`#e@IC`zU~f;XS1VA?7p6RxTm_P$mqLN19Rp7zw-YL z*FArJ{Nt4Gp?|(y&aX4Kn`ig;L-)q}AMaJ$|119WbH;J&VtodSH5=s%KxyvW-o9Gn z)-&f>n4}Hrg6Eq}n{Lkk{t9S1sN&s1lBRkM@Rf&QEO z_O&dt?ACobOiVE+OA;R6W=XZ$RJ%v4_o=Wz!uvQ|)*Eg=sw{iOZ&+Wv!3Ips!2HAj nOj)DUXb=ptRPaaIFMW-IFgJrAu)Tx3UBuw&>gTe~DWM4fC_Mhc literal 0 HcmV?d00001 diff --git a/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeMovedAfterDeletionAndUndo.png b/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeMovedAfterDeletionAndUndo.png new file mode 100644 index 0000000000000000000000000000000000000000..5954d6e4069573b1b4b4bbe5c2abc4eda940f62f GIT binary patch literal 2411 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~V9glC$suNIKWzyTr{7^Xen z9tos4^WEHv!2%%Sme#g&Kou`NT^vIy=DfXoJ}>4f7Ey}8T^C3IyNkLbF)FDEcd2hHFwVJ#U(1IEw(*>K6B^ybARnLXK579dE8rXSO4rz z_44J*-!mTAc5i+a1B1@w28Ib791NYK)MyaUG8LR;59VjsF?aK3_w(n@%h#IK{eSlL z=FOY)=jDEWFK_qf=h3J3)gK;w?Ka=PulC1>ukZiy){q?g#cjJyzq4OU< znxD(``J}piji$z(wuS>eJsEGbByQjOGyn0|kB{H)ulVz$U7z2UZQ9d&FJHdAlH3qF z+epe>P-tB;8<3FrxuAf>0>QqW?vFParU^dOVq#+7aHJro zr_g%k(NGqaZy6^a?#Pgl7ZcDE7Pzr->6`qV!*LwpKMzk<_g^N*EYo|o=kcGKI`vg$ z56|j6xxMoEftneO2l!-82Z`o5J3QdKCepWYqTN@C8RCqM3BC^{j+v^PUEJy8kidO> zhhv@eIwggI=B;hX1>$1Y1qCYFP1}<#EPuY*Ig=g8 z-I4P4p~341+gMos<-dI>ailqygJX}n+#yFrg*CGZIN0YlZ16htaj*8RoyLrbrPpNo z1^c$IPm{d^6qm~8JD#w!D^^&b@7}D#hVM310mGU5VS+qM%i?X(_)ZFQT6%qd|Nqnc!c#A{-+x#C=k@yfKNYV&zPbEt)8Xa*`|I9y zHp*Pud-?L^mB$&XP1BU^|NVIRJU#vR*BO!Sg)?VKa&(&>GDwp$uf6kQM!(&!@B8~w z-HZ-xoSA#)+3WUNL*~T7W5<5{{JA(i+0D>TvbS9}_jB+Mp>!3$U_*DNLrQnPs2oV< z?YtavW@dvy^keBivu7Slzb$jvcG?6B-=jht9Gi;^J6F~9Ep2nLh!A2-6g!pk*le1B z(CHAJsSO4zXMZy*Tlyzu|N99uayOJP9a1UV=o9KAEA;;EgBctg?55LqujG>yaxbt9 zV>)#3jH;aYTVs`JD=f;G4&6KZu;j9@pWnW!eQ!5i3XPx6TX@aI;l^s!yIs+KIlQxl zQx+Y(wS&8R@2_{e_x~%_Ecfp%{P*SZ{Qrh#-|hc=nEwCXw|Of+7UmsH?FE&wGV4E1 z{yAs*+Iy)zm1kzf?fY}v{Bib-DjS1vpjADob5|ZO5O-p_E-divS;RLMH;-v@&NtW@ z6W8CHm-p-E(JPO4a33#xnB|vPD3CwBaoSdSC7A+SV*$QLPoBJXJ?nCWIq%!SE6fSD zZZ6O4ga!F_*uH0exZv5JoT85nZ*MRs8WmSg-&Np{%yuZ{nDq|x`#a8`=ik4^^w7sI zFK^8Ls8^)H(sHsl|3Q1qH6gwmyxtLKPTA$Z`)Z(mLzgjeTbZCRe{s`aL4maV+Y>6( z*k#%pHfYTD=GDLFYdUS|vDHg8Ep+l#QUc8;3UJSux7vrngN3ER#bJ~h4FZx=!IS#O a-lqhsoF{bx+djD4NDQ8?elF{r5}E)Ty+sB9 literal 0 HcmV?d00001 diff --git a/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeUnhidden.png b/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_NodeUnhidden.png new file mode 100644 index 0000000000000000000000000000000000000000..0747c652844a4223c7f2300858e0e72c53076a9b GIT binary patch literal 2399 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~V9glC$suNIKWzyTr{7^Xen z9tos4^WEHv!2%%Sme#g&KoxgAT^vIy=DfYTF;C{YWW&W1eyPi+Ou5vl%~^0`hnUXs z-grd@?%$p{wq9`ue6tP+He?k0OYffHRP_Gd_WA1+mEO;rGv~}+wuZUA1#{-se*5s}&kwb}|Ic4u z=HD-IU0krzihrzQb~Q-4XmyI1=s;n~s@CMKOjQHMURTI%lN(6D&hv4TBW zCj|us9%#sZjt%|2?Mep+M?uLoyV5nS4GiwdrytJfbBYvd*JN@}JpD03OPIqz`{9la zN7%W26%OPad3>nCsP>(yh?>BITb#$ez3r|64b9%XG`jfyu}O~&fkx^2$m-wS`+NKP z>EF&AuUA$$;Mi+k`s?5C{(VNJF%jN2Y>bS2$F6+5H0zLIp}1Iqz@v|sq#hg2aA?>o z)HnT_R9|NUL$$J;_%%5&tFY|b@%P*I1@4<#;KRbQV^ZPtt2b|^-#@#z&oWn6W-=%X z7q4fGXw<#8ZueD?k{i2Ck3YG#R$lJjo}X_XPCIM}^y%6j-cKLriSCx!Yv^ROF1zF8 z3^ToThd?qx$_&q+Z?~`fdv4Xo=pS>f`{mzAO%|Ngef@N2XF-ggLxcIAw+q{qRUStr z7oAa*e0Zbu(Jd)P#yZ1Ag@w823#Y71vDh{vr#87poQX-gyrcd9GzsB{H|91RaErYj z{P_5u_(y%KRtpN;n6a}@dZts+$EtgOg?>x_R#ey^c>K$eA2IchKBcevDHnbYU)FnASRi6&{=T1=_dkm}yl$P*)Sej} z$G;Xx>94s_GUddj9?zs%YGs`#e@IC`zU~f;XS1VA?7p6RxTm_P$mqLN19Rp7zw-YL z*FArJ{Nt4Gp?|(y&aX4Kn`ig;L-)q}AMaJ$|119WbH;J&VtodSH5=s%KxyvW-o9Gn z)-&f>n4}Hrg6Eq}n{Lkk{t9S1sN&s1lBRkM@Rf&QEO z_O&dt?ACobOiVE+OA;R6W=XZ$RJ%v4_o=Wz!uvQ|)*Eg=sw{iOZ&+Wv!3Ips!2HAj nOj)DUXb=ptRPaaIFMW-IFgJrAu)Tx3UBuw&>gTe~DWM4fC_Mhc literal 0 HcmV?d00001 diff --git a/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_VP2AndThenBackToStorm.png b/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/add_VP2AndThenBackToStorm.png new file mode 100644 index 0000000000000000000000000000000000000000..5954d6e4069573b1b4b4bbe5c2abc4eda940f62f GIT binary patch literal 2411 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~V9glC$suNIKWzyTr{7^Xen z9tos4^WEHv!2%%Sme#g&Kou`NT^vIy=DfXoJ}>4f7Ey}8T^C3IyNkLbF)FDEcd2hHFwVJ#U(1IEw(*>K6B^ybARnLXK579dE8rXSO4rz z_44J*-!mTAc5i+a1B1@w28Ib791NYK)MyaUG8LR;59VjsF?aK3_w(n@%h#IK{eSlL z=FOY)=jDEWFK_qf=h3J3)gK;w?Ka=PulC1>ukZiy){q?g#cjJyzq4OU< znxD(``J}piji$z(wuS>eJsEGbByQjOGyn0|kB{H)ulVz$U7z2UZQ9d&FJHdAlH3qF z+epe>P-tB;8<3FrxuAf>0>QqW?vFParU^dOVq#+7aHJro zr_g%k(NGqaZy6^a?#Pgl7ZcDE7Pzr->6`qV!*LwpKMzk<_g^N*EYo|o=kcGKI`vg$ z56|j6xxMoEftneO2l!-82Z`o5J3QdKCepWYqTN@C8RCqM3BC^{j+v^PUEJy8kidO> zhhv@eIwggI=B;hX1>$1Y1qCYFP1}<#EPuY*Ig=g8 z-I4P4p~341+gMos<-dI>ailqygJX}n+#yFrg*CGZIN0YlZ16htaj*8RoyLrbrPpNo z1^c$IPm{d^6qm~8JD#w!D^^&b@7}D#hVM310mGU5VS+qM%i?X(_)ZFQT6%qd|Nqnc!c#A{-+x#C=k@yfKNYV&zPbEt)8Xa*`|I9y zHp*Pud-?L^mB$&XP1BU^|NVIRJU#vR*BO!Sg)?VKa&(&>GDwp$uf6kQM!(&!@B8~w z-HZ-xoSA#)+3WUNL*~T7W5<5{{JA(i+0D>TvbS9}_jB+Mp>!3$U_*DNLrQnPs2oV< z?YtavW@dvy^keBivu7Slzb$jvcG?6B-=jht9Gi;^J6F~9Ep2nLh!A2-6g!pk*le1B z(CHAJsSO4zXMZy*Tlyzu|N99uayOJP9a1UV=o9KAEA;;EgBctg?55LqujG>yaxbt9 zV>)#3jH;aYTVs`JD=f;G4&6KZu;j9@pWnW!eQ!5i3XPx6TX@aI;l^s!yIs+KIlQxl zQx+Y(wS&8R@2_{e_x~%_Ecfp%{P*SZ{Qrh#-|hc=nEwCXw|Of+7UmsH?FE&wGV4E1 z{yAs*+Iy)zm1kzf?fY}v{Bib-DjS1vpjADob5|ZO5O-p_E-divS;RLMH;-v@&NtW@ z6W8CHm-p-E(JPO4a33#xnB|vPD3CwBaoSdSC7A+SV*$QLPoBJXJ?nCWIq%!SE6fSD zZZ6O4ga!F_*uH0exZv5JoT85nZ*MRs8WmSg-&Np{%yuZ{nDq|x`#a8`=ik4^^w7sI zFK^8Ls8^)H(sHsl|3Q1qH6gwmyxtLKPTA$Z`)Z(mLzgjeTbZCRe{s`aL4maV+Y>6( z*k#%pHfYTD=GDLFYdUS|vDHg8Ep+l#QUc8;3UJSux7vrngN3ER#bJ~h4FZx=!IS#O a-lqhsoF{bx+djD4NDQ8?elF{r5}E)Ty+sB9 literal 0 HcmV?d00001 diff --git a/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/footPrint_AfterModifs.png b/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/footPrint_AfterModifs.png new file mode 100644 index 0000000000000000000000000000000000000000..32228189f34453e8faea5de8b30aaf76ccfcb7b3 GIT binary patch literal 2080 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~V9glC$suNIKWzyTr{7^Xen z9tos4^WEHv!2%%Sme#g&3=Hh^JY5_^D(1Ys>zF6v&fsv7;pRc9d`pIJqD~()C)7-z zusG$Y?twXs-_D7Bi&NJ;s;hK7;dk}2>Z)h9Ctqz`GjrY4{i{~5etz-h&71xV1@ZmU zQF4C1ef`(-=k+hY-o5Af>+9>Ehad01oIPW9 z!+|q#`)YpPwvdyT-@kT#VM)oCSNr$Z|NQjy&*$go_jhv^3kl3PsJ7^%va-hG=a-lJ z=ev7sE9BeZ=aA6tX0c7QcXm%PCr5E*QBl#RFA@pwdkW^vn>R0h{}q$z8_hNyskGEd zQ`n$*d!J8fcsTdRG{u~`4F{Ng%L8>~`%VUJmgDOOa?k8NRw(|sZ_U!<2NDGYILZuV zgu7pyadmhgS7s@5ct`K`IDuzM3I*)D<@yfF2|QC%_`rOK@xHo3L38Zx&9BtLr?0l* z?mo)F5wrRA=03r`LX+1CnM_RK*97>C`N}#Q3OR*a3Z zNwv+Ul_h0m+knm%dmME2`!)V!_mAbItbFbIEOYt~kc0(MfK%+ePtf8;laLRPCw^7 zm)_iCo`3I;>DsLf|Ahp?(pTO*z|q-pz+5i%kk;Pn@9!=GuT%yc6PPDz8u}0em*Ye)8^$BF>!JKcAh-nTC1qA z=H3r>`!tT(Tqik>|Nj2IUUvTWg^Gvbilp_c)2o)8{K9Z__nzZy4m<1_6W9A%A3y$D zQ%zayu|@7LVcrZDmWCsC0t`Zoj0%FI)MyY4a4PsIt?_fh)0OiNF9259xGQ!BPgg&e IbxsLQ0AFIoV*mgE literal 0 HcmV?d00001 diff --git a/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/footPrint_BeforeModifs.png b/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/footPrint_BeforeModifs.png new file mode 100644 index 0000000000000000000000000000000000000000..dcf57356b31362d9bff2ebbe016ad0859520ab8f GIT binary patch literal 1836 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~V9glC$suNIKWzyTr{7^Xen z9tos4^WEHv!2%%Sme#g&3=C|mJY5_^D(1YsW9SzWDA5oYV6DUGt)a+R=FqaE_a^rS z5%EPy5lt!=GPN&ot=%(0)5YPLcghjV<&`t{n4i2~yYu_LnLjUPn6NWUt}=Yf$WSql zg{8s8fx%;x8V!QMl?vi~s~IZZojX6hTu*P>{XTnry?M2A>%6_w+k>UK<~1}p6claR zST5T;_w#3S>+iOk_x($)ul@Vu0q5~1byWp}MnxHQ_1VAstIL8Neyr!@usNjiP$D|& zSKW{DWsUXC4F{OLEZDZKpTWw+R4&1H%-`Sqo1E3-9o+>6-YhJ6l8*{YzP!7va$k@y zZDPZLJ7>eL7RbgOl#Sbe_ujt^zn6=i5a^w~y1-yIOUul%>ypO{e(c>=RtWrXZ`TH=3d3#VN>TXywv+*VQkA9qi$UAs2( zJVWrt4IdugK6UE)cV~}v>%_wJ_2bv~z30{LSCrbe>OtM-#TPSf88dv~xp|05K~R7} oh>>xW8V!O$oeF+(o>J{zF6v&fsv7;pRc9d`pIJqD~()C)7-z zusG$Y?twXs-_D7Bi&NJ;s;hK7;dk}2>Z)h9Ctqz`GjrY4{i{~5etz-h&71xV1@ZmU zQF4C1ef`(-=k+hY-o5Af>+9>Ehad01oIPW9 z!+|q#`)YpPwvdyT-@kT#VM)oCSNr$Z|NQjy&*$go_jhv^3kl3PsJ7^%va-hG=a-lJ z=ev7sE9BeZ=aA6tX0c7QcXm%PCr5E*QBl#RFA@pwdkW^vn>R0h{}q$z8_hNyskGEd zQ`n$*d!J8fcsTdRG{u~`4F{Ng%L8>~`%VUJmgDOOa?k8NRw(|sZ_U!<2NDGYILZuV zgu7pyadmhgS7s@5ct`K`IDuzM3I*)D<@yfF2|QC%_`rOK@xHo3L38Zx&9BtLr?0l* z?mo)F5wrRA=03r`LX+1CnM_RK*97>C`N}#Q3OR*a3Z zNwv+Ul_h0m+knm%dmME2`!)V!_mAbItbFbIEOYt~kc0(MfK%+ePtf8;laLRPCw^7 zm)_iCo`3I;>DsLf|Ahp?(pTO*z|q-pz+5i%kk;Pn@9!=GuT%yc6PPDz8u}0em*Ye)8^$BF>!JKcAh-nTC1qA z=H3r>`!tT(Tqik>|Nj2IUUvTWg^Gvbilp_c)2o)8{K9Z__nzZy4m<1_6W9A%A3y$D zQ%zayu|@7LVcrZDmWCsC0t`Zoj0%FI)MyY4a4PsIt?_fh)0OiNF9259xGQ!BPgg&e IbxsLQ0AFIoV*mgE literal 0 HcmV?d00001 diff --git a/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/loadingFootPrintScene.png b/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/loadingFootPrintScene.png new file mode 100644 index 0000000000000000000000000000000000000000..772946f59e856d906329039acbf947d16513bb60 GIT binary patch literal 3041 zcmeH}`8(8W8^FI~ow3BAMUfdhP0`qjFim40Bw{F;EHyEO@XG!zBj!jm=e1;4oHH#L zOIfa*j4Y#2l#IP>b4o}tGtLms)cf=M7o79MbKjrqey;2O;aNY_lWq?3GJ9nJ0FZZb z#GL{F2>r)^N{K2U%e+sNc7za|F1WfHiV%SQ2mp}xvB_7IVBz-mQ9lbm!kA&>YXFc9 zaKat;x>me2X-iWdQtzIw$~IJ2I-|#knq^-SubbM5cyk#pv%3Fm*Te6cjZX2IK17KO z%O_tVPNm}Ra$OlO(Zwt=pK&Bo$#d;P5+ zCymn$M1Nu!Xu>-EoKHGC_V6_IW1!H89G_*@cGJo#=R{Z_Erg5B2LEzwK(Iq661u;{K%@~n7iVGZ*z#e*+~s8^g2!xQR~6DwUuR) z1%;9+@?RsfEJb7*+%rOxHVUvQx>ACcfn3j}vXis^)0hXgwUfc9NqrZ;QfV<+tzi@PK*S(Jmgle9ao}LQq797!Rkrmz6fy+&qd$L}+_THRM_#t=*Bjip{A8slW4& zrR8I$K!enVpEP29fAp`)^;oQy;+rtM2C=lZLv$R+vBaPub9la`nMilG$B;g}Py1Lb^ z&i=BpBd2q0ZQErb9Mkrd)6-N+Y9*X%@sMxY;9h3CeUJS?{ESc7)$msmXu5a*DwB`D z*h?7L4VfQ_hQA+sPH?8uLF1?OiDvCQ4?_Fr&goO{cClV^{Md#b6EiG@P<>AU^kRT3 z9YqQ1Jt`

XoW}enB=_e`L0ab_E-M!HaQ99Qb%dfY&v9H z>KQ*j`ogmt3Gsb?PGH`{ic~P#+uVC@#-q7l<_1$>UV2QJsPHWx@5wov5C=i$S$9>` zO4rj@vUmX+Nj%ziE1#orMx(c|rwd^=oaiv75lH3=w6&IFCpsnS!DlGn$+_`g^duMO zOVlttSFzlW#)5|$Yw+jbjmhlLa+?N&U z38(peX2>UjW6eb^-(Jrl9h)j+(%-ia7c}IM&TgXA!h>O9H|K4KWX52o((Oys z9`sNo>ijFBZ-})|0d$QlWs}AK_eF8)9TB1HTcs3C%V?TOeeD59}}m|5qVZ z?J8HT>WEHaN?$dL@BgVDFH9Rxsx^ne;+j2}>+12bjkiJ`5f4ac&*7`$P(kVrs1Y>e z9;|4dWj;AJ`#H$vWHbgtVhGgZ6Y{Y;^nR)AcikC{$6(#KB{iaMO*rk5%>TWW1Jyq- z3;!_hOUHfp{?M(YuuTg%%=r4iNS?)De~QcvS8{U!*f-_%e(7k8iN7{N4`Fg7H?~#h z%Rs`Q%1kujfjfr86rjCfokA{mcBSrQ+f|8Rsf&S^vq^21qAwpT722Qf=G06AS9B3% ztS>t>Nv`dZL@=Xc+?~E!9QTO^_RW>rt@^X{6+Wf9@?_$hr3ZKA))aY$-V3-Aa*8@$ zsODfwRMVw9^$cze;GU@A@%CkiE~n)${x9$7Tb4tiwRqDUD~sIlKcEOrL`Eys8rXTvweQ2 zvY?{k2Rp-#wda?~F)+;bbYSpcVQFv~rAC8**i`V({=8pvHgDei_-a3k z+3bc5TirCy{jb?vv2XkK@`Bsz3#+QCY?6wKias5_#Lgl8?%>0R53eLQEWLUE{{K1~ zyUI^bj&9oj?euj0{ieo^{|%WFAFnl%+W+6q-QE58>OXQDJXu%|n9X?+T#V$Vl&&jdb_)y^XyX(3t4z#nh z+???^b=CFt@%szdSk|d2`1n~Q7;|z=o*8X1$Ey9dpun}fyoVB-dp{TK*>sF?yRyQX zqj$tl|8FA}P;e)I3s>4Q_{>%YI7ef0C@^Y-h@7UverWbdtzU*yi*?;co^Y_duW}g$- z4s8vq%{zSS*q%50D?k5}Ip1-3)u9bs-8XtJ^c?6o{fmRcJnEa%u7WeiJB}@5eH^T_ zsOZzv>Gm9_UU6{Df3r@p@It=bvDB5%?f-6>X1Z==?+lKUS${shyu3WPzmeBaY?uDI zqCK~6-mLuc;o)I-^S^VuSwB5qym;})X&bKVE!Y%SU-$dl`fBml61U$yT)*G$*Xi5a z>!r`1SAKN=fl#E&^J{ud1vc~I_su=|)U{yusu{D@^Y87E=vVKTpUtY@*-)S^zFo-D zuKtz%Q#MKcMcv{dE9_=hF&r?7tNZ(P`||HOu?gSj#cYcfXKbv_($SK?ySbz1=$Dnp zH~6x!yxS=_@p`}f{uxy=uM^a-6>)NWsPj#^tz0xeE$VfWwEl;CN!_ov<-Py=JUssI z-}~0q|7TUn+&;p?@?*WB@XzDr_ib-%yMOKY`NyBGegf)k+^A<%mg#HTmuh)y(fm}u zJEvG0jyO6!hHZE4*}WAxhv!y(udDW-%xoSSqnE94 zVCu0q$xp!QtEUX zR#sNOSQxH-eR)Zo;Xs~{0D}-Cqk`ZlH5vp&rh-ZJdbNxO+yDOkdw6x-^EYqaqx*sW z+0QR$Q(^VB+P?bRn~f7W{~YCLnY;aD#-9I{$B!RZpZ$mDhAPt`zggN+&!=h{>^RBN zGS}#kVY9)dIuYP`h?mw5Yv73{lTbS>LFVmr%wm6pYIMD_7FZ)2E zHJz~FRG{E%d474jm|s#ioPZWwPB(X(bFTK-TJ!vSe>VNPSz&k0%Z}0A|{rzpPZ_Tm!-xoybu9MC^&?hKhm*Mi{>FMeBd!Gld zYvo|S!y|U_XU6rr6Q3@Se_d7h;nCf@ymfc~fBo?F?)CQf|Nop@ZLR+JWA|nKeS3?) z9WQ>Stgt3`?&K%i9t8Ci?5X(h=;f~UyZ`_Bclr17?|Ur9WaP(K#leJAzxx`G^Wpamym z%|f?woqTmoIlMK+ejA~oYSshO`G`w}Aj)}?V)$jHD|G(e0KC<=6-C}ds zJCfTzGEJ`f^5){>tFcA)*CYyk_HLbi_Vag#2G6&9Z~lJzdHVc%^Rk$~`@a9)dq3}g z+51)3dtR>6@84fz6Sw=Pc8b=r4Gq1&FF5^_Shom(_BC+B$kuj`!1y4zvj4eM`bEPHjmSO1Nzoww7t+%IhP)pUjr z8|~&-F);K^ZeWXRK)1jf>^w0*`#;@t&;o^_Kere07S!Et=SSdgE?f2IVoo5pT1QOmpeERhJ zh^T~`dL+dwKw}tb#zX6)4qB`LgT-E%M8<(%O~x$bUpr#gJT0nd~BSZ=)}81 zKrP|v>F1ZtYkaJ(upz+SuI|s-*{y52bM)-f%vo5(vUIfU<0D*-CH=Z$e5SMEz@grb zKUHPlN?uv!HEVAy^LA+XI_tz8^$cze;GU@A@%CkiE~n)${x9$7Tb4tiwRqDUD~sIlKcEOrL`Eys8rXTvweQ2 zvY?{k2Rp-#wda?~F)+;bbYSpcVQFv~rAC8**i`V({=8pvHgDei_-a3k z+3bc5TirCy{jb?vv2XkK@`Bsz3#+QCY?6wKias5_#Lgl8?%>0R53eLQEWLUE{{K1~ zyUI^bj&9oj?euj0{ieo^{|%WFAFnl%+W+6q-QE58>OXQDJXu%|n9X?+T#V$Vl&&jdb_)y^XyX(3t4z#nh z+???^b=CFt@%szdSk|d2`1n~Q7;|z=o*8X1$Ey9dpun}fyoVB-dp{TK*>sF?yRyQX zqj$tl|8FA}P;e)I3s>4Q_{>%YI7ef0C@^Y-h@7UverWbdtzU*yi*?;co^Y_duW}g$- z4s8vq%{zSS*q%50D?k5}Ip1-3)u9bs-8XtJ^c?6o{fmRcJnEa%u7WeiJB}@5eH^T_ zsOZzv>Gm9_UU6{Df3r@p@It=bvDB5%?f-6>X1Z==?+lKUS${shyu3WPzmeBaY?uDI zqCK~6-mLuc;o)I-^S^VuSwB5qym;})X&bKVE!Y%SU-$dl`fBml61U$yT)*G$*Xi5a z>!r`1SAKN=fl#E&^J{ud1vc~I_su=|)U{yusu{D@^Y87E=vVKTpUtY@*-)S^zFo-D zuKtz%Q#MKcMcv{dE9_=hF&r?7tNZ(P`||HOu?gSj#cYcfXKbv_($SK?ySbz1=$Dnp zH~6x!yxS=_@p`}f{uxy=uM^a-6>)NWsPj#^tz0xeE$VfWwEl;CN!_ov<-Py=JUssI z-}~0q|7TUn+&;p?@?*WB@XzDr_ib-%yMOKY`NyBGegf)k+^A<%mg#HTmuh)y(fm}u zJEvG0jyO6!hHZE4*}WAxhv!y(udDW-%xoSSqnE94 zVCu0q$xp!Q^$cze;GU@A@%CkiE~n)${x9$7Tb4tiwRqDUD~sIlKcEOrL`Eys8rXTvweQ2 zvY?{k2Rp-#wda?~F)+;bbYSpcVQFv~rAC8**i`V({=8pvHgDei_-a3k z+3bc5TirCy{jb?vv2XkK@`Bsz3#+QCY?6wKias5_#Lgl8?%>0R53eLQEWLUE{{K1~ zyUI^bj&9oj?euj0{ieo^{|%WFAFnl%+W+6q-QE58>OXQDJXu%|n9X?+T#V$Vl&&jdb_)y^XyX(3t4z#nh z+???^b=CFt@%szdSk|d2`1n~Q7;|z=o*8X1$Ey9dpun}fyoVB-dp{TK*>sF?yRyQX zqj$tl|8FA}P;e)I3s>4Q_{>%YI7ef0C@^Y-h@7UverWbdtzU*yi*?;co^Y_duW}g$- z4s8vq%{zSS*q%50D?k5}Ip1-3)u9bs-8XtJ^c?6o{fmRcJnEa%u7WeiJB}@5eH^T_ zsOZzv>Gm9_UU6{Df3r@p@It=bvDB5%?f-6>X1Z==?+lKUS${shyu3WPzmeBaY?uDI zqCK~6-mLuc;o)I-^S^VuSwB5qym;})X&bKVE!Y%SU-$dl`fBml61U$yT)*G$*Xi5a z>!r`1SAKN=fl#E&^J{ud1vc~I_su=|)U{yusu{D@^Y87E=vVKTpUtY@*-)S^zFo-D zuKtz%Q#MKcMcv{dE9_=hF&r?7tNZ(P`||HOu?gSj#cYcfXKbv_($SK?ySbz1=$Dnp zH~6x!yxS=_@p`}f{uxy=uM^a-6>)NWsPj#^tz0xeE$VfWwEl;CN!_ov<-Py=JUssI z-}~0q|7TUn+&;p?@?*WB@XzDr_ib-%yMOKY`NyBGegf)k+^A<%mg#HTmuh)y(fm}u zJEvG0jyO6!hHZE4*}WAxhv!y(udDW-%xoSSqnE94 zVCu0q$xp!QzgOy&d_kt@C*m9QvtKK`Ua6sTd|mA zv4=8|4BY1?#;`Q4Kcx8K&}I(Vl+>y6cDwE}f4z51xiTbp^}mq2v3Jwk4<|A+#J|3G zOPJxoZxsaw6(%MJrBP~x1i_}*YNmp$Z~5QX|NB+FufFz2adqSUVj+PUGb0SS7#nB4je9e1tu6ZwZl*&5GFKAoh)wzin`f7shi9K>eAm=q zz`|ZSV}1j}1P%^oi+%QWKLqQ!uYvQ?A%nizPs7>DKS~#9v9L6_I52>mcBf{~&kxFf z*yeCCGAalP%$UgA-Q(gQ(bjBz#v7vIh9ci*pc^N87z%-vv~7B_*v;lx%SE6K8!z%d zQ&un#E=)3EVlv)%9xPZmq5UUNF7lIE^!5)%QV>m>kG$QM_b}Ck=}^HPUDnS60y7#l z3>R%a{BXlJ8HOKxk&Pf1GjswSo^yR3!L83P}f+xLv-|m=dz7NU}vy`Cr+&xpzSlem%@Cql$ID;vwdH45rZ+s{M=E5xj z+Xa-IAO18lqQ}ia;#{He|He9qzQd7^{yx3ed9H({t`~jzw*14{D1T)378z`{;oN&|CY_&oHGA?Zw=oB+f0kNc;NekHw6}JY}q5O ze&JbtxBKqqmviO*e+{|&GU?~ruY3;^N`SHZNDAU*sLw|!SQ;1&3F?K!$@!{$&;Pq> V&gleJ*SM>722WQ%mvv4FO#qP9N(KM` literal 0 HcmV?d00001 diff --git a/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/multipleViewports_VP2AndThenBackToStorm_modPan4.png b/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/multipleViewports_VP2AndThenBackToStorm_modPan4.png new file mode 100644 index 0000000000000000000000000000000000000000..1d7bb1a39e5cb33e844b09964a2595e547f3b421 GIT binary patch literal 1924 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~V9glC$suNIKWzyTr{7^Xen z9tos4^WEHv!2%%Sme#g&3=Hf{o-U3d6?5L+b<7iSXK=VUAtim<4V}bJ)kn$=g4bv4 zW^jL~#CSxoDW&YB*^TIgZtV+9k$sZ?3zO5H?e*DxUK% z&LP5`iRoZy3-h(P4F^=u2==|SVY$}Za6stUox+~xFP6_*cXD#XB%CX-ut~qm$uZ|~ z#rq#0QrwDRLJY06Y z*Jt{wbMJ(X|XJPquA?{Kd@57U3oHiy85}Sb4q9e E05LgkfB*mh literal 0 HcmV?d00001 diff --git a/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/multipleViewports_VP2_modPan3.png b/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/multipleViewports_VP2_modPan3.png new file mode 100644 index 0000000000000000000000000000000000000000..698720d403378478cdf31cff7328fbdae4968e31 GIT binary patch literal 1563 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~V9glC$suNIKWzyTr{7^Xen z9tos4^WEHv!2%%Sme#g&3=FI@JzX3_D(1Ys>d4EWC~)Awa7_X%q2M(IvW`#NQ_dWK`@#MMl-@_SwQ3BFz0&!i%Hv8i$B1!8h4q_;OXk; Jvd$@?2>@-#gd4EWC~)Awa7_X%q2M(IvW`#NQ_dWK`@#MMl-@_SwQ3BFz0&!i%Hv8i$B1!8h4q_;OXk; Jvd$@?2>@-#gzgOy&d_kt@C*m9QvtKK`Ua6sTd|mA zv4=8|4BY1?#;`Q4Kcx8K&}I(Vl+>y6cDwE}f4z51xiTbp^}mq2v3Jwk4<|A+#J|3G zOPJxoZxsaw6(%MJrBP~x1i_}*YNmp$Z~5QX|NB+FufFz2adqSUVj+PUGb0SS7#nB4je9e1tu6ZwZl*&5GFKAoh)wzin`f7shi9K>eAm=q zz`|ZSV}1j}1P%^oi+%QWKLqQ!uYvQ?A%nizPs7>DKS~#9v9L6_I52>mcBf{~&kxFf z*yeCCGAalP%$UgA-Q(gQ(bjBz#v7vIh9ci*pc^N87z%-vv~7B_*v;lx%SE6K8!z%d zQ&un#E=)3EVlv)%9xPZmq5UUNF7lIE^!5)%QV>m>kG$QM_b}Ck=}^HPUDnS60y7#l z3>R%a{BXlJ8HOKxk&Pf1GjswSo^yR3!L83P}f+xLv-|m=dz7NU}vy`Cr+&xpzSlem%@Cql$ID;vwdH45rZ+s{M=E5xj z+Xa-IAO18lqQ}ia;#{He|He9qzQd7^{yx3ed9H({t`~jzw*14{D1T)378z`{;oN&|CY_&oHGA?Zw=oB+f0kNc;NekHw6}JY}q5O ze&JbtxBKqqmviO*e+{|&GU?~ruY3;^N`SHZNDAU*sLw|!SQ;1&3F?K!$@!{$&;Pq> V&gleJ*SM>722WQ%mvv4FO#qP9N(KM` literal 0 HcmV?d00001 diff --git a/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/multipleViewports_viewPanel4.png b/test/lib/mayaUsd/render/mayaToHydra/FootPrintNodeTest/multipleViewports_viewPanel4.png new file mode 100644 index 0000000000000000000000000000000000000000..1d7bb1a39e5cb33e844b09964a2595e547f3b421 GIT binary patch literal 1924 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~V9glC$suNIKWzyTr{7^Xen z9tos4^WEHv!2%%Sme#g&3=Hf{o-U3d6?5L+b<7iSXK=VUAtim<4V}bJ)kn$=g4bv4 zW^jL~#CSxoDW&YB*^TIgZtV+9k$sZ?3zO5H?e*DxUK% z&LP5`iRoZy3-h(P4F^=u2==|SVY$}Za6stUox+~xFP6_*cXD#XB%CX-ut~qm$uZ|~ z#rq#0QrwDRLJY06Y z*Jt{wbMJ(X|XJPquA?{Kd@57U3oHiy85}Sb4q9e E05LgkfB*mh literal 0 HcmV?d00001 diff --git a/test/lib/mayaUsd/render/mayaToHydra/testFlowViewportAPI.py b/test/lib/mayaUsd/render/mayaToHydra/testFlowViewportAPI.py index f0a38ac2b9..fe81023876 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/testFlowViewportAPI.py +++ b/test/lib/mayaUsd/render/mayaToHydra/testFlowViewportAPI.py @@ -39,6 +39,7 @@ class TestFlowViewportAPI(mtohUtils.MtohTestCase): #Subclassing mtohUtils.MtohTe IMAGE_DIFF_FAIL_PERCENT = 2 def setupScene(self): + cmds.file(new=True, force=True) self.setHdStormRenderer() #Test adding primitives diff --git a/test/lib/mayaUsd/render/mayaToHydra/testFootPrintNode.py b/test/lib/mayaUsd/render/mayaToHydra/testFootPrintNode.py new file mode 100644 index 0000000000..b1c4971b41 --- /dev/null +++ b/test/lib/mayaUsd/render/mayaToHydra/testFootPrintNode.py @@ -0,0 +1,296 @@ +# +# Copyright 2023 Autodesk, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from math import* +import maya.cmds as cmds +import maya.api.OpenMaya as om +import fixturesUtils +import mtohUtils +import mayaUtils +import maya.mel as mel +from testUtils import PluginLoaded + +HD_STORM = "HdStormRendererPlugin" +HD_STORM_OVERRIDE = "mayaHydraRenderOverride_" + HD_STORM + +class TestFootPrintNode(mtohUtils.MtohTestCase): #Subclassing mtohUtils.MtohTestCase to be able to call self.assertSnapshotClose + # MayaHydraBaseTestCase.setUpClass requirement. + _file = __file__ + + @property + def imageDiffFailThreshold(self): + return 0.01 + + @property + def imageDiffFailPercent(self): + return 0.2 + + def setupScene(self): + cmds.file(new=True, force=True) + testFile = mayaUtils.openTestScene( #Is an empty scene that is used to zoom in more on the foot print nodes, it also has Storm already set as the renderer + "testFootPrintNode", + "testFootPrintNode.ma") + cmds.refresh() + self.setHdStormRenderer()#set Storm as the renderer (even if the scene is supposed to have it already) + + #Test adding primitives + def test_AddingPrimitives(self): + with PluginLoaded('mayaHydraFootPrintNode'): + self.setupScene() + + #Create a mayaHydraFootPrintNode node which adds a dataProducerSceneIndex + footPrintNodeName = cmds.createNode("MhFootPrint") + self.assertFalse(footPrintNodeName == None) + + #Increase its size + cmds.setAttr(footPrintNodeName + '.size', 5) + cmds.refresh() + + #When the node above is created, its compute method is not called automatically, so work around to trigger a call to compute + cmds.setAttr(footPrintNodeName + '.dummyInput', 2)#setting this will set dirty the dummyOutput attribute + cmds.getAttr(footPrintNodeName + '.dummyOutput')#getting this value will trigger a call to compute + cmds.refresh() + #Original images are located for example in maya-hydra\test\lib\mayaUsd\render\mayaToHydra\FlowViewportAPITest + self.assertSnapshotClose("add_NodeCreated.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Move the transform node, the added prims should move as well + # Get the transform node of the mayaHydraFootPrintNode + transformNode = cmds.listRelatives(footPrintNodeName, parent=True)[0] + self.assertFalse(transformNode == None) + #Select the transform node + cmds.select(transformNode) + # Move the selected node + cmds.move(2, 0.5, -2) + cmds.refresh() + self.assertSnapshotClose("add_NodeMoved.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Hide the transform node, this should hide the mayaHydraFootPrintNode node and the added prims as well. + cmds.hide(transformNode) + self.assertSnapshotClose("add_NodeHidden.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Unhide the transform node, this should unhide the mayaHydraFootPrintNode node and the added prims as well. + cmds.showHidden(transformNode) + self.assertSnapshotClose("add_NodeUnhidden.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Delete the shape node, this should hide the added prims as well + cmds.delete(footPrintNodeName) + self.assertSnapshotClose("add_NodeDeleted.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Undo the delete, the node should be visible again so do the added prims + cmds.undo() + self.assertSnapshotClose("add_NodeDeletedUndo.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Redo the delete, the added prims should be hidden + cmds.redo() + self.assertSnapshotClose("add_NodeDeletedRedo.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Undo the delete again, the added prims should be visible + cmds.undo() + self.assertSnapshotClose("add_NodeDeletedUndoAgain.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Move transform node again to see if it still updates the added prims transform + cmds.select(transformNode) + # Move the selected node + cmds.move(-0.2, -0.5, 0) + cmds.refresh() + self.assertSnapshotClose("add_NodeMovedAfterDeletionAndUndo.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Switch to VP2 + self.setViewport2Renderer() + #Switch back to Storm + self.setHdStormRenderer() + self.assertSnapshotClose("add_VP2AndThenBackToStorm.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Finish by a File New command + cmds.file(new=True, force=True) + + #Test FootPrint grids parameters + def test_FootPrintAttributes(self): + with PluginLoaded('mayaHydraFootPrintNode'): + self.setupScene() + + #Create a mayaHydraFootPrintNode node which adds a dataProducerSceneIndex and a Filtering scene index + footPrintNodeName = cmds.createNode("MhFootPrint") + self.assertFalse(footPrintNodeName == None) + + #When the node above is created, its compute method is not called automatically, so work around to trigger a call to compute + cmds.setAttr(footPrintNodeName + '.dummyInput', 2)#setting this will set dirty the dummyOutput attribute + cmds.getAttr(footPrintNodeName + '.dummyOutput')#getting this value will trigger a call to compute + self.assertSnapshotClose("footPrint_BeforeModifs.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Modify the attributes + cmds.setAttr(footPrintNodeName + '.size', 3) + cmds.setAttr(footPrintNodeName + '.color', 1.0, 1.0, 1.0, type="double3") + cmds.refresh() + self.assertSnapshotClose("footPrint_AfterModifs.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Switch to VP2 + self.setViewport2Renderer() + #Switch back to Storm + self.setHdStormRenderer() + self.assertSnapshotClose("footPrint_VP2AndThenBackToStorm.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Finish by a File New command + cmds.file(new=True, force=True) + + #Test multiple nodes + def test_MultipleNodes(self): + with PluginLoaded('mayaHydraFootPrintNode'): + self.setupScene() + + #Create a mayaHydraFootPrintNode node which adds a dataProducerSceneIndex and a Filtering scene index + footPrintNodeName1 = cmds.createNode("MhFootPrint", n="nodeShape1") + self.assertFalse(footPrintNodeName1 == None) + + #When the node above is created, its compute method is not called automatically, so work around to trigger a call to compute + cmds.setAttr(footPrintNodeName1 + '.dummyInput', 3)#setting this will set dirty the dummyOutput attribute + cmds.getAttr(footPrintNodeName1 + '.dummyOutput')#getting this value will trigger a call to compute + + #Modify the attributes + cmds.setAttr(footPrintNodeName1 + '.size', 3) + cmds.setAttr(footPrintNodeName1 + '.color', 1.0, 1.0, 1.0, type="double3") + cmds.refresh() + + #Move the transform node, the added prims should move as well + # Get the transform node of the mayaHydraFootPrintNode + transformNode1 = cmds.listRelatives(footPrintNodeName1, parent=True)[0] + self.assertFalse(transformNode1 == None) + #Select the transform node + cmds.select(transformNode1) + # Move the selected node + cmds.move(-2, 0, 0) + cmds.refresh() + + #Create a mayaHydraFootPrintNode node which adds a dataProducerSceneIndex and a Filtering scene index + footPrintNodeName2 = cmds.createNode("MhFootPrint", n="nodeShape2") + self.assertFalse(footPrintNodeName2 == None) + + #When the node above is created, its compute method is not called automatically, so work around to trigger a call to compute + cmds.setAttr(footPrintNodeName2 + '.dummyInput', 3)#setting this will set dirty the dummyOutput attribute + cmds.getAttr(footPrintNodeName2 + '.dummyOutput')#getting this value will trigger a call to compute + + cmds.setAttr(footPrintNodeName2 + '.size', 1.5) + cmds.setAttr(footPrintNodeName2 + '.color', 0.0, 1.0, 0.0, type="double3") + cmds.refresh() + + #Move the transform node, the added prims should move as well + # Get the transform node of the mayaHydraFootPrintNode + transformNode2 = cmds.listRelatives(footPrintNodeName2, parent=True)[0] + self.assertFalse(transformNode2 == None) + #Select the transform node + cmds.select(transformNode2) + # Move the selected node + cmds.move(2, 0, -2) + cmds.refresh() + + self.assertSnapshotClose("multipleNodes_BeforeModifs.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Modify the color of node #2, it shouldn't change node's #1 color + cmds.setAttr(footPrintNodeName2 + '.color', 1.0, 0.0, 0.0, type="double3") + + # Apply transform on node #2 + cmds.select(transformNode2) + cmds.rotate(0, 45, 0) + cmds.scale(4, 1, 1) + cmds.refresh() + self.assertSnapshotClose("multipleNodes_AfterModifs.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Hide node #1 + cmds.hide(transformNode1) + self.assertSnapshotClose("multipleNodes_Node1Hidden.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Unhide node #1 + cmds.showHidden(transformNode1) + self.assertSnapshotClose("multipleNodes_Node1Unhidden.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Switch to VP2 + self.setViewport2Renderer() + #Switch back to Storm + self.setHdStormRenderer() + self.assertSnapshotClose("multipleNodes_VP2AndThenBackToStorm.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Finish by a File New command + cmds.file(new=True, force=True) + + #Test multiple viewports + def test_MultipleViewports(self): + with PluginLoaded('mayaHydraFootPrintNode'): + #switch to 4 views + mel.eval('FourViewLayout') + #Set focus on persp view + cmds.setFocus ('modelPanel4') #Is the persp view + #Set Storm as the renderer + self.setHdStormRenderer() + modelPanel4 = cmds.playblast(activeEditor=1) + rendererOverrideNameModPanel4 = cmds.modelEditor(modelPanel4, q=1,rendererOverrideName=1) + self.assertTrue(rendererOverrideNameModPanel4 == HD_STORM_OVERRIDE) + + #Set focus on model Panel 1 (it's an orthographic view : top) + cmds.setFocus ('modelPanel1') + #Set Storm as the renderer + self.setHdStormRenderer() + modelPanel1 = cmds.playblast(activeEditor=1) + rendererOverrideNameModPanel1 = cmds.modelEditor(modelPanel1, q=1,rendererOverrideName=1) + self.assertTrue(rendererOverrideNameModPanel1 == HD_STORM_OVERRIDE) + + #Create a mayaHydraFootPrintNode node which adds a dataProducerSceneIndex and a Filtering scene index + footPrintNodeName1 = cmds.createNode("MhFootPrint", n="nodeShape1") + self.assertFalse(footPrintNodeName1 == None) + + #When the node above is created, its compute method is not called automatically, so work around to trigger a call to compute + cmds.setAttr(footPrintNodeName1 + '.dummyInput', 2)#setting this will set dirty the dummyOutput attribute + cmds.getAttr(footPrintNodeName1 + '.dummyOutput')#getting this value will trigger a call to compute + + cmds.setAttr(footPrintNodeName1 + '.size', 6) + cmds.setAttr(footPrintNodeName1 + '.color', 0.0, 1.0, 0.0, type="double3") + cmds.refresh() + + cmds.setFocus ('modelPanel4') + self.assertSnapshotClose("multipleViewports_viewPanel4.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + cmds.setFocus ('modelPanel1') + self.assertSnapshotClose("multipleViewports_viewPanel1.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Switch to VP2 + cmds.setFocus ('modelPanel4') + self.setViewport2Renderer() + self.assertSnapshotClose("multipleViewports_VP2_modPan4.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + cmds.setFocus ('modelPanel1') + self.setViewport2Renderer() + self.assertSnapshotClose("multipleViewports_VP2_modPan3.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Switch back to Storm + cmds.setFocus ('modelPanel4') + self.setHdStormRenderer() + self.assertSnapshotClose("multipleViewports_VP2AndThenBackToStorm_modPan4.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + cmds.setFocus ('modelPanel1') + self.setHdStormRenderer() + self.assertSnapshotClose("multipleViewports_VP2AndThenBackToStorm_modPan3.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + + #Finish by a File New command + cmds.file(new=True, force=True) + + #Test loading a scene + def test_Load(self): + with PluginLoaded('mayaHydraFootPrintNode'): + cmds.file(new=True, force=True) + testFile = mayaUtils.openTestScene( + "testFootPrintNode", + "testFootPrintNodeSaved.ma") + cmds.refresh() + self.assertSnapshotClose("loadingFootPrintScene.png", self.imageDiffFailThreshold, self.imageDiffFailPercent) + +if __name__ == '__main__': + fixturesUtils.runTests(globals()) diff --git a/test/testSamples/testFootPrintNode/testFootPrintNode.ma b/test/testSamples/testFootPrintNode/testFootPrintNode.ma new file mode 100644 index 0000000000..f529f58238 --- /dev/null +++ b/test/testSamples/testFootPrintNode/testFootPrintNode.ma @@ -0,0 +1,219 @@ +//Maya ASCII 2026ff01 scene +//Name: testFootPrintNode.ma +//Last modified: Wed, Feb 14, 2024 05:36:52 PM +//Codeset: 1252 +requires maya "2026ff01"; +requires "mtoa" "5.4.0"; +requires -nodeType "mayaUsdLayerManager" -dataType "pxrUsdStageData" "mayaUsdPlugin" "0.28.0"; +currentUnit -l centimeter -a degree -t film; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2025"; +fileInfo "version" "Preview Release 153"; +fileInfo "cutIdentifier" "202402011613-000000"; +fileInfo "osv" "Windows 10 Enterprise v2009 (Build: 19045)"; +fileInfo "UUID" "3307B759-409E-49EA-B026-3FA1B9314D1E"; +createNode transform -s -n "persp"; + rename -uid "60CEECE7-4524-3435-33A9-CBBE94B70019"; + setAttr ".v" no; + setAttr ".t" -type "double3" 7.7140018334377451 5.7855013750782884 7.7140018334377292 ; + setAttr ".r" -type "double3" -27.938352729602379 44.999999999999972 -5.172681101354183e-14 ; +createNode camera -s -n "perspShape" -p "persp"; + rename -uid "F08B569C-4B20-1B04-CAC9-D8A17D42CF42"; + setAttr -k off ".v" no; + setAttr ".fl" 34.999999999999993; + setAttr ".coi" 12.348428026821633; + setAttr ".imn" -type "string" "persp"; + setAttr ".den" -type "string" "persp_depth"; + setAttr ".man" -type "string" "persp_mask"; + setAttr ".hc" -type "string" "viewSet -p %camera"; +createNode transform -s -n "top"; + rename -uid "10757077-4689-483A-0233-088DF1797409"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 1000.1 0 ; + setAttr ".r" -type "double3" -90 0 0 ; +createNode camera -s -n "topShape" -p "top"; + rename -uid "66A1BA86-4E94-CEC8-E62A-A289C5063824"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "top"; + setAttr ".den" -type "string" "top_depth"; + setAttr ".man" -type "string" "top_mask"; + setAttr ".hc" -type "string" "viewSet -t %camera"; + setAttr ".o" yes; + setAttr ".ai_translator" -type "string" "orthographic"; +createNode transform -s -n "front"; + rename -uid "809483A6-4AAF-4A40-B4DD-C49622814551"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 0 1000.1 ; +createNode camera -s -n "frontShape" -p "front"; + rename -uid "FBD1A55D-463A-7DF3-BE96-01AB88BA52D4"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "front"; + setAttr ".den" -type "string" "front_depth"; + setAttr ".man" -type "string" "front_mask"; + setAttr ".hc" -type "string" "viewSet -f %camera"; + setAttr ".o" yes; + setAttr ".ai_translator" -type "string" "orthographic"; +createNode transform -s -n "side"; + rename -uid "AB222488-4904-FB92-F2D0-A99AA0F1FC86"; + setAttr ".v" no; + setAttr ".t" -type "double3" 1000.1 0 0 ; + setAttr ".r" -type "double3" 0 90 0 ; +createNode camera -s -n "sideShape" -p "side"; + rename -uid "0444C828-4079-C384-E0D4-56ADE3CAE6CF"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "side"; + setAttr ".den" -type "string" "side_depth"; + setAttr ".man" -type "string" "side_mask"; + setAttr ".hc" -type "string" "viewSet -s %camera"; + setAttr ".o" yes; + setAttr ".ai_translator" -type "string" "orthographic"; +createNode lightLinker -s -n "lightLinker1"; + rename -uid "A559BD2C-475A-7BEC-A55C-A9B9BF88FFB0"; + setAttr -s 2 ".lnk"; + setAttr -s 2 ".slnk"; +createNode shapeEditorManager -n "shapeEditorManager"; + rename -uid "4D9953B0-48B9-EB14-64C8-6ABE8849CE53"; +createNode poseInterpolatorManager -n "poseInterpolatorManager"; + rename -uid "C200090A-4245-572E-65C3-23912A5A2350"; +createNode displayLayerManager -n "layerManager"; + rename -uid "D8E957BA-4A4B-90E4-F01A-A7A7127E01E1"; +createNode displayLayer -n "defaultLayer"; + rename -uid "2E898437-49A1-B7EA-AAE1-F3A03734C328"; + setAttr ".ufem" -type "stringArray" 0 ; +createNode renderLayerManager -n "renderLayerManager"; + rename -uid "D69E85F6-417F-61B5-E018-C6B5F20B5AE2"; +createNode renderLayer -n "defaultRenderLayer"; + rename -uid "DEF2C8DE-47D8-DA71-F919-9485562306C7"; + setAttr ".g" yes; +createNode mayaUsdLayerManager -n "mayaUsdLayerManager1"; + rename -uid "E483CD75-441A-B36C-D70B-3091BEE48F9D"; + setAttr ".sst" -type "string" ""; +createNode script -n "uiConfigurationScriptNode"; + rename -uid "B5143494-47DF-8214-875C-FA8767BC258E"; + setAttr ".b" -type "string" ( + "// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $nodeEditorPanelVisible = stringArrayContains(\"nodeEditorPanel1\", `getPanel -vis`);\n\tint $nodeEditorWorkspaceControlOpen = (`workspaceControl -exists nodeEditorPanel1Window` && `workspaceControl -q -visible nodeEditorPanel1Window`);\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\n\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n" + + " -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n" + + " -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -excludeObjectPreset \"All\" \n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n" + + "\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n" + + " -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n" + + " -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -excludeObjectPreset \"All\" \n" + + " -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n" + + " -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n" + + " -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n" + + " -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -excludeObjectPreset \"All\" \n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n" + + " -camera \"|persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n" + + " -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -rendererOverrideName \"mayaHydraRenderOverride_HdStormRendererPlugin\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n" + + " -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -excludeObjectPreset \"All\" \n -shadows 0\n -captureSequenceNumber -1\n -width 1117\n -height 714\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n" + + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"ToggledOutliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n" + + " -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n" + + " -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n" + + " -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n" + + " -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n" + + " -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n" + + " -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n" + + " $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayValues 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showPlayRangeShades \"on\" \n -lockPlayRangeShades \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -keyMinScale 1\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -preSelectionHighlight 1\n -limitToSelectedCurves 0\n -constrainDrag 0\n -valueLinesToggle 0\n -highlightAffectedCurves 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n" + + " -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n" + + " -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -hierarchyBelow 0\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"timeEditorPanel\" (localizedPanelLabel(\"Time Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n" + + "\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayValues 0\n" + + " -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n" + + " -showConstraintLabels 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n" + + "\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif ($nodeEditorPanelVisible || $nodeEditorWorkspaceControlOpen) {\n\t\tif (\"\" == $panelName) {\n\t\t\tif ($useSceneConfig) {\n\t\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n" + + " -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -connectedGraphingMode 1\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -showUnitConversions 0\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\t}\n\t\t} else {\n\t\t\t$label = `panel -q -label $panelName`;\n" + + "\t\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -connectedGraphingMode 1\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n" + + " -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -showUnitConversions 0\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\tif (!$useSceneConfig) {\n\t\t\t\tpanel -e -l $label $panelName;\n\t\t\t}\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"shapePanel\" (localizedPanelLabel(\"Shape Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tshapePanel -edit -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"posePanel\" (localizedPanelLabel(\"Pose Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tposePanel -edit -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n" + + "\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"profilerPanel\" (localizedPanelLabel(\"Profiler Tool\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"contentBrowserPanel\" (localizedPanelLabel(\"Content Browser\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-userCreated false\n\t\t\t\t-defaultImage \"vacantCell.xP:/\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" + + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 32768\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -rendererOverrideName \\\"mayaHydraRenderOverride_HdStormRendererPlugin\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -excludeObjectPreset \\\"All\\\" \\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1117\\n -height 714\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 32768\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -rendererOverrideName \\\"mayaHydraRenderOverride_HdStormRendererPlugin\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -excludeObjectPreset \\\"All\\\" \\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1117\\n -height 714\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 0 -compassAngle 0 -frontParameters \"\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n"); + setAttr ".st" 3; +createNode script -n "sceneConfigurationScriptNode"; + rename -uid "40C77EE7-40C0-B3DD-0FED-B0959AA1FF85"; + setAttr ".b" -type "string" "playbackOptions -min 1 -max 120 -ast 1 -aet 200 "; + setAttr ".st" 6; +select -ne :time1; + setAttr ".o" 1; + setAttr ".unw" 1; +select -ne :hardwareRenderingGlobals; + setAttr ".otfna" -type "stringArray" 22 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surface" "Particles" "Particle Instance" "Fluids" "Strokes" "Image Planes" "UI" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Hair Systems" "Follicles" "Misc. UI" "Ornaments" ; + setAttr ".otfva" -type "Int32Array" 22 0 1 1 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 ; + setAttr ".fprt" yes; + setAttr ".rtfm" 1; +select -ne :renderPartition; + setAttr -s 2 ".st"; +select -ne :renderGlobalsList1; +select -ne :defaultShaderList1; + setAttr -s 5 ".s"; +select -ne :postProcessList1; + setAttr -s 2 ".p"; +select -ne :defaultRenderingList1; +select -ne :standardSurface1; + setAttr ".bc" -type "float3" 0.40000001 0.40000001 0.40000001 ; + setAttr ".sr" 0.5; +select -ne :initialShadingGroup; + setAttr ".ro" yes; +select -ne :initialParticleSE; + setAttr ".ro" yes; +select -ne :defaultRenderGlobals; + addAttr -ci true -sn "mtohMotionSampleStart" -ln "mtohMotionSampleStart" -at "float"; + addAttr -ci true -sn "mtohMotionSampleEnd" -ln "mtohMotionSampleEnd" -at "float"; + addAttr -ci true -sn "mayaHydraRenderPurpose" -ln "mayaHydraRenderPurpose" -min + 0 -max 1 -at "bool"; + addAttr -ci true -sn "mayaHydraProxyPurpose" -ln "mayaHydraProxyPurpose" -dv 1 -min + 0 -max 1 -at "bool"; + addAttr -ci true -sn "mayaHydraGuidePurpose" -ln "mayaHydraGuidePurpose" -min 0 + -max 1 -at "bool"; + addAttr -ci true -sn "mtohTextureMemoryPerTexture" -ln "mtohTextureMemoryPerTexture" + -dv 4096 -min 1 -max 262144 -smn 16384 -at "long"; + addAttr -ci true -sn "mtohMaximumShadowMapResolution" -ln "mtohMaximumShadowMapResolution" + -dv 2048 -min 32 -max 8192 -at "long"; + addAttr -ci true -sn "HdStormRendererPlugin__enableTinyPrimCulling" -ln "HdStormRendererPlugin__enableTinyPrimCulling" + -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "HdStormRendererPlugin__volumeRaymarchingStepSize" -ln "HdStormRendererPlugin__volumeRaymarchingStepSize" + -dv 1 -at "float"; + addAttr -ci true -sn "HdStormRendererPlugin__volumeRaymarchingStepSizeLighting" + -ln "HdStormRendererPlugin__volumeRaymarchingStepSizeLighting" -dv 10 -at "float"; + addAttr -ci true -sn "HdStormRendererPlugin__volumeMaxTextureMemoryPerField" -ln "HdStormRendererPlugin__volumeMaxTextureMemoryPerField" + -dv 128 -at "float"; + addAttr -ci true -sn "HdStormRendererPlugin__maxLights" -ln "HdStormRendererPlugin__maxLights" + -dv 16 -at "long"; + addAttr -ci true -h true -sn "dss" -ln "defaultSurfaceShader" -dt "string"; + setAttr ".ren" -type "string" "arnold"; + setAttr ".dss" -type "string" "standardSurface1"; +select -ne :defaultResolution; + setAttr ".pa" 1; +select -ne :defaultColorMgtGlobals; + setAttr ".cfe" yes; + setAttr ".cfp" -type "string" "/OCIO-configs/Maya2022-default/config.ocio"; + setAttr ".vtn" -type "string" "ACES 1.0 SDR-video (sRGB)"; + setAttr ".vn" -type "string" "ACES 1.0 SDR-video"; + setAttr ".dn" -type "string" "sRGB"; + setAttr ".wsn" -type "string" "ACEScg"; + setAttr ".otn" -type "string" "ACES 1.0 SDR-video (sRGB)"; + setAttr ".potn" -type "string" "ACES 1.0 SDR-video (sRGB)"; +select -ne :hardwareRenderGlobals; + setAttr ".ctrs" 256; + setAttr ".btrs" 512; +relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +connectAttr "layerManager.dli[0]" "defaultLayer.id"; +connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid"; +connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; +// End of testFootPrintNode.ma diff --git a/test/testSamples/testFootPrintNode/testFootPrintNodeSaved.ma b/test/testSamples/testFootPrintNode/testFootPrintNodeSaved.ma new file mode 100644 index 0000000000..3dc84a9e2a --- /dev/null +++ b/test/testSamples/testFootPrintNode/testFootPrintNodeSaved.ma @@ -0,0 +1,245 @@ +//Maya ASCII 2026ff01 scene +//Name: testFootPrintNodeSaved.ma +//Last modified: Thu, Feb 15, 2024 11:20:16 AM +//Codeset: 1252 +requires maya "2026ff01"; +requires -nodeType "aiOptions" -nodeType "aiAOVDriver" -nodeType "aiAOVFilter" "mtoa" "5.4.0"; +requires -nodeType "mayaUsdLayerManager" -dataType "pxrUsdStageData" "mayaUsdPlugin" "0.28.0"; +requires -nodeType "MhFootPrint" "mayaHydraFootPrintNode" "2025.0"; +currentUnit -l centimeter -a degree -t film; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2025"; +fileInfo "version" "Preview Release 153"; +fileInfo "cutIdentifier" "202402011613-000000"; +fileInfo "osv" "Windows 10 Enterprise v2009 (Build: 19045)"; +fileInfo "UUID" "936493CE-4B55-E2DC-62DA-C5BC83CA1A8B"; +createNode transform -s -n "persp"; + rename -uid "89686174-49AF-F48D-C01A-DDBC43096230"; + setAttr ".v" no; + setAttr ".t" -type "double3" 4.4687263796001115 4.6123815993241735 1.0148599230741775 ; + setAttr ".r" -type "double3" -44.138352729604321 71.000000000000455 9.7692438216715594e-15 ; +createNode camera -s -n "perspShape" -p "persp"; + rename -uid "1C3DC5F6-44C9-7C5C-A9A2-46BCE29F8766"; + setAttr -k off ".v" no; + setAttr ".fl" 34.999999999999993; + setAttr ".coi" 6.4814552666600624; + setAttr ".imn" -type "string" "persp"; + setAttr ".den" -type "string" "persp_depth"; + setAttr ".man" -type "string" "persp_mask"; + setAttr ".hc" -type "string" "viewSet -p %camera"; +createNode transform -s -n "top"; + rename -uid "CA7DA140-45D5-533A-D4A5-B78380EA614A"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 1000.1 0 ; + setAttr ".r" -type "double3" -90 0 0 ; +createNode camera -s -n "topShape" -p "top"; + rename -uid "EB74CFFF-4D0F-35B3-57B9-E881C325D5EE"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "top"; + setAttr ".den" -type "string" "top_depth"; + setAttr ".man" -type "string" "top_mask"; + setAttr ".hc" -type "string" "viewSet -t %camera"; + setAttr ".o" yes; + setAttr ".ai_translator" -type "string" "orthographic"; +createNode transform -s -n "front"; + rename -uid "CB71B927-4B24-D753-E31D-628D3D29DB03"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 0 1000.1 ; +createNode camera -s -n "frontShape" -p "front"; + rename -uid "90907B08-425A-2F73-8F99-0F89F4935D85"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "front"; + setAttr ".den" -type "string" "front_depth"; + setAttr ".man" -type "string" "front_mask"; + setAttr ".hc" -type "string" "viewSet -f %camera"; + setAttr ".o" yes; + setAttr ".ai_translator" -type "string" "orthographic"; +createNode transform -s -n "side"; + rename -uid "1281E673-48D0-D52F-28CC-AD9B453CB8D7"; + setAttr ".v" no; + setAttr ".t" -type "double3" 1000.1 0 0 ; + setAttr ".r" -type "double3" 0 90 0 ; +createNode camera -s -n "sideShape" -p "side"; + rename -uid "7D54E919-41FE-0262-7900-DD874646B1B0"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "side"; + setAttr ".den" -type "string" "side_depth"; + setAttr ".man" -type "string" "side_mask"; + setAttr ".hc" -type "string" "viewSet -s %camera"; + setAttr ".o" yes; + setAttr ".ai_translator" -type "string" "orthographic"; +createNode transform -n "transform1"; + rename -uid "2D4589FD-42A5-19C9-D949-748E12966104"; +createNode MhFootPrint -n "MhFootPrint1" -p "transform1"; + rename -uid "B52FA7E3-48D2-983E-E4F4-8594EF20D699"; + setAttr -k off ".v"; + setAttr ".sz" 5; + setAttr ".col" -type "double3" 0 1 1 ; + setAttr ".dI" 2; +createNode lightLinker -s -n "lightLinker1"; + rename -uid "F05525A4-421C-610A-0237-D4A8D7720235"; + setAttr -s 2 ".lnk"; + setAttr -s 2 ".slnk"; +createNode shapeEditorManager -n "shapeEditorManager"; + rename -uid "0B613D06-4A19-0C32-9797-75B10F1CE092"; +createNode poseInterpolatorManager -n "poseInterpolatorManager"; + rename -uid "D7D5C748-4C76-CBF5-2EAE-FCA25013B7C2"; +createNode displayLayerManager -n "layerManager"; + rename -uid "A64E139A-4B34-ADD6-DFE6-BDB21C3E1AD8"; +createNode displayLayer -n "defaultLayer"; + rename -uid "A3CABD58-4EE9-518A-C3B7-C48AA85530A4"; + setAttr ".ufem" -type "stringArray" 0 ; +createNode renderLayerManager -n "renderLayerManager"; + rename -uid "5509F3D2-4088-979E-6DC5-DC982B479602"; +createNode renderLayer -n "defaultRenderLayer"; + rename -uid "531D7775-4AF5-2FF2-6535-2D821A239000"; + setAttr ".g" yes; +createNode script -n "uiConfigurationScriptNode"; + rename -uid "7EF3833C-48E6-C63B-2C48-1EB0D854E668"; + setAttr ".b" -type "string" ( + "// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $nodeEditorPanelVisible = stringArrayContains(\"nodeEditorPanel1\", `getPanel -vis`);\n\tint $nodeEditorWorkspaceControlOpen = (`workspaceControl -exists nodeEditorPanel1Window` && `workspaceControl -q -visible nodeEditorPanel1Window`);\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\n\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n" + + " -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n" + + " -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -excludeObjectPreset \"All\" \n -shadows 0\n -captureSequenceNumber -1\n -width 555\n -height 335\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n" + + "\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n" + + " -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n" + + " -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -excludeObjectPreset \"All\" \n" + + " -shadows 0\n -captureSequenceNumber -1\n -width 557\n -height 334\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"|front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n" + + " -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n" + + " -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n" + + " -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -excludeObjectPreset \"All\" \n -shadows 0\n -captureSequenceNumber -1\n -width 558\n -height 334\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n" + + " modelEditor -e \n -camera \"|persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n" + + " -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -rendererOverrideName \"mayaHydraRenderOverride_HdStormRendererPlugin\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n" + + " -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -bluePencil 1\n -greasePencils 0\n -excludeObjectPreset \"All\" \n -shadows 0\n -captureSequenceNumber -1\n -width 1117\n -height 714\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n" + + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"ToggledOutliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n" + + " -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n" + + " -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n" + + " -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n" + + " -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n" + + " -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n" + + " -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n" + + " $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayValues 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showPlayRangeShades \"on\" \n -lockPlayRangeShades \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -keyMinScale 1\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -preSelectionHighlight 1\n -limitToSelectedCurves 0\n -constrainDrag 0\n -valueLinesToggle 0\n -highlightAffectedCurves 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n" + + " -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -showUfeItems 1\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n" + + " -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -hierarchyBelow 0\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"timeEditorPanel\" (localizedPanelLabel(\"Time Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n" + + "\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n -displayValues 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayValues 0\n" + + " -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n" + + " -showConstraintLabels 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n" + + "\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif ($nodeEditorPanelVisible || $nodeEditorWorkspaceControlOpen) {\n\t\tif (\"\" == $panelName) {\n\t\t\tif ($useSceneConfig) {\n\t\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n" + + " -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -connectedGraphingMode 1\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -showUnitConversions 0\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\t}\n\t\t} else {\n\t\t\t$label = `panel -q -label $panelName`;\n" + + "\t\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -connectedGraphingMode 1\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n" + + " -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -showUnitConversions 0\n -editorMode \"default\" \n -hasWatchpoint 0\n $editorName;\n\t\t\tif (!$useSceneConfig) {\n\t\t\t\tpanel -e -l $label $panelName;\n\t\t\t}\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"shapePanel\" (localizedPanelLabel(\"Shape Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tshapePanel -edit -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"posePanel\" (localizedPanelLabel(\"Pose Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tposePanel -edit -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n" + + "\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"profilerPanel\" (localizedPanelLabel(\"Profiler Tool\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"contentBrowserPanel\" (localizedPanelLabel(\"Content Browser\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-userCreated false\n\t\t\t\t-defaultImage \"vacantCell.xP:/\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" + + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 32768\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -rendererOverrideName \\\"mayaHydraRenderOverride_HdStormRendererPlugin\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -excludeObjectPreset \\\"All\\\" \\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1117\\n -height 714\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 32768\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -rendererOverrideName \\\"mayaHydraRenderOverride_HdStormRendererPlugin\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -bluePencil 1\\n -greasePencils 0\\n -excludeObjectPreset \\\"All\\\" \\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1117\\n -height 714\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 0 -compassAngle 0 -frontParameters \"\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n"); + setAttr ".st" 3; +createNode script -n "sceneConfigurationScriptNode"; + rename -uid "CDD3DC3E-4389-91FF-1F2D-F7B5BFB8BB52"; + setAttr ".b" -type "string" "playbackOptions -min 1 -max 120 -ast 1 -aet 200 "; + setAttr ".st" 6; +createNode aiOptions -s -n "defaultArnoldRenderOptions"; + rename -uid "788D2B97-408D-A2AD-D41D-EEAD4F248410"; + setAttr ".version" -type "string" "5.4.0"; +createNode aiAOVFilter -s -n "defaultArnoldFilter"; + rename -uid "4EC78FE8-46BC-C4FD-4F2B-BB8C47BB5CCA"; + setAttr ".ai_translator" -type "string" "gaussian"; +createNode aiAOVDriver -s -n "defaultArnoldDriver"; + rename -uid "D660D139-4289-C735-8243-6498207165B3"; + setAttr ".ai_translator" -type "string" "exr"; +createNode aiAOVDriver -s -n "defaultArnoldDisplayDriver"; + rename -uid "8E8BA0C4-4443-830B-74CB-6FB096CB5D40"; + setAttr ".ai_translator" -type "string" "maya"; + setAttr ".output_mode" 0; +createNode mayaUsdLayerManager -n "mayaUsdLayerManager1"; + rename -uid "4D9030E7-4E0F-EF19-662E-CFA3E3339B89"; + setAttr ".sst" -type "string" ""; +select -ne :time1; + setAttr ".o" 1; + setAttr ".unw" 1; +select -ne :hardwareRenderingGlobals; + setAttr ".otfna" -type "stringArray" 22 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surface" "Particles" "Particle Instance" "Fluids" "Strokes" "Image Planes" "UI" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Hair Systems" "Follicles" "Misc. UI" "Ornaments" ; + setAttr ".otfva" -type "Int32Array" 22 0 1 1 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 ; + setAttr ".fprt" yes; + setAttr ".rtfm" 1; +select -ne :renderPartition; + setAttr -s 2 ".st"; +select -ne :renderGlobalsList1; +select -ne :defaultShaderList1; + setAttr -s 5 ".s"; +select -ne :postProcessList1; + setAttr -s 2 ".p"; +select -ne :defaultRenderingList1; +select -ne :standardSurface1; + setAttr ".bc" -type "float3" 0.40000001 0.40000001 0.40000001 ; + setAttr ".sr" 0.5; +select -ne :initialShadingGroup; + setAttr ".ro" yes; +select -ne :initialParticleSE; + setAttr ".ro" yes; +select -ne :defaultRenderGlobals; + addAttr -ci true -sn "mtohMotionSampleStart" -ln "mtohMotionSampleStart" -at "float"; + addAttr -ci true -sn "mtohMotionSampleEnd" -ln "mtohMotionSampleEnd" -at "float"; + addAttr -ci true -sn "mayaHydraRenderPurpose" -ln "mayaHydraRenderPurpose" -min + 0 -max 1 -at "bool"; + addAttr -ci true -sn "mayaHydraProxyPurpose" -ln "mayaHydraProxyPurpose" -dv 1 -min + 0 -max 1 -at "bool"; + addAttr -ci true -sn "mayaHydraGuidePurpose" -ln "mayaHydraGuidePurpose" -min 0 + -max 1 -at "bool"; + addAttr -ci true -sn "mtohTextureMemoryPerTexture" -ln "mtohTextureMemoryPerTexture" + -dv 4096 -min 1 -max 262144 -smn 16384 -at "long"; + addAttr -ci true -sn "mtohMaximumShadowMapResolution" -ln "mtohMaximumShadowMapResolution" + -dv 2048 -min 32 -max 8192 -at "long"; + addAttr -ci true -sn "HdStormRendererPlugin__enableTinyPrimCulling" -ln "HdStormRendererPlugin__enableTinyPrimCulling" + -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "HdStormRendererPlugin__volumeRaymarchingStepSize" -ln "HdStormRendererPlugin__volumeRaymarchingStepSize" + -dv 1 -at "float"; + addAttr -ci true -sn "HdStormRendererPlugin__volumeRaymarchingStepSizeLighting" + -ln "HdStormRendererPlugin__volumeRaymarchingStepSizeLighting" -dv 10 -at "float"; + addAttr -ci true -sn "HdStormRendererPlugin__volumeMaxTextureMemoryPerField" -ln "HdStormRendererPlugin__volumeMaxTextureMemoryPerField" + -dv 128 -at "float"; + addAttr -ci true -sn "HdStormRendererPlugin__maxLights" -ln "HdStormRendererPlugin__maxLights" + -dv 16 -at "long"; + addAttr -ci true -h true -sn "dss" -ln "defaultSurfaceShader" -dt "string"; + setAttr ".ren" -type "string" "arnold"; + setAttr ".dss" -type "string" "standardSurface1"; +select -ne :defaultResolution; + setAttr ".pa" 1; +select -ne :defaultColorMgtGlobals; + setAttr ".cfe" yes; + setAttr ".cfp" -type "string" "/OCIO-configs/Maya2022-default/config.ocio"; + setAttr ".vtn" -type "string" "ACES 1.0 SDR-video (sRGB)"; + setAttr ".vn" -type "string" "ACES 1.0 SDR-video"; + setAttr ".dn" -type "string" "sRGB"; + setAttr ".wsn" -type "string" "ACEScg"; + setAttr ".otn" -type "string" "ACES 1.0 SDR-video (sRGB)"; + setAttr ".potn" -type "string" "ACES 1.0 SDR-video (sRGB)"; +select -ne :hardwareRenderGlobals; + setAttr ".ctrs" 256; + setAttr ".btrs" 512; +relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +connectAttr "layerManager.dli[0]" "defaultLayer.id"; +connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid"; +connectAttr ":defaultArnoldDisplayDriver.msg" ":defaultArnoldRenderOptions.drivers" + -na; +connectAttr ":defaultArnoldFilter.msg" ":defaultArnoldRenderOptions.filt"; +connectAttr ":defaultArnoldDriver.msg" ":defaultArnoldRenderOptions.drvr"; +connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; +// End of testFootPrintNodeSaved.ma