diff --git a/Templates/BaseGame/game/core/postFX/images/lensDirt.png b/Templates/BaseGame/game/core/postFX/images/lensDirt.png new file mode 100644 index 000000000..51d66be71 Binary files /dev/null and b/Templates/BaseGame/game/core/postFX/images/lensDirt.png differ diff --git a/Templates/BaseGame/game/core/postFX/images/lensDirt_image.asset.taml b/Templates/BaseGame/game/core/postFX/images/lensDirt_image.asset.taml new file mode 100644 index 000000000..2c84ec01b --- /dev/null +++ b/Templates/BaseGame/game/core/postFX/images/lensDirt_image.asset.taml @@ -0,0 +1,3 @@ + diff --git a/Templates/BaseGame/game/core/postFX/scripts/Bloom/BloomPostFX.tscript b/Templates/BaseGame/game/core/postFX/scripts/Bloom/BloomPostFX.tscript index ac531c39d..80f6042ed 100644 --- a/Templates/BaseGame/game/core/postFX/scripts/Bloom/BloomPostFX.tscript +++ b/Templates/BaseGame/game/core/postFX/scripts/Bloom/BloomPostFX.tscript @@ -24,6 +24,10 @@ $PostFX::BloomPostFX::threshold = 0.75; $PostFX::BloomPostFX::intensity = 0.5; $PostFX::BloomPostFX::radius = 8.0; +$PostFX::BloomPostFX::dirtEnabled = true; +$PostFX::BloomPostFX::dirtScale = 2048.0; +$PostFX::BloomPostFX::dirtIntensity = 7.0; + $mipsCount = 4; singleton ShaderData( PFX_BloomThreshold_Shader ) @@ -63,6 +67,7 @@ singleton ShaderData( PFX_BloomStrength_Shader ) DXPixelShaderFile = "./bloomStrengthP.hlsl"; samplerNames[0] = "$inputTex"; + samplerNames[1] = "$dirtTex"; pixVersion = 3.0; }; @@ -89,6 +94,7 @@ singleton GFXStateBlockData( BloomPostFX_Add_SampleStateBlock : PFX_DefaultState samplersDefined = true; samplerStates[0] = SamplerClampLinear; + samplerStates[1] = SamplerWrapLinear; }; function BloomPostFX::setShaderConsts( %this ) @@ -104,10 +110,37 @@ function BloomPostFX::setShaderConsts( %this ) %final = %this->bloomFinal; %final.setShaderConst("$strength", $PostFX::BloomPostFX::intensity); + + %dirtScale = $PostFX::BloomPostFX::dirtScale; + %dirtIntensity = $PostFX::BloomPostFX::dirtIntensity; + %final.setShaderConst("$dirtParams", %dirtScale SPC %dirtScale SPC %dirtIntensity); } function BloomPostFX::preProcess( %this ) { + if (%this.dirtEnabled != $PostFX::BloomPostFX::dirtEnabled) + { + %this.dirtEnabled = $PostFX::BloomPostFX::dirtEnabled; + + %final = %this->bloomFinal; + if (%this.dirtEnabled) + { + %final.setShaderMacro("USE_DIRT"); + } else { + %final.removeShaderMacro("USE_DIRT"); + } + } + + if($PostFX::BloomPostFX::dirtImage $= "") + { + $PostFX::BloomPostFX::dirtImage = "core/postFX/images/lensDirt.png"; + } + + if($PostFX::BloomPostFX::dirtImage !$= "") + { + %final = %this->bloomFinal; + %final.setTexture(1, $PostFX::BloomPostFX::dirtImage); + } } // This function sets up s sort of "mip-chain" for the bloom effect @@ -198,6 +231,13 @@ function BloomPostFX::populatePostFXSettings(%this) PostEffectEditorInspector.addField("$PostFX::BloomPostFX::intensity", "Intensity", "range", "", $PostFX::BloomPostFX::intensity, "0 2 10"); PostEffectEditorInspector.addField("$PostFX::BloomPostFX::radius", "Radius", "float", "", $PostFX::BloomPostFX::radius, ""); PostEffectEditorInspector.endGroup(); + + PostEffectEditorInspector.startGroup("BloomPostFX - Dirt"); + PostEffectEditorInspector.addField("$PostFX::BloomPostFX::dirtEnabled", "Enable Dirt", "bool", "", $PostFX::BloomPostFX::dirtEnabled, ""); + PostEffectEditorInspector.addField("$PostFX::BloomPostFX::dirtScale", "Scale", "float", "", $PostFX::BloomPostFX::dirtScale, ""); + PostEffectEditorInspector.addField("$PostFX::BloomPostFX::dirtIntensity", "Intensity", "float", "", $PostFX::BloomPostFX::dirtIntensity, ""); + PostEffectEditorInspector.addField("$PostFX::BloomPostFX::dirtImage", "Dirt Image", "image", "", $PostFX::BloomPostFX::dirtImage, ""); + PostEffectEditorInspector.endGroup(); } //This is called back from our callbackField defined in populatePostFXSettings to @@ -227,6 +267,11 @@ function BloomPostFX::savePresetSettings(%this) PostFXManager::savePresetSetting("$PostFX::BloomPostFX::threshold"); PostFXManager::savePresetSetting("$PostFX::BloomPostFX::intensity"); PostFXManager::savePresetSetting("$PostFX::BloomPostFX::radius"); + + PostFXManager::savePresetSetting("$PostFX::BloomPostFX::dirtEnabled"); + PostFXManager::savePresetSetting("$PostFX::BloomPostFX::dirtScale"); + PostFXManager::savePresetSetting("$PostFX::BloomPostFX::dirtIntensity"); + PostFXManager::savePresetSetting("$PostFX::BloomPostFX::dirtImage"); } //Our actual postFX diff --git a/Templates/BaseGame/game/core/postFX/scripts/Bloom/bloomStrengthP.hlsl b/Templates/BaseGame/game/core/postFX/scripts/Bloom/bloomStrengthP.hlsl index 35fb2dfbc..df4b7ed62 100644 --- a/Templates/BaseGame/game/core/postFX/scripts/Bloom/bloomStrengthP.hlsl +++ b/Templates/BaseGame/game/core/postFX/scripts/Bloom/bloomStrengthP.hlsl @@ -23,11 +23,25 @@ #include "core/rendering/shaders/postFX/postFx.hlsl" TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); +TORQUE_UNIFORM_SAMPLER2D(dirtTex, 1); uniform float strength; +// XY: Dirt Texture Size/Scale +// Z: Dirt Effect Strength +uniform float3 dirtParams; +uniform float2 oneOverTargetSize; float4 main(PFXVertToPix IN) : TORQUE_TARGET0 { + #if defined(USE_DIRT) + float3 dirt = TORQUE_TEX2D(dirtTex, IN.uv0 / (dirtParams.xy * oneOverTargetSize)).rgb * dirtParams.z; + #endif + float4 upSample = TORQUE_TEX2D(inputTex, IN.uv0); + + #if defined(USE_DIRT) + upSample.rgb += upSample.rgb * dirt; + #endif + upSample.rgb *= strength; return upSample; diff --git a/Templates/BaseGame/game/core/postFX/scripts/default.postfxpreset.tscript b/Templates/BaseGame/game/core/postFX/scripts/default.postfxpreset.tscript index 5541cbbb0..e6413846d 100644 --- a/Templates/BaseGame/game/core/postFX/scripts/default.postfxpreset.tscript +++ b/Templates/BaseGame/game/core/postFX/scripts/default.postfxpreset.tscript @@ -1,5 +1,23 @@ $PostFX::BloomPostFX::Enabled = "1"; -$PostFX::BloomPostFX::quality = "3"; -$PostFX::BloomPostFX::threshold = "1"; -$PostFX::BloomPostFX::intensity = "2"; -$PostFX::BloomPostFX::radius = "6"; +$PostFX::BloomPostFX::threshold = "0.5"; +$PostFX::BloomPostFX::intensity = "0.5"; +$PostFX::BloomPostFX::radius = "8"; +$PostFX::BloomPostFX::dirtEnabled = "1"; +$PostFX::BloomPostFX::dirtScale = "2048"; +$PostFX::BloomPostFX::dirtIntensity = "2"; +$PostFX::BloomPostFX::dirtImage = "core/postFX/images/lensDirt.png"; +$PostFX::HDRPostFX::Enabled = 1; +$PostFX::HDRPostFX::exposureValue = 1; +$PostFX::HDRPostFX::minLuminace = 0.001; +$PostFX::HDRPostFX::whiteCutoff = 1; +$PostFX::HDRPostFX::adaptRate = "1"; +$PostFX::HDRPostFX::tonemapMode = "ACES"; +$PostFX::HDRPostFX::enableBloom = "0"; +$PostFX::HDRPostFX::brightPassThreshold = 1; +$PostFX::HDRPostFX::gaussMultiplier = 0.3; +$PostFX::HDRPostFX::gaussMean = 0; +$PostFX::HDRPostFX::gaussStdDev = 0.8; +$PostFX::HDRPostFX::enableAutoExposure = "0"; +$PostFX::HDRPostFX::keyValue = "1"; +$PostFX::HDRPostFX::enableBlueShift = 0; +$PostFX::HDRPostFX::blueShiftColor = "1.05 0.97 1.27";