diff --git a/source/MaterialXRenderOsl/OslRenderer.cpp b/source/MaterialXRenderOsl/OslRenderer.cpp index 51b3075ed8..bd0eaa1af6 100644 --- a/source/MaterialXRenderOsl/OslRenderer.cpp +++ b/source/MaterialXRenderOsl/OslRenderer.cpp @@ -111,6 +111,7 @@ void OslRenderer::renderOSL(const FilePath& dirPath, const string& shaderName, c const string INPUT_SHADER_PARAMETER_OVERRIDES("%input_shader_parameter_overrides%"); const string INPUT_SHADER_OUTPUT_STRING("%input_shader_output%"); const string BACKGROUND_COLOR_STRING("%background_color%"); + const string OBJ_PATH_STRING("%obj_path%"); StringMap replacementMap; replacementMap[OUTPUT_SHADER_TYPE_STRING] = outputShader; @@ -128,6 +129,7 @@ void OslRenderer::renderOSL(const FilePath& dirPath, const string& shaderName, c } replacementMap[INPUT_SHADER_PARAMETER_OVERRIDES] = overrideString; replacementMap[ENVIRONMENT_SHADER_PARAMETER_OVERRIDES] = envOverrideString; + replacementMap[OBJ_PATH_STRING] = _objPath; replacementMap[INPUT_SHADER_OUTPUT_STRING] = outputName; replacementMap[BACKGROUND_COLOR_STRING] = std::to_string(DEFAULT_SCREEN_COLOR_LIN_REC709[0]) + " " + std::to_string(DEFAULT_SCREEN_COLOR_LIN_REC709[1]) + " " + @@ -244,6 +246,7 @@ void OslRenderer::renderOSLNetwork(const FilePath& dirPath, const string& shader const string ENVIRONMENT_SHADER_PARAMETER_OVERRIDES("%environment_shader_parameter_overrides%"); const string BACKGROUND_COLOR_STRING("%background_color%"); const string OSL_COMMANDS("%oslCmd%"); + const string OBJ_PATH_STRING("%obj_path%"); StringMap replacementMap; @@ -254,6 +257,7 @@ void OslRenderer::renderOSLNetwork(const FilePath& dirPath, const string& shader } replacementMap[ENVIRONMENT_SHADER_PARAMETER_OVERRIDES] = envOverrideString; replacementMap[OSL_COMMANDS] = _oslCmdStr; + replacementMap[OBJ_PATH_STRING] = _objPath; replacementMap[BACKGROUND_COLOR_STRING] = std::to_string(DEFAULT_SCREEN_COLOR_LIN_REC709[0]) + " " + std::to_string(DEFAULT_SCREEN_COLOR_LIN_REC709[1]) + " " + std::to_string(DEFAULT_SCREEN_COLOR_LIN_REC709[2]); diff --git a/source/MaterialXRenderOsl/OslRenderer.h b/source/MaterialXRenderOsl/OslRenderer.h index 6275a366b4..353617e4b0 100644 --- a/source/MaterialXRenderOsl/OslRenderer.h +++ b/source/MaterialXRenderOsl/OslRenderer.h @@ -134,6 +134,13 @@ class MX_RENDEROSL_API OslRenderer : public ShaderRenderer _envOslShaderParameterOverrides = parameterOverrides; } + /// Set shader parameter string to be added to the scene XML file. These + /// strings will set the obj path used in the scene. + void setObjPath(const string& objPath) + { + _objPath = objPath; + } + /// Set the OSL shader output. /// This is used during render validation if "testshade" or "testrender" is executed. /// For testrender this value is used to replace the %shader_output% token in the @@ -265,6 +272,7 @@ class MX_RENDEROSL_API OslRenderer : public ShaderRenderer string _oslShaderName; StringVec _oslShaderParameterOverrides; StringVec _envOslShaderParameterOverrides; + string _objPath; string _oslShaderOutputName; string _oslShaderOutputType; FilePath _oslUtilityOSOPath; diff --git a/source/MaterialXTest/MaterialXRenderGlsl/RenderGlsl.cpp b/source/MaterialXTest/MaterialXRenderGlsl/RenderGlsl.cpp index e28931803c..7b6bf3fea7 100644 --- a/source/MaterialXTest/MaterialXRenderGlsl/RenderGlsl.cpp +++ b/source/MaterialXTest/MaterialXRenderGlsl/RenderGlsl.cpp @@ -262,11 +262,8 @@ bool GlslShaderRenderTester::runRenderer(const std::string& shaderName, if (!geomHandler->hasGeometry(geomPath)) { - // For test sphere and plane geometry perform a V-flip of texture coordinates. - const std::string baseName = geomPath.getBaseName(); - bool texcoordVerticalFlip = baseName == "sphere.obj" || baseName == "plane.obj"; geomHandler->clearGeometry(); - geomHandler->loadGeometry(geomPath, texcoordVerticalFlip); + geomHandler->loadGeometry(geomPath); for (mx::MeshPtr mesh : geomHandler->getMeshes()) { addAdditionalTestStreams(mesh); diff --git a/source/MaterialXTest/MaterialXRenderMsl/RenderMsl.mm b/source/MaterialXTest/MaterialXRenderMsl/RenderMsl.mm index 82ff81b96a..332fbf9ffb 100644 --- a/source/MaterialXTest/MaterialXRenderMsl/RenderMsl.mm +++ b/source/MaterialXTest/MaterialXRenderMsl/RenderMsl.mm @@ -269,11 +269,8 @@ bool runRenderer(const std::string& shaderName, if (!geomHandler->hasGeometry(geomPath)) { - // For test sphere and plane geometry perform a V-flip of texture coordinates. - const std::string baseName = geomPath.getBaseName(); - bool texcoordVerticalFlip = baseName == "sphere.obj" || baseName == "plane.obj"; geomHandler->clearGeometry(); - geomHandler->loadGeometry(geomPath, texcoordVerticalFlip); + geomHandler->loadGeometry(geomPath); for (mx::MeshPtr mesh : geomHandler->getMeshes()) { addAdditionalTestStreams(mesh); diff --git a/source/MaterialXTest/MaterialXRenderOsl/RenderOsl.cpp b/source/MaterialXTest/MaterialXRenderOsl/RenderOsl.cpp index 42ab9aee9c..bb3d4f18c5 100644 --- a/source/MaterialXTest/MaterialXRenderOsl/RenderOsl.cpp +++ b/source/MaterialXTest/MaterialXRenderOsl/RenderOsl.cpp @@ -20,60 +20,6 @@ namespace mx = MaterialX; -namespace -{ - -// -// Define local overrides for the tangent frame in shader generation, aligning conventions -// between MaterialXRender and testrender. -// - -class TangentOsl : public mx::ShaderNodeImpl -{ - public: - static mx::ShaderNodeImplPtr create() - { - return std::make_shared(); - } - - void emitFunctionCall(const mx::ShaderNode& node, mx::GenContext& context, mx::ShaderStage& stage) const override - { - const mx::ShaderGenerator& shadergen = context.getShaderGenerator(); - - DEFINE_SHADER_STAGE(stage, mx::Stage::PIXEL) - { - shadergen.emitLineBegin(stage); - shadergen.emitOutput(node.getOutput(), true, false, context, stage); - shadergen.emitString(" = normalize(vector(N[2], 0, -N[0]))", stage); - shadergen.emitLineEnd(stage); - } - } -}; - -class BitangentOsl : public mx::ShaderNodeImpl -{ - public: - static mx::ShaderNodeImplPtr create() - { - return std::make_shared(); - } - - void emitFunctionCall(const mx::ShaderNode& node, mx::GenContext& context, mx::ShaderStage& stage) const override - { - const mx::ShaderGenerator& shadergen = context.getShaderGenerator(); - - DEFINE_SHADER_STAGE(stage, mx::Stage::PIXEL) - { - shadergen.emitLineBegin(stage); - shadergen.emitOutput(node.getOutput(), true, false, context, stage); - shadergen.emitString(" = normalize(cross(N, vector(N[2], 0, -N[0])))", stage); - shadergen.emitLineEnd(stage); - } - } -}; - -} // anonymous namespace - class OslShaderRenderTester : public RenderUtil::ShaderRenderTester { public: @@ -106,9 +52,9 @@ class OslShaderRenderTester : public RenderUtil::ShaderRenderTester void addSkipFiles() override { _skipFiles.insert("standard_surface_onyx_hextiled.mtlx"); + _skipFiles.insert("hextiled.mtlx"); if (_useOslCmdStr) { - _skipFiles.insert("hextiled.mtlx"); _skipFiles.insert("filename_cm_test.mtlx"); _skipFiles.insert("shader_ops.mtlx"); _skipFiles.insert("chiang_hair_surfaceshader.mtlx"); @@ -203,7 +149,7 @@ bool OslShaderRenderTester::runRenderer(const std::string& shaderName, std::ostream& log, const GenShaderUtil::TestSuiteOptions& testOptions, RenderUtil::RenderProfileTimes& profileTimes, - const mx::FileSearchPath&, + const mx::FileSearchPath& searchPath, const std::string& outputPath, mx::ImageVec* imageVec) { @@ -233,10 +179,6 @@ bool OslShaderRenderTester::runRenderer(const std::string& shaderName, contextOptions.targetColorSpaceOverride = "lin_rec709"; contextOptions.oslConnectCiWrapper = true; - // Apply local overrides for shader generation. - shadergen.registerImplementation("IM_tangent_vector3_" + mx::OslShaderGenerator::TARGET, TangentOsl::create); - shadergen.registerImplementation("IM_bitangent_vector3_" + mx::OslShaderGenerator::TARGET, BitangentOsl::create); - shader = shadergen.generate(shaderName, element, context); } catch (mx::Exception& e) @@ -301,15 +243,22 @@ bool OslShaderRenderTester::runRenderer(const std::string& shaderName, const mx::ShaderStage& stage = shader->getStage(mx::Stage::PIXEL); - // Bind IBL image name overrides. + // Bind IBL image name overrides - use the searchPath to generate complete + // paths this makes the resolved test template relocatable and easier to debug + mx::FilePath envmapPath = searchPath.find(mx::FilePath(testOptions.radianceIBLPath)); mx::StringVec envOverrides; std::string envmap_filename("string envmap_filename \""); - envmap_filename += testOptions.radianceIBLPath; + envmap_filename += envmapPath.asString(); envmap_filename += "\";\n"; envOverrides.push_back(envmap_filename); _renderer->setEnvShaderParameterOverrides(envOverrides); + // Set the OBJ path to render + mx::FilePath resourcesPath = searchPath.find(mx::FilePath("resources")); + mx::FilePath objPath = resourcesPath / "Geometry" / testOptions.renderGeometry; + _renderer->setObjPath(objPath); + const mx::VariableBlock& outputs = stage.getOutputBlock(mx::OSL::OUTPUTS); if (outputs.size() > 0) { @@ -334,9 +283,7 @@ bool OslShaderRenderTester::runRenderer(const std::string& shaderName, } // Set scene template file. For now we only have the constant color scene file - mx::FileSearchPath searchPath = mx::getDefaultDataSearchPath(); - mx::FilePath sceneTemplatePath = searchPath.find("resources/Utilities/"); - sceneTemplatePath = sceneTemplatePath / sceneTemplateFile; + mx::FilePath sceneTemplatePath = resourcesPath/ "Utilities" / sceneTemplateFile; _renderer->setOslTestRenderSceneTemplateFile(sceneTemplatePath.asString()); // Validate rendering diff --git a/source/MaterialXTest/MaterialXRenderOsl/Utilities/scene_template.xml b/source/MaterialXTest/MaterialXRenderOsl/Utilities/scene_template.xml index 87db0dac2e..f513421024 100644 --- a/source/MaterialXTest/MaterialXRenderOsl/Utilities/scene_template.xml +++ b/source/MaterialXTest/MaterialXRenderOsl/Utilities/scene_template.xml @@ -34,5 +34,5 @@ connect inputShader.%input_shader_output% outputShader.%output_shader_input%; - + diff --git a/source/MaterialXTest/MaterialXRenderOsl/Utilities/scene_template_oslcmd.xml b/source/MaterialXTest/MaterialXRenderOsl/Utilities/scene_template_oslcmd.xml index 4451bb7853..7b47779898 100644 --- a/source/MaterialXTest/MaterialXRenderOsl/Utilities/scene_template_oslcmd.xml +++ b/source/MaterialXTest/MaterialXRenderOsl/Utilities/scene_template_oslcmd.xml @@ -22,5 +22,5 @@ %oslCmd% - +