Rust-Vulkust: Vulkust — — A safe, highly multithreaded, Vulkan based game engine written with Rust.

Vulkust (unstable, work in progress)

An experimental tiny engine for Vulkan in Rust.



1- Missions

  1. Safety: Only FFI related stuff are unsafe and in addition several other validation on runtime occur for checking correct API usage and for performance reason it happens only in debug mode.
  2. Quality: It's gonna use highest available hardware features for providing better graphics, some of the feature may not be appropriate for poor devices (e.g. deferred rendering).
  3. Performance: It does every thing to bring highest possible performance.
  4. Fast development: Easy to develop new features.
  5. Small executable binary file: Abstained from chunky big external dependencies.
  6. Cross-platform: It works for Linux, Android, Windows, MacOS, iOS, (note: current focus is mostly on Linux and Android but other platforms get support after a while after a new feature added)
  7. Maintainable code

2- Status:

It is under lots of changes.

(Until current milestone feature is not implemented it is not stable.)

2-1- Current milestone

2-1-1- Current features:

  • Cross platform (Linux, Windows, MacOs, Android, iOS)
  • Deferred Rendering
  • Multithreaded Rendering
  • Support current version of GX3D.
  • Supports font rendering
  • UI system (early version)
  • A safe interface over Vulkan
  • Vulkan Memory management (early version)
  • Occlusion culling (Frustum culling)
  • Shadowing
  • Cascaded Shadow
  • Shadow Accumulation
  • Soft Shadowing
  • SSAO
  • PBR lighting
  • Texture mipmapping (2D)

2-1-2- Underdeveloment features:

  • Forward transparent pass

2-1-3- In near future:

  • Auto exposure
  • Light blooming
  • Light streak
  • PBR IBL
  • More UI widgets
  • Supporting GLTF

3- Examples

  • First of all master branch may become unstable or even uncompilable. (I'm gonna create a release branch in the first stable version)
  • You must have glslangValidator in you PATH environment variable.
  • For iOS and Android, you must have vulkust-ios and vulkust-android projects next to the vulkust root.

4- License

  • You can do whatever you want to do with it, but every consequences are on you.
  • You can not say that you have written this.
  • Make some promotion for this project and me (I'm a job seeker).

Comments

  • Cube texture
    Cube texture

    Jan 6, 2019

                                                                                                                                                                                                            new-feature render 
    Reply
  • skybox
    skybox

    Jan 6, 2019

                                                                                                                                                                                                            new-feature render 
    Reply
  • Node based rendering
    Node based rendering

    Feb 21, 2019

                                                                                                                                                                                                            enhancement new-feature performance render 
    Reply
  • Trait and base structure for effect nodes
    Trait and base structure for effect nodes

    Feb 21, 2019

                                                                                                                                                                                                            enhancement new-feature render 
    Reply
  • Trait and base structure for nodes that shade on models
    Trait and base structure for nodes that shade on models

    Feb 21, 2019

                                                                                                                                                                                                            enhancement new-feature render 
    Reply
  • Trait and base structure for shadow accumulators
    Trait and base structure for shadow accumulators

    Feb 21, 2019

                                                                                                                                                                                                            enhancement new-feature render 
    Reply
  • Removed the strict need of independant-blending-render-target device-feature
    Removed the strict need of independant-blending-render-target device-feature

    Oct 16, 2018

    Because some the devices does not support that (including my phone), and in addition it is not a highly demand of Vulkust. Vulkust can easily adapt to not to need it.

    new-feature 
    Reply
  • Support different format of image texture.
    Support different format of image texture.

    Jun 19, 2018

    Currently I'm using RGBA images. This is done by converting all non-RGBA to RGBA in runtime (for reducing size of assets). But in future it is better to do review on this decision by these criteria:

    • Using different image formats must not add pipeline switching overhead.
    • It must definitely increases performance.
    • It must has a good trade off between memory usage and complexity of implementation.
    • It must be totally analyzed, Its best case (the case that It gets most improvement in performance and memory usage) must occurs repeatedly.
    enhancement 
    Reply
  • Performance: Use dedicated transfer queues for transferring.
    Performance: Use dedicated transfer queues for transferring.

    Dec 19, 2016

    Some of the devices have dedicated queues solely for transferring, in these queues, only transfer bit flag has been set. This issue raised as some of the Vulkan examples commented about it. One of the places this might be effective is where I try to make a transfer in staging phase of a buffer. For example in mesh creation.

    enhancement 
    Reply
  • better life time in runtime for main and staging buffers in buffer-manager
    better life time in runtime for main and staging buffers in buffer-manager

    Sep 4, 2017

    Currently If some one wants to keep main and staging buffers away from destroying, he must keep an Arc from both BufferManager and SubBuffer (e.g. MeshBuffer), this not a best solution it needs to be done in a separate structure and keep that struct in both BufferManager and SubBuffer and the user of SubBuffer is not force to have both of them.

    enhancement 
    Reply
  • Performance: Move vram managemment from objects base to scene base.
    Performance: Move vram managemment from objects base to scene base.

    Dec 20, 2016

    Currently I manage device memory by objects themselves, it is no very well because it increase API calls a lot and does not guarantee that alway there is enough memory for new objects. I must put this in management in the hands scene, it can manage the transition of objects from ram to vram.

    enhancement 
    Reply
  • Separate scene-related uniform and samples from object-related uniform and sample
    Separate scene-related uniform and samples from object-related uniform and sample

    Sep 6, 2017

    Currently all the uniform data and sample data are combined together in one structure that is allocated with SceneDynamics but it has a (unmeasured in severity) drawback, it forces engine to inefficiently copy unnecessary data to GPU in each frame, as It said it is unmeasured and I'm uncertain about it because on the other hand you have unlocalized and fragmented data copy of buffer and management of it fragments.

    I can tell it is better to reduce data transferring but because of of advantage with disadvantage it is an low priority enhancement.

    enhancement 
    Reply