This is a lot of text, so strap in!
Star Citizen is very much an open world (open space?) sandbox game, so I am familiar with the conversation topics occurring in this thread. All of the below things push us towards a specific goal: consistency.
We use a “sanity checklist”, which in theory every “generic” effect (yes, we do use that word for effects that can occur anywhere in Star Citizen and Squadron 42) needs to be checked against when authoring:
Gravity - has the effect been tested both with and without gravity? (for example how does a ship explosion look when occurring in space versus on a planet with strong gravity).
Wind - similar to above.
Lighting - how does the effect hold up under all the possible time-of-day/lighting/exposure conditions? (our game is PBR and we have a pretty solid particle lighting setup, at least for our cpu particles).
Distance - does the effect look high quality when viewed up close (i.e. explosion occurring right in front of the player) as well as really far away (i.e. explosion way off in the distance) and is the effect suitably optimized to account for both extremes and everything in between?
These are just the most obvious examples. It’s a real challenge but we have a robust particle system that allows us to dynamically alter our affects using strength, life and distance curves (and we’re considering other curves to expand our arsenal).
re: naming conventions. This one is tricky (understatement, right?). Using our environmental effects as an example, we’ve settled on the following: we have a folder with an extensive library of “generic” effects, and “bespoke” folder which houses anything that is created purely for one purpose/location.
Our particle library file structured is like so:
Particles Root/Folder(s) > Particle Libraries > Particle Effects.
The effects library itself is essentially an xml file, however when viewed in the particle editor, it is structured hierarchically which makes everything easier to read.
So I could have a Particles/Environments/Generic folder. Inside that folder could be a particle library called “generic_steam”, and inside that library could be parent groups called "steam_linger" and “steam_jet”.
For the naming of the generic effects, we use the following convention:
effecttype_subtype_dimensions_loopingOrOnce_variantNumber
If that looks convoluted, in practice it isn’t:
steam_jet_4x8m_loop_1
steam_jet_4x8m_once_1
steam_linger_4m3_loop_1
etc.
Something important to bear in mind, once any of the above effects are placed in an environment, various attributes - including scale - can be overridden per instance. This could make a mockery of the “dimensions” part of the name, so we have guidelines on how much an instance can be overridden before the effect is not deemed appropriate for that particular usage. Restraint and common sense is required here, because it would be very easy to bloat the library with multiple variants of the same effect.
None of this is perfect - and as our game grows, we’re always looking at ways we can improve the process/setup - but it works for us at this stage in our project(s) and I wanted to share our experiences with you guys/gals