Advanced Particles

As a developer, it is currently impossible to have stationary or 3-dimensional particles in a game.

In this post, I’ll go over a few things I’d like to see roblox do to enhance particles in the near future.

Stationary Particles
In the below video, a grass field is made using particles in Blender. You can skip to the end if you’d like, but the result is there.

These particles are stationary, so they won’t disappear/reappear, and they have a 3-dimensional appearance too. I’m seeing more and more of these types of particles and it would be very neat to see them in roblox.

3-Dimensional Particles
Below, there’s a video featuring these types of particles. It’s good to use for debris, rocks, or other things that are found on the ground.

To be honest, I could live without this one, but it’s still nice to have there as a backup.

Smoke
Smoke is ugly in roblox, let’s be honest.

I’d like to move further from images of smoke that create billboard guis to a more realistic approach. I really like how the Frostbite engine handles smoke. I realize it’s not open source, so it might not be worth anything, but here’s a short video a minute through showing the 3D effects that would be my dream:

Here’s what I’m not after:

https://gyazo.com/6c39ab7782d37606c62a454444704138

This especially causes a large problem when people walk into the smoke. Here’s what I’m talking about:
https://gyazo.com/dc4c6ce46e0ec160e18e1126e02f3987

Players can see right through the smoke, which in some cases completely destroys the whole purpose of the smoke.

The only current alternative I can think of would be multiple smoke parts, which causes lag while still not looking very good.
https://gyazo.com/8489408c49d4e18735d3f4aceb8a4d8c

Gyazo doesn’t have a high enough framerate to show it, but the clouds are all fighting over which is in front and which is in the back. I would love to see a reform in this division.
Conclusion
I’m extremely happy with all the changes ROBLOX has been making to their engine, and I think the time will come for this to get done, but I’d love to see the day where roblox particles are as beautiful as the many other games out there, giving its developers a whole new light to demonstrate their creations in.

Edit: Fixed link to the first video

23 Likes

looks like the smoke in that video is handled the same way as in roblox

since particles emit from the volume of a part you can just use a large part over wherever you want smoke

edit:
https://gyazo.com/703ce33dfdd0545bbd81ad7b2b84beff

7 Likes

This would actually be a great thing to have. It could potentially reduce lag for detailed builds that require lots of grass / vegetation, since the part count is being reduced (I could be wrong on this).

8 Likes

Interesting thought - I might actually use that. But that still unfortunately doesn’t allow for stationary particles like grass. If you check out this video, you’ll see what I mean.

Also, it would be nice to make some particles not face the camera - in other words, they would essentially be a vertical “Plane” instance that generates itself across the ground. This would be much more effective than having multiple thin Parts and/or MeshParts.

2 Likes

Unreal’s grass generator is primarily a build tool that spawns meshes for you so you don’t have to do it by hand. You can script up something similar in Roblox as long as you have modest expectations for sparse vegetation. You can get randomized and natural looking plants with relatively few meshes, through random rotation, scaling, and choice of textures. If you want dense, procedural grass fields, that should be a specific feature request, (e.g. grass and vegetation generation system), since it’s a special case, rather than a new, general particle system.

The larger plant items you see in that clip appear to be low-poly meshes with alpha-channeled textures on them. Some can be seen to sway in the wind, which is done by skewing (shear) the geometry, like this:

Shearing plants

https://i.gyazo.com/958baf7b04785afd9e2edc2f7501fd92.mp4

You can’t currently shear meshes in Roblox, but you can get similar effects with images or by rotating meshes a small amount, if that level of fine detail is even important to you. Just keep in mind that too much geometry is not good for games you want to reach a wide audience (desktop and mobile) and have good performance, it’s more appropriate for showcases.

4 Likes

Very useful information in that last post, but I fear that having an individual part/mesh for each of my foliage instances would heavily weigh down the server. Would it be possible to completely neglect generating any kind of collision mesh for the part or instance so the physics engine completely ignores the instance? Maybe a way to group all the individual MeshParts to remove the headers of each instance/group. Also, CSG foliage would pose a problem - the data isn’t stored anywhere so the graphics engine generates a whole new mesh for every CSG in the game (as opposed to mesh parts where the graphics engine saves the external source then clones it around the map). I think performance would be the only real reason I’d ever neglect putting foliage in my maps/games.

I would do a mix of particles and mesh foliage

We do get stationary particles when it comes to trails, if only this could be a property of particles…I bet theres some performance issue with that.

It shouldn’t kill your server, but be mindful of the requirements of the client with regard to how much geometry you have in your place. Most people make their grass meshes pretty simple, and they should be anchored and set to not collide so that they are not subject to Physics simulation.There will still be some collision checking done against these parts, since it’s required for things like Touched events to work, and raycasts, but it’s pretty lightweight compared to unanchored collidable parts.

One notable source of this that’s often forgotten are humanoids. Humanoids are always raycasting in front of them to check for ladders. If you have a large number of NPCs in your game and find that they cause performance issues near grass, you can disable their climbing state to stop them from shooting out rays perpetually.

3 Likes

Good point, I’ll keep that in mind when I swap maps. If the map has ladders, include the climbing state. Otherwise I’ll disable it.

I actually never knew that. Where did you find out about this? It’s really useful information.

Unfortunately, not a giant repository of useful information you haven’t seen. It was a one-off post by an intern who had knowledge of ROBLOX internals back in 2015, so not something anyone could reasonably expect you to know.

https://devforum.roblox.com/t/do-lots-of-humanoids-cause-lag/16638/5


Humanoids always have hidden side effects because they’re a black box – we don’t know how they work. IMO this is why they should be ported to Lua , so that we not only know how they’ll impact our game, but also can tweak them elegantly without hacking around them.

2 Likes

How exactly was this skewing effect accomplished?

My friend Craftsmashbuild is trying to do this but can’t seem to get it right. He’s not on the DevForum yet so he asked me to ask you (although I’m also curious).

“Basically I’m trying to replicate it by tween sizing and rotating an image, and it looks decent just not as good as his, it’s almost as if he is using multiple images.” - Craftsmashbuild

He is also using a Surface GUI instead of a Decal (because of problems with rotation anchoring and optimizing performance).

If you could provide code or a place file that would be appreciated also, thanks :wink:

1 Like

By giving an ImageHandleAdornment a CFrame that is a shear. I don’t recommend doing this as a Roblox build technique, I was using it in Studio to give some explanation of what’s seen in the video clip above the post. ImageHandleAdornments are designed for use by Studio’s build tools and plugins, not in games (apart from maybe Tycoons that have build tools). They don’t interact with lighting, don’t always depth sort in a way that you’d want game world objects to, and most importantly their future behavior could likely change to suit new studio tool usage in a way that breaks unsupported in-game uses.

3 Likes

Can we have an example? What’s one of the CFrames?

Thanks!

1 Like