the closest you could get is by using a paralax system, it uses textures and can be changed to whatever texture you want, but the texture needs to be tileable
you’ll need a table like this:
parralax Config = {
{
AnimSpeed = (Vector3.new(1, 1, 0)) * 0.25,
Brightness = (Vector3.one),
BrightnessNoiseRange = {
(ToVec(Color3.new(1, 1, 1))) * 0.25,
(ToVec(Color3.new(1, 1, 1))) * 2
},
CameraDirection = (Vector3.one) * 0.4,
FixedScale = (Vector3.one) * 2,
LogScale = 0.01,
TextureId = "", -- texture goes here
Transparency = 0.5,
TransparencyNoiseRange = {
[1] = 0.5,
[2] = 1
},
ZIndex = 2
},
}
keep in mind that each one of these config tables is a different texture
then you’ll need a script that calls this chunk of code once with the data of the parralax,
local textureData = {}
if (ConfigData or whatever it is for you).parralax then
for _, v663 in ipairs(v267.parralax) do
local v666 = v663.CameraDirection or Vector3.new(0, 0, 0)
local v667 = v663.AnimSpeed or Vector3.new(0, 0, 0)
local v669 = v663.NoiseCameraRatio or 0
local v671 = v663.BrightnessNoiseRange or { Vector3.new(0, 0, 0), Vector3.new(0, 0, 0) }
local LinearSpeed = v663.LinearSpeed or Vector3.new(0.75, 0.75, 1)
local v678 = v663.LogScale or 0.5
v663.Color = v663.Color or Color3.new(1, 1, 1)
local v688 = Vector3.new(v663.Color.R, v663.Color.G, v663.Color.B)
v663.Brightness = v663.Brightness or Vector3.new(1, 1, 1)
local v689 = Vector3.new(v663.Brightness.X, v663.Brightness.Y, v663.Brightness.Z)
local v690 = v688 * v689
local v697 = v663.Transparency or 0
v663.FixedOffset = v663.FixedOffset or Vector3.new(math.random() * 2 - 1, math.random() * 2 - 1, 1)
v663.FixedScale = v663.FixedScale or Vector3.new(2, 2, 1)
if v271:GetAttribute("ApplyParralax") ~= false and not l__g__261 then
if not textureData [v271] then
textureData [v271] = {}
end
for _, v726 in ipairs(Enum.NormalId:GetEnumItems()) do
local v728 = v1.Functions.FaceSize(v726, v271.Size)
local v732 = Vector3.new(0, 0, 0) + v663.FixedOffset * v728
local v1026 = v728 * v663.FixedScale
local v736 = Instance.new("Texture")
v736.Name = "Tex" .. v726.Name
v736.Face = v726
v736.Color3 = Color3.new(v690.X, v690.Y, v690.Z)
v736.Transparency = v697
v736.ZIndex = v663.ZIndex or 1
v736.Texture = v663.TextureId or ""
v736.OffsetStudsU = v732.X
v736.OffsetStudsV = v732.Y
v736.StudsPerTileU = v1026.X
v736.StudsPerTileV = v1026.Y
v736.Parent = v271
table.insert(textureData [v271], {
instance = v736,
transparency = v697,
brightness = v689,
color = v688,
face = v726,
faceNormal = Vector3.FromNormalId(v726),
fixedOffset = v663.FixedOffset,
fixedScale = v663.FixedScale,
linearSpeed = LinearSpeed,
logScale = v678,
nearPlaneZ = v663.NearPlaneZ or 15,
cameraDirection = v666,
animSpeed = v667,
animPos = Vector3.new(0, 0, 0),
tickColor = Vector3.new(1, 1, 1),
noiseCameraRatio = v669,
brightnessNoiseRange = v671,
transparencyNoiseRange = v663.TransparencyNoiseRange,
onexCameraFix = v267.huge and 6 or v267.big and 2 or 0.75
})
end
end
end
end
then you’ll need this chunk to be called every heartbeat
function processParralax(p47, p48, p49, p50, p51) -- parralaxconfigtable#, parralaxconfigdata, tick, false, parttoapply it to
local v1113 = p47.Size
local v1115 = p51.CFrame
for v1185, v1124 in ipairs(p48) do
local v1188 = v1124.instance
local v1130 = v1124.fixedOffset
local v1135 = v1.Functions.FaceSize(v1124.face, v1113)
local v1137 = ((workspace.CurrentCamera.CFrame:Inverse()) * v1115) * (v1124.faceNormal) * (v1113) * 0.5
v1137 = (v1137) * v1124.linearSpeed
v1137 = v1137 / (v1124.onexCameraFix*2) --/3--p47.--3
local v1191 = 1 + (math.log10((-v1124.nearPlaneZ) / math.min(-0.1, v1137.Z))) * v1124.logScale
local v1148 = Vector3.new(v1137.X, -v1137.Y, 0)
local v1150 = v1124.animPos
v1150 = v1150 + ((v1124.animSpeed) * v1148.Unit) * p49
v1124.animPos = v1150
local v1197 = (v1148) * v1124.cameraDirection
local v1198 = Vector3.zero
local v1204 = (v1197 + v1150) * v1191 - (v1135) * 0.5 + (v1130) * v1135
local v1207 = ((v1135) * v1191) * v1124.fixedScale
v1188.OffsetStudsU = v1204.X
v1188.OffsetStudsV = v1204.Y
v1188.StudsPerTileU = v1207.X
v1188.StudsPerTileV = v1207.Y
local v1217 = ((v1197) * v1124.noiseCameraRatio + v1150) * v1191 - (v1135) * 0.5 + (v1130) * v1135
local v1218 = v1124.transparencyNoiseRange
if v1218 then
local v1220 = 1 - v1124.transparency
v1188.Transparency = math.clamp(1 - v1.Functions.Lerp(v1218[1], v1218[2], (math.noise(v1217.X, v1217.Y, v1217.Z) + 1) * 0.5), 0, 1)
end
local brightnessNoiseRange = v1124.brightnessNoiseRange
local brightness = Vector3.one
if brightnessNoiseRange then
brightness = v1124.brightness * brightnessNoiseRange[1]:Lerp(brightnessNoiseRange[2], (math.noise(-v1217.X, -v1217.Y, -v1217.Z) + 1) * 0.5)
end
--local color = ((v1124.tickColor) * (v1124.color + v1124.brightness))
local color = (v1124.tickColor * v1124.color) * brightness
--color = color/2
v1188.Color3 = Color3.new(color.X, color.Y, color.Z)
end
end