mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
105 lines
3.4 KiB
Lua
105 lines
3.4 KiB
Lua
--[[
|
|
| This file was obtained through the combined efforts
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
|
|
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
|
|
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
|
--]]
|
|
|
|
|
|
local mat_MotionBlur = Material( "pp/motionblur" )
|
|
local mat_Screen = Material( "pp/fb" )
|
|
local tex_MotionBlur = render.GetMoBlurTex0()
|
|
|
|
--[[---------------------------------------------------------
|
|
Register the convars that will control this effect
|
|
-----------------------------------------------------------]]
|
|
local pp_motionblur = CreateClientConVar( "pp_motionblur", "0", false, false )
|
|
local pp_motionblur_addalpha = CreateClientConVar( "pp_motionblur_addalpha", "0.2", true, false )
|
|
local pp_motionblur_drawalpha = CreateClientConVar( "pp_motionblur_drawalpha", "0.99", true, false )
|
|
local pp_motionblur_delay = CreateClientConVar( "pp_motionblur_delay", "0.05", true, false )
|
|
|
|
local NextDraw = 0
|
|
local LastDraw = 0
|
|
|
|
function DrawMotionBlur( addalpha, drawalpha, delay )
|
|
|
|
if ( drawalpha == 0 ) then return end
|
|
|
|
-- Copy the backbuffer to the screen effect texture
|
|
render.UpdateScreenEffectTexture()
|
|
|
|
-- If it's been a long time then the buffer is probably dirty, update it
|
|
if ( CurTime() - LastDraw > 0.5 ) then
|
|
|
|
mat_Screen:SetFloat( "$alpha", 1 )
|
|
|
|
local OldRT = render.GetRenderTarget()
|
|
render.SetRenderTarget( tex_MotionBlur )
|
|
render.SetMaterial( mat_Screen )
|
|
render.DrawScreenQuad()
|
|
render.SetRenderTarget( OldRT )
|
|
|
|
end
|
|
|
|
-- Set up out materials
|
|
mat_MotionBlur:SetFloat( "$alpha", drawalpha )
|
|
mat_MotionBlur:SetTexture( "$basetexture", tex_MotionBlur )
|
|
|
|
if ( NextDraw < CurTime() && addalpha > 0 ) then
|
|
|
|
NextDraw = CurTime() + delay
|
|
|
|
mat_Screen:SetFloat( "$alpha", addalpha )
|
|
local OldRT = render.GetRenderTarget()
|
|
render.SetRenderTarget( tex_MotionBlur )
|
|
|
|
render.SetMaterial( mat_Screen )
|
|
render.DrawScreenQuad()
|
|
|
|
render.SetRenderTarget( OldRT )
|
|
|
|
end
|
|
|
|
render.SetMaterial( mat_MotionBlur )
|
|
render.DrawScreenQuad( true )
|
|
|
|
LastDraw = CurTime()
|
|
|
|
end
|
|
|
|
hook.Add( "RenderScreenspaceEffects", "RenderMotionBlur", function()
|
|
|
|
if ( !pp_motionblur:GetBool() ) then return end
|
|
if ( !GAMEMODE:PostProcessPermitted( "motion blur" ) ) then return end
|
|
|
|
DrawMotionBlur( pp_motionblur_addalpha:GetFloat(), pp_motionblur_drawalpha:GetFloat(), pp_motionblur_delay:GetFloat() )
|
|
|
|
end )
|
|
|
|
list.Set( "PostProcess", "#motion_blur_pp", {
|
|
|
|
icon = "gui/postprocess/accummotionblur.png",
|
|
convar = "pp_motionblur",
|
|
category = "#effects_pp",
|
|
|
|
cpanel = function( CPanel )
|
|
|
|
CPanel:AddControl( "Header", { Description = "#motion_blur_pp.desc" } )
|
|
CPanel:AddControl( "CheckBox", { Label = "#motion_blur_pp.enable", Command = "pp_motionblur" } )
|
|
|
|
local params = { Options = {}, CVars = {}, MenuButton = "1", Folder = "motionblur" }
|
|
params.Options[ "#preset.default" ] = { pp_motionblur_addalpha = "0.2", pp_motionblur_delay = "0.05", pp_motionblur_drawalpha = "0.99" }
|
|
params.CVars = table.GetKeys( params.Options[ "#preset.default" ] )
|
|
CPanel:AddControl( "ComboBox", params )
|
|
|
|
CPanel:AddControl( "Slider", { Label = "#motion_blur_pp.add_alpha", Command = "pp_motionblur_addalpha", Type = "Float", Min = "0", Max = "1" } )
|
|
CPanel:AddControl( "Slider", { Label = "#motion_blur_pp.draw_alpha", Command = "pp_motionblur_drawalpha", Type = "Float", Min = "0", Max = "1" } )
|
|
CPanel:AddControl( "Slider", { Label = "#motion_blur_pp.delay", Command = "pp_motionblur_delay", Type = "Float", Min = "0", Max = "1" } )
|
|
|
|
end
|
|
|
|
} )
|