18 Games101 - 笔记 - 高级光线传播与复杂外观建模

**18 ** 高级光线传播与复杂外观建模

本章虽然是高级光线传播与复杂外观建模,但是都没有展开讲,不涉及具体的计算。

高级光线传播

  • 无偏的光线传播:如果无论样本多少,算出来的期望值永远是对的。例如蒙特卡洛积分,它没有系统误差。
  • 有偏的光线传播:算出的期望值有一定误差的。
  • 一致的光线传播:在有偏的情况下如果采样足够多的样本能够收敛到正确值。

无偏的光线传播方法

双向路径追踪

之前的路径追踪是单向的,运用光源可逆性,从眼睛到光源。
BDPT双向路径追踪分别从光源和摄像机生成一系列半路径,然后再连接两个半路径的端点形成整条路径。
img

img

  • 优点:光线传播在光源半边好算时,效果好
  • 缺点:慢

Metropolis光线传播(MLT)

  • 用马尔科夫链做蒙特卡洛积分

    • 马尔科夫链是一种能在当前样本附近生成下一个样本的方法
  • 在给定足够的时间下,可以以任意的函数为PDF生成样本,(当PDF的形状与要积分的函数形状一致时,使用蒙特卡洛积分效果最好)

  • 优点:

    • 特别适合做复杂光路的传播
  • 缺点:

    • 不知道收敛的速度(无法估计渲染时间)
    • 局部,脏
    • 所以不用来渲染动画

img

有偏的光线传播方法

光子映射

特别适合渲染SDS路径和焦散现象
img
举例一种方法:
img
光子映射是一种有偏但是一致的方法。

image-20240409102123141

img

  • 渲染领域对于有偏无偏的理解:

    • 有偏的结果相对于正确的结果会更模糊
    • 一致的说明在样本足够多的情况下会收敛到正确结果
  • 如果取作色点周围相同的面积去数里面的光子数,那结果是即有偏也不一致的

顶点的连接与合并(VCM)

  • 结合BDPT与光子映射

  • 主要思想:

    • 如果BDPT中的半路径的两个端点在一个平面上,不能被连接但可以被合并,我们就不要浪费这些半路径
    • 使用类似光子映射的方法把邻近的”光子“的贡献结合起来

img

实时辐射度(IR)

  • 主要思想:已经被照亮的表面就认为是光源
  • 从光源发出半路径,并假设每个半路径的终点是虚拟点光源,然后根据这些虚拟点光源渲染整个场景

img

  • 优点:速度快,通常在漫反射场景中效果良好
  • 缺点:当 VPL 接近着色点时会出现峰值;无法处理有glossy材质

复杂外观建模

非表面模型

散射材质:云/雾

在光线穿过参与介质的时候,会随机吸收(部分)和散射到各个方向,同时传播的过程中也可能会接收到其他方向散射来的光
image-20240409102535675

相位函数描述了参与介质中任意点x处的光散射角的分布。
image-20240409104420076
散射材质渲染的主要思想:

  • 随机选择一个方向弹射
  • 随机选择一段距离直走,走多远由介质的吸收能力决定
  • 在每个”着色点“,连接到灯光,计算路径的贡献

image-20240409104431462

头发/毛发/纤维

头发:
Marschner Model,应用比较广泛,这个模型把发丝看作内部有色素会吸收能量的玻璃圆柱,同时把头发结构分为两层,角质层和皮质层,光线打到头发的圆柱时,会被反射,以及穿进去折射后反射再折射出来,以及折射进入后折射出来,也就是R,TRT,TT (R: reflection, T: transmission)。
img
利用Marschner Model,让光线和多根头发发生多次散射,渲染困难,计算量大,但是效果很好
img

动物毛发:

img
从生物上的结构,头发/毛发分为角质,皮质以及髓质,对于动物来说,中间的髓质更大光线更容易发生散射
img
双层圆柱模型:模拟了光线经过髓质的效果,使用了五个分量来模拟毛发,在《猩球崛起》《狮子王》中得到应用。
img

颗粒材质

img
可以避免对所有颗粒进行显式建模,在一个单元上进行一些程序化的定义来简化模型
目前仍没有很好的高效渲染这种材质的方法,仍然非常耗时,没有得到很广泛的应用

