Giter Site home page Giter Site logo

bobbyanguelov / esoterica Goto Github PK

View Code? Open in Web Editor NEW
821.0 29.0 58.0 31.95 MB

Esoterica Engine

Home Page: https://www.esotericaengine.com

License: MIT License

C++ 94.56% C 5.11% HLSL 0.32% Promela 0.01%
animation ecs game game-development game-engine gamedev gameengine ragdoll reflection

esoterica's Introduction

Esoterica Prototype Game Engine

Esoterica Logo

Esoterica Engine is an MIT licensed prototype game engine framework. It’s intended as a technology demonstrator, an educational tool and an R&D framework. It contains a lot of the boilerplate machinery required for resource management, serialization, gameplay, etc. It provides a lot of references for how to potentially build a resource system, basic reflection and a AAA-level animation system. It could be a good framework for experimenting with game, AI, renderer tech or as a teaching aid for how to build game engines. Additionally, if you are more interested in building your own engine, Esoterica is a really good starting point.

Important Note: Stability!

Esoterica is a prototype engine that's being developed in our spare time and as such there will likely be bugs and crashes (primarily with the tooling side). It is not intended as a stable production tool. If you encounter any crashes or bugs, please file issues and we'll try to get to them as soon as we can.

Help Needed: Rendering + Test Assets

There are no examples of any of the tech supplied unfortunately since we do not have any assets that I can release publically. We are looking for folks that can create some test assets that we can distribute with the engine (e.g., a character model and some animations). We can then use those assets to provide a set of examples of the various tools and features.

We are also looking for a someone to help us build out the renderer. More details can be found here: https://www.esotericaengine.com/contribute

What's included

  • Basic core of a game engine (serialization, math, string handling, logging, etc...)
  • Libclang based c++ reflection and code-generation
  • Compiler based resource system with hot-reloading
  • Hybrid Actor/ECS object model - https://www.youtube.com/watch?v=jjEsB611kxs
  • AAA quality high performance animation graph system - https://www.youtube.com/watch?v=R-T3Mk5oDHI&t=5427s
  • Basic animation compression
  • Powered Ragdoll implmentation using PhysX articulations
  • Basic editor infrastructure and tooling using DearImgui

Screenshots

Resource Pipeline Basic Editor
Esoterica Resource Server Esoterica Editor
Animation Graph Ragdoll Editor
Esoterica Animation Graph Esoterica Ragdoll

Requirements

  • Visual Studio 2022 (17.4+)
  • FBX SDK

Building Esoterica

Esoterica uses vanilla msbuild for its build system. There are a set of property sheets that control all the build settings for Esoterica in the "code/property sheets" folder.

  1. Download the external dependencies and extract into the Esoterica root folder (X:/Esoterica Path/). You should end up with 'X:/Esoterica Path/External/'.
  2. Download and install the FBX SDK (required for editor) - https://www.autodesk.com/developer-network/platform-technologies/fbx-sdk-2020-2-1
  3. Open the solution "Esoterica.sln"
  4. REBUILD the "Esoterica.Scripts.Reflect" project (under the "0. Scripts" solution folder) - this will generate all the Esoterica reflection data
  5. Build the "1. Applications" solution folder - this will build all the applications needed for Esoterica to run.

Applications

Easiest way to get started, is just set the "Esoterica.Applications.Editor" as the startup project and hit run. If you want to run the engine, use the "Esoterica.Applications.Engine" project with the "-map data://path_to_map.map" argument.

  • Engine - this is the standalone Esoterica engine client
  • Editor - This is the Esoterica editor
  • Resource Server - This is a standalone application that will compile and provide resources to the various Esoterica applications
  • Reflector - This generates the Esoterica reflection data
  • Resource Compiler - This processes resource compilation requests
  • Tester - Empty console app used for random testing

Thirdparty projects used

  • EASTL
  • DearImgui
  • EnkiTS
  • iniparser
  • PCG
  • xxhash
  • rpmalloc
  • concurrentqueue
  • MPack
  • Game Networking Sockets
  • PhysX
  • cgltf
  • pfd
  • sqlite
  • subprocess
  • optick

