lec 1-4 _ 高质量实时渲染



前言

鸽了好久。
(理直气壮)暑假就是要摸鱼啊。


lec1 课程及简介

总结陈词:闫老师APEX六杀,“怨虎龙都没打过你听什么网课”。

Lec2 回顾一些以往的知识

本节讲解知识

  • 渲染管线相关知识
  • opengl
  • GLSL
  • 渲染方程

渲染管线

在这里插入图片描述

  • 老朋友了,具体上面的图都解释的很清楚

OPENGL

是一系列的API,在cpu端执行负责调度gpu
有几个缺点

  • 版本多
  • C风格的,不是面向对象语言,不好使用
  • 无法debug(?)

一些好理解的opengl工作流程

  1. 放个模型:opengl把这个模型以VBO(Vertex buffer object)的形式存放在GPU里面,并且opengl自带有变换矩阵,直接调用就行
  2. 放个画架:在opengl里面建立画架(帧缓存framebuffer),并且设置摄像机位置
  3. 固定画布: 会有很多画布(一次render pass)在画架上

Tips:渲染完之后不直接显示在屏幕上,而是存放在缓存区,等待确定渲染完毕后,在显示在屏幕上,就是双重缓存/垂直同步

  1. 画在画布上:shading,课程主要会去写顶点和片元着色器。

可以多次渲染,但是前面三点不可更改。
在这里插入图片描述

着色语言(shading language)

历史
在这里插入图片描述
shading language 还是要编译成GPU语言,但是以我浅薄的代码能力,汇编语言多少是有点阅读困难的

设置shader(初始化)
在这里插入图片描述
phong模型的一些代码讲解:
在这里插入图片描述
debug shader
用RenderDoc,但是不知道能不能webgl
老师说,直接print 然后戏曲颜色,也可以debug(人脑分析式)

渲染方程

在这里插入图片描述

再来复习一遍吧
BRDF:双向反射分布函数,给出了入射和发射的关系
在这里插入图片描述
在这里插入图片描述
BRDF尝试给出(对于任何一个立体角上发出去的 Radiance) / (单位面积d A dAdA接收到的Irradiance)

我们收集一个面上所有获得的能量,通过反射方程获得反射到一个方向上的能量,由此得到反射方程:
在这里插入图片描述
渲染方程与反射方程相比,渲染方程只是多加了一个自己发光的能量。
在这里插入图片描述
在出现观测点之后
在这里插入图片描述
丢掉发光项,我们看到的像素,就是渲染方程得到结果的和可见度的结果做积。(对于求解渲染方程这一块涉及大量数学计算,已经浑浑噩噩记不清楚了,只能当做理解使用)

Homework 0

