/Vultaik

Vultaik Cross-Platform Rendering

Primary LanguageC#MIT LicenseMIT

Vultaik is a 2D/3D renderer implemented in Vulkan®

Build status NuGet License: MIT


Overview

Vultaik can be used to produce render layers for custom engines or next-gen games and provides building blocks for writing your own engine or game quickly. Due to the parallel nature of GPUs, Vultaik can use GPGPU to exploit a GPU for computational tasks. Supports ComputePipeline and more, allowing to be used for general computations


Low-level rendering backend

The rendering backend focuses entirely on Vulkan and HLSL, however, the API greatly simplifies the more painful points of writing straight Vulkan. Modern Vulkan extensions and features are aggressively made use of to improve performance

Some notable extensions that should be supported for optimal or correct behavior. These extensions will likely become mandatory later.

  • VK_EXT_descriptor_indexing
  • VK_KHR_timeline_semaphore
  • VK_KHR_ray_tracing_pipeline
  • VK_KHR_acceleration_structure
  • VK_KHR_ray_query
  • VK_KHR_buffer_device_address
  • VK_KHR_fragment_shading_rate

Features:

  • Ray Tracing
  • Conservative rasterization
  • Multiview rendering
  • Conditional rendering
  • Shading rate
  • Descriptor indexing
  • Timeline semaphore
  • Synchronization2
  • Memory allocator
  • GPU-Assisted Validation
  • Compute Shader
  • Geometry Shader
  • Tessellation Shader
  • Instancing, Indirect drawing
  • Post-AA (FXAA, SMAA and TAA)
  • Multithreaded rendering
  • Automatic descriptor set management
  • Shader reflection with SPIRV-Cross
  • Vulkan HLSL for shaders, shaders are compiled in runtime with DirectXShaderCompiler
  • GLTF 2.0 for samples

Examples

Example Details
Clear Screen
This example shows how to configure the device and clear the color.
Triangle
This example shows how to render simple triangle.
Transformations
This example how to transform the world space for each object.
Push Constant
This example use push constants, small blocks of uniform data stored within a command buffer, to pass data to a shader without the need for uniform buffers.
Load GLTF
This example shows how to load GLTF models.
Load Texture
This example shows how to load 2D texture from disk (including all mip levels).
Bindless
This example demonstrates the use of VK_EXT_descriptor_indexing for creating descriptor sets with a variable size that can be dynamically indexed in a shader using SPV_EXT_descriptor_indexing.
Diffuse Lighting
This example shows how to create diffuse lighting.
Ambient Lighting
This example shows how to create ambient lighting.
Specular Lighting
This example shows how to create specular lighting.
Compute Texture
Use a calculation shader in conjunction with a separate calculation queue to modify a full screen image.


Additionally, Vultaik uses NuGet packages or code from the following repositories: