Skip to content

Releases: IceLuna/Eagle

Release v0.6

23 Dec 23:43
159c91a
Compare
Choose a tag to compare

The new version is finally here!
Now the engine has an official documentation page!
Read about the latest release changes here

v0.5

26 Dec 14:26
Compare
Choose a tag to compare

New

Physics Engine

Eagle Engine introduces a physics engine that was built on top of PhysX 4.1.

  • Physics components. Following physics components were implemented:
    • RigidBodyComponent. It allows you to:
      • Set body type. It can be Static or Dynamic. Cannot be changed at runtime.
      • Set collision detection type. Supports Discrete, Continuous and Continuous Speculative types. Cannot be changed at runtime.
      • Set mass.
      • Set linear damping.
      • Set angular damping.
      • Enable/disable gravity.
      • Set body to be kinematic. Sometimes controlling an actor using forces or constraints is not sufficiently robust, precise or flexible. For example moving platforms or character controllers often need to manipulate an actor's position or have it exactly follow a specific path. Such a control scheme is provided by kinematic actors.
      • Lock position.
      • Lock rotation.
    • Box Collision Component.
    • Sphere Collision Component.
    • Capsule Collision Component.
    • Mesh Collision Component. Can be set to be convex. Non-convex (Triangle) mesh colliders can be used only with kinematic or static actors.

All collision components allow you to visualize Collision Bounds and change: static friction; dynamic friction; bounciness; if it's trigger or not.

Audio Engine

Eagle Engine introduces an audio engine that was built on top of FMOD.
Following functionalities were implemented:

  • Sound 2D. They're played with no attenuation, perfect for UI sounds. You can set Pan to -1 to play completely on the left speaker, +1 to play completely on the right speaker, or any other value in [-1; 1] range. Can be used by calling AudioEngine::PlaySound2D function.
  • Sound 3D. They're positioned in the scene. Sound 3D takes into account location, listener orientation, velocity and roll-off model to attenuate sound. Can be used by calling AudioEngine::PlaySound3D function or by adding Audio Component to your entity.
    Currently supported Roll-off models:
    • Linear. Sound will follow a linear roll-off model where MinDistance = full volume, MaxDistance = silence.
    • Inverse. (Set by default) Sound will follow the inverse roll-off model where MinDistance = full volume, MaxDistance = where sound stops attenuating.
    • Linear square. Sound will follow a linear-square roll-off model where mindistance = full volume, maxdistance = silence.
    • Inverse Tapered. Sound will follow the inverse roll-off model at distances close to MinDistance and a linear-square roll-off close to MaxDistance
  • Reverb 3D. Allows you to apply certain effects to sounds within its range [MinDistance; MaxDistance]. Reverb is at full volume within MinDistance radius. Reverb is disabled outside MaxDistance radius. Reverb3D can be used by adding Reverb Component.
    Currently supported Reverb presets: Generic, Padded Cell, Room, Bathroom, Living Room, Stone Room, Auditorium, Concert Hall, Cave, Arena, Hangar, Carpetted Hallway, Hallway, Stone Corridor, Alley, Forest, City, Mountains, Quarry, Plain, Parking Lot, Sewer Pipe, Under Water.
  • Sound Group. It lets you add different channels to a group and control them simultaneously. This is very useful for video games, where sound tends to fall into categories (such as background music, sound effects, or speech). SoundGroup has default master group. You don't need to add groups and sounds to master group because that's done automatically. It is also possible to add a group as a child of another group, creating a hierarchy. Sound groups allow you to change volume, pitch (any value in [0.0; 10.0] range, multiplied by the current frequency, for example, setting pitch to 2 doubles the frequency of all sounds in the group), set muted, paused and stop sounds. Currently, sound groups can only be used in C++ code.

