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

This commit is contained in:
AzaezelX 2019-10-23 20:38:13 -05:00
parent 92efdb0d86
commit ab613187ed
11 changed files with 38 additions and 31 deletions

View file

@ -117,7 +117,7 @@ void PBRConfigMapGLSL::processVert( Vector<ShaderComponent*> &componentList,
} }
// Material Info Flags -> Red ( Flags ) of Material Info Buffer. // Material Info Flags -> Red ( Flags ) of Material Info Buffer.
void DeferredMatInfoFlagsGLSL::processPix( Vector<ShaderComponent*> &componentList, const MaterialFeatureData &fd ) void MatInfoFlagsGLSL::processPix( Vector<ShaderComponent*> &componentList, const MaterialFeatureData &fd )
{ {
MultiLine *meta = new MultiLine; MultiLine *meta = new MultiLine;

View file

@ -47,7 +47,7 @@ public:
const MaterialFeatureData &fd ); const MaterialFeatureData &fd );
}; };
class DeferredMatInfoFlagsGLSL : public ShaderFeatureGLSL class MatInfoFlagsGLSL : public ShaderFeatureGLSL
{ {
public: public:
virtual String getName() { return "Deferred Shading: Mat Info Flags"; } virtual String getName() { return "Deferred Shading: Mat Info Flags"; }

View file

@ -89,16 +89,20 @@ void PBRConfigMapHLSL::processPix( Vector<ShaderComponent*> &componentList, cons
if (!metalness) metalness = new Var("metalness", "float"); if (!metalness) metalness = new Var("metalness", "float");
Var *smoothness = (Var*)LangElement::find("smoothness"); Var *smoothness = (Var*)LangElement::find("smoothness");
if (!smoothness) smoothness = new Var("smoothness", "float"); 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]) 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)); meta->addStatement(new GenOp(" @ = 1.0-@;\r\n", smoothness, smoothness));
}
if (!fd.features[MFT_isDeferred]) meta->addStatement(new GenOp(" @ = @.g;\r\n", new DecOp(ao), pbrConfig));
meta->addStatement(new GenOp(" @ = @.ggga;\r\n", pbrConfig, texOp)); meta->addStatement(new GenOp(" @ = @.a;\r\n", new DecOp(metalness), pbrConfig));
meta->addStatement(new GenOp(" @.bga = float3(@,@.g,@);\r\n", pbrConfig, smoothness, pbrConfig, metalness));
output = meta; output = meta;
} }
@ -137,8 +141,13 @@ void PBRConfigMapHLSL::processVert( Vector<ShaderComponent*> &componentList,
output = meta; 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. // Material Info Flags -> Red ( Flags ) of Material Info Buffer.
void DeferredMatInfoFlagsHLSL::processPix( Vector<ShaderComponent*> &componentList, const MaterialFeatureData &fd ) void MatInfoFlagsHLSL::processPix( Vector<ShaderComponent*> &componentList, const MaterialFeatureData &fd )
{ {
// search for material var // search for material var
Var* pbrConfig; Var* pbrConfig;

View file

@ -48,7 +48,7 @@ public:
const MaterialFeatureData &fd ); const MaterialFeatureData &fd );
}; };
class DeferredMatInfoFlagsHLSL : public ShaderFeatureHLSL class MatInfoFlagsHLSL : public ShaderFeatureHLSL
{ {
public: public:
virtual String getName() { return "Deferred Shading: Mat Info Flags"; } virtual String getName() { return "Deferred Shading: Mat Info Flags"; }
@ -56,7 +56,7 @@ public:
virtual void processPix( Vector<ShaderComponent*> &componentList, virtual void processPix( Vector<ShaderComponent*> &componentList,
const MaterialFeatureData &fd ); const MaterialFeatureData &fd );
virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const { return ShaderFeature::RenderTarget2; } virtual U32 getOutputTargets(const MaterialFeatureData& fd) const;
}; };
class PBRConfigVarsHLSL : public ShaderFeatureHLSL class PBRConfigVarsHLSL : public ShaderFeatureHLSL

