This one trick adds free FPS (do not do VXGI on completely transparent pixels)
This commit is contained in:
parent
6b37b2fa0e
commit
e076b2f53d
@ -4,12 +4,7 @@
|
||||
<img src="./docs/assets/program.win64.gcc.vulkan_2024-12-02_23-07-35.png" width="500px"></img>
|
||||
</p>
|
||||
|
||||
An unnamed, almost-entirely from-scratch, engine written in C++, using:
|
||||
* a Unity-like ECS + scene system
|
||||
* `?`-like hook system for dispatching events
|
||||
* Vulkan (or OpenGL) as the rendering backend
|
||||
* ReactPhysics3D for physics
|
||||
* OpenAL for audio
|
||||
An unnamed, almost-entirely from-scratch, engine written in C++.
|
||||
|
||||
## Build
|
||||
|
||||
@ -25,7 +20,7 @@ To compile, run `make`. The outputted libraries and executables will be placed i
|
||||
|
||||
Currently, assets are not provided due to size (but mostly due to being test assets).
|
||||
|
||||
*If* adequate assets are provided, run `./program.sh`.
|
||||
*If* adequate assets are provided, run `./program.sh` or `make run`. This ensures the path to the required libraries are added to the PATH.
|
||||
|
||||
## Documentation
|
||||
|
||||
|
@ -6,12 +6,12 @@
|
||||
"meshes": { "interleaved": false },
|
||||
"lights": { "enabled": true,
|
||||
"useLightmaps": false,
|
||||
"max": 16,
|
||||
"max": 32,
|
||||
"shadows": {
|
||||
"enabled": true,
|
||||
"update": 4,
|
||||
"max": 8,
|
||||
"samples": 4
|
||||
"samples": 2
|
||||
},
|
||||
"bloom": {
|
||||
"scale": 1.0,
|
||||
@ -30,11 +30,11 @@
|
||||
},
|
||||
"vxgi": {
|
||||
// "limiter": 0,
|
||||
"limiter": 0.125,
|
||||
"size": 256,
|
||||
"limiter": 0.5,
|
||||
"size": 128,
|
||||
"dispatch": 8,
|
||||
"cascades": 4,
|
||||
"cascadePower": 1.5,
|
||||
"cascades": 3,
|
||||
"cascadePower": 2.0,
|
||||
"granularity": 12,
|
||||
"voxelizeScale": 1,
|
||||
"occlusionFalloff": 2,
|
||||
@ -58,7 +58,7 @@
|
||||
}
|
||||
},
|
||||
"graph": {
|
||||
"initial buffer elements": 1024,
|
||||
"initial buffer elements": 2048,
|
||||
"global storage": false
|
||||
},
|
||||
"ext": {
|
||||
@ -114,7 +114,7 @@
|
||||
"deferred": true,
|
||||
"gui": true,
|
||||
"vsync": false,
|
||||
"hdr": false,
|
||||
"hdr": true,
|
||||
"vxgi": true,
|
||||
"culling": true,
|
||||
"bloom": false,
|
||||
|
@ -11,12 +11,12 @@
|
||||
// exact matches
|
||||
"worldspawn": {
|
||||
"physics": { "type": "mesh", "static": true },
|
||||
"grid": { "size": [8,1,8], "epsilon": 0.001, "cleanup": true, "print": true },
|
||||
"grid": { "size": [16,1,16], "epsilon": 0.001, "cleanup": true, "print": true },
|
||||
"optimize meshlets": { "simplify": 0.125, "print": false },
|
||||
"unwrap mesh": true
|
||||
},
|
||||
"worldspawn_skybox": {
|
||||
"grid": { "size": [8,1,8], "epsilon": 0.001, "cleanup": true, "print": true },
|
||||
"grid": { "size": [16,1,16], "epsilon": 0.001, "cleanup": true, "print": true },
|
||||
"optimize meshlets": { "simplify": 0.125, "print": false },
|
||||
"unwrap mesh": true
|
||||
},
|
||||
|
@ -1,8 +1,8 @@
|
||||
{
|
||||
"import": "./base_sourceengine.json",
|
||||
"assets": [
|
||||
{ "filename": "./models/sh2_mcdonalds.glb" }
|
||||
// { "filename": "./models/sh2_mcdonalds/graph.json" }
|
||||
// { "filename": "./models/sh2_mcdonalds.glb" }
|
||||
{ "filename": "./models/sh2_mcdonalds/graph.json" }
|
||||
],
|
||||
"metadata": {
|
||||
"graph": {
|
||||
@ -23,7 +23,7 @@
|
||||
},
|
||||
*/
|
||||
"/^worldspawn_barrier$/": { "ignore": true },
|
||||
// "/^worldspawn_skybox/": { "ignore": true },
|
||||
"/^worldspawn_skybox/": { "ignore": true },
|
||||
|
||||
"func_door_rotating_5473": { "action": "load", "payload": { "import": "/door.json", "metadata": { "angle":-1.570795, "normal": [1,0,0] } } },
|
||||
"func_door_rotating_5509": { "action": "load", "payload": { "import": "/door.json", "metadata": { "angle":-1.570795, "normal": [1,0,0] } } },
|
||||
|
@ -1,8 +1,8 @@
|
||||
{
|
||||
// "import": "./rp_downtown_v2.json"
|
||||
// "import": "./ss2_medsci1.json"
|
||||
// "import": "./sh2_mcdonalds.json"
|
||||
"import": "./animal_crossing.json"
|
||||
"import": "./sh2_mcdonalds.json"
|
||||
// "import": "./animal_crossing.json"
|
||||
// "import": "./mds_mcdonalds.json"
|
||||
// "import": "./gm_construct.json"
|
||||
}
|
@ -180,7 +180,7 @@ void indirectLightingVXGI() {
|
||||
// deferred sampling doesn't have a blended albedo buffer
|
||||
// in place we'll just cone trace behind the window
|
||||
#if !RT
|
||||
if ( surface.material.albedo.a < 1.0 ) {
|
||||
if ( 0.1 < surface.material.albedo.a && surface.material.albedo.a < 1.0 ) {
|
||||
Ray ray;
|
||||
ray.direction = surface.ray.direction;
|
||||
ray.origin = surface.position.world + ray.direction;
|
||||
|
@ -4,6 +4,39 @@
|
||||
|
||||
To be filled.
|
||||
|
||||
* a Unity-like ECS + scene + asset system
|
||||
* entities stores components and behaviors
|
||||
* scenes load a tree of entities
|
||||
* entities are defined through JSON files (which are processed as gunzipped msgpacks for subsequent loads) which can reference assets or further entities
|
||||
* Lua to extend the engine
|
||||
* Garry's Mod-like hook system for dispatching events
|
||||
* events are dispatched through the hook system by sending a payload to hooks tied to a given name / payload type
|
||||
* by default, these are JSON payloads, but most internal hooks send unique structs instead
|
||||
* Vulkan (or OpenGL) as the rendering backend
|
||||
* the Vulkan backend heavily makes use of an almost-GPU driven deferred rendering system
|
||||
* "G-buffer" can consist solely of IDs, barycentrics, and depth, and all geometry information is then reconstructed during the deferred compute pass
|
||||
* shadow maps are rendered to each light's shadow maps
|
||||
* point lights are treated as a cubemap
|
||||
* basic PBR shading
|
||||
* a sovlful (sloppy) VXGI for GI and reflections
|
||||
* (currently broken) hardware RT support
|
||||
* (currently broken) bloom and additional post processing
|
||||
* FSR2 or something cringe
|
||||
* OpenGL uses a very, very naive OpenGL 1.2 API with a homebrewed command recording system
|
||||
* ReactPhysics3D for physics
|
||||
* *very* loosely integrated
|
||||
* basic shapes and triangulated mesh collision and some form of ray queries
|
||||
* OpenAL for audio
|
||||
* Currently only loads from ogg (vorbis) files
|
||||
* Supports loading in full and streaming
|
||||
* *very* loosely integrated
|
||||
|
||||
## Supported Systems
|
||||
|
||||
* Windows
|
||||
* *technically* also Linux under Proton
|
||||
* Sega Dreamcast
|
||||
|
||||
## Notices and Citations
|
||||
|
||||
Unless otherwise credited/noted in this repo or within the designated file/folder, this repository is [licensed](/LICENSE) under AGPLv3.
|
||||
Unless otherwise credited/noted in this repo or within the designated file/folder, this repository is [licensed](/LICENSE) under AGPLv3 (I do not have a master record of dependencies).
|
@ -9,10 +9,11 @@
|
||||
#include <uf/utils/camera/camera.h>
|
||||
#include <uf/ext/xatlas/xatlas.h>
|
||||
|
||||
// it's too unstable right now to do multithreaded loading, perhaps there's a better way
|
||||
#if UF_USE_OPENGL
|
||||
#define UF_GRAPH_LOAD_MULTITHREAD 0
|
||||
#else
|
||||
#define UF_GRAPH_LOAD_MULTITHREAD 1
|
||||
#define UF_GRAPH_LOAD_MULTITHREAD 0
|
||||
#endif
|
||||
|
||||
#if 0 && UF_ENV_DREAMCAST
|
||||
|
Loading…
Reference in New Issue
Block a user