WaveEngine 3.2 Preview

We’re excited to release WaveEngine preview 3.2 today. This new release comes with a huge set of new features and improvements.
The 3.2 preview highlights include a completely new GPU-based particle system on compute shader, which offers maximum performance on the new graphics APIs, and which is backward-compatible to those platforms which don’t support compute shaders. We also introduce a new completely dynamic shadow system with support for point lights, spot lights, directional lights and all area light types. Finally, it is important to highlight the new auto scenes code generation, which improves the loading times in release mode. In this article you can find more info about the rest of changes introduced in this new version.

You can download WaveEngine 3.2 preview here and test the new set of samples from github.

Feature  Highlights


We introduce a new completely dynamic shadows system with support for all the current light types. This system is based on shadow map techniques using texture arrays for all light types, in order to unify the filtering behavior and to reduce the standard material shader code.

Video: https://youtu.be/AAU-MLhhkFQ

There is a new ShadowMapComponent that you can add to SceneManagers which allows you to control some important parameters for all dynamic shadows of your project:


The three parameters allow you to change the size of the texture arrays used to hold the shadow maps by type of lights (area lights are considered point lights).

The shadow filter is based on an optimized version of PCF, used for all source light types, which improves visual quality when various types of shadow overlap.
The filter options are PCF 2×2, 3×3, 5×5 and 7×7. Here is a comparison of visual results using a point light:

The next parameter “AutoDepthBounds” helps to improve the visual quality for directional lights. For this type of light we use the cascade shadow map technique with 4 cascades by default. This technique is used to represent shadows in large scenes, improving the visual quality of the closest elements by spliting the camera frustum range into parts and giving more shadow map pixels to closer areas.

Due to the fact that the size of the frustum camera range is important to get better results, the distance between near and far camera planes should be as short as can be for an specific scene. To make it easier for the developer, AutoDepthBounds uses a compute shader to dynamically find the closest and farthest pixels in the last frame depth map, whose depths are used instead of the near and far plane, getting always the best visual results.

In this video you can see shadows in a complex scene comparing the effect of using the AutoDepthBounds parameter:

Particle System

WaveEngine 3.2 includes a new particle system based on compute shaders to drastically improve the performance on the new graphic APIs, as well as maintaining backward compatibility with platforms that do not support compute shaders.
It allows us to increase the particle count, interaction and effects that affect them.

alt Particle Demo

Video: https://www.youtube.com/watch?v=qtbHGJhaPqk

The key of this new functionality is the new ParticleSystem component. It allows you to specify a bunch of particle properties such as:
  • General properties: Number of particles, drag, gravity, simulation space (world or local)…
  • Material: Texture and particle render layer…
  • Other properties: Color, Life, Size, Velocity, Angle, Angular Velocity, Noise and much more.

A particle system needs another component to specify where the particle is going to be emitted. For that purpose we create additional components called particle shape emitters:
  • Primitive shapes: most commonly used shapes.
    • SphereShapeEmitter: emit particles from a sphere shape. You can specify to emit from surface, from the center or the whole volume.
    • BoxShapeEmitter: emit particles from a box shape.
    • CircleShapeEmitter: emit particles from a circle 2D shape.
    • PointShapeEmitter: emit particles from a position.
    • EdgeShapeEmitter: emit particles from a straight line.
  • EntityShapeEmitter: emit particles from the specified entity. It allows to create more complex particle systems:

Another interesting new feature is the possibility to apply forces to particles. We have included several components to help in that task:
  • PointAttractorForce: Attract (or repel using negative force) particles to a point.
  • WindForce: Apply a force to all particles in a certain range in a specified direction.
  • DragForce: The velocity of all particles under the influence of this force will be decreased.
  • EntityAttractorForce: Attract all particles to the specified entity mesh.

Scene code generation

We have worked to improve the load performance of the scenes. Using the new ‘Source Generators‘ .Net feature, the existing scenes of the project are converted to C# code, avoiding deserialization when it is loaded.

The next charts show how load time of some test scenes has been reduced drastically in Web platform when they are loaded from generated C# code:

Running these tests on Windows, the improvement is minor but still very noticeable:

At the same time, this change helps to improve the size of a built project in platforms where the linker is enabled (like web, UWP, Android..), and also removing the scene assets from the application content. For example, an empty Web project published in Release takes more than 6MB of DLLs using the 3.1 preview version and with this release it has been reduced to less than 3MB.

This first step using the new ‘Source Generator‘ feature opens a new door to improve a lot of areas of WaveEngine, like optimizing exported assets, replacing the use of reflection, getting better code-editor interaction, …

Other improvements and bug fixes in WaveEngine 3.2 preview

  • Web platform mouse enter and leave fixed.
  • MathHelper constants and calcs precision improved.
  • New templates includes a default additive layer.
  • Editor allows to change the scene viewer layout.
  • Editor color picker allows to edit hexadecimal value.
  • Primitive meshes cache.
  • Net Framework 4.6.1 support restored.
  • Non-generic overloads for container methods added.
  • Launcher auto-update checksum fixed.
  • Editor entity control undo/redo fixed.
  • Editor shows detached tabs in taskbar.
  • Editor thumbnails generation fixed for small textures.
  • Editor keyboard shortcuts working when entities tree is focused.
  • Editor entities count fixed.
  • Editor light theme fixed.
  • Editor effect selector in material viewer now does not show compute effects.

Read the original article on Plain Concepts website:

Leave a Reply

Your email address will not be published. Required fields are marked *