hasan-jawaheri / wasabi Goto Github PK
View Code? Open in Web Editor NEWWasabi Vulkan Game Engine
Home Page: https://hasan-jawaheri.github.io/Wasabi/
License: GNU General Public License v3.0
Wasabi Vulkan Game Engine
Home Page: https://hasan-jawaheri.github.io/Wasabi/
License: GNU General Public License v3.0
Need a multi-threaded worker-based system to support CPU-based computations/operations such as particle system simulation and physics simulation.
Functional requirements:
Use cases to optimize for:
GLFW won't allow creation of windows in any threads other than the main thread. Further, it only wants on glfwPoll to happen. So Wasabi should have the main (first) thread run only window-related tasks, and run the rest of the rendering (and whatever else) starting in a new separate thread.
Functional requirements:
WInitialize
over there.Render to texture has the following problems:
An FXAA implementation is desperately needed since no default AA is available.
Lighting needs to be reworked to have proper specular terms.
Functional requirements:
Switching between different renderers during the demo (1 & 2 keys) causes rendered objects to randomly change properties like texture and color.
This is tested on a Mac with LightsDemo.
Instead of the current manual reflection, use the SPIR-V reflection API as it is cleaner, more feature-packed and a lot more convenient than manually reflecting.
Lighting:
Particles (internal) lighting could be done by supplying lights to the particle render (up to a maximum number) and performing the lighting in the pixel shader of the particle (similar to forward rendering lighting). Lights can be supplied to the particles per-frame depending on their distance and visibility to the particles.
Particles should also be able to compute normals to be able to be properly lit.
Soft particles:
Use depth-check to allow for soft particles.
Need to compile the doxygen documentation and add it as documentation.
Need to test compilation and running of the engine on Linux.
Requirements:
Functional requirement:
Particles system stop emitting after a while
Physics step rate should be decoupled from graphics frame rate and should be run in a separate thread:
1- this will save CPU time doing physics stuff making both physics and graphics threads faster and have more consistent rates
2- physics can run at a much lower rate (30 steps per seconds) saving CPU time
3- physics can be a lot more stable at fixed (and lower) rate
Need to check but some locking will likely be required as some operations (e.g. ray casting, or applying forces) cannot be done WHILE physics is stepping.
The purpose of this split was mainly motivated by improving experience while implementing a game with physics. To get reliable motion via applyForce
, a stable physics frame rate is important. It may be better to have the physics thread perform those motions (e.g. to guarantee 1 applyForce
per step). This can be done by allowing the users to peek into the queue (it may be enough to implement a getQueueSize
so users know not to insert more if already queued. Or be able to directly manipulate queue if its 1 queue for all actions)
There is a weird wobbling that happens when the camera moves. I suspect it has something to do with the buffering and camera matrices (perhaps push constants are ahead of their time?)
There is also a flickering issue when objects are spawned mid-loop, they seem to always render in center for one frame.
Implement tests using Catch2. Need to rewrite and restructure the whole testing framework.
Render fragments aren't able to render anything with custom effects. Sprites demo is missing the custom effect sprite due to this.
Need to test compilation and running of the engine on MacOS.
Requirements:
Clean up repo to reduce its size.
Clean ups required:
latex
?)Store last-edited time for shader files and dont re-compile them if not modified and compiled file still exists.
Changing code doesn't make the make system relink the wasabi library
All warnings in the library need to be addressed.
Complete the documentation doxygen pages in gh-pages
branch.
Wasabi should ship with a sample application
Functional requirements:
Vulkan error message:
0x0000011a29e2dc20 " [ UNASSIGNED-CoreValidation-Shader-InputNotProduced ] Object: 0x2c (Type = 15) | Vertex shader consumes input at location 5 but not provided"
Due to the vertex shaders expecting a second animation buffer
Geometry shaders are not supported on Mac, and generally not used frequently. Currently the only geometry shader in Wasabi is for converting particles vertices into billboards. This can be done on the CPU to eliminate the need for the geometry shader feature.
FBX SDK manual fiddling should be removed and replaced with the much larger library Assimp.
Minimal requirements:
Nice-to-haves:
Integrate the repository with TravisCI
Consider doing particles simulation in a side thread, and doing just the view transformation in the main thread.
Create a basic map editor application to be shipped with Wasabi.
Functional Requirements:
Add support for a MessageBox
on mac and linux (part of WWindowAndInputComponent
)
Rendering is somewhat a mess right now: the stages are completely decoupled from objects and effects. This causes a lot of "guess work" for the render fragments and a confusing user experience.
Functional requirements:
This opens up the door for massive optimizations (such as batching static objects together in one geometry or one (set of) materials/UBOs) and will clean up the code quite a lot.
Functional requirements:
Add ability to render text and sprites using a unit other than pixels such that they are more consistent across devices. The unit will rely on the DPI of the screen.
Need support for loading assets from worker thread(s).
Functional requirements:
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.