From 29a8d5d36ccefca99cd3795d9713aa3b9f6c49fc Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Tue, 17 Dec 2019 19:26:47 -0600 Subject: [PATCH] backend support for isSRGB and invSmooth flags, general cleanup HLSL side. left GLSL alone for sxs comparrison while we work out the kinks --- .../source/terrain/hlsl/terrFeatureHLSL.cpp | 31 +++++++++---------- Engine/source/terrain/terrCellMaterial.cpp | 8 ++++- Engine/source/terrain/terrMaterial.h | 4 +++ 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp b/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp index 3650aa5f6..63d342a8a 100644 --- a/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp +++ b/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp @@ -1112,11 +1112,9 @@ void TerrainAdditiveFeatHLSL::processPix( Vector &componentLis const MaterialFeatureData &fd ) { Var *color = NULL; - Var *normal = NULL; if (fd.features[MFT_isDeferred]) { color = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget1) ); - normal = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::DefaultTarget) ); } else color = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::DefaultTarget) ); @@ -1130,9 +1128,6 @@ void TerrainAdditiveFeatHLSL::processPix( Vector &componentLis meta->addStatement( new GenOp( " clip( @ - 0.0001 );\r\n", blendTotal ) ); meta->addStatement( new GenOp( " @.a = @;\r\n", color, blendTotal ) ); - if (normal) - meta->addStatement(new GenOp(" @.a = @;\r\n", normal, blendTotal)); - output = meta; } @@ -1268,22 +1263,22 @@ void TerrainCompositeMapFeatHLSL::processPix(Vector &component texOp = new GenOp("@.Sample(@, @.xy)", compositeMapTex, compositeMap, inDet); // search for material var - Var *material; + Var * pbrConfig; OutputTarget targ = RenderTarget1; if (fd.features[MFT_isDeferred]) { targ = RenderTarget2; } - material = (Var*)LangElement::find(getOutputTargetVarName(targ)); + pbrConfig = (Var*)LangElement::find(getOutputTargetVarName(targ)); MultiLine * meta = new MultiLine; - if (!material) + if (!pbrConfig) { // create color var - material = new Var; - material->setType("fragout"); - material->setName(getOutputTargetVarName(targ)); - material->setStructName("OUT"); + pbrConfig = new Var; + pbrConfig->setType("fragout"); + pbrConfig->setName(getOutputTargetVarName(targ)); + pbrConfig->setStructName("OUT"); } Var *detailBlend = (Var*)LangElement::find(String::ToString("detailBlend%d", compositeIndex)); @@ -1295,15 +1290,19 @@ void TerrainCompositeMapFeatHLSL::processPix(Vector &component Var *priorComp = (Var*)LangElement::find(String::ToString("matinfoCol%d", compositeIndex - 1)); if (priorComp) { - meta->addStatement(new GenOp(" @ = @.grb*@;\r\n", new DecOp(matinfoCol), texOp, detailBlend)); - meta->addStatement(new GenOp(" @.gba += @;\r\n", material, matinfoCol)); + meta->addStatement(new GenOp(" @ = @.rgb*@;\r\n", new DecOp(matinfoCol), texOp, detailBlend)); + meta->addStatement(new GenOp(" @.bga += @;\r\n", pbrConfig, matinfoCol)); } else { - meta->addStatement(new GenOp(" @ = lerp(float3(1,0,0),@.grb,@);\r\n", new DecOp(matinfoCol), texOp, detailBlend)); - meta->addStatement(new GenOp(" @ = float4(0.0,@);\r\n", material, matinfoCol)); + meta->addStatement(new GenOp(" @ = lerp(float3(0,1,0),@.rgb,@);\r\n", new DecOp(matinfoCol), texOp, detailBlend)); + meta->addStatement(new GenOp(" @ = float4(0.0,@);\r\n", pbrConfig, matinfoCol)); } + if (!fd.features[MFT_InvertSmoothness]) + { + meta->addStatement(new GenOp(" @.b = 1.0-@.b;\r\n", pbrConfig, pbrConfig)); + } output = meta; } diff --git a/Engine/source/terrain/terrCellMaterial.cpp b/Engine/source/terrain/terrCellMaterial.cpp index 7b699b22d..66ecfb4c2 100644 --- a/Engine/source/terrain/terrCellMaterial.cpp +++ b/Engine/source/terrain/terrCellMaterial.cpp @@ -445,6 +445,8 @@ bool TerrainCellMaterial::_createPass( Vector *materials, features.addFeature(MFT_TerrainCompositeMap, featureIndex); features.removeFeature(MFT_DeferredTerrainBlankInfoMap); } + if (mat->getInvertSmoothness()) + features.addFeature(MFT_InvertSmoothness); pass->materials.push_back( (*materials)[i] ); normalMaps.increment(); @@ -640,8 +642,12 @@ bool TerrainCellMaterial::_createPass( Vector *materials, matInfo->compositeTexConst = pass->shader->getShaderConstHandle(avar("$compositeMap%d", i)); if (matInfo->compositeTexConst->isValid()) { + GFXTextureProfile* profile = &GFXStaticTextureProfile; + if (matInfo->mat->getIsSRGB()) + profile = &GFXStaticTextureSRGBProfile; + matInfo->compositeTex.set(matInfo->mat->getCompositeMap(), - &GFXStaticTextureProfile, "TerrainCellMaterial::_createPass() - CompositeMap"); + profile, "TerrainCellMaterial::_createPass() - CompositeMap"); const S32 sampler = matInfo->compositeTexConst->getSamplerRegister(); desc.samplers[sampler] = GFXSamplerStateDesc::getWrapLinear(); diff --git a/Engine/source/terrain/terrMaterial.h b/Engine/source/terrain/terrMaterial.h index b96c37cea..573d1bf99 100644 --- a/Engine/source/terrain/terrMaterial.h +++ b/Engine/source/terrain/terrMaterial.h @@ -127,6 +127,10 @@ public: F32 getParallaxScale() const { return mParallaxScale; } + bool getIsSRGB() const { return mIsSRGB; } + + bool getInvertSmoothness() const { return mInvertSmoothness; } + }; #endif // _TERRMATERIAL_H_