湛江市建设工程造价信息网/北京seo优化公司
久违的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:就是指随着采样率提高至无限后不再产生模糊现象的估计方法。这里还回答了关于局部的密度估计:为什么不是像其他的估计密度的方法一样划定一定的面积范围后在面积内统计光子的数量这样做呢?这是因为这样做的话光子估计会永远是一个有偏估计:哪怕我们有无限个光子,界定了一定的面积范围,那他对面积的积分就无法到达的量级。
VCM
接下来要介绍的是VCM的概念:顶点连接合并,他是双向路径追踪和光子映射的一个方法上的结合。这个算法的思路就是在双向路径追踪的过程中如果两条光线的端点无法连接成线,也不要浪费这两个端点,而是把这两个端点的光子当作光子映射的一部分。
IR
IR又称多光方法,简单的说我们将所有已经被照亮的地方都视作光源,这样的话当我们聚焦于某个着色点时我们只需要所有被视作光源的地方(VPL,虚拟光源)向着色点发射光线即可。
优点在于很快而且在漫反射场景表现优秀,缺点在于当虚拟的光源离着色点较近时显然效果很差。
因为当距离过近时,相当于计算光照强度时分母过小,于是会出现光照过强。
Advanced Appearance Modeling
这里提了一些更先进的外观建模,分为了无表面模型与表面模型以及程序化生成的表面。
Participating Media
散射介质如雾。
当光线遇到这些散射介质时,会发生两种情形:被吸收和被散射。
如何散射呢?我们会用一个相位函数来描述光线在散射介质中散射的情形。
散射介质如何渲染呢?原理上来说,充满着随机,随机挑选一个方向,行进随机的距离,然后再与光源连线。
Hair
头发的表现。
值得一提的是,我们能发现头发上有两种高光,一种是偏无色的高光,另一种是有色的高光。
这是我们当前的头发的模型:我们认为光线在头发的表面时,首先会发生一次反射,称为R,然后这束光线会进入头发,之后它再从头发内部出去,我们称为TT,而进入头发的光线也有可能再反射出头发,我们称为TRT。这里的T就是指光线经过头发的表面,R就是指光线发生反射。
我们可以把头发看作一个玻璃柱,同时还要考虑头发中色素的影响(黑头发吸收光线的能力就要强一点,金头发反射的能力更强一点)。
Animal fur
对人类头发的模拟能适用于动物的毛发吗?
由图可知,动物的毛发与人类的头发是有相似之处的。人类和动物的毛发都是由三部分组成,最外面一层用来反射光线,中间一层用来散射光线,最内的一层则用来吸收光线。但是细看的话不难发现;动物内部的用于散射光线的介质(髓质)的成分占比远大于人类。
于是我们在模拟动物毛发时,就可以把动物的毛发视作一个双层的圆柱体,内部的圆柱体就用来模拟髓质(这个模型是闫老师提出的)。
这是在内部的情形。
Granular
接下来介绍一下颗粒模型
这个部分貌似说的是没有很合适的方法...
之前说的都是非表面模型,接下来让我们了解下表面模型。
Translucent
透光性的材质如:玉。
所谓的透光性材质指的是当光从这种材质进入后在材质内还可以从材质表面的另一个地方出去。
当光线进入这样的材质会在材质内部发生大量的散射,我们将这样的在表面下的散射称为:次表面散射。
由此引出的BSSRDF的概念可以视作之前BRDF的概念的延伸,之前我们计算BRDF的时候往往只考虑一根光线打到表面这样一个过程,而现在次表面散射的存在告诉我们:表面上可能有多个光,其中部分光可以是从介质内部投射出来,因此我们需要加入对方向和面积的考虑。
我们可以将这样的现象想象成:当我们有一个光源在这个表面的正上方时,这个介质内也有一个类似的光源将光线进入介质的周围点亮,我们就通过这样的方法来模拟这样的情景。
Cloth
布料:由一系列纤维缠绕组成。
一般的,我们将布料认作是一个平面上一系列细而平的线条的组合即可。
可缺陷在于:如果遇到并不是在一个平面内的纤维组成的布料如图二,我们这样的方法行不通。
比较合理的做法是我们不再拘泥于平面而直接采用体积渲染,将布料分作很多个独立的小块。这样当然可以得到最理想逼真的结果,但是这样的计算量将大到难以估计。
当然,我们也可以直接渲染出纤维(一根根立方体),但这样的计算量也很惊人。
后续还聊了些有关细节渲染的东西,我看了一下,这节课的内容总的来说是了解为主,暂时对我们的学习没有啥帮助,我也就不浪费时间了(小偷一手懒)。
相关文章:

