Open 3D Engine (O3DE) is an Apache 2.0-licensed multi-platform AAA Open 3D Engine

Updates to this readme

July 06, 2021

  • Switch licenses to APACHE-2.0 OR MIT

May 14, 2021

  • Removed instructions for the 3rdParty zip file and downloader URL. This is no longer a requirement.
  • Updated instructions for dependencies
  • Links to full documentation

April 7-13, 2021

  • Updates to the 3rdParty zip file

March 25, 2021

  • Initial commit for instructions

Download and Install

This repository uses Git LFS for storing large binary files. You will need to create a Github personal access token to authenticate with the LFS service.

To install Git LFS, download the binary here: https://git-lfs.github.com/.

After installation, you will need to install the necessary git hooks with this command

git lfs install

Create a Git Personal Access Token

You will need your personal access token credentials to authenticate when you clone the repository and when downloading objects from Git LFS

Create a personal access token with the 'repo' scope.

During the clone operation, you will be prompted to enter a password. Your token will be used as the password. You will also be prompted a second time for Git LFS.

(Recommended) Verify you have a credential manager installed to store your credentials

Recent versions of Git install a credential manager to store your credentials so you don't have to put in the credentials for every request.

It is highly recommended you check that you have a credential manager installed and configured

For Linux and Mac, use the following commands to store credentials

Linux:

git config --global credential.helper cache

Mac:

git config --global credential.helper osxkeychain

Clone the repository

> git clone https://github.com/o3de/o3de.git
Cloning into 'o3de'...

# initial prompt for credentials to download the repository code
# enter your Github username and personal access token

remote: Counting objects: 29619, done.
Receiving objects: 100% (29619/29619), 40.50 MiB | 881.00 KiB/s, done.
Resolving deltas: 100% (8829/8829), done.
Updating files: 100% (27037/27037), done.

# second prompt for credentials when downloading LFS files
# enter your Github username and personal access token

Filtering content: 100% (3853/3853), 621.43 MiB | 881.00 KiB/s, done.

If you have the Git credential manager core or other credential helpers installed, you should not be prompted for your credentials anymore.

Building the Engine

Build Requirements and redistributables

Windows

Optional

  • WWise - 2019.2.8.7432 minimum: https://www.audiokinetic.com/download/
    • Note: This requires registration and installation of a client to download
    • You will also need to set a environment variable: set LY_WWISE_INSTALL_PATH=
    • For example: set LY_WWISE_INSTALL_PATH="C:\Program Files (x86)\Audiokinetic\Wwise 2019.2.8.7432"

Quick Start Build Steps

  1. Create a writable folder to cache 3rd Party dependencies. You can also use this to store other redistributable SDKs.

    For the 0.5 branch - Create an empty text file named 3rdParty.txt in this folder, to allow a legacy CMake validator to pass

  2. Install the following redistributables to the following:

    • Visual Studio and VC++ redistributable can be installed to any location
    • CMake can be installed to any location, as long as it's available in the system path
    • WWise can be installed anywhere, but you will need to set an environment variable for CMake to detect it: set LY_WWISE_INSTALL_PATH=
  3. Navigate into the repo folder, then download the python runtime with this command

    For the 0.5 branch - Set this environment variable prior to the get_python command below:

    set LY_PACKAGE_SERVER_URLS=https://d2c171ws20a1rv.cloudfront.net
    
    python\get_python.bat
    
  4. Configure the source into a solution using this command line, replacing and <3rdParty cache path> to a path you've created:

    -DLY_UNITY_BUILD=ON -DLY_PROJECTS=AutomatedTesting ">
    cmake -B  -S  -G "Visual Studio 16" -DLY_3RDPARTY_PATH=<3rdParty cache path> -DLY_UNITY_BUILD=ON -DLY_PROJECTS=AutomatedTesting 
    

    Note: Do not use trailing slashes for the <3rdParty cache path>

  5. Alternatively, you can do this through the CMake GUI:

    1. Start cmake-gui.exe
    2. Select the local path of the repo under "Where is the source code"
    3. Select a path where to build binaries under "Where to build the binaries"
    4. Click "Configure"
    5. Wait for the key values to populate. Fill in the fields that are relevant, including LY_3RDPARTY_PATH and LY_PROJECTS
    6. Click "Generate"
  6. The configuration of the solution is complete. To build the Editor and AssetProcessor to binaries, run this command inside your repo:

    cmake --build  --target AutomatedTesting.GameLauncher AssetProcessor Editor --config profile -- /m
    
  7. This will compile after some time and binaries will be available in the build path you've specified

Setting up new projects

  1. While still within the repo folder, register the engine with this command:
    scripts\o3de.bat register --this-engine
    
  2. Setup new projects using the o3de create-project command. In the 0.5 branch, the project directory must be a subdirectory in the repo folder.
    \scripts\o3de.bat create-project --project-path 
    
  3. Register the engine to the project
    \scripts\o3de.bat register --project-path 
    
  4. Once you're ready to build the project, run the same set of commands to configure and build:
    // For the 0.5 branch, you must build a new Editor for each project: cmake --build --target .GameLauncher Editor --config profile -- /m // For all other branches, just build the project: cmake --build --target .GameLauncher --config profile -- /m ">
    cmake -B  -S  -G "Visual Studio 16" -DLY_3RDPARTY_PATH=<3rdParty cache path>
    
    // For the 0.5 branch, you must build a new Editor for each project:
    cmake --build  --target .GameLauncher Editor --config profile -- /m
    
    // For all other branches, just build the project:
    cmake --build  --target .GameLauncher --config profile -- /m
    

For a tutorial on project configuration, see Creating Projects Using the Command Line in the documentation.

License

For terms please see the LICENSE*.TXT file at the root of this distribution.

Comments
  • Automated Review Failure - development

    Automated Review Failure - development

  • [Linux] Editor crashes when Viewport is configured to render 3 or more windows

    [Linux] Editor crashes when Viewport is configured to render 3 or more windows

    Describe the bug When the user changes the Viewport layout so it displays 3 or more windows simultaneously, the Editor crashes.

    Error logs for this issue were not created.

    Steps to reproduce Steps to reproduce the behavior:

    1. Open Viewport Configure Layout menu.
    2. Select any option with 3 or more Viewports.

    Expected behavior The Editor remains stable and the Viewport is displayed correctly.

    Actual behavior The Editor crashes.

    Screenshots/Video

    https://user-images.githubusercontent.com/86952591/164718043-cc1c0754-7888-47a8-a852-5119b654ca9d.mp4

    Found in Branch Stabilization_2205 (7c5da98)

    Desktop/Device: Device: PC OS: Linux Version Ubuntu 20.04.3 LTS CPU AMD Ryzen 5 3600 GPU Nvidia Geforce RTX 2060 SUPER Memory 16GB

    Additional context Editor.log AP_GUI.log

  • feat: add whitebox module support for linux(#4654)

    feat: add whitebox module support for linux(#4654)

    there were a couple compile errors that I had to resolve but beyond that this seems to work mostly out of the box. the stl methods didn't compile correctly so I just reworked them to work with AzSTL.

    https://user-images.githubusercontent.com/854359/139184532-f122e4c8-db6f-4fbf-a1a5-4808ce5e731b.mp4

    Only thing left would be to setup a build for a openmesh 3rd party dependency?

    Signed-off-by: Michael Pollind [email protected]

  • Texture flickering when using MaterialAssetCreator to create material

    Texture flickering when using MaterialAssetCreator to create material

    Describe the bug When unloading and reloading meshes for a while, there is a texture flickering problem appearing like below:

    texture_flicker

    This is one of the frame of the flicker above:

    baseColor

    Then, it transitions to this frame:

    texture

    This happens not often when using StandardPBR to load material. However; when using StandardMultilayerPBR, it happens right away. I use PIX to see if the textures and UVs are sent to the shader, and it's indeed there.

    The GPU driver is updated to the latest 471.11 NVidia driver, but the flickering doesn't disappear

    To Reproduce This is a small sample code to reproduce the behavior in AtomSampleViewer:

    MeshExampleComponent.cpp.txt MeshExampleComponent.h.txt

    This sample generates 100 grids using StandardMultilayerPBR material. Pix shows texture is successfully uploaded to GPU, but flickering still happens:

    flicker

    No texture frame: no-texture

    Texture frame: texture

    Expected behavior Mesh displays texture correctly

    Desktop/Device (please complete the following information):

    • Device: PC
    • OS: Windows
    • Version: 10
    • CPU: Intel core i7
    • GPU: NVidia GTX 1650
    • Memory: 32 GB
  • feat: add cursor wrap mode viewport rough implementation

    feat: add cursor wrap mode viewport rough implementation

    rough implementation of a way to allow the cursor to wrap viewport when using manipulators.

    https://user-images.githubusercontent.com/854359/146664874-28871cab-5a39-4dfe-b466-804a14b5877a.mp4

  • OnCatalogLoaded is never broadcast if Editor is launched before processing assets

    OnCatalogLoaded is never broadcast if Editor is launched before processing assets

    Describe the bug OnCatalogLoaded is a runtime notification for when catalog is loaded and it's possible to resolve asset Ids. Some systems listen to this notification to start loading and resolving their assets, but this notification is never broadcast if the editor is run without having run Asset Processor first (which is the default case when creating a project and open editor from Prism tool), leading to some systems (like PhysXSystem) not loading and resolving their assets, causing crashes when editor is used (for example #6027)

    When the editor is launched first, the asset processor will open and start processing assets, the editor will hold until SOME (not all) assets are processed, then open the editor, but the notification OnCatalogLoaded will NEVER be called, even after Asset Processor fully finished.

    In the case of launching asset processor first, then wait until all assets are finished, then launch the Editor, the notification OnCatalogLoaded will be called correctly.

    Steps to reproduce Steps to reproduce the behavior:

    1. Build O3DE with AutomatedTesting project in debug configuration
    2. Delete o3de\AutomatedTesting\Cache folder if exists.
    3. Put a breakpoint in visual studio in AssetCatalog::LoadBaseCatalogInternal() function in the line InitializeCatalog(baseCatalogName.c_str());
    4. Run Editor from visual studio in debug

    Expected behavior At some point during editor initialization it should hit the breakpoint to load the catalog and broadcast the OnCatalogLoaded notification.

    Actual behavior Breakpoint never hits, meaning InitializeCatalog is never called and therefore OnCatalogLoaded notification never broadcasted.

    Found in Branch Development build (3922280) and Stabilization/2110 (6480041)

  • Cleaned up issues with multiple components ? button

    Cleaned up issues with multiple components ? button

    Signed-off-by: John Jones-Steele [email protected] Makes sure every component has a ? button. If the link to the documentation isn't ready, assigns a generic url to the component Updated the following spreadsheet to show the current state. Fixes #2321

    ComponentWrongLinksList.xlsx .

  • feat(WhiteBox): implement transform mode

    feat(WhiteBox): implement transform mode

    This adds the ability to do fine tuning adjustment in whitebox. Early work in progress on this feature. I'm not quite sure how this will work functionally.

  • Feature Request: Splitting up into smaller repositories

    Feature Request: Splitting up into smaller repositories

    Is your feature request related to a problem? Please describe. Open3D Engine is a huge project, but most of it will be completely irrelevant to me (or anyone else looking to use it). It takes space and time to build things you don't need. Are there any plans to split up the project into smaller repositories? So we can more easily pick and choose what we want/need?

    Describe the solution you'd like Everything is located in a single large repository right now, while there is potential for splitting up Open3D Engine into smaller repositories. If you are not going to use specific Gems for example, I don't see the need for having a local copy of them and building them. Due to their modular nature it should be possible to spread Gems across different repositories. Files used by the tests could perhaps as well be made optional. If you are not going to change Open3D Engine code, but simply use it in a project, I see little use for running these tests anyway.

    Describe alternatives you've considered Stripping down the project yourself is possible, but it's quite some work, that has to be repeated every time you upgrade to a newer version.

    Additional context Being able to keep the size and build times as low as possible is an important factor when deciding on which third party library to use. Especially if you are going to be using it for a project with a lot of target platforms. Keeping the amount of work needed to upgrade to a newer version low is also an important factor to consider.

  • Irradiance Color taken from Base Color by default

    Irradiance Color taken from Base Color by default

    This change is related to feature request #6808.

    The irradiance color can now be selected via an irradiance.irradianceColorSource enum to be automatically derived from the base color (the new default), or set to a user-provided irradiance.manualColor value (as it was previously). When using the base color as irradianceColorSource together with a base color texture, the average texture color is used as a basis for the irradiance color (currently only supported for StreamingImageAsset textures).

    NOTE: There is mild breakage but no loss of data when auto-converting old .material files: The 'toVersion' rename operations translate the old 'irradiance.color' to the current 'irradiance.manualColor', but the new irradianceColorSource will be set to its default 'BaseColor' value, i.e. the old irradiance color is saved but not used. The user needs to explicitly set irradiance.irradianceColorSource to 'Manual' to recover the old behaviour. (A 'setValue' type of versionUpdate operation that sets the irradianceColorSource to 'Manual' could maybe automate this?)

    Signed-off-by: Roald Frederickx [email protected]

  • Automated Review Failure - development

    Automated Review Failure - development

  • Bug Report : Script Events and Script Canvas reloading

    Bug Report : Script Events and Script Canvas reloading

    Describe the bug When I go into a script events to add a new event to it, I should not have to go back to all the scripts utilizing this script event as long as it did not change anything about the events they use. For a developer aspect this takes a lot of time to go into each script just to Ctrl+S to re-save them even though nothing has changed in the scripts when a new event is added.

    Steps to reproduce Steps to reproduce the behavior:

    1. Create a script events asset and add one event to it.
    2. Create a script canvas asset that on graph start it gets the script event and prints an output.
    3. Close the script canvas asset and open the script events asset to add one more event to it.
    4. Try to run the level to not see the output in the console form the script canvas asset.
    5. Go back into the script canvas asset save it again after it updates the event and try again to see the output in the console.

    Expected behavior If the events have not been switched for the scripts utilizing them, they should automatically just update in the background in the AP so I do not have to manually update each script.

    Actual behavior You have to manually update each script so they are up to date with the events info from the script event asset, and this takes quite a bit of time while experimenting with multiple graphs.

    Found in Branch Development 10178

    Desktop/Device (please complete the following information):

    • Device: PC
    • OS: Windows
    • Version 11
  • Material Canvas: DynamicNodeConfig behavior/edit context reflection and data type validation

    Material Canvas: DynamicNodeConfig behavior/edit context reflection and data type validation

    • Basic behavior hand edit context reflection for dynamic node config.
    • Moved data type registration to dynamic node manager so that the data types can be used to validate dynamic node configurations.
    • Added bus functions and bindings for registering and retrieving data types.
    • Config registration function now does validation and returns before registering a config if it fails.
    • Updated dynamic node register slots function to validate data types and report errors.
    • Updated graph context creation to retrieve data types from dynamic node manager.
    • Will do another pass on edit context for several classes to add custom controls and property descriptions
  • Rename inspector widget variables to be consistent across atom tools.

    Rename inspector widget variables to be consistent across atom tools.

    Minor change, renaming inspector variables to be consistent across tools.

    Might the document inspector and move it down to atom tools document application base class.

    Signed-off-by: Guthrie Adams [email protected]

  • feat(AZCore): add Vector2/3/4 variants for Vector* constructor

    feat(AZCore): add Vector2/3/4 variants for Vector* constructor

    So these changes just expand the constructor to support all variants of vector.

    Vector3

    • Vector3(Vector2)
    • Vector3(Vector2, float z)
    • Vector3(Vector4)
    • Vectro3(Simd::Vec3)

    Vector4

    • Vector4(Vector2)
    • Vector4(Vector2, float z)
    • Vector4(Vector2, float z, float w)
    • Vector4(Vector3)
    • Vector4(Vector3, float w)
    • Vector4(Simd::Vec4)

    Vector2

    • Vector2(Vector2)
    • Vector2(Vector3)
    • Vector2(Vector4)
    • Vector2(Simd::Vec2)

    Would it make sense to do away with the Set methods entirely. The constructor + assignment vs using Set should produce the same optimization. The code would be slightly more verbose having to use the constructor all the time.

    Vector4 w;
    w.Set(v3, 3.0f);
    w = Vector4(v3, 3.0f);
    

    for vector2/3/4 I've added a constructor for all variants of Vector

    Signed-off-by: Michael Pollind [email protected]

  • Added terrain mesh to the ray tracing scene

    Added terrain mesh to the ray tracing scene

    Built terrain StreamBuffer and shader views and added the terrain mesh to the ray tracing scene. Changed the RayTracingFeatureProcessor to identify meshes with a UUID instead of the mesh ObjectId.

    Tested AtomSampleViewer DX12/Vulkan Tested Editor DX12/Vulkan

    Signed-off-by: dmcdiarmid-ly [email protected]

  • Shader Management Console: Added table editing, inspector, undo, redo

    Shader Management Console: Added table editing, inspector, undo, redo

    • Implemented table editing, an inspector, undo, and redo to preview and test edit and behavior context reflection of multiple shader related classes. • Fixed issues in base document class and inspector to handle general document changes, undo, and redo notifications. • Removed unused bus functions

    The inspector depends on on https://github.com/o3de/o3de/pull/10183 and https://github.com/o3de/o3de/pull/10204

    Signed-off-by: Guthrie Adams [email protected]

A multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input

GLFW Introduction GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan application development. It provides a simple, platf

Jun 14, 2022
Open-source, cross-platform, C++ game engine for creating 2D/3D games.

GamePlay v3.0.0 GamePlay is an open-source, cross-platform, C++ game framework/engine for creating 2D/3D mobile and desktop games. Website Wiki API De

Jun 19, 2022
🚀 Making multi-player gamedev simpler since 2017
🚀  Making multi-player gamedev simpler since 2017

Making multi-player gamedev simpler since 2017. Single-header cross-platform world replication in pure C99. Built with love using zpl • Brought to you

Jun 17, 2022
Bullet Physics SDK: real-time collision detection and multi-physics simulation for VR, games, visual effects, robotics, machine learning etc.
Bullet Physics SDK: real-time collision detection and multi-physics simulation for VR, games, visual effects, robotics, machine learning etc.

Bullet Physics SDK: real-time collision detection and multi-physics simulation for VR, games, visual effects, robotics, machine learning etc.

Jun 22, 2022
A multi core friendly rigid body physics and collision detection library suitable for games and VR applications.
A multi core friendly rigid body physics and collision detection library suitable for games and VR applications.

A multi core friendly rigid body physics and collision detection library suitable for games and VR applications.

Jun 24, 2022
Multi-Joint dynamics with Contact. A general purpose physics simulator.

Multi-Joint dynamics with Contact. A general purpose physics simulator.

Jun 17, 2022
Cross-platform, graphics API agnostic, "Bring Your Own Engine/Framework" style rendering library.
Cross-platform, graphics API agnostic,

bgfx - Cross-platform rendering library GitHub Discussions Discord Chat What is it? Cross-platform, graphics API agnostic, "Bring Your Own Engine/Fram

Jun 22, 2022
Cross-platform 2D and 3D game engine.
Cross-platform 2D and 3D game engine.

Urho3D Urho3D is a free lightweight, cross-platform 2D and 3D game engine implemented in C++ and released under the MIT license. Greatly inspired by O

Jun 17, 2022
PainterEngine is a application/game engine with software renderer,PainterEngine can be transplanted to any platform that supports C
PainterEngine is a application/game engine with software renderer,PainterEngine can be transplanted to any platform that supports C

PainterEngine is a application/game engine with software renderer,PainterEngine can be transplanted to any platform that supports C

Jun 18, 2022
Cocos2d-x is a suite of open-source, cross-platform, game-development tools used by millions of developers all over the world.
Cocos2d-x is a suite of open-source, cross-platform, game-development tools used by millions of developers all over the world.

Cocos2d-x is a suite of open-source, cross-platform, game-development tools used by millions of developers all over the world.

Jun 20, 2022
Dust3D is a cross-platform open-source 3D modeling software
Dust3D is a cross-platform open-source 3D modeling software

Dust3D is a cross-platform open-source 3D modeling software. Auto UV unwrapping, auto rigging with PBR Material support, pose and motion authoring all in one.

Jun 17, 2022
Horde3D is a small 3D rendering and animation engine. It is written in an effort to create an engine being as lightweight and conceptually clean as possible.

Horde3D Horde3D is a 3D rendering engine written in C++ with an effort being as lightweight and conceptually clean as possible. Horde3D requires a ful

Jun 22, 2022
Brand new engine with new and QoL features. Grafex is Psych engine with some additions and Better graphics

Friday Night Funkin' - Graphex Engine Credits: Grafex Mod aka Psych Graphic Rework: Xale - Lead Coding, Artist PurpleSnake - Second Coder Psych Engine

Apr 22, 2022
ORE (OpenGL Rendering Engine) is a rendering engine developed for my college minor project assessment.
ORE (OpenGL Rendering Engine) is a rendering engine developed for my college minor project assessment.

ORE (OPENGL RENDERING ENGINE) What is ORE? ORE(OpenGL Rendering Engine) is a rendering engine with great and easy to use UI that allows the user to lo

Dec 20, 2021
An integration of Live++ for Open 3D Engine

LivePlusPlus_O3DE_Gem An integration of https://liveplusplus.tech/ for Open 3D Engine (Windows only). See Open 3D Engine at https://github.com/o3de/o3

Apr 28, 2022
Tesseract Open Source OCR Engine (main repository)

Tesseract OCR Table of Contents Tesseract OCR About Brief history Installing Tesseract Running Tesseract For developers Support License Dependencies L

Jun 18, 2022
A completely free, open-source, 2D game engine built on proven torque technology.
A completely free, open-source, 2D game engine built on proven torque technology.

Torque2D 4.0 Early Access 1 MIT Licensed Open Source version of Torque2D from GarageGames. Maintained by the Torque Game Engines team and contribution

Jun 16, 2022
appleseed is an open source, physically-based global illumination rendering engine primarily designed for animation and visual effects.
appleseed is an open source, physically-based global illumination rendering engine primarily designed for animation and visual effects.

appleseed is an open source, physically-based global illumination rendering engine primarily designed for animation and visual effects.

Jun 21, 2022
A modern cross-platform low-level graphics library and rendering framework
A modern cross-platform low-level graphics library and rendering framework

Diligent Engine A Modern Cross-Platform Low-Level 3D Graphics Library Diligent Engine is a lightweight cross-platform graphics API abstraction library

Jun 17, 2022