View file

@ -44,9 +44,12 @@ ImplementFeatureType( MFT_DiffuseColor, MFG_Texture, 5.0f, true );
ImplementFeatureType( MFT_DiffuseVertColor, MFG_Texture, 6.0f, true ); ImplementFeatureType( MFT_DiffuseVertColor, MFG_Texture, 6.0f, true );
ImplementFeatureType( MFT_AlphaTest, MFG_Texture, 7.0f, true ); ImplementFeatureType( MFT_AlphaTest, MFG_Texture, 7.0f, true );
ImplementFeatureType(MFT_InvertSmoothness, U32(-1), -1, true); ImplementFeatureType(MFT_InvertSmoothness, U32(-1), -1, true);
ImplementFeatureType( MFT_GlowMap, MFG_Texture, 9.0f, true ); ImplementFeatureType( MFT_PBRConfigMap, MFG_Texture, 8.0f, false );
ImplementFeatureType( MFT_NormalMap, MFG_Texture, 10.0f, true ); ImplementFeatureType( MFT_PBRConfigVars, MFG_Texture, 8.0f, false );
ImplementFeatureType( MFT_DetailNormalMap, MFG_Texture, 11.0f, true ); 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_Imposter, U32(-1), -1, true );
ImplementFeatureType( MFT_AccuMap, MFG_PreLighting, 2.0f, true ); ImplementFeatureType( MFT_AccuMap, MFG_PreLighting, 2.0f, true );
@ -101,9 +104,6 @@ ImplementFeatureType( MFT_ImposterVert, MFG_PreTransform, 1.0, false );
// Deferred Shading // Deferred Shading
ImplementFeatureType( MFT_isDeferred, U32(-1), -1, true ); ImplementFeatureType( MFT_isDeferred, U32(-1), -1, true );
ImplementFeatureType( MFT_SkyBox, MFG_Transform, 1.0f, false ); 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_DeferredEmissive, MFG_Texture, 8.9f, false);
ImplementFeatureType( MFT_HardwareSkinning, MFG_Transform,-2.0, false ); ImplementFeatureType( MFT_HardwareSkinning, MFG_Transform,-2.0, false );

View file

@ -191,6 +191,6 @@ DeclareFeatureType( MFT_HardwareSkinning );
// Deferred Shading // Deferred Shading
DeclareFeatureType( MFT_isDeferred ); DeclareFeatureType( MFT_isDeferred );
DeclareFeatureType( MFT_SkyBox ); DeclareFeatureType( MFT_SkyBox );
DeclareFeatureType( MFT_DeferredMatInfoFlags ); DeclareFeatureType( MFT_MatInfoFlags );
DeclareFeatureType( MFT_DeferredEmissive ); DeclareFeatureType( MFT_DeferredEmissive );
#endif // _MATERIALFEATURETYPES_H_ #endif // _MATERIALFEATURETYPES_H_

View file

@ -492,7 +492,7 @@ void ProcessedMaterial::_setStageData()
mMaterial->mMetalMapFilename[i], mMaterial->mGlowMapFilename[i], mMaterial->mMetalMapFilename[i], mMaterial->mGlowMapFilename[i],
inputKey, profile)); inputKey, profile));
if (!mStages[i].getTex(MFT_PBRConfigMap)) 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);
} }
} }
} }

View file

