Raycast Filter Malfunctioning

I am currently working on a light simulator, although the collisions aren’t perfect, I have noticed an error:

The Light partcle’s orientation after a collision is based on this equation:

Light.Orientation+= Vector3.new(90,90,90)*RNorm*-1

RNorm: RaycastResult.Normal

Prier to the physics of every Frame, the Raycast is sent to detect if the Light Particle is collideing, if it in a certain range, it would change direction.

BUT here’s the issue: It is set to blacklist all children of the Light folder, which is where all the light particles are.

Yet as the clip shows, the particles also collide with each other, more frequently when FPS is low.

And all Light Particles are in the Light folder, as that’s how I control them.

Thanks in advance!

Here is the source for the raycasting of the light particles:
local LightFolder = game.Workspace.SimulationParts.LightParticles

local GlobalLightProperties = require(game.ReplicatedStorage.LightPropertySet)
local RunService = game:GetService("RunService")


local NameIgnoreList = {"Light","Laser"}
local ParentIgnoreList = {"BaseParts","TheBox"}






local SubT1 = {Instance=nil,Distance=nil,Normal=nil}

function SimLightFol(LightF:{})
	local LightSpeed = GlobalLightProperties.LightSpeed
	local RefreshTime = GlobalLightProperties.RefreshTime
	local LifeTime = GlobalLightProperties.LifeTime
	local ol_params = OverlapParams.new()
	ol_params.FilterType = Enum.RaycastFilterType.Blacklist
	ol_params.FilterDescendantsInstances = {game.Workspace.BaseParts}
	local PNB = workspace:GetPartsInPart(game.Workspace.BaseParts.TheBox.Ref,ol_params)

	for order, Light in pairs(LightF) do
		if not table.find(PNB,Light) then
			Light:Destroy()
		end
		local PartsInLight = workspace:GetPartsInPart(Light)
		if PartsInLight then
			for _, part in pairs(PartsInLight) do
				if not table.find(NameIgnoreList,part.Name) then
					local Rot = Light.Orientation
					Light.Orientation = Rot-(Vector3.new(180,180,180))
				end
			end
		end
		local rayOrigin = Light.Position
		local rayDirection = Light.CFrame.RightVector*180
		local rayParams = RaycastParams.new()
		rayParams.FilterType = Enum.RaycastFilterType.Blacklist
		rayParams.FilterDescendantsInstances = {LightFolder:GetChildren()}
		local rayR = workspace:Raycast(rayOrigin,rayDirection,rayParams)
		if rayR then
			
			if not table.find(NameIgnoreList,((rayR or SubT1).Instance).Name) then
				local Dis = (rayR or SubT1).Distance 
				local Ins = (rayR or SubT1).Instance 
				local Rot = Light.Orientation
				local RNorm = (rayR or SubT1).Normal 
				if Dis <= GlobalLightProperties.DectectionDistance then
					Light.Orientation+= Vector3.new(90,90,90)*RNorm*-1
				end
			end
		end
	end 
end


RunService.Stepped:Connect(function()
	SimLightFol(LightFolder:GetChildren())
end)