These middleware packages are also integrated but require a license to use (so they are disabled by default)

  • Live++
  • Superluminal
  • Navpower

Extra Info

If you use the SmartCommandLineArguments plugin for VS then there are supplied saved arguments to help you start the engine.

esoterica's People

Contributors

bobbyanguelov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

esoterica's Issues

Log Removed Global Transitions

When a global transition is removed because a conduit exists, I think this should be logged as a warning. Otherwise the user may be confused about priority.

Animation Graph Crashes on Parameter Renaming

hi, I encountered a crash issue caused by parameter node renaming.
Below is the source code in AnimationGraphWorkspace::RenameParameter function
it should be " if (pControlParameter != nullptr) "
param_renaming_issue

Assertion in imgui when running the editor

I'm hitting an assert inside imgui.cpp when running the editor app.

Zrzut ekranu 2023-11-29 000740

It happens in both Debug and Release. The size vector is 588.0,-25.0. Not sure if this is an imgui bug, or if imgui is used incorrectly. The engine app without the editor runs fine and the resource server also seems to be running fine. Any ideas?

BTW, to compile the engine I had to fix a warning in a lambda on line 71 in ResourceCompiler_RenderTexture.cpp (not all paths return a value) because it was treated as an error.

Issue Building Esoterica

I have been trying to get Esoterica to compile with the 5 step plan, but I am getting build errors at step 4.
REBUILD the "Esoterica.Scripts.Reflect" project (under the "0. Scripts" solution folder) - this will generate all the Esoterica reflection data.

I've added the build log as attachment.

I am still a novice at this sort of stuff so I apologise for the inconvenience.

Output-Build.txt

Graph Crash

This graph crashes for me.
ErinGraph.zip

 	Esoterica.Engine.Runtime.dll!EE::Animation::GraphNode::Shutdown(EE::Animation::GraphContext & context) Line 120	C++
>	Esoterica.Engine.Runtime.dll!EE::Animation::GraphNodes::StateNode::ShutdownInternal(EE::Animation::GraphContext & context) Line 91	C++
 	Esoterica.Engine.Runtime.dll!EE::Animation::GraphNode::Shutdown(EE::Animation::GraphContext & context) Line 125	C++
 	Esoterica.Engine.Runtime.dll!EE::Animation::GraphNodes::TransitionNode::ShutdownInternal(EE::Animation::GraphContext & context) Line 342	C++
 	Esoterica.Engine.Runtime.dll!EE::Animation::GraphNode::Shutdown(EE::Animation::GraphContext & context) Line 125	C++
 	Esoterica.Engine.Runtime.dll!EE::Animation::GraphNodes::StateMachineNode::UpdateTransitionStack(EE::Animation::GraphContext & context) Line 247	C++
 	Esoterica.Engine.Runtime.dll!EE::Animation::GraphNodes::StateMachineNode::Update(EE::Animation::GraphContext & context) Line 257	C++
 	Esoterica.Engine.Runtime.dll!EE::Animation::GraphInstance::EvaluateGraph(const EE::Seconds deltaTime, const EE::Transform & startWorldTransform, EE::Physics::Scene * pPhysicsScene, bool resetGraphState) Line 323	C++
 	Esoterica.Engine.Runtime.dll!EE::Animation::AnimationGraphComponent::EvaluateGraph(EE::Seconds deltaTime, const EE::Transform & characterWorldTransform, EE::Physics::Scene * pPhysicsScene) Line 58	C++
 	Esoterica.Engine.Runtime.dll!EE::Animation::AnimationSystem::UpdateAnimGraphs(const EE::EntityWorldUpdateContext & ctx, const EE::Transform & characterWorldTransform) Line 190	C++
 	Esoterica.Engine.Runtime.dll!EE::Animation::AnimationSystem::Update(const EE::EntityWorldUpdateContext & ctx) Line 103	C++

Cannot Edit Virtual Parameters

DrawControlParameterEditor returns a bool about editing a virtual parameter, but it is ignored. Maybe use [[nodiscard]].

Editor crash on Create New Resource

This happens for:

  • Animation Bone Mask
  • Animation Clip
  • Animation Skeleton
  • Physics Ragdoll