You can modify the following params of any sound:

  • Volume. Should be in [0.0; 1.0] range. 0.0 means silence; 1.0 - Max Volume.
  • Is Looping.
  • Loop Count. -1 = Loop Endlessly; 0 = Play once; 1 = Play twice, etc...
  • Is muted.
  • Is streaming. When you stream a sound, you can only have one instance of it playing at any time. This limitation exists because there is only one decode buffer per stream. As a rule of thumb, streaming is great for music tracks, voice cues, and ambient tracks, while most sound effects should be loaded into memory.

Script Engine

Support for C# scripts was added. C# scripts support:

  • Entity. Supports physics callbacks such as: OnCollisionBegin, OnCollisionEnd, OnTriggerBegin, OnTriggerEnd.
  • Sound2D.
  • Sound3D.
  • Math. Vector2, Vector3, Vector4, Quat, Transform, small math library.
  • Material.
  • Texture2D.
  • Static mesh.
  • Inputs. Functions such as IsKeyPressed
  • Transform component.
  • Point light component.
  • Directional light component.
  • Spot light component.
  • Static mesh component.
  • Audio component.
  • Rigid body component.
  • Box collider component.
  • Sphere collider component.
  • Capsule collider component.
  • Mesh collider component.

To use C# script, add Script Component to your entity and specify the namespace & class name. For example, 'Sandbox.Rolling'. Class must be a child of C# Eagle::Entity class.
Some public variables of your script are exposed and can be changed through UI at any time.
Entity class contains OnCreate, OnUpdate, OnDestroy events. You can override these events to run your logic.

The list of supported variable types accessible through UI:

  • Int.
  • Unsigned int.
  • Float.
  • String.
  • Vector2.
  • Vector3.
  • Vector4.

Runtime

Now you can press 'Play' button to simulate the game. It will run C++ & C# scripts and physics simulations.
You can provide a camera to be used in simulation mode. Simply add Camera Component to any entity and set Primary checkbox to true. If camera was not provided by you, engine will spawn entity with camera component for you and add C++ Camera Controller script to that entity so you can fly around.

Other

  • Light Component. Added bAffectsWorld to Light Component.
  • Quaterniouns. Replaced Euler angles with Quaternions. Now there's no Gimbal lock. Transform contains custom Rotator class instead of glm::vec3 for rotations. Rotator uses glm::quat under the hood.
  • None Static meshes. Added support for None static meshes.
  • Entity copy. Added Ctrl+W event to SceneHierarchy that copies Entity and selects just created entity.
  • Help window. It doesn't list update changes anymore.

Improvements

  • UI.
  • Shadows. Improved spot light shadows softness at large outer cutoff angles.
  • Content browser. Content browser now displays loaded textures & now it can create folders.
  • Minor optimizations.
  • Editor Serializer. Now it saves if window was maximized.

Updated

  • Asset Selection. You can no longer select meshes/textures outside of Content folder.
  • Libraries. Updated EnTT from 3.6 to 3.8.1. Updated ImGuizmo library.
  • New namings. Renamed Owner to Parent & Translation to Location.
  • Content Browser. Now it browses 'Sandbox/Content' folder.

Fixes

  • Now Engine doesn't limit amount of Entities (was 10000. Check 'Keep in mind' section of Release 0.4 notes).
  • Fixed Content Browser not searching for RU chars.
  • Fixed bug when camera was flipping sometimes.

Release v0.4

29 Jul 19:51
Compare
Choose a tag to compare

New

Rendering

  • Deferred Rendering was implemented. Deferred Rendering significantly improves performance in large scenes with lots of light sources.
  • Directional Light now casts shadows!
  • Point Lights now cast shadows!
  • Spot Lights now cast shadows!
  • Normal Mapping! Added support for normal textures.
  • Added Gamma correction.
  • Added HDR
  • None Textures. Now you can set any texture to be None.
  • Added Diffuse Tint color to Material. Now if you don't want to use any textures, you can set diffuse texture to None and adjust objects color by using 'Tint Color' parameter.
  • Added support for Geometry Shaders.
  • Added Uniform buffers.
  • Added Cubemaps.
  • Added sRGB support.
  • Implemented Blinn-Phong's model.
  • Enabled MSAA x4.
  • Enabled back-face culling.