主要是来搭建一个web的环境。
语言这块不用太担心(确信
记录一下操作过程

首先在node网站下载并且安装node.js,我看新版好像用不到安装npm。
然后cmd,输入npm install http-server -g

安装好了,尝试了一下他给的过程打不开, ,用vscode打开homework0框架,右击index.html打开live.server(没有安装的就在扩展里面下就行了)ok

然后就是瞳孔地震
在这里插入图片描述
小美人没了(悲)
重启电脑就行了。(重启电脑就是最好用的)

在重写shader前,我们先来复习一下blinnphong模型
接下来直接复制代码并且替换就行了。

Lec03 shadow mapping

本节重点:shadow mapping
在这里插入图片描述

简述SW

shadow mapping 是一个两趟的算法

  • 第一趟,从光源可以看到的场景
    在这里插入图片描述

  • 第二趟,结合第一趟,结合摄像机看到的场景

shadow mapping是一个完全图像空间的算法

  • 不用知道场景的集合信息
  • 会造成自遮挡和走样的问题

关于生成最后的渲染图,用shadow map记录的z值或者是片元到光源的距离来比较都ok

SW的一些问题

  • 阴影纹路不对(自遮挡问题):sw记录的深度京都不够,如右图,连线之后被遮挡,原本是光照的地方有阴影在这里插入图片描述
    是有一些解决方法的:
    加上停止运算的小条(如下图)
    在这里插入图片描述
    but条条设置不当,会出现这个问题(我脚呢????)
    在这里插入图片描述
    在工业界也有解决这个问题(指没脚了)的方法,很多,不严谨但好用。
    学术界的这个,有解决方法,但是没太多人用
    在这里插入图片描述
    存最小深度和次小深度,用中间的深度,来做SW,但是要求比较苛刻。
  • 走样问题,工业界的cascaded shadow mapping等等

实时渲染不相信复杂度,我们只相信!!!速度!!!在这里插入图片描述

SW背后的数学知识

在实时渲染RTR中,我们更加关心怎么近似相等
在这里插入图片描述

  • 第一项是为了归一化
  • 这种近似比较准确的情况:欧米伽很小,或者g(x)比较光滑

在这里插入图片描述
把渲染方程拆成了2项
左边的,Visibility部分,右边的,老朋友渲染方程了(虽然我早已忘记怎么求解了orz

他在什么时候,是准确的

  • 结合上面的内容,第一种情况,点光源或者直射光;第二种情况,光照为常值

PCSS(Percentage closer soft shadows)

站在软阴影处看光源,光源部分被遮挡
为了生成软阴影,我们会使用PCF(Percentage Closer Filter)这个工具来实现。

  • 他是为了抗锯齿被开发出来的
  • 它在阴影判断的时候作用
    在这里插入图片描述
    它在shadowmap上和连线所交点周围的一圈像素作比较。
    它平均的是,一个shading point 做的很多次阴影深度的比较的结果。
    我是这么理解的,由于计算精度的问题,连线的交点不一定是完全准确的,周围01的比例决定了这个点影子的软硬程度。

取点越多,越能实现一个软影的效果。
为了更好的模拟,在不同光照下SS的效果,我们得知道以下公式
在这里插入图片描述
现在我们只需要得到Blocker的长度就ok了,
方法就是找到所有完全处在光照(老师这里说是阴影,但是我觉得从这张图来说是光照条件,如果有大佬浇浇这里的话就好了)下的点,记录深度,遍历所有点,取平均值。

在这里插入图片描述
用这个投影的方法确定到底要多少的点来遍历找blocker,找那些shadingmap 上遮挡住shading point的像素点,作为blocker

总结
在这里插入图片描述

Lec4 超级shadow mapping

大佬职业生涯sigraph 满20篇了,祝贺!!!
但今年已经22年了,是不是应该有新的产出了(搓手)

感触好多、、只能这条路很长,但是大佬总是在很努力的行进着。我也能有我所坚持的,所热爱的东西。希望以后会更好吧!

更深的理解PCF

在这里插入图片描述

  • PCF就是加权平均
  • PCSS,取SM的距离大于scene的点值为1,其他为0,加权平均

复习一下PCSS
在这里插入图片描述

  • 有可能比较慢的步骤,1和3

为了解决这两个可能比较慢的问题提出了下面的新方法

VSSM(Variance Soft Shadow Mapping)

针对性解决第一步和第三步过慢的问题
对于第三步,我们需要拿到周围一圈像素的深度比较值,目的是获取:有多少texel比当前的shadingpoint要小。

问题等价类比于 一场考试中,获得班里成绩比我好的人数。
在这里插入图片描述

  • 问题进一步简化为正态分布求积分
  • 我们只需要正态分布的均值和方差

关键思想:获取filter area的均值和方差

  • 均值获取:SAT(Summed Area Tables) 或者mipmap
  • 方差获取:(概率论探头)
    在这里插入图片描述
    之前SW只用了一个通道存放depth 信息,现在在第二个通道内放入depth的平方信息,不会造成太大开销

在这里插入图片描述

  • 获得正态分布,可以直接算的(概率论二度探头)

实际计算理论依据:切比雪夫不等式,假设出是成正态分布的曲线,我们不管它的实际分布到底是不是真正的正态分布也可以算(注意定义域)
在这里插入图片描述

总结:
在这里插入图片描述

  • 有一定的内存开销

回到步骤1
我们要做blocker search
Zooc是遮挡物的深度值
在这里插入图片描述

  • 主要思想就是,近似:把所有没有被遮挡点的深度都近似为该shadingpoint的深度,利用切比雪夫不等式,计算出不被遮挡点的比例,使得式子最终只剩下一个未知数,即可解出Zblocker的平均值

均值获取:SAT和mipmap

在这里插入图片描述

  • 对于mipmap:确实,它可以做到范围查询,但是哪怕对于不是2的整数倍的正方形的计算结果都有可能不准,更何况长方形。

所以我们用SAT这个算法来范围查询
在这里插入图片描述

  • 前六项减去前三项等于后三项的加和
    在这里插入图片描述
  • 预计算一张表,这张表上[x,y]的值是从右上角点到这个点组成的面积
  • 同样的思路进行二维的范围查询

MSM(Moment Shadow Mapping)

当我们无法认为texels的depth成正态分布的时候,估计不准。在这里插入图片描述

  • 会发生的问题有可能变黑或者变白
  • 原因五花八门:分布描述不准确,切比雪夫不等式定义域限制等等

为了避免VSSM可能会出现描述分布不准确的问题,使用更高阶的矩(moment)来描述。
在这里插入图片描述

  • VSSM我们只是用到了一阶矩和二阶矩,提出观点,利用更多的矩来描述更加确定的分布函数。(很像泰勒展开这种)

结果
在这里插入图片描述

结语

翻了一下发现记的有点点乱?
下一篇会停一下,先把webgl和hw1给做了

猜你喜欢

转载自blog.csdn.net/woshi_wst/article/details/126367936
1-4