TVector<ResourceDatabase::ResourceEntry*> const& ResourceDatabase::GetAllResourcesOfType( ResourceTypeID typeID ) const
    {
        EE_ASSERT( m_pTypeRegistry->IsRegisteredResourceType( typeID ) );
        return m_resourcesPerType.at( typeID ); // <- Fails with "invalid hash_map<K, T> key" error
    }
2022-08-31.13-07-02.webm

Live++ Bridge enabled

Default configuration seems to still want to run un-licensed Live++:

image

LivePP.props seems to have:
<LPP_INCLUDED>True</LPP_INCLUDED>

I'll fork and submit pull requests.

Update from your newest ExternalData but found an invalid lib.

When i compile your latest version which is merged from you as upstream, i update my projects entirely.

While building the Reflector application, i got this error from VS:
LLVMCore.lib(DataLayout.obj) : error LNK2019: unresolved external symbol __std_max_element_1 referenced in function "unsigned char const * __cdecl __std_max_element(unsigned char const *,unsigned char const *)" (??$__std_max_element@$$CBE@@YAPEBEPEBE0@Z) [C:\Users\Admin\Documents\GitHub\Esoterica\Code\Applications\Reflector\Esoterica.Applications.Reflector.vcxproj]

It seems that it can NOT find the definition of __std_max_element() from the library LLVMCore.lib.

It the version of LLVMCore.lib incorrect or something else cause this bug?

Thanks for your helping!!

Failed to load textures.

Failed to load dds textures with stb image loader.
It seems that stb doesn't support loading dds textures.

In TextureCompiler::Compile() -> CompileTexture() -> Import::ReadImage() .

Forced Transition Blending

I created a forced transition for two states that go between poses: standing and prone.
The transition from standing to prone can be forced while prone to standing cannot be forced.

I ran a test where I used a long transition duration and single stepped interrupting the prone to stand, forcing a transition from stand back to prone. I did this when the character was only slight above prone. With a long transition duration the character will continue to almost reaching the stand pose before going back down to prone. With a short transition duration the forced transition works well and the character goes directly back to prone.

I'm not sure if this a bug or intended.
ForcedTransition.zip

image

Treat Warnings as Errors preventing build in VS 2022

Steps:

  1. Install VS 2022 Community on fresh Windows 10 install. Turn on the Game Development C++ and C++ Development workflows
  2. Install Smart Command Line Arguments VS2022 extension
  3. Download repo and copy to C:\Esoterica
  4. Download external dependencies and copy to C:\Esoterica. So I have C:\Esoterica\External\DbgHelp, C:\Esoterica\External\LivePP etc.
  5. Download and install FBX SDK. I used FBX SDK 2020.2.1 VS2019
  6. Open Solution
  7. Right Click Esoterica Scripts Reflect choose build from the menu

Result 78 errors.

What I tried?

  • Tried going to each project and change
    Warning Level -> Turn off All Warnings,
    Treat Warning As Errors -> No
    SDL Checks -> No
    Build Output.txt
    error list.txt

"Handle looping sequences" clause in SyncTrack::GetTime doesn't seem to ever be executed

The check at L181 looks like it can't be true? Because it requires percentageThrough - m_syncEvents[syncEventIdx].m_startTime to be greater than m_syncEvents[syncEventIdx].m_duration, but that is just another way of writing percentageThrough > m_syncEvents[syncEventIdx].m_startTime + m_syncEvents[syncEventIdx].m_duration, and the first check at L173 makes sure that's never going to happen. Unless I'm missing something?

if ( ( m_syncEvents[syncEventIdx].m_startTime + m_syncEvents[syncEventIdx].m_duration ) >= percentageThrough )
{
EE_ASSERT( m_syncEvents[syncEventIdx].m_duration > Math::Epsilon );
time.m_eventIdx = syncEventIdx;
time.m_percentageThrough = ( percentageThrough - m_syncEvents[syncEventIdx].m_startTime ) / m_syncEvents[syncEventIdx].m_duration;
// Handle looping sequences
while ( time.m_percentageThrough > 1.0f )
{
time.m_percentageThrough -= 1.0f;
}
break;
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.