local _Material = Material( "pp/sunbeams" ) _Material:SetMaterialTexture( "$fbtexture", render.GetScreenEffectTexture() ) /*--------------------------------------------------------- Register the convars that will control this effect ---------------------------------------------------------*/ local pp_sunbeams = CreateClientConVar( "pp_sunbeams", "0", true, false ) local pp_sunbeams_darken = CreateClientConVar( "pp_sunbeams_darken", "0.95", false, false ) local pp_sunbeams_multiply = CreateClientConVar( "pp_sunbeams_multiply", "1.0", false, false ) local pp_sunbeams_sunsize = CreateClientConVar( "pp_sunbeams_sunsize", "0.075", false, false ) function DrawSunbeams( darken, multiply, sunsize, sunx, suny ) if ( !render.SupportsPixelShaders_2_0() ) then return end render.UpdateScreenEffectTexture() _Material:SetMaterialFloat( "$darken", darken ) _Material:SetMaterialFloat( "$multiply", multiply ) _Material:SetMaterialFloat( "$sunx", sunx ) _Material:SetMaterialFloat( "$suny", suny ) _Material:SetMaterialFloat( "$sunsize", sunsize ) render.SetMaterial( _Material ) render.DrawScreenQuad() end local function DrawInternal() if ( !pp_sunbeams:GetBool() ) then return end if ( !GAMEMODE:PostProcessPermitted( "sunbeams" ) ) then return end if ( !render.SupportsPixelShaders_2_0() ) then return end local sun = util.GetSunInfo() if (!sun) then return end if (sun.obstruction == 0) then return end local sunpos = EyePos() + sun.direction * 4096 local scrpos = sunpos:ToScreen() local dot = (sun.direction:Dot( EyeVector() ) - 0.8) * 5 if (dot <= 0) then return end DrawSunbeams( pp_sunbeams_darken:GetFloat(), pp_sunbeams_multiply:GetFloat() * dot * sun.obstruction, pp_sunbeams_sunsize:GetFloat(), scrpos.x / ScrW(), scrpos.y / ScrH() ); end hook.Add( "RenderScreenspaceEffects", "RenderSunbeams", DrawInternal ) /* // Control Panel */ local function BuildControlPanel( CPanel ) CPanel:AddControl( "Header", { Text = "#Sun Beams", Description = "#Sun Beams" } ) CPanel:AddControl( "CheckBox", { Label = "#Enable", Command = "pp_sunbeams" } ) CPanel:AddControl( "Slider", { Label = "#Multiply", Command = "pp_sunbeams_multiply", Type = "Float", Min = "0", Max = "1" } ) CPanel:AddControl( "Slider", { Label = "#Darken", Command = "pp_sunbeams_darken", Type = "Float", Min = "0", Max = "1" } ) CPanel:AddControl( "Slider", { Label = "#Sun Size", Command = "pp_sunbeams_sunsize", Type = "Float", Min = "0.01", Max = "0.25" } ) end /* // Tool Menu */ local function AddPostProcessMenu() spawnmenu.AddToolMenuOption( "PostProcessing", "PPShader", "SunBeams", "#Sun Beams", "", "", BuildControlPanel, { SwitchConVar = "pp_sunbeams" } ) end hook.Add( "PopulateToolMenu", "AddPostProcessMenu_SunBeams", AddPostProcessMenu )