1
\$\begingroup\$

I know Unity has an advanced system for managing complex dynamic particle systems with a few thousand elements (Shuriken).

Does Unity have a more lightweight way to create a very, very large (several million in scene) particle system that's basically a vast point cloud of camera-facing billboards that gets created, then just sits in the scene (recalculating normals as necessary in a non-blocking manner as the camera moves around, but otherwise doing nothing) until it gets destroyed and replaced in its entirety a minute later?

The specific application I have in mind is displaying weather radar. Weather radar consists of multiple 360-degree sweeps, each at different inclinations. The collection of sweeps taken in a single round is called a Volume Scan. What I'm trying to do is render the volume scan for a radar site in its entirety, in a way that allows someone to move the camera around and look at it from different vantage points, seeing the storm structure in 3D.

The important thing to remember is that the scene rendered by the camera needs to be able to change with an acceptable framerate as the user looks around and moves the camera, but the underlying point cloud being rendered by the particles changes at most once every 60 seconds. The only thing that could really be considered "dynamic" might be recalculating the normals for each point as the camera moves around.

Likewise, assuming normal-recalculation for a 4 million+ particle system wouldn't be instantaneous, I'd at least hope it could be done in a non-blocking manner (I'd rather get 60fps with most of the particles facing in the wrong direction at any instant, then have them gradually snap to face the camera once it stops moving, than have the world completely grind to a halt while Unity recalculates the normals).

I'm pretty sure that raw OpenGL and OpenGL ES can do this with acceptable performance, but I'm trying to stick to Unity for the sake of keeping my app somewhat portable (initially targeting "normal Android" for the sake of having something I can actually make money with immediately, but eventually extending it to support Android VR, Oculus, Magic Leap, HoloLens, etc... if only for the sake of having portfolio projects to show off).

So... does Unity have anything like this? At this moment, I don't necessarily need step-by-step directions... more like some suggestions about what to even SEARCH for, or where to look for documentation about it, since pretty much EVERYTHING particle-related I've found for Unity so far seems to be totally 100% Shuriken-focused.

\$\endgroup\$
  • 1
    \$\begingroup\$ Particle systems themselves already do this if you turn off their animation/simulation and just seed them with particles at your desired positions. \$\endgroup\$ – DMGregory Jan 15 at 22:00
0
\$\begingroup\$

Rather than using particles, you probably want point sprites. Create a mesh of points using MeshTopology.Points, and to render the particles you could use a geometry shader to create quads or just use the GPU point primitive (which has a point size input in the vertex shader).

Example: https://forum.unity.com/threads/unity4-point-sprite-texture-coordinates.158891/

If you need alpha blending on the sprites, sorting will be a problem.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.