diff --git a/python/IECoreDelightTest/ShaderNetworkAlgoTest.py b/python/IECoreDelightTest/ShaderNetworkAlgoTest.py index 4f5295b903c..65724ae0093 100644 --- a/python/IECoreDelightTest/ShaderNetworkAlgoTest.py +++ b/python/IECoreDelightTest/ShaderNetworkAlgoTest.py @@ -129,9 +129,10 @@ def testConvertUSDOpacity( self ) : # # https://github.com/usd-wg/assets/tree/main/test_assets/AlphaBlendModeTest # - # > Note : the leftmost texture is incorrect, because USD expects the texture - # > (which has unpremultiplied alpha) to be loaded unmodified, but OIIO/Cycles - # > appear to premultiply it during loading. + # > Note : the "cutoff" positions are incorrect, because 3Delight's colorspace + # > transformation of the sRGB PNG textures also affects their alpha channel. + # > Loading these textures with `sourceColorSpace`=`raw` results in the correct + # > cutoff positions. for opacity in ( 0.25, 1.0, None ) : for opacityThreshold in ( 0.0, 0.5, None ) : @@ -184,7 +185,7 @@ def testConvertUSDOpacity( self ) : ) for c in "XYZ" : multiplyInput = convertedNetwork.input( ( "previewSurfaceOpacityMultiply", "input2{}".format( c ) ) ) - self.assertEqual( multiplyInput, "previewSurfaceOpacityCompare" ) + self.assertEqual( multiplyInput, ( "previewSurfaceOpacityCompare", "success" ) ) self.assertEqual( convertedNetwork.input( ( "previewSurfaceOpacityCompare", "a" ) ), diff --git a/src/IECoreDelight/ShaderNetworkAlgo.cpp b/src/IECoreDelight/ShaderNetworkAlgo.cpp index 29b46d5d14c..e07e0c4f26e 100644 --- a/src/IECoreDelight/ShaderNetworkAlgo.cpp +++ b/src/IECoreDelight/ShaderNetworkAlgo.cpp @@ -470,6 +470,7 @@ const InternedString g_specularColorDelightParameter( "specular_color" ); const InternedString g_specularIORParameter( "specular_IOR" ); const InternedString g_specularRoughnessParameter( "specular_roughness" ); const InternedString g_stParameter( "st" ); +const InternedString g_successParameter( "success" ); const InternedString g_textureFileParameter( "texture:file" ); const InternedString g_textureFormatParameter( "texture:format" ); const InternedString g_textureOutputParameter( "outColor" ); @@ -845,9 +846,9 @@ void convertUSDShaders( ShaderNetwork *shaderNetwork ) ShaderPtr multiplyShader = new Shader( "multiplyDivide" ); const InternedString multiplyHandle = shaderNetwork->addShader( handle.string() + "OpacityMultiply", std::move( multiplyShader ) ); shaderNetwork->addConnection( ShaderNetwork::Connection( opacityInput, { multiplyHandle, g_input1Parameter } ) ); - shaderNetwork->addConnection( ShaderNetwork::Connection( compareHandle, { multiplyHandle, g_input2XParameter } ) ); - shaderNetwork->addConnection( ShaderNetwork::Connection( compareHandle, { multiplyHandle, g_input2YParameter } ) ); - shaderNetwork->addConnection( ShaderNetwork::Connection( compareHandle, { multiplyHandle, g_input2ZParameter } ) ); + shaderNetwork->addConnection( ShaderNetwork::Connection( { compareHandle, g_successParameter }, { multiplyHandle, g_input2XParameter } ) ); + shaderNetwork->addConnection( ShaderNetwork::Connection( { compareHandle, g_successParameter }, { multiplyHandle, g_input2YParameter } ) ); + shaderNetwork->addConnection( ShaderNetwork::Connection( { compareHandle, g_successParameter }, { multiplyHandle, g_input2ZParameter } ) ); shaderNetwork->removeConnection( ShaderNetwork::Connection( opacityInput, { handle, g_opacityParameter } ) ); shaderNetwork->addConnection( ShaderNetwork::Connection( { multiplyHandle, g_oOutputParameter }, { handle, g_opacityParameter } ) ); }