GAMES101:现代计算机图形学入门-笔记-09

news/2024/11/30 3:11:19/

久违的101图形学回归咯

今天的话题应该是比较轻松的:聊一聊在渲染中比较先进的topics

Advanced Light Transport

首先是介绍一系列比较先进的光线传播方法,有无偏的如BDPT(双向路径追踪),MLT(梅特罗波利斯光传输)(好长的名字),有偏的如光子映射与VCM(顶点连接合并)以及一些实时辐射度方法如VPL等。

既然上文提到了有偏和无偏,那什么才是有偏的,什么才是无偏的呢?

之前我们提到的蒙特卡洛积分中,我们都知道提高采样率能有效提高准确率,但是如果我们发现无论如何提高采样率我们的期望都是相同的值:那就说明这是无偏估计的方法;否则,就是有偏估计。

BDPT

双向的路径追踪我们可以认为就是原来的路径追踪的扩展版:在原来的路径追踪里,我们从摄像机发射一束光线,直至连接至光源,而双向的路径追踪则是从摄像机和光源都发射光线,然后我们将这两根光线的某一端点连接起来,就实现了我们的双向路径追踪。

由图可知:双向路径追踪适合光线传播情况复杂的情景:因为在如图的灯中,光从灯上方被大量地打出,很难找到一条清晰的包含主要能量的光路。

缺点在于:双向路径追踪比较慢,且实现很复杂。

MLT

MLT是基于统计学的一项工具:马尔可夫链,这项工具可以根据已有的样本生成新的样本,比较具体的例子如图:我们在已知了一条光路后,可以利用这项工具对光路里的某个具体的点位稍稍改动得到一条新的光路。

同样的,这种算法也非常适合光线复杂的场景,且由于他只需要一条正确的光路就能生成多条类似的光路,所以对于一些很复杂的情景如泳池下的涟漪这样的画面都可以渲染出来。

缺点在于:首先他的所有工作都是局部的,也就是每条光线都只会生成与自己类似的光线,每条光线都是自己忙自己的,所以本身收敛速度也不可知,且每个像素之间收敛的速度也不一,一般不用于渲染动画(连简单的画面都渲染不明白)

光子映射

光子映射是一个有偏估计方法且是一个有两个步骤的方法,对于SDS的光路渲染尤其在行(什么是SDS呢?就是光线先进入Specular材质如水面,然后再Diffuse如光线在水底,最后再进入Specular材质如水底的光线射出水面)。

光子映射有许多实现的方法,如:

我们首先从光源和摄像机都分别发射光线,任由他们反射直至撞到了diffuse的材质。

接着我们进行局部的密度估计,如何理解局部的密度估计呢?核心的思路是光子越多的区域应该更明亮。我们对于任何一个着色点,去找离他最近的n个光子,然后计算这n个光子与所占的面积的比值即可。

能够看到n的取值会直接影响结果,n如果取得太小如就取2个光子,那么就会有很多噪声(如最上面的图一样明明暗暗),可要是取得太大,又会很糊。这也就是光子估计是一个有偏估计的原因:他的期望会随着采样率的变化而变化,不过我们可以设想:当本身的光子数趋向于无穷时,我们无论取多少个点,n无论为多少,我们所取的面积都只会是很小的一块,这样也就接近了无偏估计的概念。

在这里我们也可以声明两个概念:第一是有偏的界定就是会产生模糊的现象,第二是所谓的Consistent:就是指随着采样率提高至无限后不再产生模糊现象的估计方法。这里还回答了关于局部的密度估计:为什么不是像其他的估计密度的方法一样划定一定的面积范围后在面积内统计光子的数量这样做呢?这是因为这样做的话光子估计会永远是一个有偏估计:哪怕我们有无限个光子,界定了一定的面积范围,那他对面积的积分就无法到达\Delta A的量级。

VCM

接下来要介绍的是VCM的概念:顶点连接合并,他是双向路径追踪和光子映射的一个方法上的结合。这个算法的思路就是在双向路径追踪的过程中如果两条光线的端点无法连接成线,也不要浪费这两个端点,而是把这两个端点的光子当作光子映射的一部分。

IR

IR又称多光方法,简单的说我们将所有已经被照亮的地方都视作光源,这样的话当我们聚焦于某个着色点时我们只需要所有被视作光源的地方(VPL,虚拟光源)向着色点发射光线即可。

优点在于很快而且在漫反射场景表现优秀,缺点在于当虚拟的光源离着色点较近时显然效果很差。

因为当距离过近时,相当于计算光照强度时分母过小,于是会出现光照过强。

Advanced Appearance Modeling

这里提了一些更先进的外观建模,分为了无表面模型与表面模型以及程序化生成的表面。

Participating Media

散射介质如雾。

当光线遇到这些散射介质时,会发生两种情形:被吸收和被散射。

如何散射呢?我们会用一个相位函数来描述光线在散射介质中散射的情形。

散射介质如何渲染呢?原理上来说,充满着随机,随机挑选一个方向,行进随机的距离,然后再与光源连线。

Hair

头发的表现。

值得一提的是,我们能发现头发上有两种高光,一种是偏无色的高光,另一种是有色的高光。

这是我们当前的头发的模型:我们认为光线在头发的表面时,首先会发生一次反射,称为R,然后这束光线会进入头发,之后它再从头发内部出去,我们称为TT,而进入头发的光线也有可能再反射出头发,我们称为TRT。这里的T就是指光线经过头发的表面,R就是指光线发生反射。

