There’s no need for a model at all! To make dynamic clouds, insert a Clouds instance into your Terrain. From there, you can periodically change their Cover and Density properties using perlin noise:
local run = game:GetService("RunService")
local clouds = script.Parent
local et = 0
local s1,s2 = math.random(0,10), math.random(0,10)
local o1,o2 = s1*0.49, s2*0.39
run.Heartbeat:Connect(function(dt)
et += dt * 0.025
clouds.Cover = math.noise(et, o1, o1) / 2 + 0.5
clouds.Density = math.noise(et, o2, o2) / 2 + 0.5
end)
You can then move these clouds by changing the Workspace’s GlobalWind property. For example, setting it to 10,0,0 will constantly move the clouds 10 studs in the X direction.
if you want to have cloud models in the sky you should use Tween service. There are good amount of videos on YouTube on how to use it or documentation. You could add a few clouds and add chords for them to go and have it repeat. Idk if you know what tween service is or not but it moves an object, gui, stuff like that to a new location and it fills in the frames to make it smooth like its animated.
here is a basic script you could use for moving the clouds (note: you need a new variable for each cloud or if you want to move the cloud back to its original position)
local function cloudmove()
local tweenservice = Tweenservice:Create(game.Workspace.whereyourcloudlocated, Tween, {Position = Vector3.new(wherever you want it to go)})
local movecloudbacktooriginalposition = Tweenservice:Create(game.Workspace.whereyourcloudlocated, Tween, {Position = Vector3.new(oldlocationofcloud)})
tweenservice:Play()
wait(3)
movecloudbacktooriginalposition:Play()
end
while wait(10) do
cloudmove()
end
Of course this is really basic but it gets the job done. You can also check documentation to add other things to the tween like the time it takes for the cloud to reach its destination or the style it moves to the location. Also here are some useful videos and links about Tween Service to help you