From d6052eeb078e815ae95967cb5519115cf43dd90f Mon Sep 17 00:00:00 2001 From: Kenny Polonski Date: Wed, 2 Oct 2024 17:50:11 -0700 Subject: [PATCH 1/7] Add option to fallback to mayaDefaultStandardSurface shader fragment --- .../render/vp2RenderDelegate/material.cpp | 1 + .../vp2RenderDelegate/renderDelegate.cpp | 22 +- .../render/vp2ShaderFragments/CMakeLists.txt | 3 + .../FallbackCPVShaderStandardSurface.xml | 130 +++ .../FallbackShaderStandardSurface.xml | 130 +++ .../vp2ShaderFragments/FloatToFloat3.xml | 47 + .../vp2ShaderFragments/shaderFragments.cpp | 13 +- .../render/vp2RenderDelegate/CMakeLists.txt | 21 + .../ColorTestStandardSurface_unselected.png | Bin 0 -> 9976 bytes ...derDelegateDisplayColorsStandardSurface.py | 88 ++ .../displayColors/ColorTestStandardSurface.ma | 847 ++++++++++++++++++ 11 files changed, 1293 insertions(+), 9 deletions(-) create mode 100644 lib/mayaUsd/render/vp2ShaderFragments/FallbackCPVShaderStandardSurface.xml create mode 100644 lib/mayaUsd/render/vp2ShaderFragments/FallbackShaderStandardSurface.xml create mode 100644 lib/mayaUsd/render/vp2ShaderFragments/FloatToFloat3.xml create mode 100644 test/lib/mayaUsd/render/vp2RenderDelegate/VP2RenderDelegateDisplayColorsTest/baseline/ColorTestStandardSurface_unselected.png create mode 100644 test/lib/mayaUsd/render/vp2RenderDelegate/testVP2RenderDelegateDisplayColorsStandardSurface.py create mode 100644 test/testSamples/displayColors/ColorTestStandardSurface.ma diff --git a/lib/mayaUsd/render/vp2RenderDelegate/material.cpp b/lib/mayaUsd/render/vp2RenderDelegate/material.cpp index e87daabed4..fb6623359f 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/material.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/material.cpp @@ -213,6 +213,7 @@ TF_DEFINE_PRIVATE_TOKENS( (Float3ToFloatX) (Float3ToFloatY) (Float3ToFloatZ) + (FloatToFloat3) // When using OCIO from Maya: (Maya_OCIO_) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp b/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp index d62fd6fbd7..51d0dbf6c9 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp @@ -49,6 +49,11 @@ TF_DEFINE_ENV_SETTING( false, "This env tells the viewport to only draw glslfx UsdPreviewSurface shading networks."); +TF_DEFINE_ENV_SETTING( + MAYAUSD_VP2_USE_STANDARDSURFACE_FALLBACK, + false, + "This env flag allows setting the common fallback shader to the UsdPreviewSurface shader fragment."); + namespace { /*! \brief List of supported Rprims by VP2 render delegate @@ -101,7 +106,8 @@ enum class FallbackShaderType constexpr size_t FallbackShaderTypeCount = static_cast(FallbackShaderType::kCount); //! Array of constant-color shader fragment names indexed by FallbackShaderType -const MString _fallbackShaderNames[] = { "FallbackShader", +const MString _fallbackShaderNames[] = { TfGetEnvSetting(MAYAUSD_VP2_USE_STANDARDSURFACE_FALLBACK) ? + "FallbackShaderStandardSurface" : "FallbackShader", "BasisCurvesLinearFallbackShader", "BasisCurvesCubicFallbackShader", "BasisCurvesCubicFallbackShader", @@ -109,9 +115,13 @@ const MString _fallbackShaderNames[] = { "FallbackShader", "PointsFallbackShader" }; //! Array of varying-color shader fragment names indexed by FallbackShaderType -const MString _cpvFallbackShaderNames[] - = { "FallbackCPVShader", "BasisCurvesLinearCPVShader", "BasisCurvesCubicCPVShader", - "BasisCurvesCubicCPVShader", "BasisCurvesCubicCPVShader", "PointsFallbackCPVShader" }; +const MString _cpvFallbackShaderNames[] = { TfGetEnvSetting(MAYAUSD_VP2_USE_STANDARDSURFACE_FALLBACK) ? + "FallbackCPVShaderStandardSurface" : "FallbackCPVShader", + "BasisCurvesLinearCPVShader", + "BasisCurvesCubicCPVShader", + "BasisCurvesCubicCPVShader", + "BasisCurvesCubicCPVShader", + "PointsFallbackCPVShader" }; //! "curveBasis" parameter values for three different cubic curves const std::unordered_map _curveBasisParameterValueMapping @@ -184,7 +194,9 @@ class MShaderCache final return; _3dDefaultMaterialShader - = shaderMgr->getStockShader(MHWRender::MShaderManager::k3dDefaultMaterialShader); + = TfGetEnvSetting(MAYAUSD_VP2_USE_STANDARDSURFACE_FALLBACK) ? + shaderMgr->getStockShader(MHWRender::MShaderManager::k3dStandardSurfaceShader) : + shaderMgr->getStockShader(MHWRender::MShaderManager::k3dDefaultMaterialShader); TF_VERIFY(_3dDefaultMaterialShader); diff --git a/lib/mayaUsd/render/vp2ShaderFragments/CMakeLists.txt b/lib/mayaUsd/render/vp2ShaderFragments/CMakeLists.txt index 78a0556699..8283d10335 100644 --- a/lib/mayaUsd/render/vp2ShaderFragments/CMakeLists.txt +++ b/lib/mayaUsd/render/vp2ShaderFragments/CMakeLists.txt @@ -18,6 +18,7 @@ list(APPEND SHADERFRAGMENTS_XMLS Float3ToFloatX.xml Float3ToFloatY.xml Float3ToFloatZ.xml + FloatToFloat3.xml UsdPreviewSurfaceLightAPI1.xml UsdPreviewSurfaceLightAPI2.xml UsdPreviewSurfaceLightAPI3.xml @@ -49,7 +50,9 @@ list(APPEND SHADERFRAGMENTS_XMLS BasisCurvesLinearFallbackShader.xml BasisCurvesLinearHull.xml FallbackCPVShader.xml + FallbackCPVShaderStandardSurface.xml FallbackShader.xml + FallbackShaderStandardSurface.xml Float4ToFloat3.xml Float4ToFloat4.xml NwFaceCameraIfNAN.xml diff --git a/lib/mayaUsd/render/vp2ShaderFragments/FallbackCPVShaderStandardSurface.xml b/lib/mayaUsd/render/vp2ShaderFragments/FallbackCPVShaderStandardSurface.xml new file mode 100644 index 0000000000..04e9a10c47 --- /dev/null +++ b/lib/mayaUsd/render/vp2ShaderFragments/FallbackCPVShaderStandardSurface.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/mayaUsd/render/vp2ShaderFragments/FallbackShaderStandardSurface.xml b/lib/mayaUsd/render/vp2ShaderFragments/FallbackShaderStandardSurface.xml new file mode 100644 index 0000000000..f21b1313b5 --- /dev/null +++ b/lib/mayaUsd/render/vp2ShaderFragments/FallbackShaderStandardSurface.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/mayaUsd/render/vp2ShaderFragments/FloatToFloat3.xml b/lib/mayaUsd/render/vp2ShaderFragments/FloatToFloat3.xml new file mode 100644 index 0000000000..72cca8a781 --- /dev/null +++ b/lib/mayaUsd/render/vp2ShaderFragments/FloatToFloat3.xml @@ -0,0 +1,47 @@ + + + Expands a float to a float3 array of all the same value. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/mayaUsd/render/vp2ShaderFragments/shaderFragments.cpp b/lib/mayaUsd/render/vp2ShaderFragments/shaderFragments.cpp index 8193fd059d..2a3e7c1a7b 100644 --- a/lib/mayaUsd/render/vp2ShaderFragments/shaderFragments.cpp +++ b/lib/mayaUsd/render/vp2ShaderFragments/shaderFragments.cpp @@ -67,7 +67,9 @@ TF_DEFINE_PRIVATE_TOKENS( (PointsGeometry) (FallbackCPVShader) + (FallbackCPVShaderStandardSurface) (FallbackShader) + (FallbackShaderStandardSurface) (Float4ToFloatX) (Float4ToFloatY) @@ -78,6 +80,7 @@ TF_DEFINE_PRIVATE_TOKENS( (Float3ToFloatX) (Float3ToFloatY) (Float3ToFloatZ) + (FloatToFloat3) (NwFaceCameraIfNAN) @@ -142,6 +145,7 @@ static const TfTokenVector _FragmentNames = { _tokens->BasisCurvesCubicColorDoma _tokens->Float4ToFloatW, _tokens->Float4ToFloat3, _tokens->Float4ToFloat4, + _tokens->FloatToFloat3, #ifdef HAS_COLOR_MANAGEMENT_SUPPORT_API _tokens->Float3ToFloatX, _tokens->Float3ToFloatY, @@ -167,10 +171,11 @@ static const TfTokenVector _FragmentNames = { _tokens->BasisCurvesCubicColorDoma _tokens->usdPreviewSurfaceCombiner }; static const TfTokenVector _FragmentGraphNames - = { _tokens->BasisCurvesCubicCPVShader, _tokens->BasisCurvesCubicFallbackShader, - _tokens->BasisCurvesLinearCPVShader, _tokens->BasisCurvesLinearFallbackShader, - _tokens->FallbackCPVShader, _tokens->FallbackShader, - _tokens->PointsFallbackCPVShader, _tokens->PointsFallbackShader }; + = { _tokens->BasisCurvesCubicCPVShader, _tokens->BasisCurvesCubicFallbackShader, + _tokens->BasisCurvesLinearCPVShader, _tokens->BasisCurvesLinearFallbackShader, + _tokens->FallbackCPVShader, _tokens->FallbackShader, + _tokens->FallbackCPVShaderStandardSurface, _tokens->FallbackShaderStandardSurface, + _tokens->PointsFallbackCPVShader, _tokens->PointsFallbackShader }; namespace { //! Get the file path of the shader fragment. diff --git a/test/lib/mayaUsd/render/vp2RenderDelegate/CMakeLists.txt b/test/lib/mayaUsd/render/vp2RenderDelegate/CMakeLists.txt index 5f3bb894df..ac458b55fa 100644 --- a/test/lib/mayaUsd/render/vp2RenderDelegate/CMakeLists.txt +++ b/test/lib/mayaUsd/render/vp2RenderDelegate/CMakeLists.txt @@ -39,6 +39,27 @@ if(MAYA_CAMERA_GIZMO_SUPPORT) ) endif() +# Test standard surface shader with MAYAUSD_VP2_USE_STANDARDSURFACE_FALLBACK true +mayaUsd_get_unittest_target(target testVP2RenderDelegateDisplayColorsStandardSurface.py) +mayaUsd_add_test(${target} + INTERACTIVE + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + PYTHON_SCRIPT testVP2RenderDelegateDisplayColorsStandardSurface.py + ENV + "MAYA_PLUG_IN_PATH=${CMAKE_INSTALL_PREFIX}/lib/maya" + "LD_LIBRARY_PATH=${ADDITIONAL_LD_LIBRARY_PATH}" + "MAYA_LIGHTAPI_VERSION=${MAYA_LIGHTAPI_VERSION}" + + # Maya uses a very old version of GLEW, so we need support for + # pre-loading a newer version from elsewhere. + "LD_PRELOAD=${ADDITIONAL_LD_PRELOAD}" + + # Use the standard surface fallback to match maya 2024+ default material + "MAYAUSD_VP2_USE_STANDARDSURFACE_FALLBACK=true" +) +# Assign a CTest label to these tests for easy filtering. +set_property(TEST ${target} APPEND PROPERTY LABELS vp2RenderDelegate) + if (CMAKE_WANT_MATERIALX_BUILD) # We want modern OCIO for the MaterialX test: mayaUsd_get_unittest_target(target testVP2RenderDelegateMaterialX.py) diff --git a/test/lib/mayaUsd/render/vp2RenderDelegate/VP2RenderDelegateDisplayColorsTest/baseline/ColorTestStandardSurface_unselected.png b/test/lib/mayaUsd/render/vp2RenderDelegate/VP2RenderDelegateDisplayColorsTest/baseline/ColorTestStandardSurface_unselected.png new file mode 100644 index 0000000000000000000000000000000000000000..bb695eca1f23c586ef83de0d221f3a69420518fc GIT binary patch literal 9976 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 literal 0 HcmV?d00001 diff --git a/test/lib/mayaUsd/render/vp2RenderDelegate/testVP2RenderDelegateDisplayColorsStandardSurface.py b/test/lib/mayaUsd/render/vp2RenderDelegate/testVP2RenderDelegateDisplayColorsStandardSurface.py new file mode 100644 index 0000000000..7401878353 --- /dev/null +++ b/test/lib/mayaUsd/render/vp2RenderDelegate/testVP2RenderDelegateDisplayColorsStandardSurface.py @@ -0,0 +1,88 @@ +#!/usr/bin/env mayapy +# +# Copyright 2022 Autodesk +# +# 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. +# + +import fixturesUtils +import imageUtils +import mayaUtils +import usdUtils +import testUtils + +from mayaUsd import lib as mayaUsdLib +from mayaUsd import ufe as mayaUsdUfe + +from maya import cmds + +import ufe + +import os + + +class testVP2RenderDelegateDisplayColorsStandardSurface(imageUtils.ImageDiffingTestCase): + """ + Tests imaging using the Viewport 2.0 render delegate when using per-instance + inherited data on instances. + """ + + @classmethod + def setUpClass(cls): + # The test USD data is authored Z-up, so make sure Maya is configured + # that way too. + cmds.upAxis(axis='z') + + inputPath = fixturesUtils.setUpClass(__file__, + initializeStandalone=False, loadPlugin=False) + + cls._baselineDir = os.path.join(inputPath, + 'VP2RenderDelegateDisplayColorsTest', 'baseline') + + cls._testDir = os.path.abspath('.') + + def assertSnapshotClose(self, imageName): + baselineImage = os.path.join(self._baselineDir, imageName) + snapshotImage = os.path.join(self._testDir, imageName) + imageUtils.snapshot(snapshotImage, width=960, height=540) + return self.assertImagesClose(baselineImage, snapshotImage) + + def _StartTest(self, testName): + cmds.file(force=True, new=True) + mayaUtils.loadPlugin("mayaUsdPlugin") + + self._testName = testName + testFile = testUtils.getTestScene("displayColors", self._testName + ".ma") + + cmds.file(testFile, o=True) + + exportedFile = os.path.join(self._testDir, "ColorTest.usda") + cmds.mayaUSDExport(mergeTransformAndShape=True, + file=exportedFile, + shadingMode='none', + exportDisplayColor=True) + + shapeNode = mayaUtils.createProxyFromFile(exportedFile)[0] + cmds.move(0, 0, -1, shapeNode) + + globalSelection = ufe.GlobalSelection.get() + globalSelection.clear() + self.assertSnapshotClose('%s_unselected.png' % self._testName) + + def testPerInstanceInheritedData(self): + self._StartTest('ColorTestStandardSurface') + + + +if __name__ == '__main__': + fixturesUtils.runTests(globals()) diff --git a/test/testSamples/displayColors/ColorTestStandardSurface.ma b/test/testSamples/displayColors/ColorTestStandardSurface.ma new file mode 100644 index 0000000000..d586a34998 --- /dev/null +++ b/test/testSamples/displayColors/ColorTestStandardSurface.ma @@ -0,0 +1,847 @@ +//Maya ASCII 2024 scene +//Name: ColorTestStandardSurface.ma +//Last modified: Thu, Oct 03, 2024 08:58:02 PM +//Codeset: UTF-8 +requires maya "2024"; +requires "stereoCamera" "10.0"; +requires "stereoCamera" "10.0"; +currentUnit -l centimeter -a degree -t film; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2024"; +fileInfo "version" "2024"; +fileInfo "cutIdentifier" "202310181224-69282f2959"; +fileInfo "osv" "Linux 5.14.0-427.28.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jul 31 15:28:35 UTC 2024 x86_64"; +fileInfo "UUID" "F4D50000-000D-2CAD-66FF-67CA00000329"; +createNode transform -s -n "persp"; + rename -uid "591D6000-000C-4A72-66FA-C61E00000472"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 20 0 ; + setAttr ".r" -type "double3" -90 0 0 ; +createNode camera -s -n "perspShape" -p "persp"; + rename -uid "591D6000-000C-4A72-66FA-C61E00000473"; + setAttr -k off ".v" no; + setAttr ".fl" 34.999999999999993; + setAttr ".coi" 25.486394482953116; + 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 "591D6000-000C-4A72-66FA-C61E00000474"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 1000.1 0 ; + setAttr ".r" -type "double3" -89.999999999999986 0 0 ; +createNode camera -s -n "topShape" -p "top"; + rename -uid "591D6000-000C-4A72-66FA-C61E00000475"; + 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; +createNode transform -s -n "front"; + rename -uid "591D6000-000C-4A72-66FA-C61E00000476"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 0 1000.1 ; +createNode camera -s -n "frontShape" -p "front"; + rename -uid "591D6000-000C-4A72-66FA-C61E00000477"; + 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; +createNode transform -s -n "side"; + rename -uid "591D6000-000C-4A72-66FA-C61E00000478"; + setAttr ".v" no; + setAttr ".t" -type "double3" 1000.1 0 0 ; + setAttr ".r" -type "double3" 0 89.999999999999986 0 ; +createNode camera -s -n "sideShape" -p "side"; + rename -uid "591D6000-000C-4A72-66FA-C61E00000479"; + 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; +createNode transform -n "pPlane1"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004CC"; + setAttr ".t" -type "double3" -5.5 0 0.5 ; +createNode mesh -n "pPlaneShape1" -p "pPlane1"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004CD"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; +createNode transform -n "pPlane2"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004CE"; + setAttr ".t" -type "double3" -4.5 0 0.5 ; +createNode mesh -n "pPlaneShape2" -p "pPlane2"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004CF"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr -s 4 ".uvst[0].uvsp[0:3]" -type "float2" 0 0 1 0 0 1 1 1; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr -s 4 ".vt[0:3]" -0.5 0 0.5 0.5 0 0.5 -0.5 0 -0.5 0.5 0 -0.5; + setAttr -s 4 ".ed[0:3]" 0 1 0 0 2 0 1 3 0 2 3 0; + setAttr -ch 4 ".fc[0]" -type "polyFaces" + f 4 0 2 -4 -2 + mu 0 4 0 1 3 2; + setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0 ; + setAttr ".cvd" -type "dataPolyComponent" Index_Data Vertex 0 ; + setAttr ".pd[0]" -type "dataPolyComponent" Index_Data UV 0 ; + setAttr ".hfd" -type "dataPolyComponent" Index_Data Face 0 ; +createNode transform -n "pPlane3"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004D0"; + setAttr ".t" -type "double3" -3.5 0 0.5 ; +createNode mesh -n "pPlaneShape3" -p "pPlane3"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004D1"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr -s 4 ".uvst[0].uvsp[0:3]" -type "float2" 0 0 1 0 0 1 1 1; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr -s 4 ".vt[0:3]" -0.5 0 0.5 0.5 0 0.5 -0.5 0 -0.5 0.5 0 -0.5; + setAttr -s 4 ".ed[0:3]" 0 1 0 0 2 0 1 3 0 2 3 0; + setAttr -ch 4 ".fc[0]" -type "polyFaces" + f 4 0 2 -4 -2 + mu 0 4 0 1 3 2; + setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0 ; + setAttr ".cvd" -type "dataPolyComponent" Index_Data Vertex 0 ; + setAttr ".pd[0]" -type "dataPolyComponent" Index_Data UV 0 ; + setAttr ".hfd" -type "dataPolyComponent" Index_Data Face 0 ; +createNode transform -n "pPlane4"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004D2"; + setAttr ".t" -type "double3" -2.5 0 0.5 ; +createNode mesh -n "pPlaneShape4" -p "pPlane4"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004D3"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr -s 4 ".uvst[0].uvsp[0:3]" -type "float2" 0 0 1 0 0 1 1 1; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr -s 4 ".vt[0:3]" -0.5 0 0.5 0.5 0 0.5 -0.5 0 -0.5 0.5 0 -0.5; + setAttr -s 4 ".ed[0:3]" 0 1 0 0 2 0 1 3 0 2 3 0; + setAttr -ch 4 ".fc[0]" -type "polyFaces" + f 4 0 2 -4 -2 + mu 0 4 0 1 3 2; + setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0 ; + setAttr ".cvd" -type "dataPolyComponent" Index_Data Vertex 0 ; + setAttr ".pd[0]" -type "dataPolyComponent" Index_Data UV 0 ; + setAttr ".hfd" -type "dataPolyComponent" Index_Data Face 0 ; +createNode transform -n "pPlane5"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004D4"; + setAttr ".t" -type "double3" -1.5 0 0.5 ; +createNode mesh -n "pPlaneShape5" -p "pPlane5"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004D5"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr -s 4 ".uvst[0].uvsp[0:3]" -type "float2" 0 0 1 0 0 1 1 1; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr -s 4 ".vt[0:3]" -0.5 0 0.5 0.5 0 0.5 -0.5 0 -0.5 0.5 0 -0.5; + setAttr -s 4 ".ed[0:3]" 0 1 0 0 2 0 1 3 0 2 3 0; + setAttr -ch 4 ".fc[0]" -type "polyFaces" + f 4 0 2 -4 -2 + mu 0 4 0 1 3 2; + setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0 ; + setAttr ".cvd" -type "dataPolyComponent" Index_Data Vertex 0 ; + setAttr ".pd[0]" -type "dataPolyComponent" Index_Data UV 0 ; + setAttr ".hfd" -type "dataPolyComponent" Index_Data Face 0 ; +createNode transform -n "pPlane6"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004D6"; + setAttr ".t" -type "double3" -0.5 0 0.5 ; +createNode mesh -n "pPlaneShape6" -p "pPlane6"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004D7"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr -s 4 ".uvst[0].uvsp[0:3]" -type "float2" 0 0 1 0 0 1 1 1; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr -s 4 ".vt[0:3]" -0.5 0 0.5 0.5 0 0.5 -0.5 0 -0.5 0.5 0 -0.5; + setAttr -s 4 ".ed[0:3]" 0 1 0 0 2 0 1 3 0 2 3 0; + setAttr -ch 4 ".fc[0]" -type "polyFaces" + f 4 0 2 -4 -2 + mu 0 4 0 1 3 2; + setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0 ; + setAttr ".cvd" -type "dataPolyComponent" Index_Data Vertex 0 ; + setAttr ".pd[0]" -type "dataPolyComponent" Index_Data UV 0 ; + setAttr ".hfd" -type "dataPolyComponent" Index_Data Face 0 ; +createNode transform -n "pPlane7"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004D8"; + setAttr ".t" -type "double3" 0.5 0 0.5 ; +createNode mesh -n "pPlaneShape7" -p "pPlane7"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004D9"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr -s 4 ".uvst[0].uvsp[0:3]" -type "float2" 0 0 1 0 0 1 1 1; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr -s 4 ".vt[0:3]" -0.5 0 0.5 0.5 0 0.5 -0.5 0 -0.5 0.5 0 -0.5; + setAttr -s 4 ".ed[0:3]" 0 1 0 0 2 0 1 3 0 2 3 0; + setAttr -ch 4 ".fc[0]" -type "polyFaces" + f 4 0 2 -4 -2 + mu 0 4 0 1 3 2; + setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0 ; + setAttr ".cvd" -type "dataPolyComponent" Index_Data Vertex 0 ; + setAttr ".pd[0]" -type "dataPolyComponent" Index_Data UV 0 ; + setAttr ".hfd" -type "dataPolyComponent" Index_Data Face 0 ; +createNode transform -n "pPlane8"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004DA"; + setAttr ".t" -type "double3" 1.5 0 0.5 ; +createNode mesh -n "pPlaneShape8" -p "pPlane8"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004DB"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr -s 4 ".uvst[0].uvsp[0:3]" -type "float2" 0 0 1 0 0 1 1 1; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr -s 4 ".vt[0:3]" -0.5 0 0.5 0.5 0 0.5 -0.5 0 -0.5 0.5 0 -0.5; + setAttr -s 4 ".ed[0:3]" 0 1 0 0 2 0 1 3 0 2 3 0; + setAttr -ch 4 ".fc[0]" -type "polyFaces" + f 4 0 2 -4 -2 + mu 0 4 0 1 3 2; + setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0 ; + setAttr ".cvd" -type "dataPolyComponent" Index_Data Vertex 0 ; + setAttr ".pd[0]" -type "dataPolyComponent" Index_Data UV 0 ; + setAttr ".hfd" -type "dataPolyComponent" Index_Data Face 0 ; +createNode transform -n "pPlane9"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004DC"; + setAttr ".t" -type "double3" 2.5 0 0.5 ; +createNode mesh -n "pPlaneShape9" -p "pPlane9"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004DD"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr -s 4 ".uvst[0].uvsp[0:3]" -type "float2" 0 0 1 0 0 1 1 1; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr -s 4 ".vt[0:3]" -0.5 0 0.5 0.5 0 0.5 -0.5 0 -0.5 0.5 0 -0.5; + setAttr -s 4 ".ed[0:3]" 0 1 0 0 2 0 1 3 0 2 3 0; + setAttr -ch 4 ".fc[0]" -type "polyFaces" + f 4 0 2 -4 -2 + mu 0 4 0 1 3 2; + setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0 ; + setAttr ".cvd" -type "dataPolyComponent" Index_Data Vertex 0 ; + setAttr ".pd[0]" -type "dataPolyComponent" Index_Data UV 0 ; + setAttr ".hfd" -type "dataPolyComponent" Index_Data Face 0 ; +createNode transform -n "pPlane10"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004DE"; + setAttr ".t" -type "double3" 3.5 0 0.5 ; +createNode mesh -n "pPlaneShape10" -p "pPlane10"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004DF"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr -s 4 ".uvst[0].uvsp[0:3]" -type "float2" 0 0 1 0 0 1 1 1; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr -s 4 ".vt[0:3]" -0.5 0 0.5 0.5 0 0.5 -0.5 0 -0.5 0.5 0 -0.5; + setAttr -s 4 ".ed[0:3]" 0 1 0 0 2 0 1 3 0 2 3 0; + setAttr -ch 4 ".fc[0]" -type "polyFaces" + f 4 0 2 -4 -2 + mu 0 4 0 1 3 2; + setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0 ; + setAttr ".cvd" -type "dataPolyComponent" Index_Data Vertex 0 ; + setAttr ".pd[0]" -type "dataPolyComponent" Index_Data UV 0 ; + setAttr ".hfd" -type "dataPolyComponent" Index_Data Face 0 ; +createNode transform -n "pPlane11"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004E0"; + setAttr ".t" -type "double3" 4.5 0 0.5 ; +createNode mesh -n "pPlaneShape11" -p "pPlane11"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004E1"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr -s 4 ".uvst[0].uvsp[0:3]" -type "float2" 0 0 1 0 0 1 1 1; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr -s 4 ".vt[0:3]" -0.5 0 0.5 0.5 0 0.5 -0.5 0 -0.5 0.5 0 -0.5; + setAttr -s 4 ".ed[0:3]" 0 1 0 0 2 0 1 3 0 2 3 0; + setAttr -ch 4 ".fc[0]" -type "polyFaces" + f 4 0 2 -4 -2 + mu 0 4 0 1 3 2; + setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0 ; + setAttr ".cvd" -type "dataPolyComponent" Index_Data Vertex 0 ; + setAttr ".pd[0]" -type "dataPolyComponent" Index_Data UV 0 ; + setAttr ".hfd" -type "dataPolyComponent" Index_Data Face 0 ; +createNode transform -n "pPlane12"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004E2"; + setAttr ".t" -type "double3" 5.5 0 0.5 ; +createNode mesh -n "pPlaneShape12" -p "pPlane12"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004E3"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr -s 4 ".uvst[0].uvsp[0:3]" -type "float2" 0 0 1 0 0 1 1 1; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr -s 4 ".vt[0:3]" -0.5 0 0.5 0.5 0 0.5 -0.5 0 -0.5 0.5 0 -0.5; + setAttr -s 4 ".ed[0:3]" 0 1 0 0 2 0 1 3 0 2 3 0; + setAttr -ch 4 ".fc[0]" -type "polyFaces" + f 4 0 2 -4 -2 + mu 0 4 0 1 3 2; + setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0 ; + setAttr ".cvd" -type "dataPolyComponent" Index_Data Vertex 0 ; + setAttr ".pd[0]" -type "dataPolyComponent" Index_Data UV 0 ; + setAttr ".hfd" -type "dataPolyComponent" Index_Data Face 0 ; +createNode transform -n "pPlane13"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004E4"; + setAttr ".t" -type "double3" 0 0 -1.5 ; +createNode mesh -n "pPlaneShape13" -p "pPlane13"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004E5"; + setAttr -k off ".v"; + setAttr -s 24 ".iog[0].og"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; +createNode lightLinker -s -n "lightLinker1"; + rename -uid "F4D50000-000D-2CAD-66FF-673A0000027F"; + setAttr -s 14 ".lnk"; + setAttr -s 14 ".slnk"; +createNode displayLayerManager -n "layerManager"; + rename -uid "F4D50000-000D-2CAD-66FF-673A00000280"; +createNode displayLayer -n "defaultLayer"; + rename -uid "591D6000-000C-4A72-66FA-C61E000004C7"; + setAttr ".ufem" -type "stringArray" 0 ; +createNode renderLayerManager -n "renderLayerManager"; + rename -uid "F4D50000-000D-2CAD-66FF-673A00000282"; +createNode renderLayer -n "defaultRenderLayer"; + rename -uid "591D6000-000C-4A72-66FA-C61E000004C9"; + setAttr ".g" yes; +createNode shapeEditorManager -n "shapeEditorManager"; + rename -uid "F4D50000-000D-2CAD-66FF-673A00000284"; +createNode poseInterpolatorManager -n "poseInterpolatorManager"; + rename -uid "F4D50000-000D-2CAD-66FF-673A00000285"; +createNode polyPlane -n "polyPlane1"; + rename -uid "591D6000-000C-4A72-66FA-C62E000004EC"; + setAttr ".sw" 1; + setAttr ".sh" 1; + setAttr ".cuv" 2; +createNode polyPlane -n "polyPlane2"; + rename -uid "591D6000-000C-4A72-66FA-C62E00000511"; + setAttr ".w" 12; + setAttr ".sw" 12; + setAttr ".sh" 1; + setAttr ".cuv" 2; +createNode groupId -n "groupId1"; + rename -uid "591D6000-000C-4A72-66FA-C62E00000512"; + setAttr ".ihi" 0; +createNode groupParts -n "groupParts1"; + rename -uid "591D6000-000C-4A72-66FA-C62E00000513"; + setAttr ".ihi" 0; + setAttr ".ic" -type "componentList" 1 "f[11]"; + setAttr ".irc" -type "componentList" 1 "f[0:10]"; +createNode groupId -n "groupId2"; + rename -uid "591D6000-000C-4A72-66FA-C62E00000514"; + setAttr ".ihi" 0; +createNode groupId -n "groupId3"; + rename -uid "591D6000-000C-4A72-66FA-C62E00000515"; + setAttr ".ihi" 0; +createNode groupParts -n "groupParts2"; + rename -uid "591D6000-000C-4A72-66FA-C62E00000516"; + setAttr ".ihi" 0; + setAttr ".ic" -type "componentList" 1 "f[0]"; +createNode groupId -n "groupId4"; + rename -uid "591D6000-000C-4A72-66FA-C62E00000517"; + setAttr ".ihi" 0; +createNode groupParts -n "groupParts3"; + rename -uid "591D6000-000C-4A72-66FA-C62E00000518"; + setAttr ".ihi" 0; + setAttr ".ic" -type "componentList" 1 "f[1]"; +createNode groupId -n "groupId5"; + rename -uid "591D6000-000C-4A72-66FA-C62E00000519"; + setAttr ".ihi" 0; +createNode groupParts -n "groupParts4"; + rename -uid "591D6000-000C-4A72-66FA-C62E0000051A"; + setAttr ".ihi" 0; + setAttr ".ic" -type "componentList" 1 "f[2]"; +createNode groupId -n "groupId6"; + rename -uid "591D6000-000C-4A72-66FA-C62E0000051B"; + setAttr ".ihi" 0; +createNode groupParts -n "groupParts5"; + rename -uid "591D6000-000C-4A72-66FA-C62E0000051C"; + setAttr ".ihi" 0; + setAttr ".ic" -type "componentList" 1 "f[3]"; +createNode groupId -n "groupId7"; + rename -uid "591D6000-000C-4A72-66FA-C62E0000051D"; + setAttr ".ihi" 0; +createNode groupParts -n "groupParts6"; + rename -uid "591D6000-000C-4A72-66FA-C62E0000051E"; + setAttr ".ihi" 0; + setAttr ".ic" -type "componentList" 1 "f[4]"; +createNode groupId -n "groupId8"; + rename -uid "591D6000-000C-4A72-66FA-C62E0000051F"; + setAttr ".ihi" 0; +createNode groupParts -n "groupParts7"; + rename -uid "591D6000-000C-4A72-66FA-C62E00000520"; + setAttr ".ihi" 0; + setAttr ".ic" -type "componentList" 1 "f[5]"; +createNode groupId -n "groupId9"; + rename -uid "591D6000-000C-4A72-66FA-C62E00000521"; + setAttr ".ihi" 0; +createNode groupParts -n "groupParts8"; + rename -uid "591D6000-000C-4A72-66FA-C62E00000522"; + setAttr ".ihi" 0; + setAttr ".ic" -type "componentList" 1 "f[6]"; +createNode groupId -n "groupId10"; + rename -uid "591D6000-000C-4A72-66FA-C62E00000523"; + setAttr ".ihi" 0; +createNode groupParts -n "groupParts9"; + rename -uid "591D6000-000C-4A72-66FA-C62E00000524"; + setAttr ".ihi" 0; + setAttr ".ic" -type "componentList" 1 "f[7]"; +createNode groupId -n "groupId11"; + rename -uid "591D6000-000C-4A72-66FA-C62E00000525"; + setAttr ".ihi" 0; +createNode groupParts -n "groupParts10"; + rename -uid "591D6000-000C-4A72-66FA-C62E00000526"; + setAttr ".ihi" 0; + setAttr ".ic" -type "componentList" 1 "f[8]"; +createNode groupId -n "groupId12"; + rename -uid "591D6000-000C-4A72-66FA-C62E00000527"; + setAttr ".ihi" 0; +createNode groupParts -n "groupParts11"; + rename -uid "591D6000-000C-4A72-66FA-C62E00000528"; + setAttr ".ihi" 0; + setAttr ".ic" -type "componentList" 1 "f[9]"; +createNode groupId -n "groupId13"; + rename -uid "591D6000-000C-4A72-66FA-C62E00000529"; + setAttr ".ihi" 0; +createNode groupParts -n "groupParts12"; + rename -uid "591D6000-000C-4A72-66FA-C62E0000052A"; + setAttr ".ihi" 0; + setAttr ".ic" -type "componentList" 1 "f[10]"; +createNode script -n "sceneConfigurationScriptNode"; + rename -uid "591D6000-000C-4A72-66FA-C62E0000052C"; + setAttr ".b" -type "string" "playbackOptions -min 1 -max 120 -ast 1 -aet 200 "; + setAttr ".st" 6; +createNode standardSurface -n "standardSurface2"; + rename -uid "591D6000-000C-4A72-66FA-C68000000531"; + setAttr ".bc" -type "float3" 1 0 0 ; + setAttr ".sr" 0.5; +createNode shadingEngine -n "standardSurface2SG"; + rename -uid "591D6000-000C-4A72-66FA-C68000000532"; + setAttr ".ihi" 0; + setAttr -s 2 ".dsm"; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo13"; + rename -uid "591D6000-000C-4A72-66FA-C68000000533"; +createNode standardSurface -n "standardSurface3"; + rename -uid "591D6000-000C-4A72-66FA-C6C600000534"; + setAttr ".bc" -type "float3" 0 1 0 ; + setAttr ".sr" 0.5; +createNode shadingEngine -n "standardSurface3SG"; + rename -uid "591D6000-000C-4A72-66FA-C6C600000535"; + setAttr ".ihi" 0; + setAttr -s 2 ".dsm"; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo14"; + rename -uid "591D6000-000C-4A72-66FA-C6C600000536"; +createNode standardSurface -n "standardSurface4"; + rename -uid "591D6000-000C-4A72-66FA-C70000000537"; + setAttr ".bc" -type "float3" 0 0 1 ; + setAttr ".sr" 0.5; +createNode shadingEngine -n "standardSurface4SG"; + rename -uid "591D6000-000C-4A72-66FA-C70000000538"; + setAttr ".ihi" 0; + setAttr -s 2 ".dsm"; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo15"; + rename -uid "591D6000-000C-4A72-66FA-C70000000539"; +createNode standardSurface -n "standardSurface5"; + rename -uid "591D6000-000C-4A72-66FA-C7250000053A"; + setAttr ".bc" -type "float3" 0 1 1 ; + setAttr ".sr" 0.5; +createNode shadingEngine -n "standardSurface5SG"; + rename -uid "591D6000-000C-4A72-66FA-C7250000053B"; + setAttr ".ihi" 0; + setAttr -s 2 ".dsm"; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo16"; + rename -uid "591D6000-000C-4A72-66FA-C7250000053C"; +createNode standardSurface -n "standardSurface6"; + rename -uid "591D6000-000C-4A72-66FA-C7480000053D"; + setAttr ".bc" -type "float3" 1 0 1 ; + setAttr ".sr" 0.5; +createNode shadingEngine -n "standardSurface6SG"; + rename -uid "591D6000-000C-4A72-66FA-C7480000053E"; + setAttr ".ihi" 0; + setAttr -s 2 ".dsm"; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo17"; + rename -uid "591D6000-000C-4A72-66FA-C7480000053F"; +createNode standardSurface -n "standardSurface7"; + rename -uid "591D6000-000C-4A72-66FA-C76400000540"; + setAttr ".bc" -type "float3" 1 1 0 ; + setAttr ".sr" 0.5; +createNode shadingEngine -n "standardSurface7SG"; + rename -uid "591D6000-000C-4A72-66FA-C76400000541"; + setAttr ".ihi" 0; + setAttr -s 2 ".dsm"; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo18"; + rename -uid "591D6000-000C-4A72-66FA-C76400000542"; +createNode standardSurface -n "standardSurface8"; + rename -uid "591D6000-000C-4A72-66FA-C78200000543"; + setAttr ".bc" -type "float3" 0.2 0.5 0.5 ; + setAttr ".sr" 0.5; +createNode shadingEngine -n "standardSurface8SG"; + rename -uid "591D6000-000C-4A72-66FA-C78200000544"; + setAttr ".ihi" 0; + setAttr -s 2 ".dsm"; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo19"; + rename -uid "591D6000-000C-4A72-66FA-C78200000545"; +createNode standardSurface -n "standardSurface9"; + rename -uid "591D6000-000C-4A72-66FA-C7AD00000546"; + setAttr ".bc" -type "float3" 0.5 0.2 0.5 ; + setAttr ".sr" 0.5; +createNode shadingEngine -n "standardSurface9SG"; + rename -uid "591D6000-000C-4A72-66FA-C7AD00000547"; + setAttr ".ihi" 0; + setAttr -s 2 ".dsm"; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo20"; + rename -uid "591D6000-000C-4A72-66FA-C7AD00000548"; +createNode standardSurface -n "standardSurface10"; + rename -uid "591D6000-000C-4A72-66FA-C7D500000549"; + setAttr ".bc" -type "float3" 0.5 0.5 0.2 ; + setAttr ".sr" 0.5; +createNode shadingEngine -n "standardSurface10SG"; + rename -uid "591D6000-000C-4A72-66FA-C7D50000054A"; + setAttr ".ihi" 0; + setAttr -s 2 ".dsm"; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo21"; + rename -uid "591D6000-000C-4A72-66FA-C7D50000054B"; +createNode standardSurface -n "standardSurface11"; + rename -uid "591D6000-000C-4A72-66FA-C7F50000054C"; + setAttr ".bc" -type "float3" 0.5 0.2 0.2 ; + setAttr ".sr" 0.5; +createNode shadingEngine -n "standardSurface11SG"; + rename -uid "591D6000-000C-4A72-66FA-C7F50000054D"; + setAttr ".ihi" 0; + setAttr -s 2 ".dsm"; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo22"; + rename -uid "591D6000-000C-4A72-66FA-C7F50000054E"; +createNode standardSurface -n "standardSurface12"; + rename -uid "591D6000-000C-4A72-66FA-C8290000054F"; + setAttr ".bc" -type "float3" 0.2 0.5 0.2 ; + setAttr ".sr" 0.5; +createNode shadingEngine -n "standardSurface12SG"; + rename -uid "591D6000-000C-4A72-66FA-C82900000550"; + setAttr ".ihi" 0; + setAttr -s 2 ".dsm"; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo23"; + rename -uid "591D6000-000C-4A72-66FA-C82900000551"; +createNode standardSurface -n "standardSurface13"; + rename -uid "591D6000-000C-4A72-66FA-C85400000552"; + setAttr ".bc" -type "float3" 0.2 0.2 0.5 ; + setAttr ".sr" 0.5; +createNode shadingEngine -n "standardSurface13SG"; + rename -uid "591D6000-000C-4A72-66FA-C85400000553"; + setAttr ".ihi" 0; + setAttr -s 2 ".dsm"; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo24"; + rename -uid "591D6000-000C-4A72-66FA-C85400000554"; +createNode nodeGraphEditorInfo -n "hyperShadePrimaryNodeEditorSavedTabsInfo"; + rename -uid "F4D50000-000D-2CAD-66FF-67C400000328"; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -1361.5695737472265 -676.19044932108181 ; + setAttr ".tgi[0].vh" -type "double2" 1475.1650074086201 647.61902188497993 ; + setAttr -s 2 ".tgi[0].ni"; + setAttr ".tgi[0].ni[0].x" -506.2542724609375; + setAttr ".tgi[0].ni[0].y" -413.07086181640625; + setAttr ".tgi[0].ni[0].nvs" 2579; + setAttr ".tgi[0].ni[1].x" -226.2542724609375; + setAttr ".tgi[0].ni[1].y" -413.07086181640625; + setAttr ".tgi[0].ni[1].nvs" 1923; +select -ne :time1; + setAttr ".o" 1001; + setAttr ".unw" 1001; +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 14 ".st"; +select -ne :renderGlobalsList1; +select -ne :defaultShaderList1; + setAttr -s 17 ".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 -h true -sn "dss" -ln "defaultSurfaceShader" -dt "string"; + 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; +connectAttr "polyPlane1.out" "pPlaneShape1.i"; +connectAttr "groupId1.id" "pPlaneShape13.iog.og[0].gid"; +connectAttr "standardSurface13SG.mwc" "pPlaneShape13.iog.og[0].gco"; +connectAttr "groupId3.id" "pPlaneShape13.iog.og[1].gid"; +connectAttr "standardSurface2SG.mwc" "pPlaneShape13.iog.og[1].gco"; +connectAttr "groupId4.id" "pPlaneShape13.iog.og[2].gid"; +connectAttr "standardSurface3SG.mwc" "pPlaneShape13.iog.og[2].gco"; +connectAttr "groupId5.id" "pPlaneShape13.iog.og[3].gid"; +connectAttr "standardSurface4SG.mwc" "pPlaneShape13.iog.og[3].gco"; +connectAttr "groupId6.id" "pPlaneShape13.iog.og[4].gid"; +connectAttr "standardSurface5SG.mwc" "pPlaneShape13.iog.og[4].gco"; +connectAttr "groupId7.id" "pPlaneShape13.iog.og[5].gid"; +connectAttr "standardSurface6SG.mwc" "pPlaneShape13.iog.og[5].gco"; +connectAttr "groupId8.id" "pPlaneShape13.iog.og[6].gid"; +connectAttr "standardSurface7SG.mwc" "pPlaneShape13.iog.og[6].gco"; +connectAttr "groupId9.id" "pPlaneShape13.iog.og[7].gid"; +connectAttr "standardSurface8SG.mwc" "pPlaneShape13.iog.og[7].gco"; +connectAttr "groupId10.id" "pPlaneShape13.iog.og[8].gid"; +connectAttr "standardSurface9SG.mwc" "pPlaneShape13.iog.og[8].gco"; +connectAttr "groupId11.id" "pPlaneShape13.iog.og[9].gid"; +connectAttr "standardSurface10SG.mwc" "pPlaneShape13.iog.og[9].gco"; +connectAttr "groupId12.id" "pPlaneShape13.iog.og[10].gid"; +connectAttr "standardSurface11SG.mwc" "pPlaneShape13.iog.og[10].gco"; +connectAttr "groupId13.id" "pPlaneShape13.iog.og[11].gid"; +connectAttr "standardSurface12SG.mwc" "pPlaneShape13.iog.og[11].gco"; +connectAttr "groupParts12.og" "pPlaneShape13.i"; +connectAttr "groupId2.id" "pPlaneShape13.ciog.cog[0].cgid"; +relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "standardSurface4SG.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "standardSurface5SG.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "standardSurface6SG.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "standardSurface7SG.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "standardSurface8SG.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "standardSurface9SG.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "standardSurface10SG.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "standardSurface11SG.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "standardSurface12SG.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "standardSurface13SG.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "standardSurface2SG.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "standardSurface3SG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "standardSurface4SG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "standardSurface5SG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "standardSurface6SG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "standardSurface7SG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "standardSurface8SG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "standardSurface9SG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "standardSurface10SG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "standardSurface11SG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "standardSurface12SG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "standardSurface13SG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "standardSurface2SG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "standardSurface3SG.message" ":defaultLightSet.message"; +connectAttr "layerManager.dli[0]" "defaultLayer.id"; +connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid"; +connectAttr "polyPlane2.out" "groupParts1.ig"; +connectAttr "groupId1.id" "groupParts1.gi"; +connectAttr "groupParts1.og" "groupParts2.ig"; +connectAttr "groupId3.id" "groupParts2.gi"; +connectAttr "groupParts2.og" "groupParts3.ig"; +connectAttr "groupId4.id" "groupParts3.gi"; +connectAttr "groupParts3.og" "groupParts4.ig"; +connectAttr "groupId5.id" "groupParts4.gi"; +connectAttr "groupParts4.og" "groupParts5.ig"; +connectAttr "groupId6.id" "groupParts5.gi"; +connectAttr "groupParts5.og" "groupParts6.ig"; +connectAttr "groupId7.id" "groupParts6.gi"; +connectAttr "groupParts6.og" "groupParts7.ig"; +connectAttr "groupId8.id" "groupParts7.gi"; +connectAttr "groupParts7.og" "groupParts8.ig"; +connectAttr "groupId9.id" "groupParts8.gi"; +connectAttr "groupParts8.og" "groupParts9.ig"; +connectAttr "groupId10.id" "groupParts9.gi"; +connectAttr "groupParts9.og" "groupParts10.ig"; +connectAttr "groupId11.id" "groupParts10.gi"; +connectAttr "groupParts10.og" "groupParts11.ig"; +connectAttr "groupId12.id" "groupParts11.gi"; +connectAttr "groupParts11.og" "groupParts12.ig"; +connectAttr "groupId13.id" "groupParts12.gi"; +connectAttr "standardSurface2.oc" "standardSurface2SG.ss"; +connectAttr "pPlaneShape13.iog.og[1]" "standardSurface2SG.dsm" -na; +connectAttr "pPlaneShape1.iog" "standardSurface2SG.dsm" -na; +connectAttr "groupId3.msg" "standardSurface2SG.gn" -na; +connectAttr "standardSurface2SG.msg" "materialInfo13.sg"; +connectAttr "standardSurface2.msg" "materialInfo13.m"; +connectAttr "standardSurface3.oc" "standardSurface3SG.ss"; +connectAttr "pPlaneShape13.iog.og[2]" "standardSurface3SG.dsm" -na; +connectAttr "pPlaneShape2.iog" "standardSurface3SG.dsm" -na; +connectAttr "groupId4.msg" "standardSurface3SG.gn" -na; +connectAttr "standardSurface3SG.msg" "materialInfo14.sg"; +connectAttr "standardSurface3.msg" "materialInfo14.m"; +connectAttr "standardSurface4.oc" "standardSurface4SG.ss"; +connectAttr "pPlaneShape13.iog.og[3]" "standardSurface4SG.dsm" -na; +connectAttr "pPlaneShape3.iog" "standardSurface4SG.dsm" -na; +connectAttr "groupId5.msg" "standardSurface4SG.gn" -na; +connectAttr "standardSurface4SG.msg" "materialInfo15.sg"; +connectAttr "standardSurface4.msg" "materialInfo15.m"; +connectAttr "standardSurface5.oc" "standardSurface5SG.ss"; +connectAttr "pPlaneShape13.iog.og[4]" "standardSurface5SG.dsm" -na; +connectAttr "pPlaneShape4.iog" "standardSurface5SG.dsm" -na; +connectAttr "groupId6.msg" "standardSurface5SG.gn" -na; +connectAttr "standardSurface5SG.msg" "materialInfo16.sg"; +connectAttr "standardSurface5.msg" "materialInfo16.m"; +connectAttr "standardSurface6.oc" "standardSurface6SG.ss"; +connectAttr "pPlaneShape13.iog.og[5]" "standardSurface6SG.dsm" -na; +connectAttr "pPlaneShape5.iog" "standardSurface6SG.dsm" -na; +connectAttr "groupId7.msg" "standardSurface6SG.gn" -na; +connectAttr "standardSurface6SG.msg" "materialInfo17.sg"; +connectAttr "standardSurface6.msg" "materialInfo17.m"; +connectAttr "standardSurface7.oc" "standardSurface7SG.ss"; +connectAttr "pPlaneShape13.iog.og[6]" "standardSurface7SG.dsm" -na; +connectAttr "pPlaneShape6.iog" "standardSurface7SG.dsm" -na; +connectAttr "groupId8.msg" "standardSurface7SG.gn" -na; +connectAttr "standardSurface7SG.msg" "materialInfo18.sg"; +connectAttr "standardSurface7.msg" "materialInfo18.m"; +connectAttr "standardSurface8.oc" "standardSurface8SG.ss"; +connectAttr "pPlaneShape13.iog.og[7]" "standardSurface8SG.dsm" -na; +connectAttr "pPlaneShape7.iog" "standardSurface8SG.dsm" -na; +connectAttr "groupId9.msg" "standardSurface8SG.gn" -na; +connectAttr "standardSurface8SG.msg" "materialInfo19.sg"; +connectAttr "standardSurface8.msg" "materialInfo19.m"; +connectAttr "standardSurface9.oc" "standardSurface9SG.ss"; +connectAttr "pPlaneShape13.iog.og[8]" "standardSurface9SG.dsm" -na; +connectAttr "pPlaneShape8.iog" "standardSurface9SG.dsm" -na; +connectAttr "groupId10.msg" "standardSurface9SG.gn" -na; +connectAttr "standardSurface9SG.msg" "materialInfo20.sg"; +connectAttr "standardSurface9.msg" "materialInfo20.m"; +connectAttr "standardSurface10.oc" "standardSurface10SG.ss"; +connectAttr "pPlaneShape13.iog.og[9]" "standardSurface10SG.dsm" -na; +connectAttr "pPlaneShape9.iog" "standardSurface10SG.dsm" -na; +connectAttr "groupId11.msg" "standardSurface10SG.gn" -na; +connectAttr "standardSurface10SG.msg" "materialInfo21.sg"; +connectAttr "standardSurface10.msg" "materialInfo21.m"; +connectAttr "standardSurface11.oc" "standardSurface11SG.ss"; +connectAttr "pPlaneShape13.iog.og[10]" "standardSurface11SG.dsm" -na; +connectAttr "pPlaneShape10.iog" "standardSurface11SG.dsm" -na; +connectAttr "groupId12.msg" "standardSurface11SG.gn" -na; +connectAttr "standardSurface11SG.msg" "materialInfo22.sg"; +connectAttr "standardSurface11.msg" "materialInfo22.m"; +connectAttr "standardSurface12.oc" "standardSurface12SG.ss"; +connectAttr "pPlaneShape13.iog.og[11]" "standardSurface12SG.dsm" -na; +connectAttr "pPlaneShape11.iog" "standardSurface12SG.dsm" -na; +connectAttr "groupId13.msg" "standardSurface12SG.gn" -na; +connectAttr "standardSurface12SG.msg" "materialInfo23.sg"; +connectAttr "standardSurface12.msg" "materialInfo23.m"; +connectAttr "standardSurface13.oc" "standardSurface13SG.ss"; +connectAttr "pPlaneShape13.iog.og[0]" "standardSurface13SG.dsm" -na; +connectAttr "pPlaneShape12.iog" "standardSurface13SG.dsm" -na; +connectAttr "groupId1.msg" "standardSurface13SG.gn" -na; +connectAttr "standardSurface13SG.msg" "materialInfo24.sg"; +connectAttr "standardSurface13.msg" "materialInfo24.m"; +connectAttr "standardSurface13.msg" "hyperShadePrimaryNodeEditorSavedTabsInfo.tgi[0].ni[0].dn" + ; +connectAttr "standardSurface13SG.msg" "hyperShadePrimaryNodeEditorSavedTabsInfo.tgi[0].ni[1].dn" + ; +connectAttr "standardSurface2SG.pa" ":renderPartition.st" -na; +connectAttr "standardSurface3SG.pa" ":renderPartition.st" -na; +connectAttr "standardSurface4SG.pa" ":renderPartition.st" -na; +connectAttr "standardSurface5SG.pa" ":renderPartition.st" -na; +connectAttr "standardSurface6SG.pa" ":renderPartition.st" -na; +connectAttr "standardSurface7SG.pa" ":renderPartition.st" -na; +connectAttr "standardSurface8SG.pa" ":renderPartition.st" -na; +connectAttr "standardSurface9SG.pa" ":renderPartition.st" -na; +connectAttr "standardSurface10SG.pa" ":renderPartition.st" -na; +connectAttr "standardSurface11SG.pa" ":renderPartition.st" -na; +connectAttr "standardSurface12SG.pa" ":renderPartition.st" -na; +connectAttr "standardSurface13SG.pa" ":renderPartition.st" -na; +connectAttr "standardSurface2.msg" ":defaultShaderList1.s" -na; +connectAttr "standardSurface3.msg" ":defaultShaderList1.s" -na; +connectAttr "standardSurface4.msg" ":defaultShaderList1.s" -na; +connectAttr "standardSurface5.msg" ":defaultShaderList1.s" -na; +connectAttr "standardSurface6.msg" ":defaultShaderList1.s" -na; +connectAttr "standardSurface7.msg" ":defaultShaderList1.s" -na; +connectAttr "standardSurface8.msg" ":defaultShaderList1.s" -na; +connectAttr "standardSurface9.msg" ":defaultShaderList1.s" -na; +connectAttr "standardSurface10.msg" ":defaultShaderList1.s" -na; +connectAttr "standardSurface11.msg" ":defaultShaderList1.s" -na; +connectAttr "standardSurface12.msg" ":defaultShaderList1.s" -na; +connectAttr "standardSurface13.msg" ":defaultShaderList1.s" -na; +connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; +connectAttr "pPlaneShape13.ciog.cog[0]" ":initialShadingGroup.dsm" -na; +connectAttr "groupId2.msg" ":initialShadingGroup.gn" -na; +// End of ColorTestStandardSurface.ma From d060a77147d9fcc4cbe3c98f1e8be73c2e3a388c Mon Sep 17 00:00:00 2001 From: Kenny Polonski Date: Wed, 16 Oct 2024 17:19:47 -0700 Subject: [PATCH 2/7] Use standardSurface material by default --- .../vp2RenderDelegate/renderDelegate.cpp | 25 ++++-- .../render/vp2RenderDelegate/CMakeLists.txt | 77 ++++++++++++------- 2 files changed, 68 insertions(+), 34 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp b/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp index 51d0dbf6c9..035688fde1 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp @@ -36,6 +36,7 @@ #include #include +#include #include #include @@ -50,9 +51,9 @@ TF_DEFINE_ENV_SETTING( "This env tells the viewport to only draw glslfx UsdPreviewSurface shading networks."); TF_DEFINE_ENV_SETTING( - MAYAUSD_VP2_USE_STANDARDSURFACE_FALLBACK, + MAYAUSD_VP2_USE_LAMBERT_FALLBACK, false, - "This env flag allows setting the common fallback shader to the UsdPreviewSurface shader fragment."); + "This env flag allows forcing the fallback shaders to the legacy lambert shader fragments."); namespace { @@ -90,6 +91,20 @@ const MString kPointSizeParameterName = "pointSize"; //!< Shader parameter const MString kCurveBasisParameterName = "curveBasis"; //!< Shader parameter name const MString kStructOutputName = "outSurfaceFinal"; //!< Output struct name of the fallback shader +//! Returns a boolean of whether or not to use shader fragments using the default standardSurface material +bool UseStandardSurface() +{ + bool useStandardSurface = (MGlobal::executeCommandStringResult("defaultShaderName()") != "lambert1"); + if (TfGetEnvSetting(MAYAUSD_VP2_USE_LAMBERT_FALLBACK)) { + // Explicit request for legacy Lambert: + useStandardSurface = false; + } + return useStandardSurface; +} + +//! Boolean of whether or not to use shader fragments using the default standardSurface material +const bool _useStandardSurface = UseStandardSurface(); + //! Enum class for fallback shader types enum class FallbackShaderType { @@ -106,7 +121,7 @@ enum class FallbackShaderType constexpr size_t FallbackShaderTypeCount = static_cast(FallbackShaderType::kCount); //! Array of constant-color shader fragment names indexed by FallbackShaderType -const MString _fallbackShaderNames[] = { TfGetEnvSetting(MAYAUSD_VP2_USE_STANDARDSURFACE_FALLBACK) ? +const MString _fallbackShaderNames[] = { _useStandardSurface ? "FallbackShaderStandardSurface" : "FallbackShader", "BasisCurvesLinearFallbackShader", "BasisCurvesCubicFallbackShader", @@ -115,7 +130,7 @@ const MString _fallbackShaderNames[] = { TfGetEnvSetting(MAYAUSD_VP2_USE_STANDAR "PointsFallbackShader" }; //! Array of varying-color shader fragment names indexed by FallbackShaderType -const MString _cpvFallbackShaderNames[] = { TfGetEnvSetting(MAYAUSD_VP2_USE_STANDARDSURFACE_FALLBACK) ? +const MString _cpvFallbackShaderNames[] = { _useStandardSurface ? "FallbackCPVShaderStandardSurface" : "FallbackCPVShader", "BasisCurvesLinearCPVShader", "BasisCurvesCubicCPVShader", @@ -194,7 +209,7 @@ class MShaderCache final return; _3dDefaultMaterialShader - = TfGetEnvSetting(MAYAUSD_VP2_USE_STANDARDSURFACE_FALLBACK) ? + = _useStandardSurface ? shaderMgr->getStockShader(MHWRender::MShaderManager::k3dStandardSurfaceShader) : shaderMgr->getStockShader(MHWRender::MShaderManager::k3dDefaultMaterialShader); diff --git a/test/lib/mayaUsd/render/vp2RenderDelegate/CMakeLists.txt b/test/lib/mayaUsd/render/vp2RenderDelegate/CMakeLists.txt index ac458b55fa..f77b749618 100644 --- a/test/lib/mayaUsd/render/vp2RenderDelegate/CMakeLists.txt +++ b/test/lib/mayaUsd/render/vp2RenderDelegate/CMakeLists.txt @@ -1,7 +1,7 @@ # Unit test scripts. -set(TEST_SCRIPT_FILES "") +set(TEST_SCRIPT_FILES_LAMBERT "") -list(APPEND TEST_SCRIPT_FILES +list(APPEND TEST_SCRIPT_FILES_LAMBERT testVP2RenderDelegateDisplayColors.py testVP2RenderDelegateGeomSubset.py testVP2RenderDelegatePointInstanceOrientation.py @@ -20,46 +20,25 @@ list(APPEND TEST_SCRIPT_FILES ) if (MAYA_APP_VERSION VERSION_GREATER 2022) - list(APPEND TEST_SCRIPT_FILES + list(APPEND TEST_SCRIPT_FILES_LAMBERT testVP2RenderDelegateSelection.py testVP2RenderDelegateUsdSkel.py ) endif() if (MAYA_APP_VERSION VERSION_GREATER 2024) - list(APPEND TEST_SCRIPT_FILES + list(APPEND TEST_SCRIPT_FILES_LAMBERT testVP2RenderDelegateDrawModes.py ) endif() if(MAYA_CAMERA_GIZMO_SUPPORT) - list(APPEND TEST_SCRIPT_FILES + list(APPEND TEST_SCRIPT_FILES_LAMBERT testVP2RenderDelegateLights.py testVP2RenderDelegateCameras.py ) endif() -# Test standard surface shader with MAYAUSD_VP2_USE_STANDARDSURFACE_FALLBACK true -mayaUsd_get_unittest_target(target testVP2RenderDelegateDisplayColorsStandardSurface.py) -mayaUsd_add_test(${target} - INTERACTIVE - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - PYTHON_SCRIPT testVP2RenderDelegateDisplayColorsStandardSurface.py - ENV - "MAYA_PLUG_IN_PATH=${CMAKE_INSTALL_PREFIX}/lib/maya" - "LD_LIBRARY_PATH=${ADDITIONAL_LD_LIBRARY_PATH}" - "MAYA_LIGHTAPI_VERSION=${MAYA_LIGHTAPI_VERSION}" - - # Maya uses a very old version of GLEW, so we need support for - # pre-loading a newer version from elsewhere. - "LD_PRELOAD=${ADDITIONAL_LD_PRELOAD}" - - # Use the standard surface fallback to match maya 2024+ default material - "MAYAUSD_VP2_USE_STANDARDSURFACE_FALLBACK=true" -) -# Assign a CTest label to these tests for easy filtering. -set_property(TEST ${target} APPEND PROPERTY LABELS vp2RenderDelegate) - if (CMAKE_WANT_MATERIALX_BUILD) # We want modern OCIO for the MaterialX test: mayaUsd_get_unittest_target(target testVP2RenderDelegateMaterialX.py) @@ -77,6 +56,9 @@ if (CMAKE_WANT_MATERIALX_BUILD) # Maya uses a very old version of GLEW, so we need support for # pre-loading a newer version from elsewhere. "LD_PRELOAD=${ADDITIONAL_LD_PRELOAD}" + + # Legacy lambert tests will force the use of the lamber fallback shaders + "MAYAUSD_VP2_USE_LAMBERT_FALLBACK=true" ) # Assign a CTest label to these tests for easy filtering. @@ -100,6 +82,9 @@ if (CMAKE_WANT_MATERIALX_BUILD) # Specify we only want preview surface rendering: "MAYAUSD_VP2_USE_ONLY_PREVIEWSURFACE=1" + + # Legacy lambert tests will force the use of the lamber fallback shaders + "MAYAUSD_VP2_USE_LAMBERT_FALLBACK=true" ) # Assign a CTest label to these tests for easy filtering. @@ -107,18 +92,52 @@ if (CMAKE_WANT_MATERIALX_BUILD) endif() if(MAYA_MRENDERITEM_UFE_IDENTIFIER_SUPPORT) - list(APPEND TEST_SCRIPT_FILES + list(APPEND TEST_SCRIPT_FILES_LAMBERT testVP2RenderDelegateIsolateSelect.py ) endif() if (MAYA_HAS_DISPLAY_LAYER_API) - list(APPEND TEST_SCRIPT_FILES + list(APPEND TEST_SCRIPT_FILES_LAMBERT testVP2RenderDelegateDisplayLayers.py ) endif() -foreach(script ${TEST_SCRIPT_FILES}) +foreach(script ${TEST_SCRIPT_FILES_LAMBERT}) + mayaUsd_get_unittest_target(target ${script}) + mayaUsd_add_test(${target} + INTERACTIVE + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + PYTHON_SCRIPT ${script} + ENV + "MAYA_PLUG_IN_PATH=${CMAKE_INSTALL_PREFIX}/lib/maya" + "LD_LIBRARY_PATH=${ADDITIONAL_LD_LIBRARY_PATH}" + "MAYA_LIGHTAPI_VERSION=${MAYA_LIGHTAPI_VERSION}" + + # Maya uses a very old version of GLEW, so we need support for + # pre-loading a newer version from elsewhere. + "LD_PRELOAD=${ADDITIONAL_LD_PRELOAD}" + + # Used in detecting whether there is support for volume light gizmos + "UFE_VOLUME_LIGHTS_SUPPORT=${UFE_VOLUME_LIGHTS_SUPPORT}" + + # Legacy lambert tests will force the use of the lamber fallback shaders + "MAYAUSD_VP2_USE_LAMBERT_FALLBACK=true" + ) + + # Assign a CTest label to these tests for easy filtering. + set_property(TEST ${target} APPEND PROPERTY LABELS vp2RenderDelegate) +endforeach() + + +# Modern tests with maya 2024+ will use the standardSurface fallback vp2 shader fragments +set(TEST_SCRIPT_FILES_STANDARDSURFACE "") + +list(APPEND TEST_SCRIPT_FILES_STANDARDSURFACE + testVP2RenderDelegateDisplayColorsStandardSurface.py +) + +foreach(script ${TEST_SCRIPT_FILES_STANDARDSURFACE}) mayaUsd_get_unittest_target(target ${script}) mayaUsd_add_test(${target} INTERACTIVE From 5787a0bb77e5eb0e860a1d4bb77f784c4c68c320 Mon Sep 17 00:00:00 2001 From: Kenny Polonski Date: Thu, 17 Oct 2024 09:50:16 -0700 Subject: [PATCH 3/7] Rename function to better represent intentions --- lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp b/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp index 035688fde1..a20a5293c6 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp @@ -91,8 +91,8 @@ const MString kPointSizeParameterName = "pointSize"; //!< Shader parameter const MString kCurveBasisParameterName = "curveBasis"; //!< Shader parameter name const MString kStructOutputName = "outSurfaceFinal"; //!< Output struct name of the fallback shader -//! Returns a boolean of whether or not to use shader fragments using the default standardSurface material -bool UseStandardSurface() +//! Returns a boolean of whether or not we want the standardSurface shader fragment graph fallbacks +bool WantStandardSurfaceFallback() { bool useStandardSurface = (MGlobal::executeCommandStringResult("defaultShaderName()") != "lambert1"); if (TfGetEnvSetting(MAYAUSD_VP2_USE_LAMBERT_FALLBACK)) { @@ -103,7 +103,7 @@ bool UseStandardSurface() } //! Boolean of whether or not to use shader fragments using the default standardSurface material -const bool _useStandardSurface = UseStandardSurface(); +const bool _useStandardSurface = WantStandardSurfaceFallback(); //! Enum class for fallback shader types enum class FallbackShaderType From 790f75270026bab22c52170f9a7c1c698a56375c Mon Sep 17 00:00:00 2001 From: Kenny Polonski Date: Thu, 17 Oct 2024 18:15:53 -0700 Subject: [PATCH 4/7] Run clang-format --- .../vp2RenderDelegate/renderDelegate.cpp | 38 +++++++++---------- .../vp2ShaderFragments/shaderFragments.cpp | 16 +++++--- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp b/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp index a20a5293c6..df83aaeeb0 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp @@ -94,7 +94,8 @@ const MString kStructOutputName = "outSurfaceFinal"; //!< Output struct name of //! Returns a boolean of whether or not we want the standardSurface shader fragment graph fallbacks bool WantStandardSurfaceFallback() { - bool useStandardSurface = (MGlobal::executeCommandStringResult("defaultShaderName()") != "lambert1"); + bool useStandardSurface + = (MGlobal::executeCommandStringResult("defaultShaderName()") != "lambert1"); if (TfGetEnvSetting(MAYAUSD_VP2_USE_LAMBERT_FALLBACK)) { // Explicit request for legacy Lambert: useStandardSurface = false; @@ -121,22 +122,22 @@ enum class FallbackShaderType constexpr size_t FallbackShaderTypeCount = static_cast(FallbackShaderType::kCount); //! Array of constant-color shader fragment names indexed by FallbackShaderType -const MString _fallbackShaderNames[] = { _useStandardSurface ? - "FallbackShaderStandardSurface" : "FallbackShader", - "BasisCurvesLinearFallbackShader", - "BasisCurvesCubicFallbackShader", - "BasisCurvesCubicFallbackShader", - "BasisCurvesCubicFallbackShader", - "PointsFallbackShader" }; +const MString _fallbackShaderNames[] + = { _useStandardSurface ? "FallbackShaderStandardSurface" : "FallbackShader", + "BasisCurvesLinearFallbackShader", + "BasisCurvesCubicFallbackShader", + "BasisCurvesCubicFallbackShader", + "BasisCurvesCubicFallbackShader", + "PointsFallbackShader" }; //! Array of varying-color shader fragment names indexed by FallbackShaderType -const MString _cpvFallbackShaderNames[] = { _useStandardSurface ? - "FallbackCPVShaderStandardSurface" : "FallbackCPVShader", - "BasisCurvesLinearCPVShader", - "BasisCurvesCubicCPVShader", - "BasisCurvesCubicCPVShader", - "BasisCurvesCubicCPVShader", - "PointsFallbackCPVShader" }; +const MString _cpvFallbackShaderNames[] + = { _useStandardSurface ? "FallbackCPVShaderStandardSurface" : "FallbackCPVShader", + "BasisCurvesLinearCPVShader", + "BasisCurvesCubicCPVShader", + "BasisCurvesCubicCPVShader", + "BasisCurvesCubicCPVShader", + "PointsFallbackCPVShader" }; //! "curveBasis" parameter values for three different cubic curves const std::unordered_map _curveBasisParameterValueMapping @@ -208,10 +209,9 @@ class MShaderCache final if (!TF_VERIFY(shaderMgr)) return; - _3dDefaultMaterialShader - = _useStandardSurface ? - shaderMgr->getStockShader(MHWRender::MShaderManager::k3dStandardSurfaceShader) : - shaderMgr->getStockShader(MHWRender::MShaderManager::k3dDefaultMaterialShader); + _3dDefaultMaterialShader = _useStandardSurface + ? shaderMgr->getStockShader(MHWRender::MShaderManager::k3dStandardSurfaceShader) + : shaderMgr->getStockShader(MHWRender::MShaderManager::k3dDefaultMaterialShader); TF_VERIFY(_3dDefaultMaterialShader); diff --git a/lib/mayaUsd/render/vp2ShaderFragments/shaderFragments.cpp b/lib/mayaUsd/render/vp2ShaderFragments/shaderFragments.cpp index 2a3e7c1a7b..af3e94b9ff 100644 --- a/lib/mayaUsd/render/vp2ShaderFragments/shaderFragments.cpp +++ b/lib/mayaUsd/render/vp2ShaderFragments/shaderFragments.cpp @@ -170,12 +170,16 @@ static const TfTokenVector _FragmentNames = { _tokens->BasisCurvesCubicColorDoma _tokens->usdPreviewSurfaceLightingAPI3, _tokens->usdPreviewSurfaceCombiner }; -static const TfTokenVector _FragmentGraphNames - = { _tokens->BasisCurvesCubicCPVShader, _tokens->BasisCurvesCubicFallbackShader, - _tokens->BasisCurvesLinearCPVShader, _tokens->BasisCurvesLinearFallbackShader, - _tokens->FallbackCPVShader, _tokens->FallbackShader, - _tokens->FallbackCPVShaderStandardSurface, _tokens->FallbackShaderStandardSurface, - _tokens->PointsFallbackCPVShader, _tokens->PointsFallbackShader }; +static const TfTokenVector _FragmentGraphNames = { _tokens->BasisCurvesCubicCPVShader, + _tokens->BasisCurvesCubicFallbackShader, + _tokens->BasisCurvesLinearCPVShader, + _tokens->BasisCurvesLinearFallbackShader, + _tokens->FallbackCPVShader, + _tokens->FallbackShader, + _tokens->FallbackCPVShaderStandardSurface, + _tokens->FallbackShaderStandardSurface, + _tokens->PointsFallbackCPVShader, + _tokens->PointsFallbackShader }; namespace { //! Get the file path of the shader fragment. From fca6c8ae4dc28d92b78ca7530503852532e551bb Mon Sep 17 00:00:00 2001 From: Kenny Polonski Date: Mon, 28 Oct 2024 09:53:01 -0700 Subject: [PATCH 5/7] Generate fallback shader fragment name arrays after maya intialization --- .../vp2RenderDelegate/renderDelegate.cpp | 51 +++++++++++-------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp b/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp index df83aaeeb0..c677f58bc7 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/renderDelegate.cpp @@ -38,6 +38,8 @@ #include #include +#include +#include #include @@ -103,9 +105,6 @@ bool WantStandardSurfaceFallback() return useStandardSurface; } -//! Boolean of whether or not to use shader fragments using the default standardSurface material -const bool _useStandardSurface = WantStandardSurfaceFallback(); - //! Enum class for fallback shader types enum class FallbackShaderType { @@ -121,24 +120,6 @@ enum class FallbackShaderType //! Total number of fallback shader types constexpr size_t FallbackShaderTypeCount = static_cast(FallbackShaderType::kCount); -//! Array of constant-color shader fragment names indexed by FallbackShaderType -const MString _fallbackShaderNames[] - = { _useStandardSurface ? "FallbackShaderStandardSurface" : "FallbackShader", - "BasisCurvesLinearFallbackShader", - "BasisCurvesCubicFallbackShader", - "BasisCurvesCubicFallbackShader", - "BasisCurvesCubicFallbackShader", - "PointsFallbackShader" }; - -//! Array of varying-color shader fragment names indexed by FallbackShaderType -const MString _cpvFallbackShaderNames[] - = { _useStandardSurface ? "FallbackCPVShaderStandardSurface" : "FallbackCPVShader", - "BasisCurvesLinearCPVShader", - "BasisCurvesCubicCPVShader", - "BasisCurvesCubicCPVShader", - "BasisCurvesCubicCPVShader", - "PointsFallbackCPVShader" }; - //! "curveBasis" parameter values for three different cubic curves const std::unordered_map _curveBasisParameterValueMapping = { { FallbackShaderType::kBasisCurvesCubicBezier, 0 }, @@ -203,6 +184,24 @@ class MShaderCache final if (_isInitialized) return; + _useStandardSurface = WantStandardSurfaceFallback(); + + _fallbackShaderNames.append( + _useStandardSurface ? "FallbackShaderStandardSurface" : "FallbackShader"); + _fallbackShaderNames.append("BasisCurvesLinearFallbackShader"); + _fallbackShaderNames.append("BasisCurvesCubicFallbackShader"); + _fallbackShaderNames.append("BasisCurvesCubicFallbackShader"); + _fallbackShaderNames.append("BasisCurvesCubicFallbackShader"); + _fallbackShaderNames.append("PointsFallbackShader"); + + _cpvFallbackShaderNames.append( + _useStandardSurface ? "FallbackCPVShaderStandardSurface" : "FallbackCPVShader"); + _cpvFallbackShaderNames.append("BasisCurvesLinearCPVShader"); + _cpvFallbackShaderNames.append("BasisCurvesCubicCPVShader"); + _cpvFallbackShaderNames.append("BasisCurvesCubicCPVShader"); + _cpvFallbackShaderNames.append("BasisCurvesCubicCPVShader"); + _cpvFallbackShaderNames.append("PointsFallbackCPVShader"); + MHWRender::MRenderer* renderer = MHWRender::MRenderer::theRenderer(); const MHWRender::MShaderManager* shaderMgr = renderer ? renderer->getShaderManager() : nullptr; @@ -545,6 +544,16 @@ class MShaderCache final private: bool _isInitialized { false }; //!< Whether the shader cache is initialized + //! Boolean of whether or not to use shader fragments using the default + //! standardSurface material. + bool _useStandardSurface { false }; + + //! Array of constant-color shader fragment names indexed by FallbackShaderType + MStringArray _fallbackShaderNames; + + //! Array of varying-color shader fragment names indexed by FallbackShaderType + MStringArray _cpvFallbackShaderNames; + //! Shader registry used by fallback shaders MShaderMap _fallbackShaders[FallbackShaderTypeCount]; MShaderMap _3dSolidShaders; From cec4cd0659dd85fa73aed54209a2a6d3bc8a22c7 Mon Sep 17 00:00:00 2001 From: Kenny Polonski Date: Mon, 28 Oct 2024 10:32:25 -0700 Subject: [PATCH 6/7] Update license info for new files --- .../FallbackCPVShaderStandardSurface.xml | 2 +- .../FallbackShaderStandardSurface.xml | 2 +- .../render/vp2ShaderFragments/FloatToFloat3.xml | 17 +++++++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/mayaUsd/render/vp2ShaderFragments/FallbackCPVShaderStandardSurface.xml b/lib/mayaUsd/render/vp2ShaderFragments/FallbackCPVShaderStandardSurface.xml index 04e9a10c47..dcf0b32f99 100644 --- a/lib/mayaUsd/render/vp2ShaderFragments/FallbackCPVShaderStandardSurface.xml +++ b/lib/mayaUsd/render/vp2ShaderFragments/FallbackCPVShaderStandardSurface.xml @@ -1,6 +1,6 @@ Expands a float to a float3 array of all the same value. From 3db258984c7a87c7b2458c85a1849149407e71d0 Mon Sep 17 00:00:00 2001 From: Kenny Polonski Date: Thu, 21 Nov 2024 11:38:04 -0800 Subject: [PATCH 7/7] Skip standardSurface image test if maya version is less than 2024 --- ...stVP2RenderDelegateDisplayColorsStandardSurface.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/test/lib/mayaUsd/render/vp2RenderDelegate/testVP2RenderDelegateDisplayColorsStandardSurface.py b/test/lib/mayaUsd/render/vp2RenderDelegate/testVP2RenderDelegateDisplayColorsStandardSurface.py index 7401878353..6db20fe9e6 100644 --- a/test/lib/mayaUsd/render/vp2RenderDelegate/testVP2RenderDelegateDisplayColorsStandardSurface.py +++ b/test/lib/mayaUsd/render/vp2RenderDelegate/testVP2RenderDelegateDisplayColorsStandardSurface.py @@ -29,12 +29,13 @@ import ufe import os +import unittest class testVP2RenderDelegateDisplayColorsStandardSurface(imageUtils.ImageDiffingTestCase): """ - Tests imaging using the Viewport 2.0 render delegate when using per-instance - inherited data on instances. + Tests imaging using the Viewport 2.0 render delegate when the default + material is standardSurface. """ @classmethod @@ -79,7 +80,11 @@ def _StartTest(self, testName): globalSelection.clear() self.assertSnapshotClose('%s_unselected.png' % self._testName) - def testPerInstanceInheritedData(self): + @unittest.skipIf( + int(cmds.about(apiVersion=True)) < 20240000, + "Test scene with default standardSurface material is compatible with maya 2024 and up." + ) + def testStandardSurfaceShaderFragment(self): self._StartTest('ColorTestStandardSurface')