0%

蒙特卡洛方法的缺点

全局光照技术都是基于蒙特卡洛方法的算法, 不同的是三种方法路径追踪,光子映射,梅特波利斯光照传输,使用不同的概率密度函数,但是缺点是

1.蒙特卡洛方法存在严重的噪点

2.需要有大量的样本来收敛到真实值

其结果就导致蒙特卡洛基于概率计算的收敛方法时间成本非常高

近似模型与近似方法

对于近似方法,需要分析其忽略了哪些因素,以及对那一部分进行了优化,这些近似和忽略的部分也是变种算法需要改进的地方。

Real-Time

一般来说达到30FPS(每秒生成图片数量)就算是实时渲染,在VR和AR领域要达到90FPS.略低于30FPS但也不会太慢的渲染属于interactive rendering。

实时渲染追求的是互动性,游戏行业对互动性的追求也促进了实习渲染的发展。

High Quality

High Quality 指的是真实感,追求Real-Time 同时自然会下降 Quality, 但是greed is good, 追求实时的同时追求高质量是实时渲染的目标也是最大的一个挑战。

实时渲染的四个部分

image-20210703190344232

阴影,全局光照(预计算),PBS基于物理的着色,实时光线跟踪

课程讨论的部分

阴影Shadow

image-20210703190441802

全局光照

image-20210703190457275

预计算的辐射传输

image-20210703190528823

实时光线跟踪

image-20210703190555571

介质参与渲染和图像空间效果

image-20210703190708581

上图是单散射和图像空间反射

非真实感渲染

image-20210703190746938

抗锯齿和采样

image-20210703190808920

技术讨论 例如UE5的demo

image-20210703190944199

课程不会涉及

3D建模技术

image-20210703191014763

用于电影和动画更昂贵(但是精确)的光传输技术

image-20210703191036463

Manifold Metropolis Light Transport

第一幅图好像是流形中心(metropolis?)光传输 应该是运用拓扑学的理论来解释渲染方程提高渲染质量?

Gradient Domain Path Tracing 梯度域光线跟踪?

Neural Rendering 神经元渲染?

image-20210703191512702

也不涉及

Using OpenGL(OPENGL教学)

Scene / shader optimization(场景以及着色器优化)

Reverse engineering of shaders(着色器逆向工程)

High performance computing(高性能计算)

e.g. CUDA programming(CUDA编程)

科学!=技术

科学=知识

技术= 把科学转化为产品的工程技能

Real-time rendering = fast & approximate offline rendering + systematic engineering

实时渲染=快速和近似离线渲染+系统工程

实时渲染技术方面,业界遥遥领先于学术界

虽然基于物理的方法似乎是最明显的渲染方法,但它只是在过去10年左右的实践中才被广泛采用。本章末尾的第1.7节简要介绍了基于物理的渲染,以及它最近被用于电影的离线渲染和游戏的交互式渲染。

pbrt,一个基于光线追踪算法物理渲染系统。

也就是有着并非基于光线追踪的物理渲染系统和不是基于物理的方法,比如phong是基于经验的渲染模型

真实感渲染

几乎所有逼真的渲染系统都基于光线追踪算法。

光线跟踪器系统需要模拟的对象:

  • 摄像机Cameras
  • 射线与物体的交点Ray–object intersections
  • 光源Light sources:
  • 可见性Visibility:
  • 表面散射Surface scattering
  • 间接光传输Indirect light transport
  • 射线传播Ray propagation

我们需要知道当光沿着射线穿过空间时发生了什么。如果我们在真空中渲染一个场景,光能量沿一条射线保持恒定。虽然真正的真空在地球上并不常见,但对于许多环境来说,它们都是一个合理的近似。更复杂的模型可用来追踪通过雾、烟、地球大气层等的光线。

摄像机Cameras

image-20210630163655683

射线与物体的交点Ray–object intersections

ray r, we fifirst start by writing it in parametric form:

射线R的参数化表示:
$$
r(t) = o + t*d,
$$

光的能量衰减

image-20210630155513283

漫反射计算公式

image-20210630155610575

高光:观测所得,观测方向接近反射方向

半程向量h接近于法线方向也是 点乘(两个向量点乘为1的时候接近)越大,说明夹角越小(反射光越接近光的颜色)

