浏览代码

Added Lens Dirt

Samuel Skiff 3 年之前
父节点
当前提交
99d8f28957

二进制
Templates/BaseGame/game/core/postFX/images/lensDirt.png


+ 3 - 0
Templates/BaseGame/game/core/postFX/images/lensDirt_image.asset.taml

@@ -0,0 +1,3 @@
+<ImageAsset
+    AssetName="lensDirt_image"
+    imageFile="@assetFile=lensDirt.png"/>

+ 45 - 0
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

+ 14 - 0
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;

+ 22 - 4
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";