You can put it anywhere a LocalScript can access, since you have to require it from a LocalScript. Somewhere like ReplicatedStorage works fine.
A little late, sorry, but I came back to this after deciding to not work with the horribly unreadable (microoptimized lollllllllllllll) version I wrote (it’s also a singleton :C )
What’s the use of having roughMod and magnMod versus just updating the Magnitude and Roughness properties?
I don’t remember, sorry. I pretty much translated this directly from C# to Lua without many modifications to the actual code logic. I might have some time tomorrow to look at it
Thank you for this! Looks VERY smooth!!!