image-20210630155637670

这里指数p一般在100到200,因为高光只有一点点

image-20210630155650578

环境光

简化为环境光都是一样的,即

image-20210630155718178

Blinn-Phong光照模型

就在在每个像素上把环境光,漫反射,高光加起来

image-20210630155803989

Phong和Blinn-Phong光照模型都是基于经验的渲染模型,都是高光反射模型

Blinn-Phong 光照模型,又称为 Blinn-phong 反射模型(Blinn–Phong reflection model)或者 phong 修正模型(modified Phong reflection model),是由 Jim Blinn于 1977 年在文章“Models of light reflection for computer synthesized pictures”中对传统 phong 光照模型基础上进行修改提出的。

和传统 phong 光照模型相比,Blinn-phong 光照模型混合了 Lambert 的漫射部分和标准的高光,渲染效果有时比 Phong 高光更柔和、更平滑,此外它在速度上相当快,因此成为许多 CG 软件中的默认光照渲染方法。此外它也集成在了大多数图形芯片中,用以产生实时快速的渲染。在 OpenGL 和 Direct3D 渲染管线中, Blinn-Phong 就是默认的渲染模型。

Phong不能处理的情况

Phong模型在计算镜面光系数为:

1
2
float   specFactor = pow(max(dot(reflectDir, viewDir), 0.0), 32); // 32为镜面高光系数
//其中viewDir是相机坐标和物体坐标之差,reflectDir是光照方向与物体法向的反射,如下图所示:

高光发射的值由 反射向量和观察向量决定. 当两者的夹角θ超过90时,截断为0.0.就没有高光反射分量了.因此Phong模型能处理的是下面的左图中(θ≤90)的情况,而对于右图中(θ>90)的情况则镜面光成分计算为0.

但是这种计算方式有一个问题,如右图所示:当相机和光照处于同一侧时,此时得到的反射向量reflectDir和视角的方向viewDir的夹角已经大于90度,因此通过dot计算得出的值为负数。表现在渲染结果中就是当相机转到某个角度的时候,高光反射会突然消失,显得很不自然:为了解决这个问题,James F.Blinn与1977年提出了Phong模型的改进算法:Blinn-Phong光照算法。该算法相比于Phong增加了HalfDir的概念

在这里插入图片描述

而右图的这种情况实际上是存在的,将镜面光成分取为0,没有很好地体现实际光照情况。

Blinn-Phong

在这里插入图片描述

Blinn-Phong模型不再依赖于反射向量,而是采用了所谓的 **半程向量(Halfway Vector)**,即光线与视线夹角一半方向上的一个单位向量。当半程向量与法线向量越接近时,镜面光分量就越大。

img

HalfDir是光照方向和视角方向的相加并归一化,最终比较的是它和normal的夹角。因为HalfDir和normal的夹角永远不会高于90度,因此不用担心dot值出现负数的情况。计算代码如下所示:

1
2
3
4
vec3 lightDir = normalize(lightPos - FragPos); 
vec3 viewDir = normalize(viewPos - FragPos);
vec3 halfwayDir = normalize(lightDir + viewDir);
float spec = pow(max(dot(normal, halfwayDir), 0.0), shininess);

在这里插入图片描述

半角向量计算公式

当观察向量与反射向量越接近,那么半角向量与法向量N越接近,观察者看到的镜面光成分越强。


Blinn-Phong: ambientColor + diffColormax(0,dot(n,l)) + specColormax(0,dot(n,h))*shininess

N:表面法向量

H:光入射方向L和视点方向V的中间向量

Shininess:高光系数

稀缺

社会资源的管理非常重要,这是因为资源是稀缺的。稀缺(scarcity)是说社会的资源是有限的,从而无法生产出人们想要的所有商品和服务。

经济学

经济学 (Economics)研究的是社会如何管理它的稀缺资源。

原理 1:人们面临权衡

国防 与消费品

大炮用于保护自己的海岸不受外敌侵略,而黄油则可用于提高国内生活水平。一个社会在国防(大炮)上的花费越多,在消费品(黄油)上的花费就越少。

清洁环境和高收入水平

如果法律规定企业减少污染,企业生产商品和服务的成本就会增加。生产成本增加的后果是企业利润减少、工资降低、商品价格提高,或者是这些后果中的几种同时出现。