表面模型

半透明材质

应用:玉石、水母
反应在物理上,这种半透明材质说明了光线发生了次表面散射:
img

image-20240409104611401

img

BRDF vs BSSRDF
img
真实的次表面散射材质和真实的皮肤质感

布料材质

布的结构:
img
当成表面渲染,根据不同织法给出不同的BRDF。
如果当成表面渲染意味着我们没法渲染类似天鹅绒的材质。
也可以通过单根纤维的特性即分布推算出散射参数,向渲染云那样的散射介质一样来渲染布料,但计算量大。
也可以把每一根纤维都渲染出来,但计算量更大。

细节模型

微表面模型中最重要的是它的法线分布,但是我们描述这个分布用的都是很简单的模型,比如正态分布之类的,真实的分布要更复杂。
真实的法线分布基本符合统计规律,但是又有一些细节
img
如果使用法线贴图来把这些起伏细节都定义出来,会非常耗时
使用路径追踪困难的点在于,微表面的镜面反射在法线分布复杂的情况下,很难建立有效的的光线通路从相机出发打到光源
img
波动光学的BRDF结果与几何光学类似,但由于干涉出现不连续的特点
img

程序化生成外观

利用三维空间中的噪声函数指导材质的生成,可以进行动态查询
应用:车绣效果、程序化地形、水面、木头纹理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/302237.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3中使用webstocket

