Version 1.1 Release

Release date: 14.1.2019

Major features

Particle system

The biggest feature added in this update was the introduction of the brand new particle system. The goal was to provide an extensive system that can match the capabilities of particle systems provided by commercial engines. Some highlights of the system are:

Dual simulation backend

The entire particle system has been developed to support two completely separate simulation backends

CPU simulation - Provides more traditional particle effects with a large number of behaviours, as well as a simple way to set up your own behaviours.

GPU simulation - Capable of simulating hundreds of thousands of particles by running the simulation completely on the GPU.

High performance

All particle emission and simulation is fully multi-threaded, meaning that even without relying on GPU simulation you can run a large number of particle systems at once. But if that still isn't enough you can always use the GPU simulation for extreme particle counts.

Complex emission options

Emitters determine where your particles initially spawn, along with other properties such as velocity and color. A wide range of primitive emitters is provided, including box, sphere, cone, circle, line, rectangle and others. Every primitive emitter can additionally be customized with properties such as volume thickness, emission arcs and more.

Emission via bursts

Mesh emitters

Additionally emission from completely arbitrary shapes is provided through mesh emitters. Mesh emitted particles can spawn on user-provided mesh, as well as inherit mesh properties such as normals. This allows you to create complex effects in 3D modeling programs and use within bsf. Your meshes can also be animated, as particle emission is supported from skinned meshes!

Distribution

Majority of particle system properties are specified as distributions, including properties such as color, size, velocity and most others. Distribution properties can be defined as a constant, randomly selected range, time varying curve or even a time varying random range. This system provides a simple, unified API that gives the user a lot of customization options.

Extremely customizable

A wide range of built-in behaviours is provided for both CPU and GPU simulations, but most importantly it is easy to add your own completely custom behaviours. The system was designed to be easy to extend, whether you need to add custom emitter shapes or properties, particle behaviours or even extend the GPU simulation shaders.

Mix of behaviours to create a traditional smoke effect

Vector fields

Vector fields allow you to create extremely complex particle movement patterns by setting up a 3D grid of vectors that controls particle velocity and/or force. They can be created using tools such as Maya Fluids for fluid simulation, or specialized particle system vector field tools such as VectorayGen.

Vector field simulation

Collisions

The system supports collisions of particles with the rest of the scene, allowing you to create realistic effects. The system supports three separate collision modes:

Planes - Define a custom set of planes to collide against. Restrictive but very performant, and in many cases perfectly adequate.

World - Particles will collide with all physical objects. Provides accurate physical collisions with the scene.

Material animation

Materials now support animated values such as animation curves, color gradients or sprite textures. These values can be assigned pretty much the same as their constant versions:

float shader properties can be assigned an animation curve

Color shader properties can be assigned a color gradient

Texture shader properties can be assigned an animated sprite texture

This provides a unified approach to handling material animation across all engine systems, including normal rendering, particle system, decals and GUI. It doesn't require any additional logic from the user to perform the animation, just to set up the necessary curve, gradient or a texture. The system then takes care of animating the property in a performance efficient way.

Emissive materials

Emissive material applied to a particle system

All standard materials that support lighting can now have parts of their surfaces defined as emissive through an emissive mask texture and an emissive color and intensity. Emission is useful for surfaces representing light emitters (screens, monitors, neon lights, etc.), it interacts nicely with effects such as bloom, and can be even be used for indirect lighting through the use of light probes.

Decals

Decal projected onto a surface

Decals are used for projecting textures onto other surfaces, either for dynamic gameplay purposes (i.e. bullet holes, explosion marks) or for level design for adding more details to surfaces without having to create new textures.

Decals support multiple modes:

Transparent - This is the default mode where a full complement of PBR textures is provided and blended with the underlying surface.

Stain - Similar to Transparent except the albedo color is multiplied (modulated) with the underlying albedo. This makes it for suitable for stain-like decals that modify the existing color, rather than replace it.

Normal - Only the normal map is projected. This allows the decal to be used for effects such a footsteps in the snow.

Emissive - Only the emissive texture is projected. Useful for making surfaces appear as emitting light.

Decals can also be selectively applied to only certain surfaces by setting rendering layers.