Javier Cantón
Plain Concepts CTIO
Fresh out of the oven, we’re excited to bring you the latest release of Evergine! While we will continue to roll out minor versions throughout 2024, this is the final major release of the year. The next major update is planned for February-March 2025, following our roadmap.
This new version adds an exciting new dimension to Evergine by integrating AI models that can run either on cloud services or locally on your machine. These AI tools enable the generation of essential development assets—such as models, textures, cubemaps, animations, and sounds—directly within Evergine Studio. This marks the first step in our broader plan to enhance asset creation capabilities.
By incorporating AI models into the workflow, developers can significantly boost their productivity and streamline the entire development process.
Evergine is a graphics engine developed by Plain Concepts to power our internal products, with a decade-long commitment to a user-friendly licensing model:
The latest Evergine release introduces AI-driven asset generation as a standout feature, enabling developers to harness AI-assisted workflows directly within Evergine Studio.
In this version, we’ve successfully migrated the entire Evergine project to .NET 8, moving all libraries from .NET Standard 2.0. Now, all platforms and tools are compiled using .NET 8, ensuring improved performance and compatibility across the board.
We’ve also added a powerful new asset for creating effect libraries. This allows developers to write reusable code based on HLSL, reducing code duplication in shaders. These shaders can then be automatically compiled to GLSL, SPIR-V, MSL, or WGSL, streamlining the development process.
Another exciting development is the experimental native support for WebGPU. We’ve implemented a low-level adapter using the wgpu project, offering a fast and efficient way to leverage this cutting-edge API in Evergine. This is a major step toward full WebGPU support for browsers, enabling compute shader capabilities and offering significant improvements over WebGL for web-based applications.
And that’s just the start! Dive into this new release to discover all the innovative features we’ve packed into Evergine. Let the exploration begin!
Download and install:
This is the first Evergine release that introduces AI tools for asset generation within the Evergine Studio workflow. This initial step allows users to generate detailed 3D models with textures from text or images using a cloud service, and we plan to explore more AI models to enable users to generate different types of assets.
We are also exploring the integration of various AI models, giving users the ability to compare and choose the best option for each task, whether using local AI models that run directly on their machine or cloud-based AI models that offer rapid advancements in quality.
Starting today, you can use the AI tools integrated into Evergine Studio to generate assets directly within your development workflow. We’ve also included a gallery where you can store your 3D models to build your own 3D model library.
If you’re interested in trying it out, check out the following article to learn how: AI-Driven Asset Generation
The .NET ecosystem is evolving rapidly, and we always aim to offer the recommended APIs for .NET projects. As shown in the image above, .NET 7 reached end of support in May 2024, and .NET 6 will reach end of support in November 2024.
To stay ahead, we’ve migrated the entire Evergine project framework and tools to .NET 8.0, allowing us to take full advantage of new features in C# 12 and performance improvements. This ensures our developers are working with a stable, supported version for their products. Since all our templates are already updated to .NET 8, developers won’t encounter any breaking changes.
.NET 8 will have official support until November 2026, so if you’re starting a new project today, this is the recommended version for you.
As in the previous version, where we introduced support for nested prefabs, in this release we have updated our two main libraries used for creating mixed reality experiences to take full advantage of this feature.
I’m referring to MRTK and XRV. While we had already published MRTK in a public GitHub repository, with this version, we are also making XRV publicly available under the MIT license.
XRV is a new library built on top of MRTK, offering higher-level utilities for rapid mixed-reality application development. It includes features like hand menus, themes and localization, built-in dialogs, access to cloud storage, and built-in modules such as Ruler, Painter, Model Viewer, and more.
Here are the links to explore these libraries:
Based on user feedback, we have improved the reusability and maintainability of the shaders created with the Evergine Effect tool. This tool now allows users to write shaders using HLSL and run them directly on OpenGL, Metal, Vulkan, WebGL, or WebGPU. Internally, the code is automatically translated to GLSL, SPIR-V, MSL, or WGSL.
In this version, we’ve introduced a new asset called Library Effect, which allows users to write reusable code that can be shared across multiple shaders. Common functions, constants, variables, structs, and directives can be stored in a single library file, reducing code duplication and improving maintainability. This also ensures consistency across shaders that use the same logic.
For example, if you need to create a shader that runs on WebGL (based on OpenGL 3.0) and Vulkan with compute shaders, you can use a library effect to write the common functions and share them across each platform, even when using different processing pipelines.
Continue reading for more information at: New Library Effect
Motion vector information is essential when working with techniques like Temporal Anti-Aliasing (TAA) or Motion Blur to achieve optimal results. We have improved both built-in techniques included in our default post-processing graph by adding this information in a G-buffer pass within the render path whenever these techniques are active.
Motion vectors are also crucial for integrating new techniques like super resolution or frame generation based on Nvidia DLSS or AMD FSR 3. Without this data, animated objects may render with visual artifacts.
By including motion vector information in the default render path, we make it easier for developers to use it as a texture input in their shaders without needing to rewrite an entirely new custom render path.
To implement the motion vector feature, we’ve introduced changes to Transform3D and SkinnedMeshRenderer. For more information, refer to: Motion Vectors Pass
This release introduces experimental support through a new template to WebGPU, which is a new modern graphics API that provides developers with low-level access to the GPU on WebPlatforms. This is a new Web Standard by W3C, designed to provide higher performance and more advanced features and closer access to the GPU that the current WebGL 2.0.
WebGPU use native graphics API on different platforms like DirectX12, Vulkan or Metal and the key differents versus WebGL are:
Most popular browsers are pulishing the support to this new API, t Chromium-based browsers already have support for WebGPU in their stable versions, and to quickly add support to this API Firefox create a project call WGPU or WebGPU native, this is a cross-platform rust graphics library which is based on the WebGPU standard but run on desktop. We are using it to validate our new adapter to WebGPU and in the next release we will planned to published the web based template.
Interesting on this new Web graphics API, more info at: Experimental WebGPU Native support
Multimodal input in mixed reality applications provides simultaneous tracking of both hands and controllers, and also indicates whether the controllers are in hand or not.
Users can hold a controller in one hand for precise actions, such as using tools, while keeping the other hand free for immersive object interactions. It’s possible to switch between hands and controllers based on comfort, which helps reduce fatigue during longer sessions.
The system supports instant transitions by detecting when controllers are no longer held, allowing for immediate switching between inputs. Multimodal input continues to track the controllers even when they are not being held, making it easy for users to find them without breaking immersion.
This new feature on Meta Quest devices opens up a world of possibilities for technicians using these technologies in industrial settings, where both precision and free hands are essential for completing tasks.
The new Variable Bone Weights Support feature in Evergine enhances the animation system by allowing each model to use a different number of bone weights per vertex. Previously, models in Evergine were restricted by a fixed number of bone weights, limiting the quality of animations, particularly in highly detailed areas like facial expressions.This enhancement allows working with animated models with large In addition to improving the skinning system, the shaders have been upgraded to support this feature efficiently. The rendering pipeline adapts dynamically to handle varying bone weights, maintaining performance while delivering enhanced visual quality.
This feature allows developers to achieve higher fidelity in animations, providing the tools needed to create more expressive and natural-looking characters.
As part of our ongoing commitment to improving Evergine’s developer experience, this release includes significant updates to our project documentation. We’ve enhanced the sections on meshes and animations, XR Passthrough, Library effect, and ImGUI extension.
These updates include detailed usage examples of our APIs and practical tips designed to help developers get the most out of Evergine’s features. The improved documentation is aimed at simplifying workflows and providing clear guidance on how to best utilize these tools, ensuring a smoother development experience.
For more details, you can explore the following links:
Meshes on models: https://docs.evergine.com/2024.10.24/manual/graphics/meshes/index.html
XR Passthrough: https://docs.evergine.com/2024.10.24/manual/xr/passthrough.html
New library effect: https://docs.evergine.com/2024.10.24/manual/graphics/effects/library_effect.html
ImGUI Extensions examples: https://docs.evergine.com/2024.10.24/manual/extensions/imgui/features.html
We hope you enjoy this release as we continue working hard on the next major release, planned for February-March 2025. As mentioned before, introducing Generative AI models into Evergine Studio is an exciting direction for us, and we will keep expanding in that area.
We’ve also been experimenting with Large Language Models (LLMs) as a potential way to enhance our web documentation and accelerate development cycles. We’ll continue exploring these technologies to integrate more tools in future releases.
I’m also excited to share that our roadmap includes more platforms and features for various industries. We aim to work closely with many companies, listening to their feedback to shorten the cycle of introducing useful features.
In addition, we are developing a completely new Render Pipeline to support the latest graphics API features, such as Mesh Shaders, which will allow us to maximize performance on every platform. We’re also working on new features like a Job System to help developers create multi-threaded CPU code similar to how they use compute shaders.
Stay tuned for more updates!
Thank you for your continued support of Evergine. We’re excited to work alongside you in creating cutting-edge technology for your products.
Have a nice day!
Javier Cantón
Plain Concepts CTIO
Cookie | Duration | Description |
---|---|---|
__cfduid | 1 year | The cookie is used by cdn services like CloudFare to identify individual clients behind a shared IP address and apply security settings on a per-client basis. It does not correspond to any user ID in the web application and does not store any personally identifiable information. |
__cfduid | 29 days 23 hours 59 minutes | The cookie is used by cdn services like CloudFare to identify individual clients behind a shared IP address and apply security settings on a per-client basis. It does not correspond to any user ID in the web application and does not store any personally identifiable information. |
__cfduid | 1 year | The cookie is used by cdn services like CloudFare to identify individual clients behind a shared IP address and apply security settings on a per-client basis. It does not correspond to any user ID in the web application and does not store any personally identifiable information. |
__cfduid | 29 days 23 hours 59 minutes | The cookie is used by cdn services like CloudFare to identify individual clients behind a shared IP address and apply security settings on a per-client basis. It does not correspond to any user ID in the web application and does not store any personally identifiable information. |
_ga | 1 year | This cookie is installed by Google Analytics. The cookie is used to calculate visitor, session, campaign data and keep track of site usage for the site's analytics report. The cookies store information anonymously and assign a randomly generated number to identify unique visitors. |
_ga | 1 year | This cookie is installed by Google Analytics. The cookie is used to calculate visitor, session, campaign data and keep track of site usage for the site's analytics report. The cookies store information anonymously and assign a randomly generated number to identify unique visitors. |
_ga | 1 year | This cookie is installed by Google Analytics. The cookie is used to calculate visitor, session, campaign data and keep track of site usage for the site's analytics report. The cookies store information anonymously and assign a randomly generated number to identify unique visitors. |
_ga | 1 year | This cookie is installed by Google Analytics. The cookie is used to calculate visitor, session, campaign data and keep track of site usage for the site's analytics report. The cookies store information anonymously and assign a randomly generated number to identify unique visitors. |
_gat_UA-326213-2 | 1 year | No description |
_gat_UA-326213-2 | 1 year | No description |
_gat_UA-326213-2 | 1 year | No description |
_gat_UA-326213-2 | 1 year | No description |
_gid | 1 year | This cookie is installed by Google Analytics. The cookie is used to store information of how visitors use a website and helps in creating an analytics report of how the wbsite is doing. The data collected including the number visitors, the source where they have come from, and the pages viisted in an anonymous form. |
_gid | 1 year | This cookie is installed by Google Analytics. The cookie is used to store information of how visitors use a website and helps in creating an analytics report of how the wbsite is doing. The data collected including the number visitors, the source where they have come from, and the pages viisted in an anonymous form. |
_gid | 1 year | This cookie is installed by Google Analytics. The cookie is used to store information of how visitors use a website and helps in creating an analytics report of how the wbsite is doing. The data collected including the number visitors, the source where they have come from, and the pages viisted in an anonymous form. |
_gid | 1 year | This cookie is installed by Google Analytics. The cookie is used to store information of how visitors use a website and helps in creating an analytics report of how the wbsite is doing. The data collected including the number visitors, the source where they have come from, and the pages viisted in an anonymous form. |
attributionCookie | session | No description |
cookielawinfo-checkbox-analytics | 1 year | Set by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Analytics" category . |
cookielawinfo-checkbox-necessary | 1 year | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary". |
cookielawinfo-checkbox-necessary | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary". |
cookielawinfo-checkbox-necessary | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary". |
cookielawinfo-checkbox-necessary | 1 year | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary". |
cookielawinfo-checkbox-non-necessary | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Non Necessary". |
cookielawinfo-checkbox-non-necessary | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Non Necessary". |
cookielawinfo-checkbox-non-necessary | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Non Necessary". |
cookielawinfo-checkbox-non-necessary | 1 year | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Non Necessary". |
cookielawinfo-checkbox-performance | 1 year | Set by the GDPR Cookie Consent plugin, this cookie is used to store the user consent for cookies in the category "Performance". |
cppro-ft | 1 year | No description |
cppro-ft | 7 years 1 months 12 days 23 hours 59 minutes | No description |
cppro-ft | 7 years 1 months 12 days 23 hours 59 minutes | No description |
cppro-ft | 1 year | No description |
cppro-ft-style | 1 year | No description |
cppro-ft-style | 1 year | No description |
cppro-ft-style | session | No description |
cppro-ft-style | session | No description |
cppro-ft-style-temp | 23 hours 59 minutes | No description |
cppro-ft-style-temp | 23 hours 59 minutes | No description |
cppro-ft-style-temp | 23 hours 59 minutes | No description |
cppro-ft-style-temp | 1 year | No description |
i18n | 10 years | No description available. |
IE-jwt | 62 years 6 months 9 days 9 hours | No description |
IE-LANG_CODE | 62 years 6 months 9 days 9 hours | No description |
IE-set_country | 62 years 6 months 9 days 9 hours | No description |
JSESSIONID | session | The JSESSIONID cookie is used by New Relic to store a session identifier so that New Relic can monitor session counts for an application. |
viewed_cookie_policy | 11 months | The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data. |
viewed_cookie_policy | 1 year | The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data. |
viewed_cookie_policy | 1 year | The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data. |
viewed_cookie_policy | 11 months | The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data. |
VISITOR_INFO1_LIVE | 5 months 27 days | A cookie set by YouTube to measure bandwidth that determines whether the user gets the new or old player interface. |
wmc | 9 years 11 months 30 days 11 hours 59 minutes | No description |
Cookie | Duration | Description |
---|---|---|
__cf_bm | 30 minutes | This cookie, set by Cloudflare, is used to support Cloudflare Bot Management. |
sp_landing | 1 day | The sp_landing is set by Spotify to implement audio content from Spotify on the website and also registers information on user interaction related to the audio content. |
sp_t | 1 year | The sp_t cookie is set by Spotify to implement audio content from Spotify on the website and also registers information on user interaction related to the audio content. |
Cookie | Duration | Description |
---|---|---|
_hjAbsoluteSessionInProgress | 1 year | No description |
_hjAbsoluteSessionInProgress | 1 year | No description |
_hjAbsoluteSessionInProgress | 1 year | No description |
_hjAbsoluteSessionInProgress | 1 year | No description |
_hjFirstSeen | 29 minutes | No description |
_hjFirstSeen | 29 minutes | No description |
_hjFirstSeen | 29 minutes | No description |
_hjFirstSeen | 1 year | No description |
_hjid | 11 months 29 days 23 hours 59 minutes | This cookie is set by Hotjar. This cookie is set when the customer first lands on a page with the Hotjar script. It is used to persist the random user ID, unique to that site on the browser. This ensures that behavior in subsequent visits to the same site will be attributed to the same user ID. |
_hjid | 11 months 29 days 23 hours 59 minutes | This cookie is set by Hotjar. This cookie is set when the customer first lands on a page with the Hotjar script. It is used to persist the random user ID, unique to that site on the browser. This ensures that behavior in subsequent visits to the same site will be attributed to the same user ID. |
_hjid | 1 year | This cookie is set by Hotjar. This cookie is set when the customer first lands on a page with the Hotjar script. It is used to persist the random user ID, unique to that site on the browser. This ensures that behavior in subsequent visits to the same site will be attributed to the same user ID. |
_hjid | 1 year | This cookie is set by Hotjar. This cookie is set when the customer first lands on a page with the Hotjar script. It is used to persist the random user ID, unique to that site on the browser. This ensures that behavior in subsequent visits to the same site will be attributed to the same user ID. |
_hjIncludedInPageviewSample | 1 year | No description |
_hjIncludedInPageviewSample | 1 year | No description |
_hjIncludedInPageviewSample | 1 year | No description |
_hjIncludedInPageviewSample | 1 year | No description |
_hjSession_1776154 | session | No description |
_hjSessionUser_1776154 | session | No description |
_hjTLDTest | 1 year | No description |
_hjTLDTest | 1 year | No description |
_hjTLDTest | session | No description |
_hjTLDTest | session | No description |
_lfa_test_cookie_stored | past | No description |
Cookie | Duration | Description |
---|---|---|
loglevel | never | No description available. |
prism_90878714 | 1 month | No description |
redirectFacebook | 2 minutes | No description |
YSC | session | YSC cookie is set by Youtube and is used to track the views of embedded videos on Youtube pages. |
yt-remote-connected-devices | never | YouTube sets this cookie to store the video preferences of the user using embedded YouTube video. |
yt-remote-device-id | never | YouTube sets this cookie to store the video preferences of the user using embedded YouTube video. |
yt.innertube::nextId | never | This cookie, set by YouTube, registers a unique ID to store data on what videos from YouTube the user has seen. |
yt.innertube::requests | never | This cookie, set by YouTube, registers a unique ID to store data on what videos from YouTube the user has seen. |