Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
My submission for the seminar Algo. for Real-Time RayTracing based on Scheid et al.'s, "Spatiotemporal Variance-Guided Filtering: Real-Time Reconstruction for Path-Traced Global Illumination"
Quick guide to this submission:
Main work is in src/backend/driver/filter.art
The functions in filter.art are linked into the pipeline as given in the paper in src/backend/driver/glue.cpp
For testing the pipeline and the algorithm, I have created some bools in glue.cpp and filter.art that might be convenient (I didn't implement functionalities in the UI for running the experiments)
Experiments that might be useful:
In glue.cpp: You can make temporal_enable = false and the pipeline reverts to a pure 5 level Atrous wavelet filtering. This would be just the spatial filtering part of the algorithm in the paper and still works pretty good.
In glue.cpp : If temporal_enable = true, then this is the complete pipeline and the difference can be seen when running a scene in continuous mode. But artifacts might be present (possibly some unresolved bugs)
Scene file has to be modified to include the AOVs required for filtering. Please refer to scenes/diamond_scene.json for the inclusions.
This code is tested only in macOS (cpu only).
The initial fork of this repo is pretty far up the pipeline ....I tried the merge but have some compilation issues with newer versions of anydsl and Ignis and macOS :( but I can help with the merge. Fortunately I was able to work on a version that did not give me much problems.
I have commented the code and I hope things make sense :) Pretty sure it can be optimised much better than this version but currently it is what it is.
Please feel free to contact me in case there are any issues with the code(if something that doesn't make sense) or any bugs that can be resolved :)
This was a very cool algorithm to implement and I learnt so many new algorithms and debugging strategies (had to be a bit creative with the prints and buffers :)