Content Browser

Added Content Browser that allows you to navigate through asset files and open some of them.

  • Searching. Content browser allows you to search for files.
  • Navigation. To navigate, double-click image or single-click file's/folder's name. If the name of a file doesn't fit inside a button, you can hover it to see its full name.
  • Navigation History. Underneath the search panel you can see the navigation history. You can navigate back by pressing history buttons or clicking back/forward buttons. Also you can use additional mouse buttons to navigate back/forward.
  • Right-click popup. You can right-click anything in content browser and press 'Show in Explorer' to show it in explorer. Or you can right-click any file (not directory) and press 'Show in Folder View' to show it in Content Browser. It's useful if you found a file using search and want to navigate to its location inside Content Browser.
  • Content Browser can open scenes.
  • Drag&Drop. You can Drag&Drop Textures/Meshes from Content Browser to Texture/Mesh Slots.
  • Open Textures (Texture Viewer). Texture Viewer shows some texture details:
    • Name
    • Size
    • If it's sRGB texture or not. Also it allows you to convent texture to sRGB or to non-sRGB format.
  • Content browser supports cyrillic.

UI

  • Styles! Now you can set style of the editor in 'Editor Preferences' panel.
  • Added 'Scene Settings' panel. You can use it to set skybox and adjust gamma and exposure.
  • Shaders reloading. Added 'Reload shaders' button to 'Settings' panel.
  • Added Debug Menu panel. It allows you to:
    • Visualize G-Buffer. Namely: position, normals, albedo.
    • See all shaders where you can reload any of them.

Other

  • JPG textures can now be imported.
  • Added 'Shadows' scene.
  • Added 'HDRScene' scene.
  • Engine now has logo and icon. Made by Verual

Improvements

Rendering

  • Improved Materials.
  • Improved Frame buffers
  • Improved 2D Rendering.
  • Improved 3D Rendering by implementing batching. Batching improved performance by 100% (~300 fps vs. ~600 fps on my PC). But! Since shadows were added, performance dropped to ~160 fps on my PC. (i5-9400f, 16GB DDR4, GTX 1660Ti)
  • Improved Rendering by sorting objects based on distance from camera. (The closest objects are rendered first)

UI

  • Texture Selection. Now you can click on texture in 'Texture Selection' dropmenu. In previous versions you had to click on a texture's name in order to select it.

Other

  • Improved Scene Serializer.
  • Improved Help Window.
  • Improved Editor camera's behavior.
  • Removed 'Invert Color' visualization.

Fixes

  • Fixed wrong normals of objects.
  • Fixed bug when positions of children (attached entities and added components) were not updating
  • Fixed Lights not using Ambient color.
  • Fixed Vertex Buffer layout. Now it supports Mat3 & Mat4.
  • Fixed importing multiple meshes as a single file.

Minor

  • Updated '3DScene' scene.
  • Disabled Alpha-Blending. It was not working anyway because of enabled Depth-Test.
  • Removed unused shaders.
  • Renamed some shaders.
  • Changed default Point Lights distance value from 100 to 1.
  • Alpha in shaders is always 1.0 (again, changes nothing)

Keep in mind

  • Objects that are being rendered use Specular as Reflection map for reflecting Skybox (Temporary). Ι΄α΄α΄›ΚœΙͺΙ΄Ι’ Ιͺs ᴍᴏʀᴇ α΄˜α΄‡Κ€α΄α΄€Ι΄α΄‡Ι΄α΄› α΄›Κœα΄€Ι΄ α΄€ α΄›α΄‡α΄α΄˜α΄Κ€α΄€Κ€Κ sα΄ΚŸα΄œα΄›ΙͺᴏɴπŸ₯€
  • Content Browser is not updating if it's not hovered. Meaning that if new files were created, they won't appear in content browser unless you hover it.
  • Creating more then 10000 entities can crash editor. This limit can be changed in Scene.cpp by changing value of a variable 'maxEntities'. Hopefully, this problem will be fixed in the next versions of the Engine.