@ -444,18 +444,14 @@ void ProcessedShaderMaterial::_determineFeatures( U32 stageNum,
if (mStages[stageNum].getTex(MFT_PBRConfigMap)) if (mStages[stageNum].getTex(MFT_PBRConfigMap))
{ {
fd.features.addFeature(MFT_PBRConfigMap); fd.features.addFeature(MFT_PBRConfigMap);
if (mStages[stageNum].getTex(MFT_PBRConfigMap)->mHasTransparency)
fd.features.addFeature(MFT_GlowMap);
} }
else else
fd.features.addFeature(MFT_PBRConfigVars); fd.features.addFeature(MFT_PBRConfigVars);
if( fd.features[ MFT_PBRConfigMap ] ) // Deferred Shading : Material Info Flags
{ fd.features.addFeature(MFT_MatInfoFlags);
// 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 );
}
if ( mMaterial->mAccuEnabled[stageNum] ) if ( mMaterial->mAccuEnabled[stageNum] )
{ {

View file

@ -638,12 +638,14 @@ void ProcessedDeferredMaterial::_determineFeatures( U32 stageNum,
if( mStages[stageNum].getTex( MFT_PBRConfigMap ) ) if( mStages[stageNum].getTex( MFT_PBRConfigMap ) )
{ {
newFeatures.addFeature( MFT_PBRConfigMap ); newFeatures.addFeature( MFT_PBRConfigMap );
if( mStages[stageNum].getTex( MFT_PBRConfigMap )->mHasTransparency )
newFeatures.addFeature( MFT_GlowMap );
} }
else else
newFeatures.addFeature( MFT_PBRConfigVars ); newFeatures.addFeature( MFT_PBRConfigVars );
// Deferred Shading : Material Info Flags // Deferred Shading : Material Info Flags
newFeatures.addFeature( MFT_DeferredMatInfoFlags ); newFeatures.addFeature( MFT_MatInfoFlags );
for ( U32 i=0; i < fd.features.getCount(); i++ ) for ( U32 i=0; i < fd.features.getCount(); i++ )
{ {

View file

@ -102,7 +102,7 @@ void _initShaderGenGLSL( ShaderGen *shaderGen )
FEATUREMGR->registerFeature( MFT_isDeferred, new NamedFeatureGLSL( "Deferred Material" ) ); FEATUREMGR->registerFeature( MFT_isDeferred, new NamedFeatureGLSL( "Deferred Material" ) );
FEATUREMGR->registerFeature( MFT_PBRConfigMap, new PBRConfigMapGLSL ); FEATUREMGR->registerFeature( MFT_PBRConfigMap, new PBRConfigMapGLSL );
FEATUREMGR->registerFeature( MFT_PBRConfigVars, new PBRConfigVarsGLSL ); 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_SkyBox, new NamedFeatureGLSL( "skybox" ) );
FEATUREMGR->registerFeature( MFT_HardwareSkinning, new HardwareSkinningFeatureGLSL ); FEATUREMGR->registerFeature( MFT_HardwareSkinning, new HardwareSkinningFeatureGLSL );
} }

View file

@ -104,7 +104,7 @@ void _initShaderGenHLSL( ShaderGen *shaderGen )
FEATUREMGR->registerFeature( MFT_isDeferred, new NamedFeatureHLSL( "Deferred Material" ) ); FEATUREMGR->registerFeature( MFT_isDeferred, new NamedFeatureHLSL( "Deferred Material" ) );
FEATUREMGR->registerFeature( MFT_PBRConfigMap, new PBRConfigMapHLSL); FEATUREMGR->registerFeature( MFT_PBRConfigMap, new PBRConfigMapHLSL);
FEATUREMGR->registerFeature( MFT_PBRConfigVars, new PBRConfigVarsHLSL); 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_DeferredEmissive, new DeferredEmissiveHLSL);
FEATUREMGR->registerFeature( MFT_SkyBox, new NamedFeatureHLSL( "skybox" ) ); FEATUREMGR->registerFeature( MFT_SkyBox, new NamedFeatureHLSL( "skybox" ) );
FEATUREMGR->registerFeature( MFT_HardwareSkinning, new HardwareSkinningFeatureHLSL ); FEATUREMGR->registerFeature( MFT_HardwareSkinning, new HardwareSkinningFeatureHLSL );