GAMES202 10 Real-time Physically-based Materials (surface models)
Lecture 10 Real-time Physically-based Materials (surface models)PBR and PBR Materials 基于物理渲染的材质PBR = Physically-Based Rendering 基于物理的渲染
任何渲染都可以是基于物理
材质、光照、相机、光线传播等等
不只是限制在材质范围内,但是指的往往是材质
在RTR中的PBR材质
RTR中使用的材质要远少于在offline中的材质
RTR中说是基于物理的,但实际上并不是基于物理
分两类,基本上和离线渲染差不多,但是更多着眼于技巧来提升速度
表面材质(微表面模型、迪士尼原则BRDFs Hyperion)
对体积(非表面模型)来说,头发、云、皮肤等,大多都是着眼于快速和近似的方法实现单散射和多次散射
这里复习了一下材质的BRDF,这里面包含:
菲涅尔项
NDF 法线分布函数,有很多类
Beckmann NDF 形式上很像高斯正态分布,各向同性的结果(也能异性),其中 $\alpha$表示粗糙程度,$\theta_h$表示入射与出射角的半矢量h与法线的夹角。
G ...
GAMES202 9 Real-time Global Illumination 3 (screen space cont.)
Screen Space Directional Occlusion (SSDO)What is SSDO?
SSAO加强版,考虑了间接光照
Key Idea
和Path Tracing很像
在shading point,随即发射射线,如果没有照射到障碍物,就是直接光照(AO认为是间接光照)
如果照射到障碍物,就是间接光照(AO认为是没有光照)
实际使用:
从shading point出射一个半球,选一系列采样点。
用采样点从camera的可见性来近似为从p的可见性
如果采样点被挡住,就是算间接光照;否则取直接光照
问题:
只能应对小范围的GI,不能得到远距离的间接光照
从screen space研究,肯定会丢失相关信息
Screen Space Reflection (SSR)What is SSR?
实时渲染中的一种引入全局光照的方法
使用了光线追踪
仍在Screen Space中研究问题
怎么做?
Shade Sence + Nromal Vector + Depth -> SSR
先求交点:intersection
使用Linear Ray ...
GAMES202 8 Real-time Global Illumination 2 (screen space)
Lecture 8 Real-time Global Illumination 2 (screen space)Light Propagation Volumes (LPV)Key Problem 主要问题
要实现任何一个Shading Point的间接光照,要先知道这一个点的Radiance
Key Idea 主要思路
在一个直线上传播的Radiance(单位立体角单位面积接收到的能量)是一个不变的量。
Key Solution 主要方法
用一个3D网格,作为传播介质,来传播从物体表面到任何其他地方的直接照射的radiance。
Step 步骤
首先生成一系列点,就是被直接光照照射到的点
用RSM就足够了,但是还是存在计算量的问题
将这些虚拟光源的点集合“注入”到格子(Radiance Volumn)里面
先将场景预处理分成一个个的格子
对每一个格子,计算相邻的source light
将直接光照的分布加起来
把得到的次级光照分布使用前两阶(4terms)SH进行压缩
用Volumn Radiance 进行光线传播计算
对于每个格子,收集6个方向的radianc ...
GAMES202 7 Real-time Global Illumination (in 3D)
Wavelet 小波 2D Harr Wavelet也是一套基函数。不同函数的定义域也有所不同。小波的压缩方式和SH等其他不同,他的基函数系数有的很接近0,就可以直接当作0作为展开方式,并且可以保留全频率。这时候用的多是Cube Map。
优点:小波变换可以保留高频信息,属于全频滤波,比起只保留低频信号的SH更清晰,看起来效果很好。
缺点:不易进行旋转变换
Global Illumination 实时渲染中的全局光照直接光照好做,间接光照麻烦。每个直接光照的点,都应该作为间接光照的次级光源。
Reflective Shadow Map (RSM)
把每一个像素都作为一个次级光源
把Rendering Equation的 $d\omega$ 变换为 $dA$
(看不懂了,明天再看吧)
相比于SM存Depth,多存了世界坐标、法线、Flux。适合用于在手电筒的场景下
优点
易实现
缺点
运算量和直接光源呈现线性增长
不会判断间接光照的可见性,会有所不真实
有许多数学上的约等或者说假设
采样率和质量上的Trade off
GAMES202 6 Real-time Enviroment Mapping 2
Background Knowledges 一些理解:Product-integral=滤波=卷积=加权平均:
卷积 $\int_{\Omega}f(x)g(x)dx$
滤波 考虑傅里叶变换,先乘积再积分和频域上的滤波结果相同
加权平均,把 $f(x)$ 看成权重函数, $g(x)$ 看成被积函数
Fourier Transfer 傅里叶变换:
低频信号:分布在频域图中间,表示的是模糊
高频信号:分布在周围,表示的更多是图像的边界
Basis Function 基函数:
可以类比于线性空间的标准正交基。傅里叶级数的每个项都是标准正交基
可以用一套基函数的线性组合来表达该函数空间中的任何函数,比如说三角函数代表的傅里叶展开,以及幂级数代表的泰勒展开。
Real Time Environment Lighting (& global illumination)Spherical Harmonics 球面谐波函数(SH)What 是什么:
一系列 定义在球面上的 二维 函数 $B_i(\omega)$
另外一个理解:一维情况下的傅里叶函数
长得和电子云波函数一样卧槽,每 ...
GAMES202 5 Real-time Enviroment Mapping
Distance Field Soft Shadow (DFSS)先复习了一下GAMES101的Distance Function在几何1里面讲的
sdf有向距离场
Distance Field的运用
Ray marching (sphere tracing) to perform ray-SDF intersection
通过sdf给出的“安全距离”,
Use SDF to determine the (approx.) percentage of occlusion
a “safe” angle seen from the eye 从安全距离得到安全角度(最小的那个)
安全角度越小,阴影就越黑
怎么算安全角:
不用 $arcsin(\frac{SDF(p)}{|p-o|})$ 而是用 $min{\frac{k\cdot SDF(p)}{|p-o|},1.0}$
优点:
快(但是生成也需要时间)
高质量
缺点:
需要预计算
需要存储
会有artifact
Shading from Environment Lighting 环境光照技术:Image-B ...
GAMES202 4 Real-Time Shadows 2
A deeper look at pcffilter/convolution:
$[\omega*f](p)=\sum_{q\in \mathcal{N}}^{}\omega(p,q)f(q)$
in PCSS: 实际上也是一个卷积运算来求得Visibility函数
$V(x)=\sum_{q\in \mathcal{N} (p)}^{}\omega(p,q)\cdot \chi^+[D_{SM}(q)-D_{sence}(x)]$
PCF是在图像(模型几何结构的二维投影)层面处理,而非是先shadow map之后再在shadow map上面做模糊。
Revisiting PCSSPCSS的完整算法
Step 1 Blocker Search 遮挡物搜索,在一个确切距离中得到平均遮挡深度。
Step 2 Penumbra Estimate 半影估计,用平均遮挡深度来决定filter size
Step 3 Percentage Closer Filter 用产生的Adaptive filter size进行PCF
哪一步更慢?
第一步和第三步,每次都要看遮挡物,PCF也会比较 ...
GAMES202 3 Real-Time Shadows 1
Shadow Mapping 生成硬阴影2 pass Algorithm 渲染两边的算法
第一遍,从光源出发,生成sm(Shadow Map)
第二遍,从相机出发,使用sm检测其是否在阴影里
一个完全在图像中的算法:
优点:一旦图像已经生成,不需要知道图像的几何场景
缺点:会产生自遮挡现象,以及锯齿
自遮挡(self occlusion):Shadow Map中的像素会把一个平面采样分成一块一块的阶梯状深度,但是在从相机出发而言,就会认为,地板之间会发生相互遮挡
处理:添加一个可变的Bias,如果不超出这个bias,就忽略遮挡的影响。(但也相应引入detached shadow不接触的阴影)
另一种方法:second-depth shadow mapping,记录次小深度,用中点深度进行遮挡比较。但是没人用,因为模型不能是全平面,
锯齿(Alias)
实时渲染不相信复杂度(哈哈哈哈)(只相信时间,RTR中常数也十分重要)
Approximation in RTR实时渲染中的一个重要的约等于,主要是把积分中的两个函数拆开来:
$\int_{\Omega}f(x)g(x) ...
GAMES202 1&2 Overview & Recap of CG Basis
Lecture 1&2 Overview & Recap of CG BasisContents
Shadows
Global Illum
Physically-based Shading
Real-time Ray Tracing
Graphics Pipeline 渲染管线 复习OpenGL:
一系列通过CPU调用GPU的API
语言不重要
跨平台
替代品:DirectX,Vulkan
缺点:
版本比较碎片化
C style, 使用不是很简单
(之前)不好Debug
如何理解:
和101里面的光栅化一一对应
放置/摆放物体,视图变换啥的,GL有矩阵相乘的API
VBO 存储模型的向量、坐标、纹理坐标
之前的obj文件
使用一个画架easel(GL里面的framebuffer)可以渲染多张图
还有一种是直接渲染到屏幕(垂直同步),但是容易造成画面撕裂。使用双/三重缓冲避免
目前只需要用到vertex shader和fragment shader
大致渲染过程,每一次pass
指定物体、相机、MVP等等
指定framebuffer、输入输出text ...