我们可以把头发看作一个玻璃柱,同时还要考虑头发中色素的影响(黑头发吸收光线的能力就要强一点,金头发反射的能力更强一点)。

Animal fur

对人类头发的模拟能适用于动物的毛发吗?

由图可知,动物的毛发与人类的头发是有相似之处的。人类和动物的毛发都是由三部分组成,最外面一层用来反射光线,中间一层用来散射光线,最内的一层则用来吸收光线。但是细看的话不难发现;动物内部的用于散射光线的介质(髓质)的成分占比远大于人类。

于是我们在模拟动物毛发时,就可以把动物的毛发视作一个双层的圆柱体,内部的圆柱体就用来模拟髓质(这个模型是闫老师提出的)。

这是在内部的情形。

Granular

接下来介绍一下颗粒模型

这个部分貌似说的是没有很合适的方法...

之前说的都是非表面模型,接下来让我们了解下表面模型。

Translucent

透光性的材质如:玉。

所谓的透光性材质指的是当光从这种材质进入后在材质内还可以从材质表面的另一个地方出去。

当光线进入这样的材质会在材质内部发生大量的散射,我们将这样的在表面下的散射称为:次表面散射。

由此引出的BSSRDF的概念可以视作之前BRDF的概念的延伸,之前我们计算BRDF的时候往往只考虑一根光线打到表面这样一个过程,而现在次表面散射的存在告诉我们:表面上可能有多个光,其中部分光可以是从介质内部投射出来,因此我们需要加入对方向和面积的考虑。

我们可以将这样的现象想象成:当我们有一个光源在这个表面的正上方时,这个介质内也有一个类似的光源将光线进入介质的周围点亮,我们就通过这样的方法来模拟这样的情景。

Cloth

布料:由一系列纤维缠绕组成。

一般的,我们将布料认作是一个平面上一系列细而平的线条的组合即可。

可缺陷在于:如果遇到并不是在一个平面内的纤维组成的布料如图二,我们这样的方法行不通。

比较合理的做法是我们不再拘泥于平面而直接采用体积渲染,将布料分作很多个独立的小块。这样当然可以得到最理想逼真的结果,但是这样的计算量将大到难以估计。

当然,我们也可以直接渲染出纤维(一根根立方体),但这样的计算量也很惊人。

后续还聊了些有关细节渲染的东西,我看了一下,这节课的内容总的来说是了解为主,暂时对我们的学习没有啥帮助,我也就不浪费时间了(小偷一手懒)。


http://www.ppmy.cn/news/1551080.html

相关文章

本地推流,服务器拉流全流程

本地推流,服务器拉流全流程 环境准备:准备一台服务器,其中openssl最好为1.1.1版本(可以直接使用ubuntu20.04操作系统) 服务器拉流 1、 安装环境依赖 sudo apt-get update sudo apt-get install unzip sudo apt-get…

C#中面试的常见问题002

1.wpf和Winfrom的区别 1. 技术基础 WPF:基于.NET Framework,使用XAML(可扩展应用程序标记语言)作为界面描述语言,支持矢量图形和高级布局。WinForms:基于.NET Framework,使用纯代码或拖放设计…

Qt—QLabel 使用总结

参考链接:Qt—QLabel 使用总结 一、简述 QLabel(标签控件) 提供了一个文本或图像的显示,没有提供用户交互功能。 一个 QLabel 可以包含以下任意内容类型: -纯文本:使用 setText() 设置一个 QString 富文本:使用 setText() 设置一个富文本的 QString图像:使用 setPixma…

科技“加码”编织智能防护网,中威电子助力智慧林业建设

“山泽救于火,草木植成,国之富也”。森林作为陆地生态系统的主体和重要资源,是人类生存发展的生态保障。 然而,随着气候变化和人为因素的交织影响,森林火灾的威胁日益严峻,给生态环境和人类社会带来了巨大…

AI潮汐日报1128期:Sora泄露引发争议、百度早期研究对AI领域Scaling Law的贡献、Meta发布系列AI开源项目

AI 潮汐日报,旨在提供最新潮、最核心、最有意思的AI速递。四大专栏:今日热点、应用速递、研究进展、思维碰撞。 今日热点 OpenAI文本转视频模型Sora泄露引发争议 OpenAI的文本转视频AI模型Sora在Hugging Face上遭遇泄露,泄露者为参与测试的…

IT成长之路-ubuntu驱动篇

历时3天的蹂躏,总结驱动安装全面教程。 步骤一、安装gcc、g和make包 #脚本更新 sudo apt-get update #编译gcc sudo apt-get install gcc #编译g sudo apt-get install g #编译make sudo apt-get install make 注意: gcc、g版本可能会导致显卡驱动安…

开源TTS语音克隆神器GPT-SoVITS_V2版本地整合包部署与远程使用生成音频

文章目录 前言1.GPT-SoVITS V2下载2.本地运行GPT-SoVITS V23.简单使用演示4.安装内网穿透工具4.1 创建远程连接公网地址 5. 固定远程访问公网地址 前言 本文主要介绍如何在Windows系统电脑使用整合包一键部署开源TTS语音克隆神器GPT-SoVITS,并结合cpolar内网穿透工…

queue 和 Stack

import scala.collection.mutable //queue:队列.排队打饭.... //特点:先进先出 //Stack:栈 //特点:先进后出 class ob5 { def main(args: Array[String]): Unit { val q1 mutable.Queue(1) q1.enqueue(2)//入队 q1.enqueue(3)//入队 q1.enqueue(4)…