From 8fac88dadc150c4df5040b64a8b9714e98350535 Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Wed, 23 Oct 2019 20:38:13 -0500 Subject: [PATCH] more misc cleanup, including cutting down on sampling the pbrconfigmap by filling that out first, and drawing the smooth and metal vars from it, and filling out an ao var in case folks wanna use that later, as well as a bit more doubled up functionality prune-down. still tracing why forward lit seems to have lost the map config feature --- .../glsl/deferredShadingFeaturesGLSL.cpp | 2 +- .../glsl/deferredShadingFeaturesGLSL.h | 2 +- .../hlsl/deferredShadingFeaturesHLSL.cpp | 23 +++++++++++++------ .../hlsl/deferredShadingFeaturesHLSL.h | 6 ++--- .../source/materials/materialFeatureTypes.cpp | 12 +++++----- .../source/materials/materialFeatureTypes.h | 2 +- Engine/source/materials/processedMaterial.cpp | 2 +- .../materials/processedShaderMaterial.cpp | 12 ++++------ .../renderInstance/renderDeferredMgr.cpp | 4 +++- .../shaderGen/GLSL/shaderGenGLSLInit.cpp | 2 +- .../shaderGen/HLSL/shaderGenHLSLInit.cpp | 2 +- 11 files changed, 38 insertions(+), 31 deletions(-) diff --git a/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp b/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp index 354371ba4..a6a28ad4d 100644 --- a/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp +++ b/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp @@ -117,7 +117,7 @@ void PBRConfigMapGLSL::processVert( Vector &componentList, } // Material Info Flags -> Red ( Flags ) of Material Info Buffer. -void DeferredMatInfoFlagsGLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) +void MatInfoFlagsGLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) { MultiLine *meta = new MultiLine; diff --git a/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.h b/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.h index b2c0908fb..5e82d614e 100644 --- a/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.h +++ b/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.h @@ -47,7 +47,7 @@ public: const MaterialFeatureData &fd ); }; -class DeferredMatInfoFlagsGLSL : public ShaderFeatureGLSL +class MatInfoFlagsGLSL : public ShaderFeatureGLSL { public: virtual String getName() { return "Deferred Shading: Mat Info Flags"; } diff --git a/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp b/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp index b5b070f65..67c7de10e 100644 --- a/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp +++ b/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp @@ -89,16 +89,20 @@ void PBRConfigMapHLSL::processPix( Vector &componentList, cons if (!metalness) metalness = new Var("metalness", "float"); Var *smoothness = (Var*)LangElement::find("smoothness"); if (!smoothness) smoothness = new Var("smoothness", "float"); + Var* ao = (Var*)LangElement::find("ao"); + if (!ao) ao = new Var("ao", "float"); - meta->addStatement(new GenOp(" @ = @.r;\r\n", new DecOp(smoothness), texOp)); - meta->addStatement(new GenOp(" @ = @.b;\r\n", new DecOp(metalness), texOp)); + meta->addStatement(new GenOp(" @.bga = @.rgb;\r\n", pbrConfig, texOp)); + + meta->addStatement(new GenOp(" @ = @.b;\r\n", new DecOp(smoothness), pbrConfig)); if (fd.features[MFT_InvertSmoothness]) + { + meta->addStatement(new GenOp(" @.b = 1.0-@.b;\r\n", pbrConfig, pbrConfig)); meta->addStatement(new GenOp(" @ = 1.0-@;\r\n", smoothness, smoothness)); - - if (!fd.features[MFT_isDeferred]) - meta->addStatement(new GenOp(" @ = @.ggga;\r\n", pbrConfig, texOp)); - meta->addStatement(new GenOp(" @.bga = float3(@,@.g,@);\r\n", pbrConfig, smoothness, pbrConfig, metalness)); + } + meta->addStatement(new GenOp(" @ = @.g;\r\n", new DecOp(ao), pbrConfig)); + meta->addStatement(new GenOp(" @ = @.a;\r\n", new DecOp(metalness), pbrConfig)); output = meta; } @@ -137,8 +141,13 @@ void PBRConfigMapHLSL::processVert( Vector &componentList, output = meta; } +U32 MatInfoFlagsHLSL::getOutputTargets(const MaterialFeatureData& fd) const +{ + return fd.features[MFT_isDeferred] ? ShaderFeature::RenderTarget2 : ShaderFeature::DefaultTarget; +} + // Material Info Flags -> Red ( Flags ) of Material Info Buffer. -void DeferredMatInfoFlagsHLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) +void MatInfoFlagsHLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) { // search for material var Var* pbrConfig; diff --git a/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.h b/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.h index 2db329173..1a53f9679 100644 --- a/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.h +++ b/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.h @@ -48,15 +48,15 @@ public: const MaterialFeatureData &fd ); }; -class DeferredMatInfoFlagsHLSL : public ShaderFeatureHLSL +class MatInfoFlagsHLSL : public ShaderFeatureHLSL { public: virtual String getName() { return "Deferred Shading: Mat Info Flags"; } virtual void processPix( Vector &componentList, const MaterialFeatureData &fd ); - - virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const { return ShaderFeature::RenderTarget2; } + + virtual U32 getOutputTargets(const MaterialFeatureData& fd) const; }; class PBRConfigVarsHLSL : public ShaderFeatureHLSL diff --git a/Engine/source/materials/materialFeatureTypes.cpp b/Engine/source/materials/materialFeatureTypes.cpp index 4987020bf..5b325fc01 100644 --- a/Engine/source/materials/materialFeatureTypes.cpp +++ b/Engine/source/materials/materialFeatureTypes.cpp @@ -44,9 +44,12 @@ ImplementFeatureType( MFT_DiffuseColor, MFG_Texture, 5.0f, true ); ImplementFeatureType( MFT_DiffuseVertColor, MFG_Texture, 6.0f, true ); ImplementFeatureType( MFT_AlphaTest, MFG_Texture, 7.0f, true ); ImplementFeatureType(MFT_InvertSmoothness, U32(-1), -1, true); -ImplementFeatureType( MFT_GlowMap, MFG_Texture, 9.0f, true ); -ImplementFeatureType( MFT_NormalMap, MFG_Texture, 10.0f, true ); -ImplementFeatureType( MFT_DetailNormalMap, MFG_Texture, 11.0f, true ); +ImplementFeatureType( MFT_PBRConfigMap, MFG_Texture, 8.0f, false ); +ImplementFeatureType( MFT_PBRConfigVars, MFG_Texture, 8.0f, false ); +ImplementFeatureType( MFT_MatInfoFlags, MFG_Texture, 9.0f, false ); +ImplementFeatureType( MFT_GlowMap, MFG_Texture, 10.0f, true ); +ImplementFeatureType( MFT_NormalMap, MFG_Texture, 11.0f, true ); +ImplementFeatureType( MFT_DetailNormalMap, MFG_Texture, 12.0f, true ); ImplementFeatureType( MFT_Imposter, U32(-1), -1, true ); ImplementFeatureType( MFT_AccuMap, MFG_PreLighting, 2.0f, true ); @@ -101,9 +104,6 @@ ImplementFeatureType( MFT_ImposterVert, MFG_PreTransform, 1.0, false ); // Deferred Shading ImplementFeatureType( MFT_isDeferred, U32(-1), -1, true ); ImplementFeatureType( MFT_SkyBox, MFG_Transform, 1.0f, false ); -ImplementFeatureType( MFT_PBRConfigMap, MFG_Texture, 8.2f, false ); -ImplementFeatureType( MFT_PBRConfigVars, MFG_Texture, 8.5f, false ); -ImplementFeatureType( MFT_DeferredMatInfoFlags, MFG_Texture, 8.7f, false ); ImplementFeatureType( MFT_DeferredEmissive, MFG_Texture, 8.9f, false); ImplementFeatureType( MFT_HardwareSkinning, MFG_Transform,-2.0, false ); diff --git a/Engine/source/materials/materialFeatureTypes.h b/Engine/source/materials/materialFeatureTypes.h index 5b83a64bc..0fd3f361d 100644 --- a/Engine/source/materials/materialFeatureTypes.h +++ b/Engine/source/materials/materialFeatureTypes.h @@ -191,6 +191,6 @@ DeclareFeatureType( MFT_HardwareSkinning ); // Deferred Shading DeclareFeatureType( MFT_isDeferred ); DeclareFeatureType( MFT_SkyBox ); -DeclareFeatureType( MFT_DeferredMatInfoFlags ); +DeclareFeatureType( MFT_MatInfoFlags ); DeclareFeatureType( MFT_DeferredEmissive ); #endif // _MATERIALFEATURETYPES_H_ diff --git a/Engine/source/materials/processedMaterial.cpp b/Engine/source/materials/processedMaterial.cpp index c676c7eb5..60b4e6114 100644 --- a/Engine/source/materials/processedMaterial.cpp +++ b/Engine/source/materials/processedMaterial.cpp @@ -492,7 +492,7 @@ void ProcessedMaterial::_setStageData() mMaterial->mMetalMapFilename[i], mMaterial->mGlowMapFilename[i], inputKey, profile)); if (!mStages[i].getTex(MFT_PBRConfigMap)) - mMaterial->logError("Failed to load specular map %s for stage %i", _getTexturePath(mMaterial->mPBRConfigMapFilename[i]).c_str(), i); + mMaterial->logError("Failed to load PBR Config map %s for stage %i", _getTexturePath(mMaterial->mPBRConfigMapFilename[i]).c_str(), i); } } } diff --git a/Engine/source/materials/processedShaderMaterial.cpp b/Engine/source/materials/processedShaderMaterial.cpp index d3d25d346..a427ce8bf 100644 --- a/Engine/source/materials/processedShaderMaterial.cpp +++ b/Engine/source/materials/processedShaderMaterial.cpp @@ -444,18 +444,14 @@ void ProcessedShaderMaterial::_determineFeatures( U32 stageNum, if (mStages[stageNum].getTex(MFT_PBRConfigMap)) { fd.features.addFeature(MFT_PBRConfigMap); + if (mStages[stageNum].getTex(MFT_PBRConfigMap)->mHasTransparency) + fd.features.addFeature(MFT_GlowMap); } else fd.features.addFeature(MFT_PBRConfigVars); - if( fd.features[ MFT_PBRConfigMap ] ) - { - // Check for an alpha channel on the PBR Config map. If it has one (and it - // has values less than 255) than the artist has put the glow map into - // the alpha channel. - if( mStages[stageNum].getTex( MFT_PBRConfigMap )->mHasTransparency ) - fd.features.addFeature( MFT_GlowMap ); - } + // Deferred Shading : Material Info Flags + fd.features.addFeature(MFT_MatInfoFlags); if ( mMaterial->mAccuEnabled[stageNum] ) { diff --git a/Engine/source/renderInstance/renderDeferredMgr.cpp b/Engine/source/renderInstance/renderDeferredMgr.cpp index f3222839a..d6ef29de7 100644 --- a/Engine/source/renderInstance/renderDeferredMgr.cpp +++ b/Engine/source/renderInstance/renderDeferredMgr.cpp @@ -638,12 +638,14 @@ void ProcessedDeferredMaterial::_determineFeatures( U32 stageNum, if( mStages[stageNum].getTex( MFT_PBRConfigMap ) ) { newFeatures.addFeature( MFT_PBRConfigMap ); + if( mStages[stageNum].getTex( MFT_PBRConfigMap )->mHasTransparency ) + newFeatures.addFeature( MFT_GlowMap ); } else newFeatures.addFeature( MFT_PBRConfigVars ); // Deferred Shading : Material Info Flags - newFeatures.addFeature( MFT_DeferredMatInfoFlags ); + newFeatures.addFeature( MFT_MatInfoFlags ); for ( U32 i=0; i < fd.features.getCount(); i++ ) { diff --git a/Engine/source/shaderGen/GLSL/shaderGenGLSLInit.cpp b/Engine/source/shaderGen/GLSL/shaderGenGLSLInit.cpp index 63cf17564..3df67d48b 100644 --- a/Engine/source/shaderGen/GLSL/shaderGenGLSLInit.cpp +++ b/Engine/source/shaderGen/GLSL/shaderGenGLSLInit.cpp @@ -102,7 +102,7 @@ void _initShaderGenGLSL( ShaderGen *shaderGen ) FEATUREMGR->registerFeature( MFT_isDeferred, new NamedFeatureGLSL( "Deferred Material" ) ); FEATUREMGR->registerFeature( MFT_PBRConfigMap, new PBRConfigMapGLSL ); FEATUREMGR->registerFeature( MFT_PBRConfigVars, new PBRConfigVarsGLSL ); - FEATUREMGR->registerFeature( MFT_DeferredMatInfoFlags, new DeferredMatInfoFlagsGLSL ); + FEATUREMGR->registerFeature( MFT_MatInfoFlags, new MatInfoFlagsGLSL ); FEATUREMGR->registerFeature( MFT_SkyBox, new NamedFeatureGLSL( "skybox" ) ); FEATUREMGR->registerFeature( MFT_HardwareSkinning, new HardwareSkinningFeatureGLSL ); } diff --git a/Engine/source/shaderGen/HLSL/shaderGenHLSLInit.cpp b/Engine/source/shaderGen/HLSL/shaderGenHLSLInit.cpp index 68a69445f..28f5cde5a 100644 --- a/Engine/source/shaderGen/HLSL/shaderGenHLSLInit.cpp +++ b/Engine/source/shaderGen/HLSL/shaderGenHLSLInit.cpp @@ -104,7 +104,7 @@ void _initShaderGenHLSL( ShaderGen *shaderGen ) FEATUREMGR->registerFeature( MFT_isDeferred, new NamedFeatureHLSL( "Deferred Material" ) ); FEATUREMGR->registerFeature( MFT_PBRConfigMap, new PBRConfigMapHLSL); FEATUREMGR->registerFeature( MFT_PBRConfigVars, new PBRConfigVarsHLSL); - FEATUREMGR->registerFeature( MFT_DeferredMatInfoFlags, new DeferredMatInfoFlagsHLSL ); + FEATUREMGR->registerFeature( MFT_MatInfoFlags, new MatInfoFlagsHLSL ); FEATUREMGR->registerFeature( MFT_DeferredEmissive, new DeferredEmissiveHLSL); FEATUREMGR->registerFeature( MFT_SkyBox, new NamedFeatureHLSL( "skybox" ) ); FEATUREMGR->registerFeature( MFT_HardwareSkinning, new HardwareSkinningFeatureHLSL );