Giter Site home page Giter Site logo

niagara's Introduction

Niagara

This is a Vulkan renderer that is written on stream from scratch - without using any third party code that is Vulkan specific. We are using non-Vulkan-specific third party libraries however.

The goal is to experiment with a few modern Vulkan rendering techniques, such as GPU culling & scene submission, cone culling, automatic occlusion culling, task/mesh shading, and whatever else it is that we will want to experiment with. The code will be written on stream.

Requirements

The renderer was originally written using Visual Studio and targeted Windows desktops with modern Vulkan drivers. Since then the development platform has switched to Linux, but you can still build and run it on Windows.

Building

To build and run the project, clone this repository using --recursive flag:

git clone https://github.com/zeux/niagara.git --recursive

Make sure you have Vulkan SDK installed; open the Visual Studio project in niagara/src and build it. Alternatively, you can use CMake to generate build files on Windows or Linux.

To run the program, command line should contain arguments with paths to .obj files; you can use kitten.obj from data/ folder for testing. On lower-end GPUs you might want to change drawCount in niagara.cpp to be a value smaller than 1M.

Stream

The development of this project has streamed on YouTube on weekends in October and November 2018; the project is currently on hold.

Playlist: https://www.youtube.com/playlist?list=PL0JVLUVCkk-l7CWCn3-cdftR0oajugYvd

  1. Setting up instance/device and filling the screen with a solid color: https://youtu.be/BR2my8OE1Sc
  2. Rendering a triangle on screen: https://youtu.be/5eS3gsL_P-c
  3. Cleaning up validation errors and implementing swapchain resize: https://youtu.be/_VU-G5rglnA
  4. Rendering a mesh using shader storage buffers and int8: https://youtu.be/nKCzD5iK71M
  5. Rendering a mesh using NVidia RTX mesh shading pipeline: https://youtu.be/gbeOKMjmQ-g
  6. Optimizing GPU time by using device-local memory and parallelizing mesh shader: https://youtu.be/ayKoqK3kQ9c
  7. Using descriptor update templates and parsing SPIRV to extract reflection data: https://youtu.be/3Py4GlWAicY
  8. Cluster cone culling using task shaders and subgroup ops: https://youtu.be/KckRq7Rm3Mw
  9. Tuning mesh shading pipeline for performance: https://youtu.be/snZkA4D_qjU
  10. Depth buffer, perspective projection, 3D transforms and multi draw indirect: https://youtu.be/y4WOsAaXLh0
  11. Multiple meshes and GPU frustum culling: https://youtu.be/NGGzk4Fi2iU
  12. Draw call compaction using KHR_draw_indirect_count and LOD support: https://youtu.be/IYRgDcnJJ2I
  13. Depth pyramid construction and extending SPIRV reflection parser: https://youtu.be/YCteLdYdZWQ
  14. Automatic occlusion culling: https://youtu.be/Fj1E1A4CPCM
  15. Vulkan 1.2 and GPU buffer pointers: https://youtu.be/78tVIA6nRQg
  16. Upgrading to Vulkan 1.3: https://youtu.be/Ka30T6BMdhI
  17. Implementing triangle culling: https://youtu.be/JKTfAgv3Vlo
  18. Meshlet occlusion culling: https://youtu.be/5sBpo5wKmEM
  19. Optimizing culling: https://youtu.be/1Tj6bZvZMts
  20. Task command submission: https://youtu.be/eYvGruGHhUE

Issues

During the streams we find various bugs in parts of the Vulkan stack and report them; bugs marked with ✔️ have been fixed.

niagara's People

Contributors

zeux avatar yunhsiao avatar deccer avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.