/GAMES202

不仅完成了作业的基础和提高,还为202扩展了其他算法:Efficient GPU SSR,Hiz-SSR,IBL,SVGF。GAMES101在另一个分支,完成了Final Project,还扩展了Roughness BSDF!

Primary LanguageC++GNU General Public License v3.0GPL-3.0

games202

介绍

webglCPP实现games202所提到的实时渲染的相关算法。为了节省存储空间,Github仓库未包含代码的原理解释等。
电脑GPU(GPU AMD Radeon(TM) 530)很拉,部分结果无法更好展示,抱歉了😞。
如果该项目对你有帮助,请给个星星吧😝~

1. Percentage Closer Soft Shadows

PCSS

1
PCSS作业的基础要求,更多内容请参考我的博客-PCSS

2. Precomputed Radiance Transfer

PRT

3
PRT作业的基础要求,更多内容请参考我的博客-PRT

3. Screen Space Reflection

Hierarchical-Z SSR

5

Efficient GPU SSR

6

World Space Ray Marching SSR

7
Hi-z SSR的帧率是World Space SSR4倍左右😆。而Efficient GPU SSR的帧率是World Space SSR2倍左右,可能是因为GPU太拉胯,这种复杂的场景导致它们显示的帧率几乎一致,我在作业三的README里面用简单的场景重新测试了一下,结果是2倍。
Hierarchical-Z SSR最初是由GPU Pro 5提出的,国外有UP对这一技术做了较好的解释,感兴趣的可以直接阅读原文,另外本次作业中我也对该方法的原理和代码做了详细说明,部分内容借鉴于该UP

Efficient GPU SSR是直接参考的一篇JCGT论文(Efficient GPU Screen-Space Ray Tracing),该论文的核心内容我也做了详细说明。

World Space Ray Marching SSR则是作业的基础要求。

更多内容在我的博客-SSR

4. Kulla-Conty BRDF

IBL and Split Sum Kulla-Conty BRDF

8
Split Sum为作业的提高内容,IBL为个人扩展内容,更多内容请参考我的博客-KullaConty

5. Real-Time Ray Tracing Denoisers

Spatiotemporal Variance-Guided Filtering Method

9

Joint Bilateral Filter A-Trous Method

11
SVGF是参考文刀秋二大佬发表的论文,论文表示filter的对象是像素Irradiance的灰度值,而且是直接光间接光分开处理,最后进行Modulate时将EmissionAlbedo加回去,这样就可以保留图像的高频信息了。但是作业没有给每帧的Albedo,无法得到像素的Irradiance,而且直接光间接光也是混合在一起进行filter的,所以右边那幅图像看起来会比较糊,更多内容请参考我的博客-SVGF

JBF-atrous则是作业的提高内容。