2022-04-16-GAMES202高质量实时渲染-Lecture5-6-Environment Light

Lecture 5-6 Environment Lighting Recap 环境光贴图 球面贴图 Spherical Map / 立方体贴图 Cube Map Shading from Environment Lighting / Image-Based Lighting (IBL) 解渲染方程(不考虑阴影) \[ L_o(\mathrm p,\omega_o)=\int_{\Omega^+}L_i(\mathrm p,\omega_i)f_r(\mathrm p,\omega_i,\omega_o)\cos\theta_i\xcancel{V(\mathrm p,\omega_i)}\,\mathrm d\omega_i \] 蒙特卡洛积分——数值解、大量采样,非常慢 PS: 一旦涉及采样,就很难实时,近年开始有一些进展 观察: glossy BRDF : BRDF覆盖很小 diffuse BRDF : BRDF覆盖大,但是平滑 因此考虑近似方法 \[ \int_\Omega f(x)g(x)\,\mathrm dx\approx\dfrac{\int_{\Omega_G}f(x)\,\mathrm dx}{\int_{\Omega_G}\,\mathrm d x}\cdot\int_\Omega g(x)\,\mathrm dx \] (该式在 \(g(x)\) 范围小/结果平滑时较为准确) 则有 \[ L_o(\mathrm p,\omega_o)\approx\dfrac{\int_{\Omega_{f_r}}L_i(\mathrm p,\omega_i)\,\mathrm d\omega_i}{\int_{\Omega_{f_r}}\,\mathrm d\omega_i}\int_{\Omega^+}f_r(\mathrm p,\omega_i,\omega_o)\cos\theta_i\,\mathrm d\omega_i \] \(\dfrac{\int_{\Omega_{f_r}}L_i(\mathrm p,\omega_i)\,\mathrm d\omega_i}{\int_{\Omega_{f_r}}\,\mathrm d\omega_i}\) 表示对环境光贴图做模糊化处理,即滤波...

2022-04-14-GAMES202高质量实时渲染-Lecture14-Practical Industrial Solutions

