Does anyone know if it’s possible to make fog similar to the one in Unreal Engine 5 or Silent Hill 2 Remake specifically? I’m making a silent hill inspired game and this is the only thing I’m really trying hard on to Achieve.
I’m aware that it’s most likely a limiation that Roblox has since it doesn’t support volumetrics in the way I want it to yet, but I want to know if there is possibly another way to make the atmosphere / fog look like this
I’ve already tried using particle emitters but they aren’t really able to replicate the fluffiness and smoothness that the fog has here. Maybe I’m asking for too much, but I hope that one day Roblox is able to make an update that has to do with volumetrics/fog again as this is the closets I’ve beeen able to get.
Why not consider using a mesh around the player? Meshes can be animated, warped, or distorted to create visual effects. Using this with the beta feature EditableMesh and EditableImage could provide the flexibility you’re looking for.
Additionally, you might experiment with alpha shading on the mesh. I’m not sure, but this could potentially improve the fog effect by adding depth.
The last time I’ve tried using a volumetric lighting mesh it was extremely impactful on the performance in my game. Those adaptive scripts don’t really help either and doing this most likely doesn’t give the results I want regardless.
The only fix I can see here is if Roblox adds a way to give particles collisions or some more options to Them. Unless I’m missing something.
Because it is. An animated mesh with bones takes a lot of performance.
Also its not a good idea because the mesh itself will collide with the enviroment which will make the fog look odd if part of it is behind a building
This is not true. Animation is the preferred method for implementing volumetric fog, since unlike TweenService or physics properties, it does not replicate every frame across the client-server boundary.
When talking about performance in the context of a single mesh, the same can be said about RunService and TweenService, since they work continuously every frame and are replicated across the client-server boundary.
This can be fixed in most game engines, including Roblox Studio. Read up on context-aware rendering if you’re interested. Although it will be difficult to implement in relation to volumetric fog, it is possible.
Using TweenService or updating properties via RunService only replicates assuming this is running on the server. I’m not too sure why this would be running on the server. Either way, if it is for some reason running on the server, I don’t believe animations would be more performant, but actually much less depending on how many bones the mesh has.
The most performant method of animating a fog mesh would be to use RunService (preferably .Heartbeat or any event not tied to rendering) to update the mesh’s properties, and handling all of this on the client.
editablemeshes are only laggy on large scales and if not properly optimized.
nothing wrong with meshes, but OP would have to make sure they have proper optimizations in place to make sure the script stays <1ms.
to reply to the actual topic,
i suggest you check out this very interesting video (by the holy acerola):
I’m gonna be honest here, I have no idea how I’m going to be able to use this when it comes to implementing this on a full map. I have a forest area, and a small section of a town along with a lake. All of which need to be covered in fog. Atmosphere will of course help with this but for the actual fog which is the fog on the ground in these screenshots I would have to improvise a lot. This seems like a really good way for making fog though.
You could try using a circular beam around the player with a looping fog like texture and combine that with some fog particles and lighting/atmosphere settings for a better illusion.
the closest thing I’ve found for me that works like volumetrics with no scripting required is using lots of billboard UI’s, which visually in my opinion works better than the common beam imitation that many developers use, but it’s just not practical in most scenarios for performance. And functionally I don’t think it would really help in your case, but its a neat trick to know.