The attached RBXL files are the geometry-based electric arc effect that I’m using in my Electrical Lab place, and a crudely hacked version of the same file for the purpose of adding some extra visualization of how it works (hard-coded to one arc and a specific world orientation, because no point spending time generalizing it). Conceptually, the way this works is that the arc path is modeled as a set of rotated vectors perpendicular to the axis (red in the screenshot), semi-randomly spaced and with length that is random but also subject to an “envelope” that describes the outer bounds of the path. What limits keeps the arc from zig-zagging too severely to look natural is a limit on how much each of the red vectors can rotate about the axis relative to the previous one, along with limits as to how closely spaced they can be. The long, hot arcs that wander a bit are achieved by generating two paths, and tweening from one to the other over several steps (lerp).
I spent a few hours today ripping out my initial Lua implementation which did everything in world coordinates with all the transforms in Lua, in favor of letting CFrames do all of the heavy lifting. So now all the arc generation is done neatly relative to an x-axis unit vector, and then transformed into world position by scaling and CFrame multiplication at the end. I am new to Roblox and Lua, so there are probably still things that can be further optimized. But, my baseline tests indicate that animating with tons of parts like this is expensive, even with the objects in a pool and everything in local scripts. Still, it could be useful for making discrete lightning strikes even if the continuous multi-arc version is too much.