Skip to content
New issue

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

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

Already on GitHub? # 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!

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

No branches or pull requests

2 participants