1.在项目中创建webstocket.ts文件 export default class SocketService {// 单例static instance null;static get Instance() {if (!this.instance) {this.instance new SocketService();}return this.instance;}// 和服务端连接的socket对象ws null;// 存储回调函数callB…

nestjs 全栈进阶--nest生命周期

视频教程 12_nestjs生命周期_哔哩哔哩_bilibili 所有应用程序元素都有一个由 Nest 管理的生命周期。Nest 提供了生命周期钩子,提供了对关键生命时刻的可见性,以及在关键时刻发生时采取行动(在你的module,injectable或者controller中注册代码…

ddres( ) 组站星双差方程和设计矩阵

1 ddres( )参数介绍 rtklib中进行的单频解算 双差观测值,单差的模糊度 单频点双差 DD (double-differenced) phase/code residuals ------------------------------ x 模糊度 P 方差-协方差阵 sat 共识卫星列表 ns 共识卫星数量 y…

Qt | Q_PROPERTY属性和QVariant 类

一、属性基础 1、属性与数据成员相似,但是属性可使用 Qt 元对象系统的功能。他们的主要差别在于存取方式不相同,比如属性值通常使用读取函数(即函数名通常以 get 开始的函数)和设置函数(即函数名通常以 set 开始的函数)来存取其值,除此种方法外,Qt 还有其他方式存取属性值…

DFS:深搜+回溯+剪枝解决排列、子集问题

创作不易&#xff0c;感谢三连支持&#xff01;&#xff01; 一、全排列I . - 力扣&#xff08;LeetCode&#xff09; class Solution { public://全局变量vector<vector<int>> ret;vector<int> path;bool check[6];vector<vector<int>> perm…

DDD 的四层领域模型是怎样的?包含哪些基础概念?

DDD的四层领域模型如下所示&#xff1a; 展现层&#xff1a;这一层负责向用户显示信息和解释用户命令&#xff0c;完成前端界面逻辑。并将用户请求传递给应用层。应用层&#xff1a;这一层是很薄的一层&#xff0c;负责协调领域层中的领域对象&#xff0c;组成具体应用场景。应…

深度解析Elasticsearch索引数据量过大的优化与部署策略

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一. 分片和副本策略 1.1分片策略 1.1.1 数据量 1.1…

springCloudAlibaba集成gateWay实战(详解)

一、初识网关&#xff1f; 1、网关介绍 ​ 在微服务架构中&#xff0c;一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢&#xff1f;如果没有网关的存在&#xff0c;我们只能在客户端记录每个微服务的地址&#xff0c;然后分别去调用。这样的话…

python爬虫———urllibd的基本操作(第十二天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

画图理解JVM相关内容

文章目录 1. JVM视角下&#xff0c;内存划分2. 类内存分布硬核详解1. 获取堆内存参数2. 扫描堆内存&#xff0c;定位实例3. 查看实例所在地址的数据4. 找到实例所指向的类信息的地址5. 查看class信息6. 结论 3. Java的对象创建流程4. 垃圾判别算法4.1 引用计数法4.2 可达性分析…

【Redis】NoSQL之Redis的配置和优化

关系型数据库与非关系型数据库 关系型数据库 关系型数据库是一个结构化的数据库&#xff0c;创建在关系型模型&#xff08;二维表&#xff09;的基础上&#xff1b;一般面向于记录&#xff1b; SQL语句(标准数据查询语句)就是一种基于关系型数据库的语言&#xff0c;用于执行…

Mysql底层原理五:如何设计、用好索引

1.索引的代价 空间上的代价 时间上的代价 每次对表中的数据进⾏增、删、改操作时&#xff0c;都需要去修改各个B树索引。⽽且我们讲过&#xff0c;B树每层节点都是按照索引列的值从⼩到⼤的顺序排序⽽组成了双 向链表。不论是叶⼦节点中的记录&#xff0c;还是内节点中的记录&a…

设计模式 -- 发布订阅模式

发布订阅模式&#xff1a; 订阅者把自己想订阅的事件注册到调度中心&#xff0c;当发布者发布该事件到调度中心&#xff0c;也就是该事件触发时&#xff0c;由调度者统一调度订阅者注册到调度中心的处理代码。 在javaScript 中我们一般使用事件模型来代替传统的发布订阅模式。 …

深入了解iOS内存(WWDC 2018)笔记-内存诊断

主要记录下用于分析iOS/macOS 内存问题的笔记。 主要分析命令&#xff1a; vmmap, leaks, malloc_history 一&#xff1a;前言 有 3 种思考方式 你想看到对象的创建吗&#xff1f;你想要查看内存中引用对象或地址的内容吗&#xff1f;或者你只是想看看 一个实例有多大&#…

互联网大厂ssp面经之路:计算机网络part2

什么是 HTTP 和 HTTPS&#xff1f;它们之间有什么区别&#xff1f; a. HTTP&#xff08;超文本传输协议&#xff09;和HTTPS&#xff08;安全超文本传输协议&#xff09;是用于在Web上传输数据的协议。它们之间的区别在于安全性和数据传输方式。 b. HTTP是一种不安全的协议&…

【随笔】Git 高级篇 -- 整理提交记录(上)cherry-pick(十五)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

加州大学欧文分校英语基础语法专项课程03:Simple Past Tense 学习笔记(完结)

Learn English: Beginning Grammar Specialization Specialization Certificate course 3&#xff1a; Simple Past Tense Course Certificate 本文是学习 https://www.coursera.org/learn/simple-past-tense 这门课的学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。…

浙江大学李春阳团队Trends Plant Sci观点文章(IF=20):植物地下生态互作:为什么同性相斥,异性相吸?

在生态学中&#xff0c;人们一直致力于探究生物之间的相互作用&#xff0c;这些相互作用不仅包括物种之间的相互作用&#xff0c;还包括同一物种的不同性别之间的相互作用。对于异株植物物种来说&#xff0c;人们普遍认为异性之间的相互作用比同性之间的相互作用更弱&#xff0…

为说阿拉伯语的国家进行游戏本地化

阿拉伯语是由超过4亿人使用的语言&#xff0c;并且是二十多个国家的官方语言。进入这些国家的市场并非易事——虽然他们共享一种通用语言&#xff0c;但每个国家都有自己独特的文化&#xff0c;有自己的禁忌和对审查的处理方式。这就是为什么视频游戏公司长期以来都远离阿拉伯语…

Git如何将已经推送到服务器的文件夹“忽略”

例子&#xff1a;如果我们在推送之初&#xff0c;一股脑将工程的所有文件都备份&#xff0c;没有忽略 debug和release文件夹&#xff0c;反应过来想要将文件夹再次忽略&#xff0c;应该怎么操作呢&#xff1f; 如下解答方法&#xff1a; 1.在工程目录下新建文件 .gitignore …