Release notes
New version of Eagle Engine is finally here! It introduces a lot of new exciting features that make it one big step closer to becoming a more or less complete engine.
New version adds support for projects and building them as games (finally). Rendering now supports particles, animated meshes, features such as depth of field, motion blur, reflections, and many more. And last, but not least: Navigation Meshes! Now you’re able to make your NPCs have a big brain - they’ll able to navigate around the scene and avoid walls & obstacles.
Breathtaking, I know. A wise man once said: “i havig my new game enjain! coe closer and see. YOU WILL BE IMPRESSED WHAT I AM GOING TO SHOW THE REST OF THE WOLRd!!” So here it is. Enjoy!
Projects & Assets
With this release you’re able to create your AAA-projects and work on them separately. After creating a new project, Visual Studio 2022/2019 solution will be generated for your game-scripts. But you’ll need to build it manually by opening up .sln file in the projects folder and compiling it.
Projects
Project creation
Engine now comes with Win-SetupFileAssociation.bat script that allows to associate .egproj files with Eagle Engine.
Which means you’ll be able to double-click your project file to open it.
Projects don’t recognize raw content files anymore (such as .png, .fbx, and etc…)
Instead, they need to be explicitly imported that will convert them into a special Eagle asset file format (.egasset).
Currently, the engine supports the following asset types:
Texture 2D. Supported formats:
png;jpg;tga.Texture Cube. Supported format:
hdr.Static & **Skeletal** meshes. Supported mesh formats:
fbx;gltf,blend;3ds;obj;smd;vta;stl.Audio. Supported sound formats:
mp3;wav;ogg;wma.Sound Group. Allows you to group sounds. For example, you can create a “Background music” sound group and assign audio assets to it. Then, you can mute all of them just by muting the sound group.
Font. Supported font formats:
ttf;otf.Physics Material. Controls static & dynamic friction, and bounciness.
Entity. It’s is a pretty useful asset type since it allows you to set up an entity that you can easily spawn in the editor or in runtime. You don’t have to manually create the same entities anymore.
Note
A newly created project has two static mesh assets by default: Cube, and Sphere.
The benefit of having assets is that you can change its settings and affect the whole project. For example, previously there were no material assets, so if you wanted to create a bunch of same-looking objects, you had to go through all of them and set each material inputs individually. And what if you wanted to adjust something? Again, you’d have go through all of them and change it. But now you can create a material asset, set it up once, and just assign it to other renderables (meshes, sprites, texts, etc…). When an asset is changed, other object pick up the latest version automatically.
Each asset type has its own editor which can be opened by double-clicking an asset in Content Browser. And almost all of these editors have a viewport where you can visualize it.
Physics Material Editor
Skeletal Mesh Editor
Warning
If you ever decide to duplicate an asset manually (bypassing editor’s content browser functionality),
you need to know that it probably won’t work correctly since each asset file stores its own unique ID.
Which means you’ll end up with two or more assets that have the same ID.
So, if you desperately need to do it, you’ll have to manually open asset files in a text editor and change its GUID (two uint64 values).
Game Builds
Finally, game builds that you’ll be able to share with your friends! If you want to build & ship you project as a game, you can just click File -> Build project and select the destination folder.
But before building it, make sure you’ve selected a start up scene for the game in Project Settings tab.
Animations
Eagle now supports Skeletal Mesh component which means you can render animated meshes.
You can open a skeletal mesh asset to visualize it which displays some data about the mesh, materials, skeletal tree, and ragdoll data.
Skeletal Tree displays bone transforms in local space (offsets from the origin). You can’t move bones of a mesh, but you can create your own Virtual bones by right-clicking a bone in the tree. You can modify their transforms and use them in C# to attach any other game-objects.
Skeletal Mesh asset editor
Ragdoll Tree allows you to setup ragdoll of the mesh. You can change the transformation, mass, linear & angular damping, physics material, and shape of a ragdoll collider (Capsule, Box, or Sphere).
Transforms of ragdoll bones are displayed relative to originally computed transforms. You can also change the way a ragdoll is generated. By increasing Min ragdoll bone size, you can optimize the simulation, since more bones will be merged into a single ragdoll collider.
So, for performance reasons, it’s recommended to set it as high as possible. You can also control Max Twist and Max Swing angles (in degrees).
Skeletal Mesh Editor also allows you to simulate the ragdoll you’ve set up.
Skeletal Mesh asset ragdoll editor
You can open an animation asset to adjust some of its properties.
Extract Root Motion. Some animations have transformation data embedded into them. In this case, you can enable root motion to let animations drive the entity transformation. For example, if root motion is supported and enabled, and you’re playing “Run” animation, then the whole Entity will move. So, you can build animation-driven gameplay.
Events. You can create animation events that will allow you to react to them in C#. For example, if you want to play “Step” sound, you can create an event at an appropriate timing, and when it’s reached, C#
Entity.OnAnimationEvent()is called.
Animation asset editor
Animation Graphs
You didn’t think Eagle wouldn’t support any tools to build complex animations, did you?
New version of the engine adds support for Animation Graphs which allows to do exactly that.
It’s a node based graph editor that drives the animation.
Animation Graph supports variables of four types: Bool, Float, String, and Animation. All variables can be changed during runtime and accessed in C#.
You can use this asset in Skeletal Mesh component. Note that each component has its own copy of the graph. So, changing variables in one component won’t affect others.
Animation Graph editor
Animation Graph supports State Machines that allow you to define a transition logic for animations. By clicking on a state itself, you can define an animation that will be played when the state is active. You can also specify transition settings, such as: transition condition, transition time, smooth transition. If smooth transition is disabled, frozen transition will be used: clip A is frozen while clip B gradually takes over the movement. This kind of transitional blend works well when the two clips/poses are unrelated and smooth transition looks unnatural.
To learn more about animation graph and its possibilities, go here.
State Machine example
Note
To break a node link/connection, left-click it while holding Alt.
GPU Particle System
Need particles? Not a problem. The engine now supports emitters that are responsible for spawning and managing a lot particles. Currently, emitters only support 2D particles, meaning they’ll always face the camera.
Go here to learn more about particles and their settings.
Simple smoke effect
Screen Space Reflections
New version of the engine adds new rendering feature: Screen Space Reflection (SSR). SSR is a technique for reusing screen space data to calculate reflections. Since it’s a screen space effect, you won’t be able to see objects in reflections if they’re not on the screen.
SSR is disabled
SSR is enabled
Reflection is cutoff
You can control the quality of SSR by changing Samples per Quad and Max Traversal Iterations.
The more, the better, and also slower.
Additionally, you can adjust Roughness Threshold for SSR. If material’s roughness is higher than the threshold, SSR won’t be applied.
Depth of Field
Eagle now supports Depth of Field (DoF). DoF is a rendering technique that simulates blur effect similar to how real cameras work.
Depth of Field
You can change aperture shape, size, and focal length to adjust the way blur is applied.
There are also COC Scale and Max COC settings for adjusting circle of confusion.
Note
You can set Aperture Size to 0 to disable DoF.
Motion Blur
Eagle now supports Motion Blur. It’s a rendering technique that blurs objects that are in motion.
Motion Blur
You can adjust its quality by changing the Samples setting.
Also, you can adjust Strength parameter.
Auto Exposure
Eagle now supports Auto Exposure. It simulates how the human eye adjusts to changes in brightness in real-time. For example, when walking from a dimly lit interior to a brightly lit exterior, or the other way around.
Decals
New Decal component was added that allows you to project a material on other objects. Decals support all material features except for the normal.
When using decals, you can set its sort priority: higher values means decal will be drawn on top of others.
If you don’t want an object to receive a decal, you can disable it in the corresponding component settings. For example, in Static Mesh component.
“Pattern” texture applied as a decal on top of a sphere.
Editor Updates
There a few nice editor updates that make your life easier. Mainly, these are Content Browser updates.
Since now engine works with assets, content browser allows you to import, save, and reload assets. What does reload assets mean? When importing an assets, its original filepath is saved (e.g. “D:/art/texture.png”). So, if at some point you update this texture and you want to update its asset, you can reload it to update the data.
Content Browser also allows you can copy/cut/paste assets, rename (F2), duplicate (Ctrl + W), and delete them. Also, now it can delete folders.
As was mentioned before, you content browser allows you to open asset editors by double-clicking them. But also you can open it by clicking an asset thumbnail (for example, in StaticMeshComponent which display selected asset).
Support for runtime assets thumbnails was added so it’s easier to tell what it actually looks like.
Asset thumbnails
Editor now exposes more C# types: all asset types (including base Asset class), and Entity type.
When public Entity variable is created in your scripts, the editor allows you to select an entity from the scene to assign to it.
Note
Now UI displays Quaternions instead of Eulers angles for rotation. Not sure that’s a good idea, but it completely fixes Gimbal lock issue.
Other editor changes:
Added UI popup messages so that you don’t have to look into the console all the time.
Editor now shows unsaved assets before closing. You can select whether to save them or discard changes.
Increased content browser items from 64x64 to 96x96.
Now Content browser is refreshed if changes are detected.
Now ContentBrowser displays base mip of textures.
Increase UI-precision of transforms (now it displays 4-digits after the point).
Changed key-event of “Entity duplication” to Ctrl+D.
UI improvements: Now components are just unclickable in the Add Components list if it already exists.
Now windows move only if dragged by title bar.
Now Albedo buffer visualization works as expect since it no longer stores Roughness in its Alpha-channel.
Draw Editor Miscellaneous and Draw NavMesh are exposed to Editor Preferences window.
Added a checkbox to enabled/disable animation updates in the editor.
Added Copy transform from editor camera button to Camera Component’s UI.
Input popups now have focus by default & return when Enter is pressed.
Editor now supports Sound Groups.
Other changes
Materials. Now materials support raw values, so you don’t have to use textures. Also, Eagle now supports multiple materials per mesh.
Minor perf improvements: now Conjugate is used instead of Inverse for rotations.
Now the size of Prefilter image of IBL can be configured.
Lit 3D Texts now use Material assets.
Added support for .gltf files.
Exposed Scene Gravity setting.
Reversed depth buffer.
Improved handling of Physics Materials.
Meshes, Sprites, and Lit Texts now have bReceivesDecals setting.
Added Albedo and Anisotropy as a volumetric fog params.
Improved quality of volumetrics.
Reduced flickering of Volumetric Lights near the light source by using Karis Average.
Added smooth falloff near light edges.
Added set/get gravity to C#.
Now you can specify Start and End colors for debug lines.
Added IsValid to C# entity.
Mouse scroll now can be used to change engine provided runtime camera.
C#: Added GetAllEntitiesWithComponent().
C# wrappers don’t return null arrays anymore.
Added a way to disable skybox background rendering (Lightting is still applied).
Added QuitGame to C# (Scene.QuitGame()).
Added AABB, UVector2, and Min/Max functions to C#.
Now C# API supports fonts.
Editor & C# now support Sound Groups.
Moved C# draw function from Scene class to Renderer.
Added support for mp3 audios.
Added support for extracting spectrum data of an audio.
Added Pan to AudioComponent.
Now you can select whether AudioComponent should use 2D or 3D sound.
Fixes
Fixed content browser bug when folder name was cutoff during its creation.
Fixed potential crash because of data races in material system.
Fixed wrong aspect mask when reading from vulkan image.
Fixed logging of path. Now it’s converted to utf-8.
Fixed users being able to drag simulation panel window.
Fixed a crash when changing editor’s style.
Fixed content browser items not being spaced out uniformly in some cases.
Fixed
CalculateImageMemorySizereturning incorrect results if bits < 8.Fixed events being processed by Editor even if they were processed by content browser.
Fixed incorrect gpu layout of index buffer (it was vertex).
Fixed incorrectly removing textures from the texture system.
Fixed static mesh import not accounting for translation-offset of the mesh.
Fixed ImGuizmo incorrectly manipulating relative rotation.
Fixed
operator-ofstruct Transform. Now it divides scales, instead of subtracting.Fixed rare cases of Help Message causing crash.
Fixed
UI::Text()misalignment of text.Fixed crash in some C# wrappers if Entity is null.
Fixed potential memory corruptions.
Fixed
EditorCameraalways callingSetShowMouse(true).Fixed
ShadowPassTaskincorrectly initializing some shadow maps in some cases.Fixed not initializing
m_Options_RTin SceneRenderer constructor.Fixed
UI::PushItemDisabledincorrectly handling multiple item disabled pushes.Fixed calculation of TBN for meshes.
Fixed some issues with camera controls in editor.
Fixed resizing
VertexBufferinstead ofIndexed VBduring meshes upload.Fixed allocating too much memory on CPU during meshes upload.
Fixed not applying
Tiling Factorwhen reading a normal map of sprites.Fixed Texture2D not setting
m_bIsLoadedto false while loading.Fixed TextureCube not applying format to all image resources.
Fixed some image layout formats being
rgba16finstead ofr11f_g11f_b10f.Fixed C#
SetShadowMapsSettingsnot affecting settings.Fixed erros during an import of multiple Texture Cubes.
Fixed
CopyBufferToImageandCopyImageToBufferbugs.Fixed barriers not working for compute shaders.
Fixed
DrawAssetSelectionignoring Help Message.Fixed not culling back faces for volume shadows.
Fixed Tint Color not being applied in some cases.
Fixed collisions in
UI::Combofunctions.Fixed crash when closing the engine during simulation.
Fixed
Gravitynot being serialized.Fixed potential crashes in Physics Actor when accessing RigidBodyComponent.
Fixed incorrect GBuffer history copies.
Fixed
UI::InputText()not showing a help message.Fixed a bug where physics material wasn’t properly initialized in components.
Fixed a bug where
ShowCollisionandIsTriggerstates were not set correctly when changing mesh collider.Fixed some issues with lights visulization flags.
Fixed potential crashes in
Collider Shape.Fixed not putting a barrier in
Image::Read.Fixed some issues with console messages.
Fixed freeing GPU resources too early.
Fixed incorrectly shutting down render manager in some cases.
Fixed incorrectly leaving fullscreen mode in some cases.
Fixed some crashes related to dereferencing dead pointers.
Fixed errors when releasing a GPU resource from the main thread.
Fixed C# using
SSAOSettingsto setGTAOSettings.Fixed
bAutoPlayaudios being spawned after scripts.Fixed
AudioComponentnot serializingPitch.Fixed incorrect C# bindings.
Fixed engine provided runtime camera potentially blocking other cameras that might be spawned.
Fixed deselecting entity when simulation starts.
Fixed wrong
Quatlayout in C#.