污染管制的收益是更清洁的环境和由此导致的更高健康水平,

污染管制的成本是使受管制企业的企业主、员工和消费者的收入减少。

效率和平等

社会面对的另一种权衡是效率和平等之间的取舍。

效率(efficiency)是指社会从它的稀缺资源中获得最大收益。

平等(equality)是说这些收益在社会成员之间平均分配。

效率是指经济馅饼的大小,而公平是指如何将这个馅饼分成各个小块。

效率 饼的大小

公平 饼的分配

当政府制定政策时,这两个目标通常是冲突的。例如,很多政策的目标是使经济财富分配更公平:其中的一些政策例如福利体系或失业保险的目的,是帮助最需要帮助的社会成员;

个人所得税,要求财务成功人士比其他人缴纳更高的税。这些政策在实现更高公平性时的同时,降低了效率。

当政府将收入从富人那里再分配给穷人时,这种政策减少了努力工作的回报;结果,人们工作得更少,商品和服务生产量减少。换句话说,当政府试图将经济馅饼切得更平均些时,馅饼本身变小了。

原理 2:某事的成本是为了得到它而放弃的其他东西

机会成本(opportunity cost):某事的机会成本是为了得到它而放弃的其他 事的机会成本是为了得到它而放弃的其他

上大学的主要收益是智力水平的提高和一生都有更好的工作机会。

上大学的成本

时间成本。当你花费一年时间来听课、读书和写论文时,你就不能将这些时间用于工作。对于绝大部分学生来说,因上学而放弃的工作收入是教育的最大单项成本。

机会成本。中的某些运动员知道自己上大学的机会成本很大,因为如果他们退学而去打职业比赛的话,能赚几百万元。所以,他们通常判定上大学的收益远小于其机会成本从而退学,这并不奇怪

边际收益和边际成本

现企业
为使利润最大化,它要决定雇佣工人数量以及决定生产和销售产品数量。你也会发现个人为
实现最高水平的满足程度,他要决定工作时间的长短,以及决定使用工作收入购买哪些商品
和服务。

生活中的决策通常不是黑与白之间的选择,而是涉及灰色地带。吃午饭时,
你面对的决策不是一口不吃和大吃特吃之间的选择,而为是否再吃一口土豆泥。当考试临近
时,你的决策不是一点也不学和一天学 24 小时之间的选择,而是是否再多温习一小时的笔
记而不是看电视。经济学家使用术语边际(上的)变动(marginal change)来表示对某个
已存在方案的微小增量的调整。记住,边际边际边际边际(margin)表示“边缘”(edge)。因此,边际变
动表示在你所做事情的边缘处所做的微小调整。理性人在决策时通常要比较边际收益 边际收益
(marginal benefits)和边际成本 边际成本(marginal costs)。

每位乘客的平均成本 平均成本 ....(average cost)为 500 元,但增加一位乘客带来
的成本即边际成本 边际成本 ....(marginal cost)仅为该乘客消费的一袋花生米和一罐苏打水的费用(航
空公司为每位乘客免费提供)。只要这样的乘客支付的价格大于边际成本,卖票给他对于航
空公司来说是有利可图的。

原理 4:人们对激励作出反应

当苹果的价格上涨,人们决定少吃一些苹
果。与此同时,果园决定多雇佣一些工人、多摘一些苹果。换句话说,市场中某商品的较高
价格激励买方少消费、激励卖方多生产。我们将看到,价格对消费者和生产者行为的影响,
对于市场经济如何分配稀缺资源非常关键。

公共政策制定者应该牢记激励做法:很多政策改变了人们面对的成本或收益,从而改变
了他们的行为。例如,对汽油消费征税鼓励人们购买更小、更节能的汽车。这是欧洲人开小
型汽车的原因之一,这是由于欧洲的汽油税税率较高而美国较低。汽油税也可以鼓励人们拼
车、坐公交以及住在工作地点附近。如果税率进一步提高,很多人将驾驶使用混合能源的汽
车,如果税率非常高,人们将转而购买电动汽车。

政府出手的原因有两大类:促进效率或促进平等。也就是说大多数政策的目的,要么是扩大经济馅饼要么是改变馅饼的分割方法。