Browse Source

preliminary glowmap+glowmul feature augmentation math

AzaezelX 6 years ago
parent
commit
070a9845a2

+ 16 - 1
Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp

@@ -83,7 +83,7 @@ void PBRConfigMapHLSL::processPix( Vector<ShaderComponent*> &componentList, cons
    pbrConfigMapTex->uniform = true;
    pbrConfigMapTex->texture = true;
    pbrConfigMapTex->constNum = pbrConfigMap->constNum;
-   LangElement *texOp = new GenOp("   @.Sample(@, @)", pbrConfigMapTex, pbrConfigMap, texCoord);
+   LangElement *texOp = new GenOp("@.Sample(@, @)", pbrConfigMapTex, pbrConfigMap, texCoord);
    
    Var *metalness = (Var*)LangElement::find("metalness");
    if (!metalness) metalness = new Var("metalness", "float");
@@ -103,6 +103,21 @@ void PBRConfigMapHLSL::processPix( Vector<ShaderComponent*> &componentList, cons
    }
    meta->addStatement(new GenOp("   @ = @.g;\r\n", new DecOp(ao), pbrConfig));
    meta->addStatement(new GenOp("   @ = @.a;\r\n", new DecOp(metalness), pbrConfig));
+
+   if (fd.features[MFT_GlowMap])
+   {
+      Var* glowMul = new Var("glowMul", "float");
+      glowMul->uniform = true;
+      glowMul->constSortPos = cspPotentialPrimitive;
+
+      ShaderFeature::OutputTarget targ = ShaderFeature::DefaultTarget;
+      if (fd.features[MFT_isDeferred])
+         targ = ShaderFeature::RenderTarget1;
+
+      Var* diffuseColor = (Var*)LangElement::find(getOutputTargetVarName(targ));
+      if (diffuseColor)
+         meta->addStatement(new GenOp("   @.rgb += @.rgb*float3(@,@,@)*@.aaa;\r\n", diffuseColor, diffuseColor, glowMul, glowMul, glowMul, texOp));
+   }
    output = meta;
 }
 

+ 1 - 1
Engine/source/materials/materialDefinition.cpp

@@ -128,7 +128,7 @@ Material::Material()
       mSmoothnessChan[i] = 0;
       mAOChan[i] = 1;
       mMetalChan[i] = 2;
-
+      mGlowChan[i] = 3;
       mAccuEnabled[i]   = false;
       mAccuScale[i]     = 1.0f;
       mAccuDirection[i] = 1.0f;

+ 2 - 0
Engine/source/materials/processedShaderMaterial.cpp

@@ -62,6 +62,7 @@ void ShaderConstHandles::init( GFXShader *shader, Vector<CustomShaderFeatureData
    mPBRConfigSC = shader->getShaderConstHandle(ShaderGenVars::pbrConfig);
    mSmoothnessSC = shader->getShaderConstHandle(ShaderGenVars::smoothness);
    mMetalnessSC = shader->getShaderConstHandle(ShaderGenVars::metalness);
+   mGlowMulSC = shader->getShaderConstHandle(ShaderGenVars::glowMul);
    mAccuScaleSC = shader->getShaderConstHandle("$accuScale");
    mAccuDirectionSC = shader->getShaderConstHandle("$accuDirection");
    mAccuStrengthSC = shader->getShaderConstHandle("$accuStrength");
@@ -1111,6 +1112,7 @@ void ProcessedShaderMaterial::_setShaderConstants(SceneRenderState * state, cons
 
    shaderConsts->setSafe(handles->mSmoothnessSC, mMaterial->mSmoothness[stageNum]);
    shaderConsts->setSafe(handles->mMetalnessSC, mMaterial->mMetalness[stageNum]);
+   shaderConsts->setSafe(handles->mGlowMulSC, mMaterial->mGlowMul[stageNum]);
 
    shaderConsts->setSafe(handles->mParallaxInfoSC, mMaterial->mParallaxScale[stageNum]);   
    shaderConsts->setSafe(handles->mMinnaertConstantSC, mMaterial->mMinnaertConstant[stageNum]);

+ 1 - 0
Engine/source/materials/processedShaderMaterial.h

@@ -49,6 +49,7 @@ public:
    GFXShaderConstHandle* mPBRConfigSC;
    GFXShaderConstHandle* mSmoothnessSC;
    GFXShaderConstHandle* mMetalnessSC;
+   GFXShaderConstHandle* mGlowMulSC;
    GFXShaderConstHandle* mParallaxInfoSC;
    GFXShaderConstHandle* mAccuScaleSC;
    GFXShaderConstHandle* mAccuDirectionSC;

+ 1 - 0
Engine/source/shaderGen/shaderGenVars.cpp

@@ -76,6 +76,7 @@ const String ShaderGenVars::vectorLightBrightness("$vectorLightBrightness");
 const String ShaderGenVars::pbrConfig("$PBRConfig");
 const String ShaderGenVars::smoothness("$smoothness");
 const String ShaderGenVars::metalness("$metalness");
+const String ShaderGenVars::glowMul("$glowMul");
 
 //Reflection Probes
 const String ShaderGenVars::probePosition("$inProbePosArray");

+ 1 - 0
Engine/source/shaderGen/shaderGenVars.h

@@ -88,6 +88,7 @@ struct ShaderGenVars
    const static String pbrConfig;
    const static String smoothness;
    const static String metalness;
+   const static String glowMul;
 
    //Reflection Probes
    const static String probePosition;