Improve README
This commit is contained in:
parent
6b735456b8
commit
fdd37ab92d
1 changed files with 30 additions and 16 deletions
46
README.md
46
README.md
|
@ -1,4 +1,5 @@
|
||||||
# Prism
|
# Prism
|
||||||
|
|
||||||
A cross-platform engine providing real-time physically based rendering. This is the culmination
|
A cross-platform engine providing real-time physically based rendering. This is the culmination
|
||||||
of several years of my own graphics programming work :-)
|
of several years of my own graphics programming work :-)
|
||||||
|
|
||||||
|
@ -10,36 +11,46 @@ Here is a selection of screenshots that provides a good sense of the graphical c
|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
* Custom cross-platform high-level graphics API
|
* Custom cross-platform high-level graphics API
|
||||||
* Backends available:
|
* Backends available:
|
||||||
* Vulkan
|
* Vulkan
|
||||||
* Metal
|
* Metal
|
||||||
* DX12
|
* DX12 (WIP)
|
||||||
* Rendering is consistent regardless of platform or API used!
|
* Rendering is consistent regardless of platform or API used!
|
||||||
* Where older 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.
|
* Where older GPUs are supported (like the ones used in an Apple TV 4K, or a Thinkpad X230), the engine supports
|
||||||
* Shaders are written in GLSL, and compiled to the required shader language offline and/or at runtime using SPIRV-Cross and glslang.
|
disabling expensive features like IBL or point light shadows and has other scalability options.
|
||||||
|
* Shaders are written in GLSL, and compiled to the required shader language offline and/or at runtime using
|
||||||
|
SPIRV-Cross and glslang, where needed.
|
||||||
* Other advanced rendering techniques
|
* Other advanced rendering techniques
|
||||||
* Real-time physically based rendering including using scene probes for image-based lighting.
|
* Real-time physically based rendering including using scene probes for image-based lighting.
|
||||||
* Skinned mesh support with animation.
|
* Skinned mesh support with animation.
|
||||||
* PCSS or PCF for softer shadows, supported on every type of light.
|
* PCSS or PCF for softer shadows, supported on every type of light.
|
||||||
* Automatic eye adaption with exposure using compute kernels.
|
* Automatic eye adaption with exposure using compute kernels.
|
||||||
* Custom window management API
|
* Custom window management API
|
||||||
* main() and other platform-specific tidbits are abstracted, for easy support of non-desktop platforms like mobile devices.
|
* `main()` and other platform-specific tidbits are abstracted, for easy support of non-desktop platforms like mobile
|
||||||
|
devices.
|
||||||
* HiDPI support included and enabled by default!
|
* HiDPI support included and enabled by default!
|
||||||
* If available on the platform, multiple windows are supported as well! This is leveraged by Dear ImGui for multiple viewport support.
|
* If available on the platform, multiple windows are supported as well! This is leveraged by Dear ImGui for multiple
|
||||||
* Support for querying whether the platform is in light/dark mode (where supported). Currently, this only switches between the light/dark imgui themes.
|
viewport support.
|
||||||
* Dear ImGui used for debug/editor UIs
|
* Support for querying whether the platform is in light/dark mode (where supported). Currently, this only switches
|
||||||
* Uses the experimental docking/viewport branch!
|
between the light/dark imgui themes.
|
||||||
|
* [Dear ImGui](https://github.com/ocornut/imgui) used for debug/editor UIs
|
||||||
|
* Uses the experimental [docking branch](https://github.com/ocornut/imgui/issues/2109).
|
||||||
* Automatic DPI scaling on fonts for crisp rendering when the window is in a HiDPI environment.
|
* Automatic DPI scaling on fonts for crisp rendering when the window is in a HiDPI environment.
|
||||||
* Custom ImGui backend is built on top the GFX api and other platform-agnostic systems.
|
* Custom ImGui backend is 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](item/extern/imgui/include/imgui_stdlib.h) and [imgui_utility.hpp](item/engine/core/include/imgui_utility.hpp)!
|
* Plenty of custom widgets available for easily creating debug tools,
|
||||||
|
see [imgui_stdlib.h](item/extern/imgui/include/imgui_stdlib.h)
|
||||||
|
and [imgui_utility.hpp](item/engine/core/include/imgui_utility.hpp)!
|
||||||
* Entity-Component system for modular object building
|
* Entity-Component system for modular object building
|
||||||
* No runtime polymorphism is involved, and it leverages the native C++ type system, [components are kept as simple structs](item/engine/core/include/components.hpp).
|
* No runtime polymorphism is involved, and it leverages the native C++ type
|
||||||
|
system, [components are kept as simple structs](item/engine/core/include/components.hpp).
|
||||||
* Asset management
|
* Asset management
|
||||||
* Custom model file format for super-fast model loading and small file sizes.
|
* Custom model file format for superfast model loading and small file sizes.
|
||||||
* Includes a custom Blender addon for easy exporting!
|
* Includes a custom Blender addon for easy exporting!
|
||||||
* Assets are referenced from disk, and only loaded once - and are unloaded once they are no longer referenced.
|
* Assets are referenced from disk, and only loaded once - and are unloaded once they are no longer referenced.
|
||||||
* Thumbnails are created automatically by the editor and stored on disk until further use.
|
* Thumbnails are created automatically by the editor and stored on disk until further use.
|
||||||
|
@ -56,12 +67,15 @@ The sibenik, sponza and buddha models shown are from the [McGuire Computer Graph
|
||||||
Prism will build out of the box in CMake, but on some platforms (like Windows) you will have to point to some
|
Prism will build out of the box in CMake, but on some platforms (like Windows) you will have to point to some
|
||||||
dependencies yourself.
|
dependencies yourself.
|
||||||
|
|
||||||
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.
|
There is an example app provided in the [example](example) folder. If you want to build the tooling or the example, use
|
||||||
|
the CMake options `BUILD_EXAMPLE` and `BUILD_TOOLS` respectively.
|
||||||
|
|
||||||
### Combating slow compile times/linking times
|
### Combating slow compile times/linking times
|
||||||
Unfortunately Prism is built upon tons of statically linked libraries, and GCC's linker is notoriously slow for this task. If possible,
|
|
||||||
use Clang and your build times should improve dramatically.
|
Unfortunately Prism is built upon tons of statically linked libraries, and GCC's linker is notoriously slow for this
|
||||||
|
task. If possible, use Clang and your build times should improve dramatically.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
The ideal way to use it is by letting prism take over your main() and implementing an app_main() instead,
|
The ideal way to use it is by letting prism take over your main() and implementing an app_main() instead,
|
||||||
(and using `add_platform_executable` in CMake) but I'm working on letting developers use the engine as a regular library too.
|
(and using `add_platform_executable` in CMake) but I'm working on being able to use the engine as a regular library.
|
||||||
|
|
Reference in a new issue