Lecture 14 Practical Industrial Solutions Temporal Anti-Aliasing, TAA Recall: why aliasing 光栅化的采样数不够 终极解决方案:加样本(MSAA) TAA:应用Temporal信息,与RTRT的降噪思路一致 每四帧复用: (如果不是4个固定位置而是是随机生成,引入了其他高频信息,效果并不好) Notes on AA MSAA vs SSAA SSAA:按几倍分辨率渲染场景,再下变换,效果好开销大 MSAA:对SSAA的效率改进 对一个像素内的一个Primitive,只采样一次(取中心或其他代表点) 空间上的Sample Reuse:样本分布上的Trick 基于图像的反走样方法 SMAA, Enhanced Subpixel Morphological AA FXAA -> MLAA(Morphological AA) -> SMAA G-Buffer一定不能反走样!(信息会出错) Temporal Super Resolution Super resolution == Super sampling 提升分辨率 eg. DLSS DLSS 1.0 全靠猜,每个游戏/场景单独训练一个网络 DLSS 2.0 利用Temporal信息 应用类似TAA的思路 重用Samples 问题:Temporal failure时不能clamp——因为每一个像素需要一个明确的值 DL不输出图像,而是输出关于上一帧的Temporal信息如何利用 Deferred Shading 延迟渲染 提高Shading效率 传统管线 Triangles -> Fragments -> Depth Test -> Shading -> Pixel 每一个Fragment都需要做Shading 复杂度:\(O(\text{\#Fragment}*\text{\#Light})\) 关键想法:有很多Fragment不会被看到 -> 只对被看到的Fragment做Shading 修改管线 光栅化两次场景 Pass 1 : 不做Shading,更新Depth Buffer Pass 2 : 对可见的Fragment做Shading 复杂度:\(O(\text{\#Vis....

2022-04-12-GAMES202高质量实时渲染-Lecture12-13-Real Time Ray Tracing

Lecture 12-13 Real-Time Ray-Tracing RTX : 10G rays per second == 1 sample per pixel 1 SPP path tracing == 1 rasterization (primary) + 1 ray (primary visibility) + 1 ray (primary bounce) + 1 ray (primary vis.) + 1 SPP is Extremely Noisy Key Tech : Denosing Goals : + Quality (no overblur, no artifacts, keep all details) + Speed (< 2ms to denoise per frame) ==> Temporal !...

2021-04-05-GAMES202高质量实时渲染-Lecture3-4-Soft Shadow

Lecture 3-4 Soft Shadow Recap of Shadow Mapping - 点光源 从“Light”处看向场景,生成场景关于光源的深度图,即Shadow Map; 从相机处看向场景渲染画面,利用Shadow Map判断像素是否在阴影中。 Feature: 基于二维图像的算法,而不需要三维几何场景 使用透视投影后Z值或透视投影前实际距离生成深度图皆可,Shadow Map与阴影生成时的深度判定方式一致即可 Problem Self occlusion 自遮挡 Shadow Map的每一个像素记录同一深度,形成下图现象。在单个/行像素采样处,形成尺寸为像素宽高的遮挡面。 解决方案:在反射表面邻近区域不计算遮挡。不计算区域Light长度(Bias)由Light与反射表面法线夹角决定。(Light垂直于表面时不产生自遮挡问题)。——带来新问题:丢失遮挡关系。 Detached shadow 由解决自遮挡的Bias不计算带来的阴影残缺问题。 工业界无法彻底解决该问题,通过找到合适的Bias值减少视觉问题。 学术解决方案:Second-depth shadow mapping 存储第一深度和次级深度(离得第二近的表面距离),取中间值作为深度判断的值。 存在问题:要求所有物体watertight(有正反面);计算量过大。 实时渲染不相信复杂度,只相信绝对速度!因此工业界不适用。 Aliasing 采样 The math behind shadow mapping 微积分中常见的不等式: \[ \begin{array}{c} Schwarz不等式: \displaystyle\left[\int_a^bf(x)g(x)\,\mathrm d x\right]^2\le\int_a^bf^2(x)\,\mathrm d x\cdot\int_a^bg^2(x)\,\mathrm d x\\ Minkowski不等式:\displaystyle\left\{\int_a^b\left[f(x)+g(x)\right]^2\,\mathrm d x\right\}^\frac{1}{2}\le\left\{\int_a^bf^2(x)\,\mathrm d x\right\}^\frac{1}{2}+\left\{\int_a^bg^2(x)\,\mathrm d x\right\}^\frac{1}{2} \end{array} \] Approximation in RTR: But we care more about “approximately equal”....

2022-04-02-GAMES202高质量实时渲染-Lecture10-11-Physically-Based Material

Lecture 10-11 Physically-Based Material Content Real-Time Physically-Based Materials Microfacet BRDF Disney principled BRDF Shading with microfacet BRDFs under polygonal lighting Linearly Transformed Cosines (LTC) Concept Physically-Based Rendering (PBR) Everything in rendering should be physically based Materials, lighting, camera, light transport, etc. Not just materials, but usually referred to as materials PBR materials in RTR The RTR community is much behind the offline community “PB” in RTR is usually not actually physically based PBR materials in RTR...

2022-03-11-GAMES202高质量实时渲染-Lecture8-9-GI in Screen Space

Lecture 8-9 Real-time Global Illumination (Screen Space) Screen Space : 利用相机视角渲染出来的屏幕中的所有信息 可以认为是对渲染结果的Post Processing Screen Space Ambient Occlusion (SSAO) AO 环境光遮蔽 : 通过Contact Shadow使物体间相对位置明显SSAO : 对全局光照的近似的屏幕空间方法 Key idea : 不知道间接光照 假定间接光照值是常数(对所有着色点、从所有方向) like Blinn-Phong 考虑不同着色点对各方向的Visibility(不同于Blinn-Phong的地方) 离线渲染中的AO——“天光”:等同于一个完全均匀的光照 Theory : Rendering Equation \[ L_o(\mathrm p,\omega_0)=\int_{\Omega_\mathrm{patch}}L_i(\mathrm p,\omega_i)f_r(\mathrm p,\omega_i,\omega_0)V(\mathrm p,\omega_i)\cos\theta_i\,\mathrm d\omega_i \] 考虑对Rendering Equation的近似(“The RTR Approximation / Equation”) \[ \int_\Omega f(x)g(x)\,\mathrm d x\approx\dfrac{\int_{\Omega_G} f(x)\,\mathrm d x}{\int_{\Omega_G} \,\mathrm d x}\cdot\int_\Omega g(x)\,\mathrm d x \] 将Visibility项拆出,得: \[ \begin{aligned} L_o^{\rm indir}(\mathrm p,\omega_0)\approx&\dfrac{\int_{\Omega_+} V(\mathrm p,\omega_i)\cos\theta_i\,\mathrm d\omega_i}{\int_{\Omega_+}\cos\theta_i\,\mathrm d\omega_i}\cdot\\ \approx&\int_{\Omega_+}L_i^{\rm indir}(\mathrm p,\omega_i)f_r(\mathrm p,\omega_i,\omega_0)\cos\theta_i\,\mathrm d\omega_i\\ =&k_A\cdot \underbrace{L_i^{\rm indir}(p)\rho}_{\rm constant\ for\ AO} \end{aligned} \]...

2022-03-02-GAMES202高质量实时渲染-Lecture7-8-3DGI

Lecture 7-8 Real-time Global Illumination (3D GI) Introduction GI is complex Ray tracing … Hack方法:Blinn-Phong——统一大小的Ambient项 in RTR:直接光照 + 一次间接光照 一次间接光照:Q点接收到直接光照后,作为次级光源照射P点的结果 核心问题: 要计算间接光照需要知道 被直接光照照亮的表面有哪些? / 哪些是次级光源? 借助Shadow Map 每一个次级光源的“贡献”是多少? 求和 每一个次级光源作为一个Area Light Reflective Shadow Maps (RSM) 获得光源的Shadow Map,存储光源“可见”的深度/世界坐标/法线/Flux等(即Reflective Shadow Maps),视作多个多个点次级光源,eg. Reflective Shadow Maps为512*512,则有512*512个点光源。 次级光源的反射方向未知——假定次级光源物体材质均为Diffuse。(不假设接收物为Diffuse) Recall 一个Patch(Reflective Shadow Maps的一个像素)的“贡献 \[ \begin{array}{l}\begin{aligned}L_o(\mathrm p,\omega_0)&=\int_{\Omega_\mathrm{patch}}L_i(\mathrm p,\omega_i)V(\mathrm p,\omega_i)f_r(\mathrm p,\omega_i,\omega_0)\cos\theta_i\,\mathrm d \omega_i\\ &=\int_{A_\mathrm{patch}}L_i(\mathrm q\rightarrow \mathrm p)V(\mathrm p,\omega_i)f_r(\mathrm p,\mathrm q\rightarrow \mathrm p,\omega_0)\dfrac{\cos\theta_p\cos\theta_q}{\|q-p\|^2}\,\mathrm d A \end{aligned}\\\\ f_r=\dfrac{\rho}{\pi}\\ L_i=f_r\cdot\dfrac{\Phi}{\mathrm d A}\quad(\Phi\ \text{is the incident flux / energy}) \end{array} \] 故对每个Reflective Shadow Maps的像素只需存储其 \(\Phi\) , \(\mathrm d A\) 在积分中被约掉; 由于计算复杂、忽略次级光源的Visibility项。 则有:(原论文中为 \(P\rightarrow Q\) ,故论文中原式为下式中 \(q\) 换成 \(p\) ) \[ E_q(x,n)=\Phi_q\dfrac{\max\{0,\langle n_q|x-x_q\rangle \}\max\{0,\langle n|x_q-x\rangle \}}{\|x-x_q\|^4} \]...