Skip to content

utinyt/Vulkan

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

Vulkan Technical Demo

This is a realtime 3D rendering application written in Vulkan / C++ / GLSL.

Developing Environments

  • OS: Windows 10
  • IDE: Visual Studio 2019
  • GPU: RTX 2060 SUPER

Successful build on other environments is not guaranteed.

Third Party

References

A lot of code were based on these great resources:

Updates

N-Body Simulation + HDR & Bloom - (Oct.31.2021)

n body simulation

Average frame time: 5.57ms (179.6 FPS)

  • 32768 particles (uniformly distributed on the surface of a sphere)
  • Screen resolution 1200x800
  • HDR (reinhard tone mapping)
  • Bloom (gaussian blur)
  • Compute shader + shared variables

Deferred Rendering + SSAO & MSAA - (Oct.05.2021)

deferred_rendering
Youtube link : https://youtu.be/CDU1MrpubUw

Scene setup

  • 20 point lights
  • 1024 bunnies - instanced rendering
  • Screen resolution 1200x800
  • MSAA applied (maximum sample count supported by current device)

Optimization #1

deferred_rendering edge detection
Used edge detection (comparing neighborhood normal vectors) to only apply msaa to the pixels on edges

Optimization #2

To fix thread coherence problem ("edge pixels" and "non-edge pixels" are computed in one pass), the render pass for edge pixels was separated by using stencil buffer generated from edge detection algorithm.


MSAA - (Sep.16.2021)

mass_x1
mass_x8

Skybox & environment (reflection) mapping - (Sep.16.2021)

skybox


Initial framework - (Sep.06.2021)

initial_framework

Initial scene with stanford bunny - simple diffuse light applied

Most of basic vulkan features were implemented at this point:

  • Devices: Collection of physical / logical device handle
  • Swapchain: Manage images in swapchain (acquire / present)
  • MemoryAllocator: Naive memory allocator that pre-allocate big chunk(s) of memory per memory type
  • Textures: Load texture from a file (stb_image used)
  • Mesh: Load model from a obj file (tinyobjloader used)

About

Vulkan demos

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published