SHARE
TWEET

Untitled

a guest May 31st, 2018 470 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2. * Copyright (C) 2015 Lucifer Hawk ()
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a copy of
  5. * this software and associated documentation files (the "Software"), to deal in
  6. * the Software with restriction, including without limitation the rights to
  7. * use and/or sell copies of the Software, and to permit persons to whom the Software
  8. * is furnished to do so, subject to the following conditions:
  9. *
  10. * The above copyright notice and the permission notices (this and below) shall
  11. * be included in all copies or substantial portions of the Software.
  12. *
  13. * Permission needs to be specifically granted by the author of the software to any
  14. * person obtaining a copy of this software and associated documentation files
  15. * (the "Software"), to deal in the Software without restriction, including without
  16. * limitation the rights to copy, modify, merge, publish, distribute, and/or
  17. * sublicense the Software, and subject to the following conditions:
  18. *
  19. * The above copyright notice and the permission notices (this and above) shall
  20. * be included in all copies or substantial portions of the Software.
  21. *
  22. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  23. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  24. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  25. * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  26. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  27. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  28. * SOFTWARE.
  29. */
  30.  
  31. #include "ReShade.fxh"
  32.  
  33. uniform bool ambDepth_Check <
  34.     ui_type = "boolean";
  35.     ui_label = "Depth dependent motion blur [Adv. MBlur]";
  36. > = true;
  37.  
  38. uniform float ambDepthRatio <
  39.     ui_type = "drag";
  40.     ui_min = 0.0;
  41.     ui_max = 1.0;
  42.     ui_step = 0.001;
  43.     ui_label = "Motion Blur Depth Ratio [Adv. MBlur]";
  44.     ui_tooltip = "Amount of addition MB due to distance; Lower Value => Higher Amount";
  45. > = 0;
  46.  
  47. uniform float ambRecall <
  48.     ui_type = "drag";
  49.     ui_min = 0.0;
  50.     ui_max = 1.0;
  51.     ui_step = 0.001;
  52.     ui_label = "Motion Blur Recall [Adv. MBlur]";
  53.     ui_tooltip = "Increases detection level of relevant smart motion blur";
  54. > = 1;
  55.  
  56. uniform float ambPrecision <
  57.     ui_type = "drag";
  58.     ui_min = 0.0;
  59.     ui_max = 1.0;
  60.     ui_step = 0.001;
  61.     ui_label = "Motion Blur Precision [Adv. MBlur]";
  62.     ui_tooltip = "Increases relevance level of detected smart motion blur";
  63. > = 0;
  64.  
  65. uniform float ambSoftness <
  66.     ui_type = "drag";
  67.     ui_min = 0.0;
  68.     ui_max = 10.0;
  69.     ui_step = 0.001;
  70.     ui_label = "Softness [Adv. MBlur]";
  71.     ui_tooltip = "Softness of consequential streaks";
  72. > = 10.0;
  73.  
  74. uniform float ambSmartMult <
  75.     ui_type = "drag";
  76.     ui_min = 0.0;
  77.     ui_max = 10.0;
  78.     ui_step = 0.001;
  79.     ui_label = "Smart Multiplication [Adv. MBlur]";
  80.     ui_tooltip = "Multiplication of relevant smart motion blur";
  81. > = 10.0;
  82.  
  83. uniform float ambIntensity <
  84.     ui_type = "drag";
  85.     ui_min = 0.0;
  86.     ui_max = 1.0;
  87.     ui_step = 0.001;
  88.     ui_label = "Intensity [Adv. MBlur]";
  89.     ui_tooltip = "Intensity of base motion blur effect";
  90. > = 0;
  91.  
  92. uniform float ambSmartInt <
  93.     ui_type = "drag";
  94.     ui_min = 0.0;
  95.     ui_max = 1.0;
  96.     ui_step = 0.001;
  97.     ui_label = "Smart Intensity [Adv. MBlur]";
  98.     ui_tooltip = "Intensity of smart motion blur effect";
  99. > = 0;
  100.  
  101. texture2D ambCurrBlurTex { Width = BUFFER_WIDTH; Height = BUFFER_HEIGHT; Format = RGBA8; };
  102. texture2D ambPrevBlurTex { Width = BUFFER_WIDTH; Height = BUFFER_HEIGHT; Format = RGBA8; };
  103. texture2D ambPrevTex { Width = BUFFER_WIDTH; Height = BUFFER_HEIGHT; Format = RGBA8; };
  104. sampler2D ambCurrBlurColor { Texture = ambCurrBlurTex; };
  105. sampler2D ambPrevBlurColor { Texture = ambPrevBlurTex; };
  106. sampler2D ambPrevColor { Texture = ambPrevTex; };
  107.  
  108. float4 PS_AMBCombine(float4 vpos : SV_Position, float2 texcoord : TEXCOORD) : SV_Target
  109. {
  110.     float4 prev = tex2D(ambPrevBlurColor, texcoord);
  111.     float4 curr = tex2D(ReShade::BackBuffer, texcoord);
  112.     float4 currBlur = tex2D(ambCurrBlurColor, texcoord);
  113.  
  114.     float diff = (abs(currBlur.r - prev.r) + abs(currBlur.g - prev.g) + abs(currBlur.b - prev.b)) / 3;
  115.     diff = min(max(diff - ambPrecision, 0.0f)*ambSmartMult, ambRecall);
  116.  
  117.     if (ambDepth_Check != 0){
  118.         float depth = tex2D(ReShade::DepthBuffer, texcoord).r;
  119.         return lerp(curr, prev, min(ambIntensity+diff*ambSmartInt, 1.0f)/(depth.r+ambDepthRatio));
  120.     } else {
  121.         return lerp(curr, prev, min(ambIntensity+diff*ambSmartInt, 1.0f));
  122.     }
  123. }
  124.  
  125. void PS_AMBCopyPreviousFrame(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 prev : SV_Target0)
  126. {
  127.     prev = tex2D(ReShade::BackBuffer, texcoord);
  128. }
  129.  
  130. void PS_AMBBlur(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 curr : SV_Target0, out float4 prev : SV_Target1)
  131. {
  132.     float4 currVal = tex2D(ReShade::BackBuffer, texcoord);
  133.     float4 prevVal = tex2D(ambPrevColor, texcoord);
  134.  
  135.     float weight[11] = { 0.082607, 0.040484, 0.038138, 0.034521, 0.030025, 0.025094, 0.020253, 0.015553, 0.011533, 0.008218, 0.005627 };
  136.     currVal *= weight[0];
  137.     prevVal *= weight[0];
  138.  
  139.     float ratio = -1.0f;
  140.  
  141.     float pixelBlur = ambSoftness/max(1.0f,1.0f+(-1.0f)*ratio) * (BUFFER_RCP_HEIGHT);
  142.  
  143.     [unroll]
  144.     for (int z = 1; z < 11; z++) //set quality level by user
  145.     {
  146.         currVal += tex2D(ReShade::BackBuffer, texcoord + float2(z*pixelBlur, 0)) * weight[z];
  147.         currVal += tex2D(ReShade::BackBuffer, texcoord - float2(z*pixelBlur, 0)) * weight[z];
  148.         currVal += tex2D(ReShade::BackBuffer, texcoord + float2(0, z*pixelBlur)) * weight[z];
  149.         currVal += tex2D(ReShade::BackBuffer, texcoord - float2(0, z*pixelBlur)) * weight[z];
  150.  
  151.         prevVal += tex2D(ambPrevColor, texcoord + float2(z*pixelBlur, 0)) * weight[z];
  152.         prevVal += tex2D(ambPrevColor, texcoord - float2(z*pixelBlur, 0)) * weight[z];
  153.         prevVal += tex2D(ambPrevColor, texcoord + float2(0, z*pixelBlur)) * weight[z];
  154.         prevVal += tex2D(ambPrevColor, texcoord - float2(0, z*pixelBlur)) * weight[z];
  155.     }
  156.  
  157.     curr = currVal;
  158.     prev = prevVal;
  159. }
  160.  
  161. technique AdvancedMotionBlur_Tech
  162. {
  163.     pass AMBBlur
  164.     {
  165.         VertexShader = PostProcessVS;
  166.         PixelShader = PS_AMBBlur;
  167.         RenderTarget0 = ambCurrBlurTex;
  168.         RenderTarget1 = ambPrevBlurTex;
  169.     }
  170.  
  171.     pass AMBCombine
  172.     {
  173.         VertexShader = PostProcessVS;
  174.         PixelShader = PS_AMBCombine;
  175.     }
  176.  
  177.     pass AMBPrev
  178.     {
  179.         VertexShader = PostProcessVS;
  180.         PixelShader = PS_AMBCopyPreviousFrame;
  181.         RenderTarget0 = ambPrevTex;
  182.     }
  183. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top