Wave Engine 2.4.0 “WhiteShark” was just released. This cross platform C# powered 3D game engine was previously covered in the Closer Look game engine series if you are interested in learning more. The WhiteShark release brings several new features including OpenVR support, Noesis UI library integration, 9patch support, new single mesh support, new geometric primitives in the editor and much more.
Wave Engine 2.4.0 has adapted the OpenVR API to our engine, allowing the developers to create Virtual Reality applications for multiple hardware vendors such as HTC Vive and Oculus Rift. This is an important step forward in our VR field.
You can learn more in this article.
Another crucial feature now introduced is the possibility to create entities from a model mesh, instead of a whole model. For example, if you have an FBX asset containing several meshes in a hierarchy, we can now create entities for every single mesh, also providing a simple way to maintain that hierarchy. We also improved the way materials are used, deprecating the MaterialsMap and Model components.
We have added the following components:
- MeshFile: Represents a mesh contained in a model asset.
- MeshRenderer: Renders the mesh with the defined material.
- MaterialComponent: Component that associates a material to a mesh part. It allows multiple instances (Once per submaterial, per example)
This article explains this new component in much more detail.
Noesis GUI integration
Noesis GUI is a XAML based framework that allows the creation of highly advanced User Interfaces, supporting Vector graphics and can be developed using Expression Blend IDE. It can help developers to empower your game UI and deliver high quality animations.
You can learn much more in this article.
NinePatch is a really simple and powerful way to define how an image behaves when we escalate it. It adds extra information to an image file, defining what parts of it should be scaled (and which are not) when the image is rendered in a larger or smaller size. This technique was introduced in the Android SDK and is very useful for creating UI components such as buttons, panels, containers, etc.
This article shows how to use it in WaveEngine.
Services support in Visual Editor
Wave Engine Visual Editor has now added the possibility of adding and setting properties of your custom Services directly from the editor. This helps to develop components in our Visual Editor.
We have written an article further explaining these new possibilities.
Multiprocess asset exporting
Until now, Wave Engine exported the project assets sequentially, leading to a bottleneck when we have a larger amount of assets, or large textures, for example. When building your solution, Wave Engine only exports the assets that have changed since the last build, but even then, it can sometimes take a long time.
In Wave Engine 2.4.0 we have improved it, using multiprocessors to export each asset in a single process. That means that the export process is now parallelized, taking advantage of the Multiple cores of your CPU. That means that the export process is accelerated up to a 60% (depending on your machine and your project).
Large amount of assets are now exported much faster
Async/await operations in GameActions
We have improved the async/await support in WaveEngine 2.4.0 allowing us to widely use it in our application and get better integration with GameActions.
This article explains it.
IsEditor property available
We have introduced new property in the Platform Service that allows you to differentiate when you’re running your code in the Visual Editor and when you’re not.
For that we have added these properties:
- Platform.IsEditor: True when executing in the editor, false otherwise.
- Platform.ExecutionMode: Enum property containing one of the next values:
- Standalone: The app is executing as a standalone application outside VisualEditor.
- Editor: The application is running into the Visual Editor
- EditorSimulation: The application is running into the Visual Editor on Simulation Mode.
Until now, when you wanted to create primitives from the editor, you had to select the primitives from the Model selector. However, sometimes you want more control over that primitives. For example, I want to change the size of a sphere without changing the entity’s Transform3D scale or adjusting the tessellation to your needs.
And, as we added the Mesh components in this Wave Engine version, we decided to add several primitive as components. They inherit from the Mesh component, so they can use the MeshRenderer component and MaterialComponent. These are the new primitive components:
We have also changed the way the Editor creates the primitive entities:
Battery level support
WaveEngine has included in this version access to the battery life in the WaveServices.Platform.Features.Battery property. It has the following interesting properties:
- RemainingChargePercent: The percentage of the remaining battery.
- Status: Enum of the BatteryStatus type. Represents the battery status and has one of the next values:
- Unknown: The battery is in an unknown state
- Charging: The battery is plugged in and charging
- Discharging: The battery is currently discharging
- Full: The battery is completely full
- NotCharging: The battery is neither charging nor discharging
- NoBattery: The battery is not present
- PowerSource: Enum of the power source type. It can have one of the following values:
- None: No external power source.
- Ac: Charging from AC
- USB: Charging from USB
- Wireless: Charging from the wireless charger.
- BatteryChanged: Event fired when the battery level or one of its properties has changed.
Another platform feature added in this WaveEngine release is the Vibration API. Now we can control the duration of the vibration with the following method in the WaveServices.Platform.Features.Vibrate property.
Vuforia 6.2.10 support
Wave Engine White Shark decided to improve the AR power upgrading its Vuforia integration, now implementing Vuforia 6.2.10 version. It has some new attractive functions such as:
- Vumark Support: The next generation bar code. It allows the freedom for a customized and brand-conscious design while simultaneously encoding data and acting as an AR target. VuMark designs are completely customizable, so you can have a unique VuMark for every unique object.
- Trackable component, making your AR development much easier.
- Visual Editor integration.
New Forward Material
Our Standard Material is a really powerful material that uses Light Prepass to calculate its lighting, which is able to compute several lights thanks to its illumination pass.
However, that light pass has a cost especially when we have a small amount of light or none or when we try to manually configure your lights in a mobile development when GPU is a valuable resource.
For those cases we created the ForwardMaterial. It gets the lighting from the most relevant light that affects it in the scene (the brightest one or the closest one). That means the fastest rendering and the absence of the Light Pass.
Xamarin Forms template launchers.
If you’re using your Wave project within Xamarin Forms application, there is now some good news, as we’ve created a new template that helps you with the integration. This template will create a Xamarin Form with a Wave Engine component in it, similar to the other Interop templates like WPF and GTK#.
Xamarin Forms template on the UWP profile
PreRender and PostRender events
RenderManager has added two new useful events:
- OnPreRender: called before the manager starts rendering the scene.
- OnPostRender: called after the manager has finished rendering the scene.
These events can be helpful when dealing with other libraries (We used PreRender event on our NoesisExension to render the panel to a texture) or synchronizing your rendering phase with other parts of your application.
Geometry Shader support
We took a step further in our DirectX/OpenGL integration with the addition of Geometry Shaders. These shaders will allow you to create geometry in GPU, allowing spectacular effects like tessellation, displacement mapping or accelerated particle sprite generation. Now when you create your custom material, you can pass the Geometry Shader path along with the Vertex and Pixel shaders in every technique.