From fdd37ab92d5e1a381f50fca12475169ff823c26d Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Mon, 15 Aug 2022 13:06:32 -0400 Subject: [PATCH] Improve README --- README.md | 46 ++++++++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 000459d..2030da3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # Prism + A cross-platform engine providing real-time physically based rendering. This is the culmination 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 ![buddha](misc/buddha.png) ![custom models](misc/custom%20models.png) -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 + * Custom cross-platform high-level graphics API * Backends available: * Vulkan * Metal - * DX12 + * DX12 (WIP) * 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. - * Shaders are written in GLSL, and compiled to the required shader language offline and/or at runtime using SPIRV-Cross and glslang. + * Where older GPUs are supported (like the ones used in 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. + * 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 * Real-time physically based rendering including using scene probes for image-based lighting. * Skinned mesh support with animation. * PCSS or PCF for softer shadows, supported on every type of light. * Automatic eye adaption with exposure using compute kernels. * 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! - * If available on the platform, multiple windows are supported as well! This is leveraged by Dear ImGui for multiple viewport support. - * Support for querying whether the platform is in light/dark mode (where supported). Currently, this only switches between the light/dark imgui themes. -* Dear ImGui used for debug/editor UIs - * Uses the experimental docking/viewport branch! + * If available on the platform, multiple windows are supported as well! This is leveraged by Dear ImGui for multiple + viewport support. + * Support for querying whether the platform is in light/dark mode (where supported). Currently, this only switches + 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. * 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 - * 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 - * 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! * 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. @@ -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 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 -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 + 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.