Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Impressive Project! #17

Open
SunLight129 opened this issue Oct 27, 2023 · 1 comment
Open

Impressive Project! #17

SunLight129 opened this issue Oct 27, 2023 · 1 comment

Comments

@SunLight129
Copy link

As the title said, this is really impressive! There are lot of mediocre projects which have thousand of stars but your only have 5 ! What a crime if this project don't have 1k stars!

I have 2 questions:

  1. How did you learn all of this, which road map did you take to learn vulkan and real time GI?
  2. How should I read your code, like which part should I read first, then second...
@Anecoz
Copy link
Owner

Anecoz commented Oct 27, 2023

Hi!

Thank you very much for the kind words and the star!
To attempt to answer your questions:

I work professionally as a software engineer where some graphics programming is involved, so I have a couple of years worth of experience working with graphics and gpus. I started this project to try out Vulkan, since at work I've only used OpenGL and Direct3D. So about a year ago I started following these tutorials (https://vulkan-tutorial.com/ and https://vkguide.dev/) to just get a triangle on the screen to kind of get a hang of Vulkan. I also have colleagues that have similar projects that I discussed and learned from.

As I got the basic hang of the API (which I enjoy a lot by the way, I think it's a great API if you have a solid understanding of graphics programming and gpus in general) I wanted to challenge myself and implement modern rendering techniques. The first step was to create a frame graph, so that I could have a somewhat solid testbed to run things off. After that, stuff like completely GPU-driven rendering and Hi-Z occlusion culling came in.

As for real time GI, I've watched a lot of GDC and Siggraph talks, as well as read a lot of papers on the subject. I've then tried to implement some of them, most notably DDGI and Radiance Cascades from Alexander Sennikov. I've also tried the screen-space probe approaches from Frostbite, AMD and Epic, but they're not as usable as of now.

As the project is more on a hobby level, and I don't really have much time to work on it, the code is quite messy... :) So unfortunately this means that it is probably hard to read/follow for an outsider. If you really want to dwell deeper into the code, I would recommend focusing on a specific part. For instance, if you are interested in learning how I implemented DDGI, you don't necessarily have to understand how the frame graph is implemented. It is probably enough to look at the shaders that generate the DDGI probes (irradiance_probe_update.rgen/.rchit/.rmiss) and the shaders that utilize them (deferred_tiled.comp and probably pbr_light.glsl for some helper functions).

I am also more than happy to answer any specific questions should you have them!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants