YunYun's Logo





FYSE ENGINE A commercially used engine with Vulkan C++
What is this Fyse Engine?
The name is currently "Fyse Engine" is an in-house game engine, created for the purpose of teaching children how to make video games from scratch. We aimed to make it easier for developers to just skip the linker and additional include directories. Since this engine is directed a children consumer audience who seek the challenge of learning C++, but lack the hardware for Unreal Engine's requirements. Everything we do in this engine to design choices and structures are to ensure that even children can easily program in C++.
Objective
Most designed to bridge in-between Unity's simplicity and Unreal's structure. Helping the students being taught how to use this engine C++ and understanding low-level programming at RP4K. Some cases in classes too I have taught children how to program and utilize Vulkan, getting some of their images onto the screen and also get 3D models imported, with their textures and paste them onto the meshes. Offering and delivering low-level programming experiences to children.
Features What does it offer?
Most of the features and syntax of Fyse Engine is meant for ease and simplicity, since the audience of Fyse Engine is for children, as an introduction into C++. All features were designed with so many workarounds and fail safes to ensure ease for the children developing their games on!! There is a build in Math Library, that covers Vector and Matrix math, alongside Rotations!! An automatic texture loader (that can be disabled) to load in all the textures inside a given directory. Many features will be covered within this "Features" segment...
Features -> Built-In Math Library
The built-in library allows developers to easily read lines and implement vector/matrix math easily into their projects. Usually most people opt for GLM (OpenGL Math Library), for their mathematical applications. For multiple reason we've decided to make our own math library. Simply aiming for the simple implementation, skipping linking steps, namespace collisions, just to name a few. It was developed for this engine in substitution of GLM.

With some time and remaking the Math Library in Fyse Engine. Vector math is included from Vector2 -> Vector4, with most required vector math operations, with scalar values and other vector values. Though the most complex part of this library was writing the matrix multiplication. Keeping matrix-related math in Row Major, since for children at least it's very straight forward.


= { , , };
[] ;
. ;



= {
{ , , },
{ , , },
{ , , }
}


[][] ;
[]. ;

Features -> Math Library Benchmark
This engines math library has some number of reasons and little downsides to its competitor OpenGL GLM. It's time to compute the following matrices and vectors are basically within the computer's computation error range. Basically reaching a point of no real winner. In terms or memory size and allocation, both of these structures take the in both regards.



= {
{ , , , },
{ , , , },
{ , , , },
{ , , , }
}


= {
{ , , , },
{ , , , },
{ , , , },
{ , , , }
}














Features -> Configurations
Fyse Engine also offers some settings for how the engine should act. The EngineConfig are still being modified and expanded more as the demand for more features is pretty high. Although simple, it does offer some MSAA (Multisampling Anti-Aliasing), an Auto Load Texture, DEBUG_LOG, Background color and soon to be even more!! This is an optional feature and Fyse Engine will attempt to figure out the most optimal settings for your device.


() {
;

= ();
-> = ;
-> = ;
-> = ;
-> = ;
-> = ;
-> = ;
-> = { , , , };



* = (&);

. . .
}



;
*& ( , = ) {
( = ; < .(); ++) {
* = .()->();
= ->.();
= ->.();
(! && !) {
.();
}
}


(, + + + );
[];
}

Advantages How is this better?
Fyse Engine is being designed to be that middle ground of learning fundamental C++ to avoid the bloat from C#, but also have an easy time to develop your games. While also offering a very small size, since it's a static library that you use. Usually for the children they will have a project folder with linkers and everything set up, since linkers suck haha. Creating custom components in Fyse Engine is extremely simple, and after creation of your custom component class, it can be immediately used and compiled with!!
Advantages -> GameObjects & Components
Instantiating GameObjects and creating components are very similar to Unity's Syntax! But having the combination of C++ and Unity, to blend the simplicity of Unity's API syntax, with the C++ syntax!!


() {
;


* = ();
* = ->();


* = ->();


* = ->();


* = -><>();
->();
->();

. . .
}

Challenges What obstacles did I face?
C++ is a low level language, and to make it more difficult, there are multiple syntaxes for writing code for constructors, functions, lambdas etc. So many of the difficulties faced in the development of this engine was how to make a system, and syntax flexible with the multiple ways of writing code in C++? I go along talking not only with math related topics but also other obstacles in the engines development!!
Challenges -> Math Library Syntax!!
Talking from before, C++ can offer many ways for accessing members and values from classes or structures. Let alone instantiating these classes/structs have multiple syntaxes, small details that lead to much confusion. So I allowed multiple ways to access members with unions and overloading the operator[]. Most of the objects from the Math Library have some modified way of accessing these members and their values! I like to use braced-initialization for these objects, but there's nothing wrong with using the constructor or other forms of creating objects... Exhibit A!!


= { , , };





[] ;
. ;


= { , , };
. ;
. ;
. ;
. ;



= {
{ , , },
{ , , },
{ , , }
}


[][] ;
[]. ;


As you saw from the example, Vector3, Rotator, and Matrix3x3, (others included: Vector2 and Vector3, Matrix2x2, Matrix4x4) all allow this accessibility. With Rotator having multiple different ways to access it, using X Y Z (Euler), Pitch Yaw Roll (Tait-Bryan) or Angle2D (for simple 2D purposes). Exposing children to different formats and systems


& []( ) {
() {
: ;
: ;
: ;
: ;
}
;
}


& []( ) {
[];
}

Solution -> Vector/Matrix Access!!
If you looked at the example above "Vector/Matrix Accessibility", it shows how I got around to solving this easy syntax of accessing the components of Vectors and Matrices. For the switch, there should maybe be a default case for that statement, but "logically" doesn't affect anything, but performance wise unknown... For the Matrix4x4 bit, as you might see there isn't any protection towards going under or over the number of rows you can access. this can be solved by a nice little min() and max() chain for give it a range, or a check with multiple if statements, which can cost performance. Part of my reason is for performance and predictability for what value it tries to prefetch to save performance, and missed cache hits. But leaves open for possible misuse. Let's be honest though, younger children will probably not be touching Matrix Math :3...


& []( ) {
( < ) [];
( > ) [];
[];
}


;
& []( ) {
[(, (, ))];
}

So What Now? Where am I taking this?
There are still a list of features I would like to add into Fyse Engine. In no order at all:
  • Sounds
  • Collision (AABB, Continuous/Dynamic, Ray-casting, etc.)
  • Debug Outlines (Collision Volumes, Debug Meshes/Lines, etc.)
  • GUI
  • Compute Shaders
  • Lighting/Shadows
  • Multiple Render Passes
  • And much more!!
With all of these tasks and such, this is an engine more catered towards children. Learning the core concepts of detecting collisions, understanding forces and velocities, vector math with directions and translations, so having such tool and features for sure, will be amazing to have a foundation to construct a game off of. Perhaps making a stripped, limited version of it to have children develop on, then develop these features on a more completed branch.