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

Overview

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.

Issues
  • Automated Review Failure - development

    Automated Review Failure - development

    opened by o3de-issues-bot 46
  • 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]

    platform/linux sig/content sig/platform feature/viewport 
    opened by pollend 27
  • 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
    kind/bug needs-priority sig/graphics-audio 
    opened by baothientran 25
  • 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

    sig/content 
    opened by pollend 24
  • 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)

    feature/asset-pipeline kind/bug sig/core triage/accepted priority/critical 
    opened by moraaar 24
  • 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 .

    sig/content sig/ui-ux 
    opened by jjjoness 23
  • 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.

    needs-triage sig/core sig/ui-ux 
    opened by L4stR1t3s 21
  • 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]

    sig/graphics-audio 
    opened by RoaldFre 19
  • Automated Review Failure - development

    Automated Review Failure - development

    Build url: https://jenkins.build.o3de.org/job/O3DE/job/development/968/ Identified problems:

    sig/content automated_review_failure/development 
    opened by o3de-issues-bot 19
  • Clang 12.0 not supported in Linux (other distribution)

    Clang 12.0 not supported in Linux (other distribution)

    Describe the bug I tried to compiler another distro not Debian/Ubuntu but however the message "Compiler GNU not supported in Linux" what is wrong

    To Reproduce see https://o3de.org/docs/user-guide/platforms/linux/ and experiment

    Run terminal

    xxxxxxx:~/o3de/o3de> cmake -B build/linux-dedicated -S . -DLY_3RDPARTY_PATH=~/home/o3de -DLY_UNITY_BUILD=ON -DCMAKE_INSTALL_PREFIX=~/home/o3de_install -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=clang++
    -- The C compiler identification is Clang 12.0.0
    -- The CXX compiler identification is Clang 12.0.0
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Check for working C compiler: /usr/bin/clang - skipped
    -- Detecting C compile features
    -- Detecting C compile features - done
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Check for working CXX compiler: /usr/bin/clang++ - skipped
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    No build type specified (CMAKE_BUILD_TYPE), defaulting to profile build
    CMake Error at cmake/3rdParty.cmake:34 (message):
      3rdParty folder: /home/ilyafuu/home/o3de does not exist, call cmake
      defining a valid LY_3RDPARTY_PATH or use cmake-gui to configure it
    Call Stack (most recent call first):
      CMakeLists.txt:34 (include)
    
    
    -- Configuring incomplete, errors occurred!
    

    distr OpenSUSE install only llvm-clang

    xxxxxxx:~> cmake --version
    cmake version 3.20.5
    

    Expected behavior

    Screenshots

    Desktop/Device (please complete the following information):

    • Device: PC
    • OS: OpenSUSE
    • Version: Tumbleweed
    • CPU: AMD 3 3100
    • GPU: AMD 5500 XT
    • Memory: 16GB

    Additional context

    platform/linux kind/bug needs-triage sig/build feature/build 
    opened by Darkinggq 19
  • Added Chromatic Aberation PPFX w/ Component

    Added Chromatic Aberation PPFX w/ Component

    Two parameters: Strength impacts the channel displacement Blend impacts the blending of the aberration with the original image

    Follows patterns found in other PPFX in a relatively simple example so should not include any suprises and can hopefully be used as an example for future onboarding wrt ppfx and/or component creation (please comment if you find this to not be the case somewhere).

    Screenshot below is of default values: Editor_9EYorxXVlZ

    Following screenshot is of high strength and default blend to make the impact more obvious: Editor_I89kzorCVG

    sig/graphics-audio 
    opened by tjmgd 18
  • Preparation For New Shader Details Tool

    Preparation For New Shader Details Tool

    Updated MeshFeatureProcessor to expose access to the MeshDrawPackets for debug purposes. This will be used to inspect the content of the draw packet, see exactly which shader variant is being used, and reflect that in the shader details tool.

    At the same time, I updated AtomSampleViewer's MaterialHotReloadTest sample (see https://github.com/o3de/o3de-atom-sampleviewer/pull/447) to use this new API to inspect the actual shader variant being used rather than simply look at what the material is requesting. This improved reporting revealed that the correct shader variant wasn't actually being used, and the test started failing. So I fixed a couple of shader reload issues.

    When a ShaderVariantAsset was loaded by the ShaderVariantAsyncLoader, and then removed due to changes in the shader variant list, and then added back again, the re-added shader variant asset was never reported via AssetBus::OnAssetReady. This is because the asset was removed from AssetManager::m_assets so when AssetCatalog::AssetChanged called AssetManager::ReloadAsset, there was no asset present. The solution was to ensure that the contents of ShaderVariantAsyncLoader match the contents of the AssetManager; if it's not in the AssetManager then remove it from the ShaderVariantAsyncLoader. This triggers the necessary code paths to get the ShaderVariantAsset loaded again via ShaderVariantAsyncLoader::QueueLoadShaderVariantAsset.

    I also made the ShaderVariantAsyncLoader thread delay configurable. AtomSampleViewer will use this to make the delay shorter so tests can finish sooner while also avoiding intermittent failures that were occurring (because the thread delay was 1 second and the script was idling for exactly 1 second).

    sig/graphics-audio 
    opened by santorac 0
  • Change RayTracingSceneUtils and RayTracingMaterialUtils to use the correct index from the indirection buffer

    Change RayTracingSceneUtils and RayTracingMaterialUtils to use the correct index from the indirection buffer

    Changed RayTracingSceneUtils and RayTracingMaterialUtils to use the correct index from the indirection buffer. Removed the check for the free list start index in RayTracingIndexList::IsValidIndex.

    All AtomSampleViewer tests passed. Tested AtomSampleViewer DX12/Vulkan. Tested Editor DX12/Vulkan.

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

    opened by dmcdiarmid-ly 0
  • Action Manager | Refactor API to future-proof property assignment on construction.

    Action Manager | Refactor API to future-proof property assignment on construction.

    Applied minor changes to API arguments ordering to uniform them between calls. Moving ActionContext and Action properties to struct to future-proof future API changes in case we need more properties to be added. Updated the tests accordingly.

    No behavior changes, just changes to the API.

    opened by AMZN-daimini 1
  • Some overload node name fix and detect deprecate node when using upgrade tool

    Some overload node name fix and detect deprecate node when using upgrade tool

    Details

    • Fix method overload node name for Vector2, Vector3, Vector4 and Quaternion
    • Add check to upgrade tool when graph contains deprecated node

    Testing

    Changes involves ScriptCanvas editor usage only, tested locally by checking corresponding node name, and also use graph upgrade tool to make sure it can pickup expected graph in list

    Signed-off-by: onecent1101 [email protected]

    opened by onecent1101 0
  • Changing the Private Gem library target to be a STATIC library from an OBJECT library

    Changing the Private Gem library target to be a STATIC library from an OBJECT library

    The Trade-offs between an OBJECT and a STATIC LIBRARY are as follows

    OBJECT_LIBRARY

    1. Dead stripping isn't performed by default using clang/gcc
    2. Symbols with external linkage are added to any linked shared library/executable
    3. A duplicate copy of the object file isn't in an archive file

    STATIC_LIBRARY

    1. Dead stripping is performed by default using clang/gcc
    2. Symbols with external linkage which are not used are not added to any linked shared library/executable
    3. A duplicate copy of the object file existing the STATIC library.

    For Gems the trade offs are the differences in shared library size(.dll/.so/.dylib) size(larger for OBJECT libraries) vs a static library that is only used internally within the gem and is not for public consumption(Unneeded file in the build/install directory).

    Signed-off-by: lumberyard-employee-dm [email protected]

    opened by lumberyard-employee-dm 0
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

GLFW 9k May 12, 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

gameplay3d 3.6k May 9, 2022
🚀 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

ZPL | Your C11 Powerkit 964 May 12, 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 9.3k May 11, 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.

null 1.6k May 11, 2022
Multi-Joint dynamics with Contact. A general purpose physics simulator.

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

DeepMind 3.5k May 18, 2022
Cross-platform, graphics API agnostic, "Bring Your Own Engine/Framework" style rendering library.

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

Бранимир Караџић 11.5k May 10, 2022
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

null 4k May 15, 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

DBinary 1.3k May 11, 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 16.1k May 9, 2022
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.

Jeremy HU 2.4k May 11, 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

Volker Vogelhuber 1.2k May 5, 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

Xale 14 Apr 22, 2022
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

HARSHIT BARGUJAR 4 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

Olex Lozitskiy 9 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

null 45.2k May 15, 2022
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

Torque Game Engines 465 May 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.

appleseedhq 1.9k May 10, 2022
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

Diligent Graphics 2.3k May 9, 2022