Archived
1
Fork 0

Update README.md

This commit is contained in:
redstrate 2021-02-04 10:06:57 -05:00
parent ae599ba744
commit 90ae1ad614

View file

@ -1,9 +1,7 @@
# Prism # Prism
A cross-platform game engine that integrates a real-time physically based workflow and makes it easy to get started writing games or other graphical applications in C++! A cross-platform engine that integrates a real-time physically renderer and makes it easy to get started writing games or other graphical applications in C++!
I've been using this to actually develop a game i've been working on, and includes multiple systems to facilitate gameplay (like the UI and audio systems) along with your usual engine systems (like Renderer, and Log). However, the same engine is also proven to be useful for other graphical applications, like the Prism editor. Here are a couple of screenshots that provide a sense of the graphical capabilities of Prism:
Although I developed this on macOS, it has been tested on Windows, Linux, iOS, iPadOS and tvOS machines. Apart from some platform glue, these share a majority of the same code!
![pcss](https://github.com/redstrate/prism/blob/master/misc/pcss.png?raw=true) ![pcss](https://github.com/redstrate/prism/blob/master/misc/pcss.png?raw=true)
![sponza](https://github.com/redstrate/prism/blob/master/misc/sponza.png?raw=true) ![sponza](https://github.com/redstrate/prism/blob/master/misc/sponza.png?raw=true)
@ -11,57 +9,30 @@ Although I developed this on macOS, it has been tested on Windows, Linux, iOS,
![buddha](https://github.com/redstrate/prism/blob/master/misc/buddha.png?raw=true) ![buddha](https://github.com/redstrate/prism/blob/master/misc/buddha.png?raw=true)
![custom models](https://github.com/redstrate/prism/blob/master/misc/custom%20models.png?raw=true) ![custom models](https://github.com/redstrate/prism/blob/master/misc/custom%20models.png?raw=true)
The sibenik, sponza and buddha models shown are from the [McGuire Computer Graphics Archive](https://casual-effects.com/data/), other models shown are created by me. These are screenshots taken on macOS, using the _Metal_ API. [Work is still in progress to bring the Vulkan backend up to the same feature set](https://github.com/redstrate/prism/projects/1).
The sibenik, sponza and buddha models shown are from the [McGuire Computer Graphics Archive](https://casual-effects.com/data/), any other models shown are created by me.
## Development
Prism is still a heavy work in progress, and stuff is expected to break. I don't work full time on Prism, so updates are expected to be erratic.
Submitting bug reports and showing stuff you made in Prism is always appreciated! However, if you're submitting a feature request, please look at the [Wiki](https://github.com/redstrate/prism/wiki), [Issues](https://github.com/redstrate/prism/issues) and [Projects](https://github.com/redstrate/prism/projects) first to see my current development plans.
If you're building content for Prism, there is a Blender addon in `addon/` that integrates a content pipeline for easy exporting without leaving Blender!
## Features ## Features
Here is a list of some of the notable features of Prism: Using C++, you can easily build graphically powered applications that is expected to work consistently regardless of the platform used. There is a PBR renderer included in the repository, but anything can built on top of the GFX api and other platform abstractions.
* Cross platform graphics API is used for rendering If you're building a game, there is Input, UI and a basic Audio system available to use. There is also a lot of tools in `tools/` that allow you to curate content using the built-in Prism systems such as scenes, cutscenes and materials.
* Vulkan and Metal backends available
* Shaders are written in GLSL, and compiled to SPIR-V or MSL offline and at runtime using SPIRV-Cross and glslang. If you're building a tool, [ImGui](https://github.com/ocornut/imgui) is available to use and uses the docking branch. See `tools/` in the repository for examples, most of them is actually built on top of Prism.
* Windowing and System abstraction
* main() and other platform-specific tidbits are abstracted as well, for easy support on non-desktop platforms. You can view a more comprehensive list of features [here](https://github.com/redstrate/prism/wiki/List-of-Features).
* HiDPI is also supported!
* If available on the platform, multiple windows are supported as well.
* Support for querying whether or not the platform is in light/dark mode (where supported). Currently, this only switches between the light/dark dear imgui themes.
* Dear ImGui used for debug/editor UIs
* Uses the new docking/viewport branch!
* Automatic DPI scaling on fonts for crisp rendering when the window is in a HiDPI environment.
* Custom backend built on top the GFX api and other platform agnostic systems.
* Plenty of custom widgets available for easily creating debug tools, see [imgui_stdlib.h](https://github.com/redstrate/prism/blob/master/extern/imgui/include/imgui_stdlib.h) and [imgui_utility.hpp](https://github.com/redstrate/prism/blob/master/engine/core/include/imgui_utility.hpp)!
* Entity-Component system for scene authoring
* No runtime polymorphism is involved and leverages the native C++ type system. [Components are kept as simple structs](https://github.com/redstrate/prism/blob/master/engine/core/include/components.hpp).
* Asset management
* Custom model pipeline allowing for super fast model loading and easy authoring.
* Includes a custom blender addon for easy export!
* Assets are referenced from disk, and only loaded once - unloaded once they are no longer referenced.
* Thumbnails are created by the editor and stored on disk until further use.
* Custom UI system for easy authoring
* UIs are declared in JSON, and there is a graphical editor available as well.
* They can even be placed in the world with a UI component!
* Custom math library
* Quaternions, matrices, vectors, rays, and more are available!
* Infinite perspective matrices are also available and used by default.
* Advanced rendering techniques
* Rendering is consistent regardless of platform or API used!
* Where older or underperforming GPUs are supported (for example, an Apple TV 4K, or a Thinkpad X230), the engine supports disabling expensive features like IBL or point light shadows and has other scalability options.
* Real-time physically based rendering including using scene probes for image-based lighting.
* Node-based material editor for easy authoring within the engine.
* Skinned mesh support with animation.
* PCSS for soft shadows, supported on every type of light.
* Experimental depth of field, which looks better than a cheap gaussian blur by rendering seperate near/far fields.
* Experimental dynamic resolution.
* Automatic eye adapation using compute kernels.
* Editors supporting scene, cutscene, material authoring
* Multidocument workflow similar to UE4.
* Undo/redo system.
* Transform handles for easy object manipulation.
## Usage ## Usage
### Requirements ### Requirements
* CMake * CMake
* Support for Vulkan or Metal * C++ compiler that _fully_ supports C++17
* C++ compiler that fully supports C++17 * (2019) MSVC, Clang, and GCC have been tested
* MSVC, Clang, and GCC have been tested
There is no example available, but if you clone this repository and include it in your cmake tree, use the function `add_platform_executable` from [AddPlatformExecutable.cmake](https://github.com/redstrate/prism/blob/master/cmake/AddPlatformExecutable.cmake) to create a new Prism app. There are instructions for Windows, Linux, macOS, tvOS and iOS/iPadOS targets in the [wiki](https://github.com/redstrate/prism/wiki). There is an example app provided in `example/`. If you want to build the tooling or the example, use the CMake options `BUILD_EXAMPLE` and `BUILD_TOOLS` respectively.