GAMES101:现代计算机图形学入门-笔记-09
久违的101图形学回归咯 今天的话题应该是比较轻松的:聊一聊在渲染中比较先进的topics Advanced Light Transport 首先是介绍一系列比较先进的光线传播方法,有无偏的如BDPT(双向路径追踪),MLT(梅特罗波利斯…...

【Db First】.NET开源 ORM 框架 SqlSugar 系列
.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列 …...

MySQL聚合查询分组查询联合查询
#对应代码练习 -- 创建考试成绩表 DROP TABLE IF EXISTS exam; CREATE TABLE exam ( id bigint, name VARCHAR(20), chinese DECIMAL(3,1), math DECIMAL(3,1), english DECIMAL(3,1) ); -- 插入测试数据 INSERT INTO exam (id,name, chinese, math, engli…...

告别照相馆!使用AI证件照工具HivisionIDPhotos打造在线证件照制作软件
文章目录 前言1. 安装Docker2. 本地部署HivisionIDPhotos3. 简单使用介绍4. 公网远程访问制作照片4.1 内网穿透工具安装4.2 创建远程连接公网地址 5. 配置固定公网地址 前言 本文主要介绍如何在Linux系统使用Docker快速部署一个AI证件照工具HivisionIDPhotos,并结合…...

通信原理第三次实验
实验目的与内容 实验操作与结果 5.1 刚开始先不加入白噪声,系统设计如下: 正弦波参数设置如下: FM设计如下: 延迟设计如下: 两个滤波器设计参数如下: 输出信号频谱为(未加入噪声)&a…...

【halcon】Metrology工具系列之 get_metrology_object_result_contour
get_metrology_object_result_contour (操作员) 名称 get_metrology_object_result_contour — 查询测量对象的结果轮廓。 签名 get_metrology_object_result_contour( : Contour : MetrologyHandle, Index, Instance, Resolution : ) 描述 get_metrology_object_result_…...

A052-基于SpringBoot的酒店管理系统
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...

NLP信息抽取大总结:三大任务(带Prompt模板)
信息抽取大总结 1.NLP的信息抽取的本质?2.信息抽取三大任务?3.开放域VS限定域4.信息抽取三大范式?范式一:基于自定义规则抽取(2018年前)范式二:基于Bert下游任务建模抽取(2018年后&a…...

python常见问题-pycharm无法导入三方库
1.运行环境 python版本:Python 3.9.6 需导入的greenlet版本:greenlet 3.1.1 2.当前的问题 由于需要使用到greenlet三方库,所以进行了导入,以下是我个人导入时的全过程 ①首先尝试了第1种导入方式:使用pycharm进行…...

迅为RK3588开发板Android系统开发笔记-使用ADB工具
1 使用 ADB 工具 ADB 英文名叫 Android debug bridge ,是 Android SDK 里面的一个工具,用这个工具可以操作管理 Android 模拟器或者真实的 Android 设备,主要的功能如下所示: 在 Android 设备上运行 shell 终端,用命…...

什么是分布式数据库?
随着现代互联网应用和大数据时代的到来,分布式数据库成为了解决大规模数据存储和高并发处理的核心技术之一。本文将通过深入浅出的方式,带你全面理解分布式数据库的概念、工作原理以及底层实现技术。无论你是刚刚接触分布式数据库的开发者,还…...

Leetcode 3363. Find the Maximum Number of Fruits Collected
Leetcode 3363. Find the Maximum Number of Fruits Collected 1. 解题思路2. 代码实现 题目链接:3363. Find the Maximum Number of Fruits Collected 1. 解题思路 这一题是一道陷阱题…… 乍一眼看过去,由于三人的路线完全可能重叠,因此…...

【数据仓库 | Data Warehouse】数据仓库的四大特性
1. 前言 数据仓库是用于支持管理和决策的数据集合,它汇集了来自不同数据源的历史数据,以便进行多维度的分析和报告。数据仓库的四大特点是:主题性,集成性,稳定性,时变性。 2. 主题性(Subject-Oriented) …...

springboot配置多数据源mysql+TDengine保姆级教程
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pom文件二、yamlDataSourceConfigServiceMapper.xml测试总结 前言 Mybatis-plus管理多数据源,数据库为mysql和TDengine。 一、pom文件 <de…...

dns实验2:反向解析
启动服务: 给虚拟机网卡添加IP地址: 查看有几个IP地址: 打开配置文件: 重启服务,该宽松模式,关闭防火墙: 本机测试: windows测试:(本地shell)...

ZooKeeper 基础知识总结
先赞后看,Java进阶一大半 ZooKeeper 官网这样介绍道:ZooKeeper 是一种集中式服务,用于维护配置信息、命名、提供分布式同步和提供组服务。 各位hao,我是南哥,相信对你通关面试、拿下Offer有所帮助。 ⭐⭐⭐一份南哥编写…...

npm库xss依赖的使用方法和vue3 中Web富文本编辑器 wangeditor 使用xss库解决 XSS 攻击的方法
npm库xss依赖的使用方法和vue3 中Web富文本编辑器 wangeditor 使用xss库解决 XSS 攻击的方法 1. npm库xss依赖的使用方法1.1 xss库定义1.2 xss库功能 2. vue3 中 wangeditor 使用xss库解决 XSS 攻击的方法和示例2.1 在终端执行如下命令安装 xss 依赖2.2 在使用 wangeditor 的地…...

微信小程序蓝牙writeBLECharacteristicValue写入数据返回成功后,实际硬件内信息查询未存储?
问题:连接蓝牙后,调用小程序writeBLECharacteristicValue,返回传输数据成功,查询硬件响应发现没有存储进去? 解决:一直以为是这个write方法的问题,找了很多相关贴,后续进行硬件日志…...

5G NR:带宽与采样率的计算
100M 带宽是122.88Mhz sampling rate这是我们都知道的,那它是怎么来的呢? 采样率 子载波间隔 * 采样长度 38.211中对于Tc的定义, 在LTE是定义了Ts,在NR也就是5G定义了Tc。 定义这个单位会对我们以后工作中的计算至关重要。 就是在…...

go 和java 编写方式的理解
1. go 推荐写流水账式的代码(非贬义),自己管自己。java喜欢封装各种接口供外部调用,让别人来管自己。 2. 因为协程的存在, go的变量作用域聚集在方法内部,即函数不可重入,而java线程的限制&…...

C# 7.1 .Net Framwork4.7 VS2017环境下,方法的引用与调用
方法的调用比较好理解,就是给方法传递实参,执行方法代码。 方法引用涉及委托,委托签名与其引用的方法必须一致。以下demo说明方法调用与引用在写程序时的区别: using System; using System.Collections.Generic; using System.L…...

etcd、kube-apiserver、kube-controller-manager和kube-scheduler有什么区别
在我们部署K8S集群的时候 初始化master节点之后(在master上面执行这条初始化命令) kubeadm init --apiserver-advertise-address10.0.1.176 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.16.0 --service…...

每日一题 LCR 057. 存在重复元素 III
LCR 057. 存在重复元素 III 滑动窗口二分查找 有序集合 有lower_bound(num) ,可以找到第一个大于其的数字 class Solution { public:bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {set<long> win;for(int i0;i<nums.size();i){a…...

使用IDEA编写测试用例,复杂度校验
最近我们公司要求开发人员必须写测试用例,组织了TDD培训,测试驱动开发,同时衡量代码的圈复杂度,我记录下初次使用的过程。 编写测试用例,查看用例覆盖度 1、要编写测试用例,并看下测试用例的覆盖度&#…...

搭建私有云存储
1、安装LNMP环境 yum install nginx -y yum install -y nginx mariadb-server php php-fpm php-mysqlnd systemctl restart nginx.service --- 启动Nginx systemctl start mariadb.service ---启动数据库 mysql -e create database lxdb character set utf8 ---创建数据库 my…...

【从零开始的LeetCode-算法】3304. 找出第 K 个字符 I
Alice 和 Bob 正在玩一个游戏。最初,Alice 有一个字符串 word "a"。 给定一个正整数 k。 现在 Bob 会要求 Alice 执行以下操作 无限次 : 将 word 中的每个字符 更改 为英文字母表中的 下一个 字符来生成一个新字符串,并将其 追加 到原始的…...

深入解析分布式遗传算法及其Python实现
目录 深入解析分布式遗传算法及其Python实现目录第一部分:分布式遗传算法的背景与原理1.1 遗传算法概述1.2 分布式遗传算法的引入1.3 分布式遗传算法的优点与挑战优点:挑战:第二部分:分布式遗传算法的通用Python实现2.1 基本组件的实现第三部分:案例1 - 基于多种交叉与变异…...

gitee:创建仓库,存入本地文件至仓库
一、git下载 git:下载与安装-CSDN博客https://blog.csdn.net/weixin_46001736/article/details/144107485?sharetypeblogdetail&sharerId144107485&sharereferPC&sharesourceweixin_46001736&spm1011.2480.3001.8118 二、创建仓库 1、主页面->右上角新增…...

计算分数的浮点数值
计算分数的浮点数值 C语言代码C 代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 两个整数a和b分别作为分子和分母,既分数 a/b ,求它的浮点数值(双精度浮点数,保留小数点…...

在 C/C++ 中,volatile 关键字的作用是什么?.volatile 关键字与 const 关键字有什么区别?
volatile关键字用于告诉编译器,被修饰的变量可能会被程序以外的因素(如硬件、操作系统等)修改,因此每次访问该变量时都应该从内从中读取他的值,而不是使用可能存在的缓存之,这在多线程编程,与硬…...