Release v0.3

27 Apr 18:48
Compare
Choose a tag to compare

New

  • Added Static Mesh Component, i.e. you can now import 3D models;
    Supported 3D-Model formats: fbx, blend, 3ds, obj, smd, vta, stl.
    If an importing model contains information about textures, Engine will try to load them as well. Note that a single file can contain multiple meshes, each of them will be loaded as separate Static Mesh;
  • Added SubTexture (Atlas) support to SpriteComponent and exposed it to Editor. To use a subtexture from an Atlas in Sprite Component, check 'Is Subtexture' in Sprite Components propeties and select an Atlas Texture. Set size of a single sprite in atlas, set sprite's coords (starting from bottom left in 0;0). In case some sprites have different sizes, change 'Sprite Size Coef'. Open '3DScene' scene for an example.
  • Added Alpha Support in Shaders (Renderer still doesn't support transparency);
  • Added 'TilingFactor' to Material and to Shader. Also exposed that value to UI;
  • Added StaticMeshShader for Mesh Rendering;
  • Added new scene '3DScene';
  • Added Renderer3D Stats;

Update

  • Now Engine tries to save a relative path to using assets;
  • Bringed back GuizmoType::None. It means that you can press Q to hide Guizmo;
  • Updated Renderer class to render 3D models;
  • DEL now works if SceneHierarchy or Viewport are hovered;

Minor

  • Added 'Cast' Macro that allows casting Ref's;
  • Added Static Mesh Library.
  • Minor Updates in Renderer 2D.

Release v0.2.2

18 Apr 15:32
Compare
Choose a tag to compare

New

  • Added Help Window;
  • Added Editor Preferences;
  • Added Editor Serializer that saves Editor Preferences when Eagle-Editor is shutting down.
    Values that are being saved:
    • Guizmo Type;
    • Snapping Values;
    • VSync state;
    • 'Invert Colors' state;
    • Window's size;
    • Window's position

Release v0.2.1

17 Apr 11:23
Compare
Choose a tag to compare

Features

  • Added support for 4 SpotLights in the Scene;
  • Now entities can be deleted by pressing DEL key.

Fixes

  • Crash could occur when deleting an entity;
  • SceneComponent's WorldTransform was setting to 0 when adding a new SceneComponent;
  • Not all children were detaching from a 'pending to die' entity.

Minor

  • Added Logging when Saving a Scene;

Release v0.2

02 Mar 10:42
Compare
Choose a tag to compare

Features

  • Added simple material;
  • Added Diffuse and Specular textures support;
  • Added Texture Library;
  • Added Texture Selection in Components Window;
  • Updated ImGui Library;
  • Improved Scene Serializer;
  • Added Point Light Component. Scene supports only 4 Point Light Sources.
    You can tweak these values in UI:
    • Light Color;
    • Ambient;
    • Specular;
    • Distance;
  • Added Directional Light Component. Scene supports only 1 Directional Light Source.
    You can tweak these values in UI:
    • Light Color;
    • Ambient;
    • Specular.
  • Added Spot Light Component. Scene supports only 1 Spot Light Source.
    You can tweak these values in UI:
    • Light Color;
    • Ambient;
    • Specular;
    • Inner Cutoff Angle;
    • Outer Cutoff Angle.

Fixes

  • Fixed Guizmos. Now Guizmos rotates along with object;
  • Children now get attached to parent of entity that is about to be deleted;
  • Minor UI Improvements;
  • Fixed wrong viewport size when viewport tab is visible;
  • Fixed Deserializer bug when it was not loading scene properly via hash-collisions.

Release v0.1

19 Feb 22:47
Compare
Choose a tag to compare
Fixed bug when component remained selected if new entity was selected…

… in SceneHierarchy