haeri / photonbox Goto Github PK
View Code? Open in Web Editor NEWA portable modern OpenGL Game-Engine with focus on PBR
License: MIT License
A portable modern OpenGL Game-Engine with focus on PBR
License: MIT License
Rendering API should allow for to render multiple instances of the same mesh at once,
This should be a lot faster than the random sampling in 3d space.
http://frederikaalund.com/a-comparative-study-of-screen-space-ambient-occlusion-methods/
The current shader system needs a rework. It should not be necessary to create a class for every shader type. A shader instance should parse all the necessary information from a unified shader file (with a .pbs extension) containing vertex and fragment source code. Additional defines should specify how the shader is configured.
shader.pbs
# type: surface
# vertex
/* glsl code */
# fragment
/* glsl code */
If the game code compiles to a shared library, it can be hot-reloaded without having to shut down the running engine-process.
Redistributing dependencies as binaries is not best practice, as it bloats the repo and may not work for all platforms.
The OpenGL API is strongly coupled with the engine. There needs to be an abstraction layer over the graphics api.
The math classes, especially the vectors and matrices would greatly profit from SIMD as it would boost the performance by paralleling operations.
https://software.intel.com/en-us/articles/simd-made-easy-with-intel-ispc
The current SSR solution is not optimal. The stochastic approach should yield better looking results.
https://www.ea.com/frostbite/news/stochastic-screen-space-reflections
I left out the precomputed BRDF for the specular term. This should also be considered
https://learnopengl.com/PBR/IBL/Specular-IBL
A benchmarking system, that will measure every sub-system will help detect problem areas.
Something like this https://www.youtube.com/watch?v=xlAH4dbMVnU
Although Deferred Rendering performes better than Forward rendering, since shading is deferred to the end of the pipeline, when all valid fragments are determined, it still can be expensive to shade all final fragments with a large number of lights.
This can be optimized by dividing the depth buffer into tiles represented by the frustum formed by the near, far and the frustum sides defined by the tile position. Through a compute shader the min and max depth in said tile can be computed and the frustum near and far planes should be adusted accordingly. This gives us a tight frustum representation of a tile, which we then can test against light bounds to check if a light would affect this tile.
https://www.ea.com/frostbite/news/directx-11-rendering-in-battlefield-3
In 99% of the cases the index buffer consists of liear incrementing values. If we instead change it to a deltas, the sequence will mostly consist of 1s, which will greatly increase the compressability.
An easy logging API that will eliminate direct std::cout calls. Should allow for options:
Timestamps should also be included. Logging should be completely deactivated with macros or redirected to a log file.
The shadow camera needs to be updated according to the view frustum
The current ECS implementation stores the different components inside the Entity. This can be improved by storing the components according to their type into a vector inside their respective system. This would result in an uniform memory layout and cache friendly fetching when iterating over components from the same family such is the case for Physics objects, Mesh Components etc.
Frustum culling will improve rendering performance by discarding geometry that lies outside of the frustum.
http://www.lighthouse3d.com/tutorials/view-frustum-culling/
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.