I did end up finding the old leans flare effect I originally tinkered around with, credits to @Maximum_ADHD!
It does use beams as I mentioned, and seems to be more first-person oriented, has some choppiness to it in third-person.
------------------------------------------------------------------------------------------------------------------------
-- @CloneTrooper1019, 2018 <3
-- Lens Flare Effect
-- A remake of Roblox's 2007 Lens Flare
------------------------------------------------------------------------------------------------------------------------
-- Configuration
------------------------------------------------------------------------------------------------------------------------
-- Classic Style
local TweenService = game:GetService("TweenService")
local FadeInfo = TweenInfo.new(0.3,Enum.EasingStyle.Sine,Enum.EasingDirection.Out)
local LENS_FLARE_CONFIGURATION =
{
Scale = 1/3;
--Texture = "rbxasset://textures/whiteCircle.png";
--Texture = "rbxassetid://3052949762";
Texture = "rbxassetid://3428619365";
Transparency = 0.7;
}
-- Modern Style
--local LENS_FLARE_CONFIGURATION =
--{
--
-- Scale = 1/3;
-- Texture = "rbxasset://textures/shadowblurmask.png";
-- Transparency = 0.7;
--}
------------------------------------------------------------------------------------------------------------------------
-- Lenses
------------------------------------------------------------------------------------------------------------------------
--[[
The LENSES array is used to control the individual lenses of the effect.
* Color - The color of the lense.
* Radius - An arbitrary scaling factor for each lense.
* Distance - A value between 0 and 1 indicating the position of the lense on the screen.
( A value of 0.5 will be at the center of the screen )
( A value of 1.0 will be directly on top of the sun )
( A value of 0.0 will be on the opposite end of the screen )
--]]
local LENSES =
{
{ Color = Color3.fromRGB(200, 255, 200), Radius = 1.00, Distance = 0.000 };
{ Color = Color3.fromRGB( 0, 255, 0), Radius = 0.50, Distance = 0.200 };
{ Color = Color3.fromRGB(255, 0, 0), Radius = 0.30, Distance = 0.225 };
{ Color = Color3.fromRGB(255, 170, 0), Radius = 1.50, Distance = 0.250 };
{ Color = Color3.fromRGB(255, 170, 0), Radius = 3.00, Distance = 0.250 };
{ Color = Color3.fromRGB( 0, 255, 0), Radius = 0.50, Distance = 0.300 };
{ Color = Color3.fromRGB( 0, 255, 0), Radius = 0.20, Distance = 0.600 };
{ Color = Color3.fromRGB( 0, 255, 0), Radius = 0.40, Distance = 0.650 };
{ Color = Color3.fromRGB(255, 0, 0), Radius = 0.20, Distance = 0.780 };
{ Color = Color3.fromRGB( 0, 255, 0), Radius = 0.25, Distance = 0.900 };
{ Color = Color3.fromRGB( 63, 63, 63), Radius = 0.15, Distance = 1.200 };
{ Color = Color3.fromRGB( 63, 63, 63), Radius = 0.15, Distance = 1.500 };
}
local ActiveTweens = {} :: {Tween}
------------------------------------------------------------------------------------------------------------------------
-- Constants
------------------------------------------------------------------------------------------------------------------------
local RunService = game:GetService("RunService")
local Lighting = game:GetService("Lighting")
local currentCamera = workspace.CurrentCamera
local lensFlareNode = currentCamera:FindFirstChild("LensFlareNode")
if lensFlareNode then
lensFlareNode:ClearAllChildren()
else
lensFlareNode = Instance.new("Part")
lensFlareNode.Name = "LensFlareNode"
lensFlareNode.Transparency = 1
lensFlareNode.Anchored = true
lensFlareNode.CanCollide = false
lensFlareNode.Locked = true
lensFlareNode.Parent = currentCamera
end
------------------------------------------------------------------------------------------------------------------------
-- Main
------------------------------------------------------------------------------------------------------------------------
local function as_Vector2(v3,...)
-- Roblox likes to kill my OCD.
return Vector2.new(v3.X,v3.Y),...
end
local function isSunOccluded(sunDir)
local origin = currentCamera.CFrame.Position + (currentCamera.CFrame.LookVector*2)
local direction = origin + (sunDir * 900000)
local ignore = {game.Players.LocalPlayer.Character, currentCamera}
local params = RaycastParams.new()
params.FilterDescendantsInstances = ignore
params.FilterType = Enum.RaycastFilterType.Exclude
params.IgnoreWater = false
local occluded = false
while task.wait() do
local result = workspace:Raycast(origin,direction,params)
if result and result.Instance:IsA("BasePart") then
local t = result.Instance.Transparency + result.Instance.LocalTransparencyModifier
if t <= 0 then
occluded = true
break
else
table.insert(ignore,result.Instance)
end
else
break
end
end
return occluded
end
local function createLenseBeam(lense,id)
local radius = lense.Radius * LENS_FLARE_CONFIGURATION.Scale
local a0 = Instance.new("Attachment")
a0.Name = id .. "_A0"
a0.Parent = lensFlareNode
lense.A0 = a0
local a1 = Instance.new("Attachment")
a1.Name = id .. "_A1"
a1.Parent = lensFlareNode
lense.A1 = a1
local beam = Instance.new("Beam")
beam.Name = id
beam.Color = ColorSequence.new(lense.Color)
beam.Width0 = radius
beam.Width1 = radius
beam.TextureSpeed = 0
beam.LightEmission = 1
beam.Texture = LENS_FLARE_CONFIGURATION.Texture
beam.Attachment0 = a0
beam.Attachment1 = a1
beam.Transparency = NumberSequence.new(LENS_FLARE_CONFIGURATION.Transparency)
beam.Parent = lensFlareNode
lense.Beam = beam
local transparency = Instance.new("NumberValue", beam)
transparency.Name = "Transparency"
transparency.Value = beam.Transparency.Keypoints[1].Value
transparency:GetPropertyChangedSignal("Value"):Connect(function()
beam.Transparency = NumberSequence.new(transparency.Value)
end)
return beam
end
local function updateLensFlare()
local vpSize = currentCamera.ViewportSize
local sunDir = Lighting:GetSunDirection()
local sunWrldSpace = sunDir * 10e6
local sunScrnSpace,inView = as_Vector2(currentCamera:WorldToViewportPoint(sunWrldSpace))
local sunScrnSpaceInv = currentCamera.ViewportSize - sunScrnSpace
local enabled = (inView and not isSunOccluded(sunDir))
for i,lense in ipairs(LENSES) do
local beam : Beam = lense.Beam or createLenseBeam(lense,i)
local transparencyValue : NumberValue = beam:FindFirstChild("Transparency")
if transparencyValue then
if ActiveTweens[beam] then ActiveTweens[beam]:Pause() ActiveTweens[beam] = nil end
ActiveTweens[beam] = TweenService:Create(transparencyValue, TweenInfo.new(0.075,Enum.EasingStyle.Sine,Enum.EasingDirection.Out),{Value = (enabled and 0.7 or 1)}):Play()
end
if enabled then
beam.Enabled = enabled
local radius = lense.Radius * LENS_FLARE_CONFIGURATION.Scale
local lenseSP = sunScrnSpaceInv:lerp(sunScrnSpace,lense.Distance)
local lenseWP = currentCamera:ViewportPointToRay(lenseSP.X,lenseSP.Y,1).Origin
local lenseCF = CFrame.new(lenseWP,lenseWP - sunDir)
lense.A0.CFrame = lenseCF * CFrame.new(-radius/2,0,0)
lense.A1.CFrame = lenseCF * CFrame.new(radius/2,0,0)
else
if ActiveTweens[beam] and ActiveTweens[beam].PlaybackState == Enum.PlaybackState.Completed then
beam.Enabled = enabled
end
end
end
end
RunService:BindToRenderStep("UpdateLensFlare",201,updateLensFlare)
------------------------------------------------------------------------------------------------------------------------
I did add a fade for transparency so it’s not as 2007 looking lol it’s not a bad take on lens flare overall though.