调整图片源为本地源
|
@ -12,11 +12,11 @@ date: 2022-07-30T16:49:52+08:00
|
|||
|
||||
坐在房间的一侧往窗户的一侧看,三维和二维的情况是下面这样的
|
||||
|
||||

|
||||

|
||||
|
||||
如果加上一个幕布,显示上图图像,往往人们难以区别于现实世界,即为虚拟现实的原理
|
||||
|
||||

|
||||

|
||||
|
||||
### 全光函数(The Plenoptic Function)
|
||||
|
||||
|
@ -24,7 +24,7 @@ date: 2022-07-30T16:49:52+08:00
|
|||
|
||||
统计往任意方向上的所见值,可定义一个函数,最后结果为一个数
|
||||
|
||||

|
||||

|
||||
|
||||
* 改进函数 Color snapshot
|
||||
|
||||
|
@ -32,19 +32,19 @@ date: 2022-07-30T16:49:52+08:00
|
|||
|
||||
记录各个方向看到的不同方向上的光,就可以看到彩色场景
|
||||
|
||||

|
||||

|
||||
|
||||
* 扩展的全光函数 A movie
|
||||
|
||||
进一步将全光函数扩展一个时间t,那下面这个四维的函数就是电影,因为你可以往各个不同的方向看,看到各个不同方向来的信息都是彩色的,然后在不同时间显示的东西不一样
|
||||
|
||||

|
||||

|
||||
|
||||
* 进一步扩展 Holographic movie
|
||||
|
||||
现在考虑人/摄像机可以在三维空间中的任何地方移动,三维空间中的任何一个位置可以用x、y、z定义。那这也就是全息电影
|
||||
|
||||

|
||||

|
||||
|
||||
* 再改进一步 The Plenoptic Function
|
||||
|
||||
|
@ -62,7 +62,7 @@ date: 2022-07-30T16:49:52+08:00
|
|||
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
## 光场
|
||||
|
||||
|
@ -70,7 +70,7 @@ date: 2022-07-30T16:49:52+08:00
|
|||
|
||||
* 通过一个起点和一个方向定义
|
||||
|
||||

|
||||

|
||||
|
||||
* 取光线上的任意两点定义整条光线(二维位置和方向)
|
||||
|
||||
|
@ -78,7 +78,7 @@ date: 2022-07-30T16:49:52+08:00
|
|||
|
||||
已知包围盒上的点,观测位置的点,这两点确定一条光线,可以查询记录的函数,该函数记录了物体表面不同位置往各个不同方向的发光情况
|
||||
|
||||

|
||||

|
||||
|
||||
### 定义光场
|
||||
|
||||
|
@ -87,7 +87,7 @@ date: 2022-07-30T16:49:52+08:00
|
|||
如果有了一个物体的光场,如下图,任何一个位置往任何一个方向都可以发光。我们在任何一个位置往这个物体某个点看的时候,是可以知道这条光线带的能量是多少的,因为通过这2个点可以知道往这个点看的方向,就可以从4维的光场中查询到之前记录的光场的值,即光场可以给出任意观测方向看到的结果
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
### 记录光场
|
||||
|
||||
|
@ -97,7 +97,7 @@ date: 2022-07-30T16:49:52+08:00
|
|||
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
* 取一平面,平面右侧有有物体发出光线打到平面上
|
||||
|
||||
|
@ -111,11 +111,11 @@ date: 2022-07-30T16:49:52+08:00
|
|||
|
||||
找到所有u、v和s、t的组合,可以描述所有的不同位置和不同方向出来的光线
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
光场本质上就是一个4维的函数,不同记录方法即为描述方式不同
|
||||
|
||||
|
@ -127,11 +127,11 @@ date: 2022-07-30T16:49:52+08:00
|
|||
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
很多摄像机从某一个角度看向世界,拍一张图,然后将所有图都组织到一块,就是整个光场。如下图,斯坦福做了一个摄像机的矩阵,相当于在不同的位置对场景拍不同的图,每个位置对应一个u、v,拍到的照片是s、t,相机本身二维,成像结果二维,综合为四维
|
||||
|
||||

|
||||

|
||||
|
||||
* 固定s、t平面上一个点,然后往u、v平面上看
|
||||
|
||||
|
@ -139,7 +139,7 @@ date: 2022-07-30T16:49:52+08:00
|
|||
|
||||
通过这种方式,可以将像素上的Irradiance给展开成Radiance,可以看到打到任何一个像素上不同方向的光
|
||||
|
||||

|
||||

|
||||
|
||||
苍蝇的复眼成像原理就是成像一个光场,盯着原本拍出的一张照片来看,那照片上的任何一个像素记录的是Irradiance(平均各个方向的光)
|
||||
|
||||
|
@ -147,7 +147,7 @@ date: 2022-07-30T16:49:52+08:00
|
|||
|
||||
此时看一个像素实际为穿过像素的不同方向的光
|
||||
|
||||

|
||||

|
||||
|
||||
## 光场相机
|
||||
|
||||
|
@ -157,7 +157,7 @@ date: 2022-07-30T16:49:52+08:00
|
|||
|
||||
Lytro相机有下图这个人创办
|
||||
|
||||

|
||||

|
||||
|
||||
* 原理:Microlens design(上面谈到的微透镜)。将一个像素替换成一个透镜,让这个透镜可以把来自于不同方向的光分开并记录下来
|
||||
|
||||
|
@ -165,19 +165,19 @@ Lytro相机有下图这个人创办
|
|||
|
||||
* 具体效果如下图:
|
||||
|
||||

|
||||

|
||||
|
||||
* 详细原理
|
||||
|
||||
将原本的像素换成了微透镜,这些微透镜可以把来自各方向的光分散到不同的方向上去,在后面再将它记录下来
|
||||
|
||||

|
||||

|
||||
|
||||
光场照相机照出来的最原始的图实际上是原本的一个像素变成了一个圆,任何一个圆内部平均起来就是以前普通的照相机得到的结果,在一个圆的内部各个像素其实就是记录了各个不同的方向
|
||||
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
* 得到普通相机照片
|
||||
|
||||
|
@ -219,7 +219,7 @@ Lytro相机有下图这个人创办
|
|||
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
#### 可见光谱
|
||||
|
||||
|
@ -227,7 +227,7 @@ Lytro相机有下图这个人创办
|
|||
|
||||
光谱是光线的能量在不同的波长上的分布。光谱是一个很长的范围,图形学中重要的是可见光的光谱,即分布在波长在400nm到700nm之间
|
||||
|
||||

|
||||

|
||||
|
||||
#### 谱功率密度(SPD)
|
||||
|
||||
|
@ -243,16 +243,17 @@ Lytro相机有下图这个人创办
|
|||
|
||||
阳光则是另一种SPD
|
||||
|
||||

|
||||

|
||||
|
||||
#### 不同光源的SPD
|
||||
|
||||

|
||||

|
||||
|
||||
* SPD的线性性质
|
||||
|
||||
用一种光照亮能记录光强度的东西能够得到右边的另一种分布;两种光同时照亮得到的分布就是它们两个对应的SPD之和
|
||||
|
||||

|
||||

|
||||
|
||||
### 颜色的生物学基础
|
||||
|
||||
|
@ -264,7 +265,7 @@ Lytro相机有下图这个人创办
|
|||
|
||||
人眼的瞳孔可调节大小,对应着光圈;晶状体对应透镜,可通过肌肉的拉扯调节焦距;视网膜进行成像
|
||||
|
||||

|
||||

|
||||
|
||||
#### 视网膜感光细胞
|
||||
|
||||
|
@ -283,11 +284,11 @@ Lytro相机有下图这个人创办
|
|||
三种响应类型的曲线:
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
* 三种细胞的分布和数量有个体差异,下图为12人锥形细胞分布差异
|
||||
|
||||

|
||||

|
||||
|
||||
### 颜色的三刺激理论
|
||||
|
||||
|
@ -298,7 +299,7 @@ Lytro相机有下图这个人创办
|
|||
三种不同的细胞自然会感应出三种颜色,对应下图的S、M、L
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
给定任意类型光线,人眼看到的是上面S、M、L这3个数,而不是光线本身的SPD
|
||||
|
||||
|
@ -306,7 +307,7 @@ Lytro相机有下图这个人创办
|
|||
|
||||
光线的光谱经过人的眼睛,反应到视网膜上,然后被三种不同的细胞感知到形成3个数,这3个数送到人的脑袋中,人就会认为看到了一个什么样的颜色
|
||||
|
||||

|
||||

|
||||
|
||||
#### 同色异谱
|
||||
|
||||
|
@ -323,13 +324,13 @@ Lytro相机有下图这个人创办
|
|||
下图中光谱的SPD完全不同,但被人感知后可得到三个相同的结果
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
* 应用
|
||||
|
||||
如图,可通过不同调节方式使两个颜色一致来表现显示器上太阳颜色,但混合后光谱可与之前的完全不同
|
||||
|
||||

|
||||

|
||||
|
||||
## 颜色复制/匹配
|
||||
|
||||
|
@ -345,7 +346,7 @@ Lytro相机有下图这个人创办
|
|||
|
||||
类似于调和不同颜料会越调越黑
|
||||
|
||||

|
||||

|
||||
|
||||
### 加色实验
|
||||
|
||||
|
@ -355,28 +356,28 @@ Lytro相机有下图这个人创办
|
|||
|
||||
如下图,给定任何一个颜色,希望用三种不同颜色混合匹配得到相同颜色
|
||||
|
||||

|
||||

|
||||
|
||||
左侧为给定颜色,右侧为混合颜色,每个颜色存在系数
|
||||
|
||||

|
||||

|
||||
|
||||
即找到三种颜色系数的值混合后得到左边颜色
|
||||
|
||||

|
||||

|
||||
|
||||
* 实验二
|
||||
|
||||
有时存在左边的颜色右边无法混合得到的情况
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
可在左边给定的颜色上加上一个颜色,类似于右边对应减去这个颜色
|
||||
|
||||
多个不同颜色混合得到一个颜色,存在负值可能
|
||||
|
||||

|
||||

|
||||
|
||||
#### CIE RGB配色实验
|
||||
|
||||
|
@ -386,7 +387,7 @@ CIE是一个组织,定义了RGB系统,给定的任何一个颜色是单波
|
|||
|
||||
使用三种单色的光
|
||||
|
||||

|
||||

|
||||
|
||||
#### 颜色匹配函数:
|
||||
|
||||
|
@ -394,7 +395,7 @@ CIE是一个组织,定义了RGB系统,给定的任何一个颜色是单波
|
|||
|
||||
做颜色匹配时,给定一个固定波长,需要将这3个颜色中相同波长的值混合起来
|
||||
|
||||

|
||||

|
||||
|
||||
* 实际光(多波长)
|
||||
|
||||
|
@ -402,7 +403,7 @@ CIE是一个组织,定义了RGB系统,给定的任何一个颜色是单波
|
|||
|
||||
这三个颜色每一个积分出来会得到三个数
|
||||
|
||||

|
||||

|
||||
|
||||
### 颜色空间
|
||||
|
||||
|
@ -423,7 +424,7 @@ CIE XYZ系统人为定义了一个颜色匹配函数,
|
|||
* 绿色曲线分布比较对称,对应的y函数匹配出来的数Y在一定程度上可以表示颜色的亮度
|
||||
* 红色有2个峰值,没有负数,这些函数都分布在可见光的范围内
|
||||
|
||||

|
||||

|
||||
|
||||
二维可视化XYZ
|
||||
|
||||
|
@ -439,7 +440,7 @@ $$z = \frac{Z}{X+Y+Z}$$
|
|||
|
||||
改变Y即为改变亮度
|
||||
|
||||

|
||||

|
||||
|
||||
* 色域
|
||||
|
||||
|
@ -447,13 +448,13 @@ $$z = \frac{Z}{X+Y+Z}$$
|
|||
|
||||
色域有一个白色中心,纯色都在边界上
|
||||
|
||||

|
||||

|
||||
|
||||
不同颜色空间表示的颜色范围不一样
|
||||
|
||||
下图sRGB只能表示很小的三角形部分的色域
|
||||
|
||||

|
||||

|
||||
|
||||
### Perceptually Organized Color Spaces
|
||||
|
||||
|
@ -481,7 +482,7 @@ b轴上蓝和黄在两端
|
|||
|
||||
LAB空间认为任何一个轴上两端都是互补色
|
||||
|
||||

|
||||

|
||||
|
||||
#### 互补色理论
|
||||
|
||||
|
@ -497,11 +498,11 @@ LAB空间认为任何一个轴上两端都是互补色
|
|||
|
||||
如下图A,你会觉得B比A亮
|
||||
|
||||

|
||||

|
||||
|
||||
挡住A、B以外区域,会发现A和B颜色相同
|
||||
|
||||

|
||||

|
||||
|
||||
## 减色系统(CMYK)
|
||||
|
||||
|
@ -513,10 +514,10 @@ Cyan(蓝绿色)、Magenta(品红色)、Yellow(黄色)、Key(黑色
|
|||
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
C、M、Y可以通过混合得到各种不同的颜色,所以在打印上,可以通过混合各种各样不同墨水调出各种各样不同的颜色
|
||||
|
||||

|
||||

|
||||
|
||||
印刷上要考虑成本,正常情况下打印东西以黑色居多,而且黑色的墨水好制作,便宜,C、M、Y这三种带颜色的墨水不容易制作,那用这三种颜色混合得到黑色,成本就比直接用黑色高,因而需要黑色墨水
|
||||
|
|
|
@ -20,13 +20,13 @@ date: 2022-07-20T17:56:31+08:00
|
|||
Bounding Box(BB)的任意一侧沿着X,Y,或Z轴
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
#### 射线与轴对称包围盒相交(Ray Intersection with Axis-Aligned Box)
|
||||
|
||||
以下2D例子在3D场景中同样适用
|
||||
|
||||

|
||||

|
||||
|
||||
如上图所示,我们分别计算射线与包围盒两个边界的相交时间点,求取到$t_{min}/t_{max}$的交集
|
||||
|
||||
|
@ -44,7 +44,7 @@ Bounding Box(BB)的任意一侧沿着X,Y,或Z轴
|
|||
|
||||
选择轴对称的原因:计算量少
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
### 统一空间分区\网格(Uniform Spatial Partitions/Grids)
|
||||
|
@ -53,22 +53,22 @@ Bounding Box(BB)的任意一侧沿着X,Y,或Z轴
|
|||
|
||||
找到包围盒
|
||||
|
||||

|
||||

|
||||
|
||||
创建网格
|
||||
|
||||

|
||||

|
||||
|
||||
在与相应物体重叠的网格中存储对应的物体
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
根据射线穿过的网格顺序来遍历网格
|
||||
|
||||
对于每一个被遍历的网格,需要检测其中存储的物体是否与射线相交
|
||||
|
||||

|
||||

|
||||
|
||||
------------------------
|
||||
|
||||
|
@ -76,11 +76,11 @@ Bounding Box(BB)的任意一侧沿着X,Y,或Z轴
|
|||
|
||||
网格仅有一个时无法起到加速算法的效果
|
||||
|
||||

|
||||

|
||||
|
||||
网格过多时,因需要遍历过多无关网格而低效
|
||||
|
||||

|
||||

|
||||
|
||||
最佳的网格数量为:
|
||||
$$cells = C * objs$$
|
||||
|
@ -98,7 +98,8 @@ $$C \approx 27 \\ \\ in \\ \\ 3D$$
|
|||
#### 八叉树(Oct-Tree)
|
||||
|
||||
将整个场景包围在盒中,再将包围盒切分为8份(三维情况下,每面四块),下图展示的是二维下的情况,将整个盒子分为四块,再将每块都分成四块,直到每个格子中无物体或物体数量足够少
|
||||

|
||||
|
||||

|
||||
|
||||
通过这种方式将空间切成了分块并组织成了树状结构(一维下为二叉树,二维下为四叉树,三维下为八叉树,$n维下为2^n叉树$)
|
||||
|
||||
|
@ -108,7 +109,7 @@ $$C \approx 27 \\ \\ in \\ \\ 3D$$
|
|||
|
||||
该方法是对空间进行二分的方法,即每次都选择一个方向将节点划分开,与KD-Tree不同在于其并非横平竖直地划分,且计算难度随维度升高而增加
|
||||
|
||||

|
||||

|
||||
|
||||
二维下用一条线划分,三维下用一个平面划分,四维用‘超平面’划分,依次类推
|
||||
|
||||
|
@ -118,7 +119,7 @@ $$C \approx 27 \\ \\ in \\ \\ 3D$$
|
|||
|
||||
与八叉树几乎相同,但每找到一个格子后总是沿着某一个轴分开使整个空间被划分成类似二叉树的结构,如下图所示,划分是水平竖直交替进行的
|
||||
|
||||

|
||||

|
||||
|
||||
三维下,划分轴在X,Y,Z轴间轮替就可以在保持二叉树性质的情况下进行划分
|
||||
|
||||
|
@ -126,7 +127,7 @@ $$C \approx 27 \\ \\ in \\ \\ 3D$$
|
|||
|
||||
将整个场景包围在盒子A中,先沿着竖直方向划分,再将这两个部分横向划分开,之后一直交替向下划分,形成一棵树
|
||||
|
||||

|
||||

|
||||
|
||||
如果一个空间已经被划分成了KD-Tree结构,则中间节点(A,B,C,D)只需要记录被划分成的各自格子,叶子节点则存储和格子相交的几何形体
|
||||
|
||||
|
@ -146,33 +147,31 @@ $$C \approx 27 \\ \\ in \\ \\ 3D$$
|
|||
|
||||
假设有一根光线,从左上到右下,穿过一个包围盒A
|
||||
|
||||

|
||||

|
||||
|
||||
第一次判断是否与A存在交点,光线有交点则可能与左右子节点产生交集
|
||||
|
||||

|
||||

|
||||
|
||||
检测是否与子节点存在交点,发现与左边蓝色区域存在交点,按图中划分,1不再划分的情况下则认为光线与该叶子节点(蓝色区域内)所有物体求交
|
||||
|
||||

|
||||

|
||||
|
||||
检查右子节点,发现与右边区域也有交点,则光线可能和B的子节点(2和C)相交
|
||||
|
||||

|
||||

|
||||
|
||||
再判定光线与2和C区域相交情况,发现与2存在交点,此处假设2不再细分,2即为一个叶子节点,光线需要和2中所有物体求交
|
||||
|
||||

|
||||

|
||||
|
||||
发现与C区域存在交点,那便要判断光线和C的子节点(D、3)是否有交点,发现和3存在交点,且3为叶子节点,则光线要和3中的所有物体求交,D同理,一直求到叶子节点(区域5与光线无交点,无需求交)
|
||||
|
||||

|
||||

|
||||
|
||||
在C中光线和所有物体求交就找到了交点
|
||||
|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
##### KD-Tree的问题
|
||||
|
@ -195,18 +194,17 @@ BVH无论在实时的光线追踪还是离线的结构都解决了KD-Tree的问
|
|||
|
||||
同样将场景用一个盒子包围,与KD-Tree不同在于后者将物体划分为2个部分
|
||||
|
||||

|
||||

|
||||
|
||||
将上图方框中所有三角形分割成两个部分再重新求它们的包围盒
|
||||
|
||||

|
||||

|
||||
|
||||
同样再继续划分,将上图蓝色节点划分为两堆三角形再重新求它们的包围盒,对应下图蓝绿节点
|
||||
|
||||

|
||||

|
||||
|
||||
划分终止条件自定义:如一个节点中只有5个三角形存在
|
||||

|
||||
|
||||
总结:
|
||||
1. 找到一个包围盒
|
||||
|
@ -271,7 +269,7 @@ BVH无论在实时的光线追踪还是离线的结构都解决了KD-Tree的问
|
|||
1. 节点本身为叶子节点,此时光线与叶子节点里所有物体求交,放回最近交点
|
||||
2. 节点本身不是叶子节点,此时光线可能与该节点的两个子节点都有交点,递归地求出它们的交点再返回最近的点
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
##### 空间/物体划分区别
|
||||
|
@ -280,13 +278,13 @@ BVH无论在实时的光线追踪还是离线的结构都解决了KD-Tree的问
|
|||
1. 划分空间,任何一个节点在空间和时间之间不会有交集
|
||||
2. 有些物体存在横跨边界的可能
|
||||
|
||||

|
||||

|
||||
|
||||
* 物体划分(Object partition)
|
||||
1. 划分物体,物体分为两部分后分别计算包围盒
|
||||
2. 包围盒存在交集的可能,但不产生影响且无需计算包围盒相交方式
|
||||
|
||||

|
||||

|
||||
|
||||
-----------------------------------------
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ $$f(x,y,z) = (2 - \sqrt{x^2 + y^2})^2 + z^2 - 1$$
|
|||
|
||||
对应的几何形状如下图
|
||||
|
||||

|
||||
/eg_sample_can_be_hard.webp)
|
||||
|
||||
###### 易于判断内外关系
|
||||
|
||||
|
@ -57,7 +57,7 @@ $$f(x,y,z) = (2 - \sqrt{x^2 + y^2})^2 + z^2 - 1$$
|
|||
|
||||
$$f(x,y,z) = x^2 + y^2 + z^2 - 1$$
|
||||
|
||||

|
||||
/eg_in_outside_test_easy.webp)
|
||||
|
||||
对于点$(\frac{3}{4},\frac{1}{2},\frac{1}{4})$ 若要判定其是否在该几何体内部则只需计算$$f(x,y,z) = - \frac{1}{8} < 0$$ 即可判定其位于几何体内部
|
||||
|
||||
|
@ -67,14 +67,14 @@ $$f(x,y,z) = x^2 + y^2 + z^2 - 1$$
|
|||
|
||||
表面是x,y,z中多项式的零集
|
||||
|
||||

|
||||
/Algebraic_Surfaces.webp)
|
||||
|
||||
|
||||
###### 构造实体几何(Constructive Solid Geometry)
|
||||
|
||||
通过布尔计算组合构造隐式几何
|
||||
|
||||

|
||||
/Constructive_Solid_Geometry.webp)
|
||||
|
||||
|
||||
###### 距离函数(Distance Functions)
|
||||
|
@ -83,7 +83,7 @@ $$f(x,y,z) = x^2 + y^2 + z^2 - 1$$
|
|||
|
||||
使用距离函数将两个曲面混合在一起
|
||||
|
||||

|
||||
/eg_Distance_Functions.webp)
|
||||
|
||||
|
||||
###### 水平集(Level Set Method)
|
||||
|
@ -92,7 +92,7 @@ $$f(x,y,z) = x^2 + y^2 + z^2 - 1$$
|
|||
|
||||
解决方案:存储值相似的函数网格
|
||||
|
||||

|
||||
/Level_Set_grid.webp)
|
||||
|
||||
插值为零的值的位置即为表面
|
||||
|
||||
|
@ -105,7 +105,7 @@ $$f(x,y,z) = x^2 + y^2 + z^2 - 1$$
|
|||
|
||||
该几何形状表现为所有尺度的细节都存在自相似性(一种描述自然现象的说法),往往难以控制形状
|
||||
|
||||

|
||||
/eg_Factals.webp)
|
||||
|
||||
|
||||
---------------------------------------
|
||||
|
@ -126,7 +126,7 @@ $$f(x,y,z) = x^2 + y^2 + z^2 - 1$$
|
|||
|
||||
$$f:R^2 \rightarrow R^3;(u,v) \rightarrow (x,y,z)$$
|
||||
|
||||

|
||||
/eg_explict_mapping.webp)
|
||||
|
||||
|
||||
###### 易于采样
|
||||
|
@ -137,7 +137,7 @@ $$f:R^2 \rightarrow R^3;(u,v) \rightarrow (x,y,z)$$
|
|||
|
||||
若要判定点$f(u,v)$是否位于表面,则只需将$(u,v)$的值相加
|
||||
|
||||

|
||||
/eg_sample_can_be_hard.webp)
|
||||
|
||||
|
||||
###### 难以判断内外关系
|
||||
|
@ -157,7 +157,7 @@ $$f:R^2 \rightarrow R^3;(u,v) \rightarrow (x,y,z)$$
|
|||
4. 通常转换为多边形网格
|
||||
5. 难以用于采样不足的区域
|
||||
|
||||

|
||||
/eg_point_cloud.webp)
|
||||
|
||||
|
||||
###### 多边形网格(Polygon Mesh)
|
||||
|
@ -168,7 +168,7 @@ $$f:R^2 \rightarrow R^3;(u,v) \rightarrow (x,y,z)$$
|
|||
4. 图形中最常见的表示形式
|
||||
|
||||
|
||||

|
||||
/eg_polygon_mesh.webp)
|
||||
|
||||
|
||||
|
||||
|
@ -176,7 +176,7 @@ $$f:R^2 \rightarrow R^3;(u,v) \rightarrow (x,y,z)$$
|
|||
|
||||
### 表现形式应根据目标几何模型选择最合适的类型,没有最好的表现形式
|
||||
|
||||

|
||||
/David_Baraff.webp)
|
||||
|
||||
------------------------------
|
||||
|
||||
|
@ -187,51 +187,51 @@ $$f:R^2 \rightarrow R^3;(u,v) \rightarrow (x,y,z)$$
|
|||
贝塞尔曲线完全由其控制点决定其形状,$n$个控制点对应着$n-1$阶的贝塞尔曲线,并且可以通过递归的方式来绘制.
|
||||
|
||||
|
||||

|
||||
/Defining_Bezier_Curve_Tangents.webp)
|
||||
|
||||
|
||||
#### de Casteljau Algorithm(图形)
|
||||
|
||||
假设存在三个点(quadratic Bezier)
|
||||
|
||||

|
||||
/de_Casteljau_Algorithm_step1.webp)
|
||||
|
||||
|
||||
通过线性插值的方式插入一个点
|
||||
|
||||

|
||||
/de_Casteljau_Algorithm_step2.webp)
|
||||
|
||||
|
||||
在另一边也通过同样方式插入一个点
|
||||
|
||||

|
||||
/de_Casteljau_Algorithm_step3.webp)
|
||||
|
||||
递归重复
|
||||
|
||||

|
||||
/de_Casteljau_Algorithm_step4.webp)
|
||||
|
||||
对于在$[0,1]$区间的每个t点都使用相同算法进行计算
|
||||
|
||||

|
||||
/de_Casteljau_Algorithm_step5.webp)
|
||||
|
||||
构造一个三次方贝塞尔曲线需要总共四个输入,都递归使用线性插值
|
||||
|
||||

|
||||
/de_Casteljau_Algorithm_step6.webp)
|
||||
|
||||
可视化算法流程
|
||||
|
||||

|
||||
/Visualizing_de_Casteljau.webp)
|
||||
|
||||
|
||||
#### de Casteljau Algorithm(数学公式)
|
||||
|
||||
de Casteljau 算法给出各点间金字塔型的变量关系
|
||||
|
||||

|
||||
/de_Casteljau_pyramid_of.webp)
|
||||
|
||||
##### 推导流程
|
||||
|
||||

|
||||
/de_Casteljau_Algorithm_step5.webp)
|
||||
|
||||
$$b_0^1(t) = (1 - t)b_0 + tb_1$$
|
||||
$$b_1^1(t) = (1 - t)b_1 + tb_2$$
|
||||
|
@ -264,7 +264,7 @@ $$b^n(t) = b_0(1 - t)^3 + b_1 3t(1 - t)^2 + b_2 3t^2(1 - t) + b_3 t^3$$
|
|||
|
||||
贝塞尔基本函数
|
||||
|
||||

|
||||
/Cubic_Bezier_Basis_Functions.webp)
|
||||
|
||||
插值端点:$b(0) = b_0;b(1) = b_3$
|
||||
|
||||
|
@ -283,7 +283,7 @@ $$b^n(t) = b_0(1 - t)^3 + b_1 3t(1 - t)^2 + b_2 3t^2(1 - t) + b_3 t^3$$
|
|||
|
||||
样例:
|
||||
|
||||

|
||||
/Demon_Piecewise_Cubic_Bezier_Curve.webp)
|
||||
|
||||
#### 组合计算
|
||||
|
||||
|
@ -292,15 +292,15 @@ $$b^n(t) = b_0(1 - t)^3 + b_1 3t(1 - t)^2 + b_2 3t^2(1 - t) + b_3 t^3$$
|
|||
$$a:[k,k+1] \rightarrow IR^N$$
|
||||
$$b:[k+1,k+2] \rightarrow IR^N$$
|
||||
|
||||

|
||||
/Continuity_Piecewise_Bezier_step1.webp)
|
||||
|
||||
$c^0$处的连续性:$a_n = b_0$
|
||||
|
||||

|
||||
/Continuity_Piecewise_Bezier_step2.webp)
|
||||
|
||||
$c^1$处的连续性:$a_n = b_0 = \frac{1}{2}(a_{n-1} + b_1)$
|
||||
|
||||

|
||||
/Continuity_Piecewise_Bezier_step3.webp)
|
||||
|
||||
------------------------------------
|
||||
|
||||
|
@ -312,7 +312,7 @@ $c^1$处的连续性:$a_n = b_0 = \frac{1}{2}(a_{n-1} + b_1)$
|
|||
|
||||
输出:由$[0,1]^2$ 参数化的2D平面
|
||||
|
||||

|
||||
/bezier_surface_eg.webp)
|
||||
|
||||
#### 计算方法
|
||||
|
||||
|
@ -321,11 +321,11 @@ $c^1$处的连续性:$a_n = b_0 = \frac{1}{2}(a_{n-1} + b_1)$
|
|||
1. 使用 de Casteljau 算法来计算四条贝塞尔曲线上各自的U,这将会为"移动"贝塞尔曲线提供4个有效的控制点
|
||||
2. 使用一阶 de Casteljau 算法来计算"移动"曲线上的点V
|
||||
|
||||

|
||||
/evaluation_of_bezier_surface.webp)
|
||||
|
||||
可视化计算流程:
|
||||
|
||||

|
||||
/visual_evaluation_of_bezier_surface.webp)
|
||||
|
||||
|
||||
|
||||
|
@ -335,7 +335,7 @@ $c^1$处的连续性:$a_n = b_0 = \frac{1}{2}(a_{n-1} + b_1)$
|
|||
|
||||
目的:提高分辨率
|
||||
|
||||

|
||||
/eg_mesh_subdivision.webp)
|
||||
|
||||
通常做法:
|
||||
|
||||
|
@ -350,20 +350,20 @@ $c^1$处的连续性:$a_n = b_0 = \frac{1}{2}(a_{n-1} + b_1)$
|
|||
|
||||
新顶点:
|
||||
|
||||

|
||||
/loop_subdivision_new.webp)
|
||||
|
||||
白点即为新顶点,其位置为周围四个顶点的权重之和
|
||||
|
||||
旧顶点:
|
||||
|
||||

|
||||
/loop_subdivision_old.webp)
|
||||
|
||||
白色旧顶点也是自身及邻接顶点的权重之和,权重的设置与旧顶点度数关联
|
||||
|
||||
|
||||
##### Catmull-Clark Subdivision
|
||||
|
||||

|
||||
/catmull-clark_subdivision1.webp)
|
||||
|
||||
定义:
|
||||
|
||||
|
@ -373,7 +373,7 @@ $c^1$处的连续性:$a_n = b_0 = \frac{1}{2}(a_{n-1} + b_1)$
|
|||
|
||||
第一次细分后结果:
|
||||
|
||||

|
||||
/catmull-clark_subdivision2.webp)
|
||||
|
||||
|
||||
特点:
|
||||
|
@ -384,28 +384,28 @@ $c^1$处的连续性:$a_n = b_0 = \frac{1}{2}(a_{n-1} + b_1)$
|
|||
|
||||
Catmull-Clark 顶点更新规则
|
||||
|
||||

|
||||
/Catmull-Clark_Vertex_Update_Rules.webp)
|
||||
|
||||
##### 收敛性:整体形状和折痕
|
||||
|
||||

|
||||
/convergence_of_loop_and_catmull.webp)
|
||||
|
||||
#### 曲面简化(Mesh Simplification)
|
||||
|
||||
目的:降低分辨率的同时尽量保持形状/外观
|
||||
|
||||

|
||||
/eg_mesh_simplification.webp)
|
||||
|
||||
##### 边坍缩
|
||||
|
||||
边坍缩是曲面简化的常用方法,如上图所示将一条边的两个顶点合成为一个顶点,出于尽量保持形状的目的,需要正确选择不影响或影响最小的边进行坍缩,由此引入二次误差度量(Quadric Error Metrics)
|
||||
|
||||

|
||||
/Collapsing_An_Edge.webp)
|
||||
|
||||
|
||||
###### 二次误差度量(Quadric Error Metrics)
|
||||
|
||||

|
||||
/Quadric_Error_Metrics.webp)
|
||||
|
||||
坍缩之后蓝色新顶点所在位置与原来各个平面的垂直距离之和,如此误差最小则整个模型样貌修改一定程度也会较小
|
||||
|
||||
|
@ -418,7 +418,7 @@ Catmull-Clark 顶点更新规则
|
|||
|
||||
符合贪心算法标准,无法获得最优解,但效果依旧合适
|
||||
|
||||

|
||||
/eg_Quadric_Error_Mesh_Simplification.webp)
|
||||
|
||||
-------------------------------------------
|
||||
|
||||
|
@ -436,7 +436,7 @@ Shadow Mapping是一种基于图像的算法
|
|||
Pass1:render from light
|
||||
1. 获得从光源视角得到的深度图像
|
||||
|
||||

|
||||
/render_from_light.webp)
|
||||
|
||||
Pass2:render from eye
|
||||
1. 从观看视角(相机视角)获得带有深度的标准图像
|
||||
|
@ -444,7 +444,7 @@ Pass2:render from eye
|
|||
1. 光源和观看视角的下的深度相同时为可见
|
||||
2. 光源和观看视角下的深度不相同则为被阻挡
|
||||
|
||||

|
||||
/project_to_light.webp)
|
||||
|
||||
|
||||
----------------------------------------------
|
||||
|
|
|
@ -24,7 +24,7 @@ date: 2022-08-01T16:38:54+08:00
|
|||
|
||||
* 远古人类壁画
|
||||
|
||||

|
||||

|
||||
|
||||
* 圆盘转动
|
||||
|
||||
|
@ -32,14 +32,14 @@ date: 2022-08-01T16:38:54+08:00
|
|||
|
||||
最早起,有类似圆盘的物体,可固定在某处,可以旋转
|
||||
|
||||

|
||||

|
||||
|
||||
* 第一部电影
|
||||
|
||||
早期不用于娱乐,是一种科学研究的设备,如下图拍摄奔跑中的马可用于研究马匹运动时四肢动态
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
* 第一部与电影时长相当的动画
|
||||
|
||||
|
@ -47,28 +47,28 @@ date: 2022-08-01T16:38:54+08:00
|
|||
|
||||
每秒播放24帧,制作耗时极长
|
||||
|
||||

|
||||

|
||||
|
||||
* 第一部计算机生成的动画
|
||||
|
||||
可追溯至1963年
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
* 早期计算机动画
|
||||
|
||||
如下图为人脸的三维结构网格,已经可以做到人物面部表情
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
* 电子(计算机生成)恐龙(Digital Dinosaurs)
|
||||
|
||||
如下图,侏罗纪公园,真正将计算机生成的恐龙放入电影中
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
* 第一部计算机生成的电影时长动画
|
||||
|
||||
|
@ -78,20 +78,21 @@ date: 2022-08-01T16:38:54+08:00
|
|||
|
||||
采用光栅化的方式生成阴影效果
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
* 十年前的计算机动画
|
||||
|
||||
依旧缺少一些细节
|
||||
|
||||

|
||||

|
||||
|
||||
* 2019-冰雪奇缘2
|
||||
|
||||
充满各种细节
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
## 关键帧动画
|
||||
|
||||
|
@ -101,7 +102,7 @@ date: 2022-08-01T16:38:54+08:00
|
|||
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
### 关键帧插值
|
||||
|
||||
|
@ -114,7 +115,7 @@ date: 2022-08-01T16:38:54+08:00
|
|||
最简单的是线性插值,但下图为非线性插值
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
线性插值:
|
||||
|
||||
|
@ -123,7 +124,7 @@ date: 2022-08-01T16:38:54+08:00
|
|||
有时需要更好的连续性,就需要用到曲线和样条,这说明几何和动画之间时存在联系的
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
-------------
|
||||
|
||||
|
@ -144,21 +145,21 @@ a:物体的加速度
|
|||
1. 小球在重力影响下抛出时会形成抛物线
|
||||
2. 衣服可认为由网格形成,任何一个顶点有一定质量,受重力影响,也受其他点作用的力的影响
|
||||
|
||||

|
||||

|
||||
|
||||
#### 案例
|
||||
|
||||
* 布料模拟
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
* 流体仿真
|
||||
|
||||
1. 模拟水的运动和水滴的形成位置
|
||||
2. 模拟了位置和形状后进行渲染得到样式
|
||||
|
||||

|
||||

|
||||
|
||||
### 质点弹簧系统
|
||||
|
||||
|
@ -168,25 +169,25 @@ a:物体的加速度
|
|||
|
||||
将一根绳子模拟成很多小的弹簧,允许其在重力作用下来回摆动
|
||||
|
||||

|
||||

|
||||
|
||||
* 头发
|
||||
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
* 布料
|
||||
|
||||
布料是由网格描述的,可以使用各种不同的质点弹簧系统描述,还可使用一个点进行拖拽
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
建模足够好的情况下,模拟与仿真可以做到与现实几乎一致
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
上图受限于PDF,建议结合games101第21课
|
||||
|
||||
|
@ -196,7 +197,7 @@ a:物体的加速度
|
|||
|
||||
* 最基础的单元:一个弹簧两侧连着两个质点
|
||||
|
||||

|
||||

|
||||
|
||||
* 理想的弹簧(无长度,产生的力与被拉长的长度成比例)
|
||||
|
||||
|
@ -238,7 +239,7 @@ $$\ddot{x} = a$$
|
|||
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
问题:
|
||||
|
||||
|
@ -252,7 +253,7 @@ $$\ddot{x} = a$$
|
|||
|
||||
大小:下图红框部分,a和b之间的相对速度投影在ab方向上的速度
|
||||
|
||||

|
||||

|
||||
|
||||
#### 弹簧结构
|
||||
|
||||
|
@ -261,20 +262,20 @@ $$\ddot{x} = a$$
|
|||
|
||||
如下图,可以每2根共用一个质量表示一张平面,也可以在三维空间中进行连接
|
||||
|
||||

|
||||

|
||||
|
||||
##### 使用各种弹簧模拟一块布
|
||||
|
||||
1. 问题1:切变会受影响
|
||||
2. 问题2:存在一种力让整个形状变得不是一个平面
|
||||
|
||||

|
||||

|
||||
|
||||
* 加入斜的对角线解决切边
|
||||
|
||||
在以上的形状中加入斜的对角线,发生切变时,新加的蓝线会被压缩,那弹簧就会向外抵抗它
|
||||
|
||||

|
||||

|
||||
|
||||
存在结构不对称问题,无法使模拟的布在任何一个方向拉它,它的行为保持一致
|
||||
|
||||
|
@ -282,7 +283,7 @@ $$\ddot{x} = a$$
|
|||
|
||||
不能抵抗非平面的弯曲(沿着竖的或横的线折叠)
|
||||
|
||||

|
||||

|
||||
|
||||
* 加上跳过相邻质点的连接线
|
||||
|
||||
|
@ -290,7 +291,7 @@ $$\ddot{x} = a$$
|
|||
|
||||
红线的连接是非常弱的,蓝线非常强
|
||||
|
||||

|
||||

|
||||
|
||||
* 例子
|
||||
|
||||
|
@ -299,14 +300,15 @@ $$\ddot{x} = a$$
|
|||
简化的表示,未表示纤维、股和线等之间的力的关系
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
* 拓展
|
||||
|
||||
除了质点弹簧系统,还有其他的方法,比如有限元方法(FEM (Finite Element Method)),这个方法被广泛应用于车辆碰撞,能够表现力之间的传导作用
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
### 粒子系统
|
||||
|
||||
用于描述一些很小很小移动的东西
|
||||
|
@ -318,7 +320,8 @@ $$\ddot{x} = a$$
|
|||
粒子越多模拟得越精细,但是越慢;越少,计算速度越快,但效果差一些
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
#### 存在问题
|
||||
|
||||
1. 粒子系统可以模拟流体,这样可能需要很多粒子
|
||||
|
@ -353,17 +356,17 @@ $$F_g = G\frac{m_1m_2}{d^2}$$
|
|||
|
||||
$$G = 6.67428 \times 10^{-11}Nm^2kg^{-2}$$
|
||||
|
||||

|
||||

|
||||
|
||||
* 银河模拟
|
||||
|
||||

|
||||

|
||||
|
||||
* 基于粒子的流体模拟
|
||||
|
||||
模拟的是粒子,渲染的是像玻璃、是否带白沫
|
||||
|
||||

|
||||

|
||||
|
||||
#### 粒子间相互作用
|
||||
|
||||
|
@ -379,16 +382,16 @@ $$G = 6.67428 \times 10^{-11}Nm^2kg^{-2}$$
|
|||
|
||||
有了以上的属性就可以通过粒子的方法解出来
|
||||
|
||||

|
||||

|
||||
|
||||
* 分子结构
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
* 人群
|
||||
|
||||

|
||||

|
||||
|
||||
## 运动学
|
||||
|
||||
|
@ -400,12 +403,13 @@ $$G = 6.67428 \times 10^{-11}Nm^2kg^{-2}$$
|
|||
|
||||
用于描述和人骨骼连接拓扑结构类似的结构,可定义不同的关节
|
||||
|
||||

|
||||

|
||||
|
||||
* Pin
|
||||
|
||||
钉子钉住后只能在钉住的平面内往一个方向旋转
|
||||
|
||||

|
||||

|
||||
|
||||
* Ball
|
||||
|
||||
|
@ -417,18 +421,18 @@ $$G = 6.67428 \times 10^{-11}Nm^2kg^{-2}$$
|
|||
|
||||
可以拉长,也就是可以有一些移动
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
#### 一个简单的关节
|
||||
|
||||
如下图,只能在平面内发生旋转,类似于肩和肘的旋转,假设第一段旋转$\theta_1$度,第二段旋转$\theta_2$度,如何确定尖端位置
|
||||
|
||||

|
||||

|
||||
|
||||
先算出上方黑点的位置,因为$\theta_2$是在$\theta_1$的基础上旋转的,可以用$\theta_1$加$\theta_2$计算
|
||||
|
||||

|
||||

|
||||
|
||||
因此,正向运动学需要定义好连接方式,定义好它们之间的各种位置,就可以找到各种点的位置
|
||||
|
||||
|
@ -436,7 +440,7 @@ $$G = 6.67428 \times 10^{-11}Nm^2kg^{-2}$$
|
|||
|
||||
人类行走动作模拟
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
|
@ -458,11 +462,11 @@ $$G = 6.67428 \times 10^{-11}Nm^2kg^{-2}$$
|
|||
|
||||
逆运动学可以手里捏着尖端到处移动,它会自动的调整它的关节的位置,使得尖端就在你要的位置上
|
||||
|
||||

|
||||

|
||||
|
||||
如下图中,给出固定点P,它就会给出$\theta_1$和$\theta_2$,解出这两个角度的过程比较复杂
|
||||
|
||||

|
||||

|
||||
|
||||
#### 问题
|
||||
|
||||
|
@ -471,16 +475,17 @@ $$G = 6.67428 \times 10^{-11}Nm^2kg^{-2}$$
|
|||
如图,尖端位置确定,但存在两个解
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
* 存在无解的情况
|
||||
|
||||
最上面的关节点只可能出现在下图的虚线上,尖端通过旋转可以在一个圆上,从而尖端只有可能在外层的圈和内层的圈之间,其他位置到不了
|
||||
|
||||

|
||||

|
||||
|
||||
#### 问题优化
|
||||
|
||||
一般N维IK问题的数值求解
|
||||
|
@ -498,7 +503,7 @@ $$G = 6.67428 \times 10^{-11}Nm^2kg^{-2}$$
|
|||
|
||||
例子:
|
||||
|
||||

|
||||

|
||||
|
||||
### 形状混合
|
||||
|
||||
|
@ -507,7 +512,8 @@ $$G = 6.67428 \times 10^{-11}Nm^2kg^{-2}$$
|
|||
实际为混合控制点及其影响区域
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
### 动作捕捉
|
||||
|
||||
|
@ -515,7 +521,7 @@ $$G = 6.67428 \times 10^{-11}Nm^2kg^{-2}$$
|
|||
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
#### 优缺点
|
||||
|
||||
|
@ -531,7 +537,7 @@ $$G = 6.67428 \times 10^{-11}Nm^2kg^{-2}$$
|
|||
|
||||
捕捉出来的动作可能不符合艺术家的需求,需要调整(比如真人去演动画人物,动画人物的表情是很夸张的;或者有时捕捉不到好的数据,比如捕捉条件有限制,人在正面的时候看到的控制点,背面也有但正面看不到,那就要在背后加一个摄像机,这就需要成本,而且正常需要更多的摄像机;人物动作的时候还会遮挡)
|
||||
|
||||

|
||||

|
||||
|
||||
#### 其他捕捉方法
|
||||
|
||||
|
@ -539,21 +545,21 @@ $$G = 6.67428 \times 10^{-11}Nm^2kg^{-2}$$
|
|||
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
### 光学动作捕捉
|
||||
|
||||
应用最广泛的还是光学的捕捉方法,贴一些Maker(贴片或小球)贴在人身上,然后用很多很复杂的摄像机,将这些点的位置非常准确的测出来
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
#### 获取的动作数据
|
||||
|
||||
下图曲线就为一个控制点不同时间在三维空间中的位置
|
||||
|
||||

|
||||

|
||||
|
||||
#### 面部动画的问题
|
||||
|
||||
|
@ -562,21 +568,21 @@ $$G = 6.67428 \times 10^{-11}Nm^2kg^{-2}$$
|
|||
恐怖谷效应:人们会对生成的过于真实的人类感到害怕
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
#### 面部动作捕捉
|
||||
|
||||
阿凡达这部电影具有里程碑式的效应,就是因为使用了面部动作捕捉
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
#### 动画/电影的生成过程
|
||||
|
||||
分别为Pre-Production、Production、Post-Production三个部分,具体工作内容和职责可由下图所示
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
-----------------------------------
|
||||
|
||||
|
@ -589,7 +595,7 @@ $$G = 6.67428 \times 10^{-11}Nm^2kg^{-2}$$
|
|||
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
此时在任何一个位置x和时间t,都有一个速度
|
||||
|
||||
|
@ -607,7 +613,7 @@ $$\frac{dx}{dt} = \dot{x} = v(x,t)$$
|
|||
|
||||
已知速度和起始位置,求任意时刻位置
|
||||
|
||||

|
||||

|
||||
|
||||
将时间细分为很多的小块,不断计算$t+\Delta t$的位置
|
||||
|
||||
|
@ -625,7 +631,7 @@ $$\dot{x}^{t+\Delta t} = \dot{x}^t + \Delta t \ddot{x}^t$$
|
|||
|
||||
$\Delta t$分得越细,模拟就会越精确,如果越大,和实际的路线偏离得越多
|
||||
|
||||

|
||||

|
||||
|
||||
* 不稳定性
|
||||
|
||||
|
@ -636,7 +642,7 @@ $\Delta t$分得越细,模拟就会越精确,如果越大,和实际的路
|
|||
事实上,粒子在一个螺旋形的速度场,一定会按照严格的圆周运动
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
如下图速度场中,粒子运动轨迹与实际按一根曲线慢慢走到水平存在极大差别
|
||||
|
||||
|
@ -656,7 +662,7 @@ $\Delta t$分得越细,模拟就会越精确,如果越大,和实际的路
|
|||
|
||||
如下图对应链接的视频,在绝地求生中,车辆撞上摩托后会出现奇怪的翻滚现象,这在许多存在物理引擎的游戏中普遍存在
|
||||
|
||||

|
||||

|
||||
|
||||
#### 解决办法
|
||||
|
||||
|
@ -668,7 +674,7 @@ $\Delta t$分得越细,模拟就会越精确,如果越大,和实际的路
|
|||
2. 取原始点和a点之间的中点b,考虑它所在的速度
|
||||
3. 再回到原始的出发点,应用b点的速度来重新再算一遍欧拉方法,到达c点
|
||||
|
||||

|
||||

|
||||
|
||||
$$x_{mid} = x(t) + \Delta t/2 \cdot v(x(t),t)$$
|
||||
|
||||
|
@ -692,7 +698,7 @@ $$\dot{x}^{t+\Delta t} = x^t +\Delta t \dot{x}^t + \frac{(\Delta t)^2}{2}\ddot{x
|
|||
|
||||
将时间减半,得到2个$\Delta t$,计算2次,从原始点先用$\frac{\Delta t}{2}$ 算到一个位置,再使用$\frac{\Delta t}{2}$再算一次,到达$\frac{x_T}{2}$
|
||||
|
||||

|
||||

|
||||
|
||||
如果$x_T和\frac{x_T}{2}$这2个点差得挺远,这就意味着将$\Delta t$分成2部分分别考虑这样做会更准确,那就应该考虑$\frac{\Delta t}{2}$;如果差得不远,就没必要再分下去
|
||||
|
||||
|
@ -726,7 +732,7 @@ $$\dot{x}^{t+\Delta t} = \dot{x}^t+\Delta t \ddot{x}^{t+\Delta t}$$
|
|||
|
||||
下面的4个值是不同位置和不同时间在速度场中的值
|
||||
|
||||

|
||||

|
||||
|
||||
#### 非物理方法
|
||||
|
||||
|
@ -746,7 +752,7 @@ $$\dot{x}^{t+\Delta t} = \dot{x}^t+\Delta t \ddot{x}^{t+\Delta t}$$
|
|||
|
||||
如下图,一个刚体的位置、朝向、速度、角速度分别对时间求导后得到速度、角速度、加速度、角加速度
|
||||
|
||||

|
||||

|
||||
|
||||
## 流体模拟
|
||||
|
||||
|
@ -759,7 +765,7 @@ $$\dot{x}^{t+\Delta t} = \dot{x}^t+\Delta t \ddot{x}^{t+\Delta t}$$
|
|||
3. 给定任何一个时刻这些小球它们分布,都可以知道任何一个地方的密度。如果有任何一个地方的密度变得和水一开始平静的时候的密度不一样,那就需要通过移动小球的位置把这个密度修正
|
||||
4. 需要知道任何一个点它的密度对所有的小球位置的梯度(导数)
|
||||
|
||||

|
||||

|
||||
|
||||
### 欧拉方法和拉格朗日方法
|
||||
|
||||
|
@ -771,7 +777,7 @@ $$\dot{x}^{t+\Delta t} = \dot{x}^t+\Delta t \ddot{x}^{t+\Delta t}$$
|
|||
|
||||
如下图,如果模拟一群小鸟的移动,就只关注某一只
|
||||
|
||||

|
||||

|
||||
|
||||
* 欧拉方法俗称网格法
|
||||
|
||||
|
@ -779,7 +785,7 @@ $$\dot{x}^{t+\Delta t} = \dot{x}^t+\Delta t \ddot{x}^{t+\Delta t}$$
|
|||
|
||||
如下划分多个网格就知道时间t为黑色的鸟,t-1应显示蓝色的鸟
|
||||
|
||||

|
||||

|
||||
|
||||
### 物质点方法
|
||||
|
||||
|
@ -789,8 +795,7 @@ $$\dot{x}^{t+\Delta t} = \dot{x}^t+\Delta t \ddot{x}^{t+\Delta t}$$
|
|||
2. 融化的过程在网格中做
|
||||
3. 再将格子上的信息写回不同的粒子上去
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
-------------------------
|
||||
|
||||
|
|
|
@ -48,12 +48,12 @@ $R_{xyz}(\alpha,\beta,\gamma)=R_x(\alpha)R_y(\beta)R_z(\gamma)$
|
|||
|
||||
此时的三个旋转方向将被称为roll,pich,yaw
|
||||
|
||||

|
||||
/flight_euler_angle.webp)
|
||||
|
||||
-----------------------
|
||||
|
||||
对于围绕某一特定点进行旋转的行为,则将该点平移至原点处后视为绕特定轴旋转
|
||||

|
||||
/rotate_around_point.webp)
|
||||
|
||||
|
||||
---------------------------
|
||||
|
@ -110,7 +110,7 @@ view = translate * view;//移动相机位置到顶点
|
|||
|
||||
图示
|
||||
|
||||

|
||||
/正交矩阵.webp)
|
||||
|
||||
--------------------
|
||||
|
||||
|
@ -126,12 +126,12 @@ view = translate * view;//移动相机位置到顶点
|
|||
|
||||
将远平面与近平面连线形成的梯形“挤压”到成为一个正方体
|
||||
|
||||

|
||||
/投影矩阵推导1.webp)
|
||||
|
||||
挤压的过程对梯形做横切面可知,计算挤压后的坐标点值实质上为计算相似三角形
|
||||
|
||||
如下图,可知挤压后的坐标与之前的坐标存在的数学关系为
|
||||

|
||||
/投影矩阵推导2.webp)
|
||||
|
||||
$$y^{'}=\frac{n}{z}y$$ $$x^{'}=\frac{n}{z}x$$
|
||||
|
||||
|
@ -193,10 +193,10 @@ $$\begin{pmatrix} n &0 &0 &0 \\\\ 0 &n &0 &0 \\\\ 0 &0 &n+f &-nf \\\\ 0 &0 &1 &0
|
|||
FovY表示视域,即摄像机在固定时能看到的最大角度或最低角度的范围
|
||||
|
||||
Aspect ratio 表示纵横比,投影平面的长宽比
|
||||

|
||||
/fovY.webp)
|
||||
|
||||
对应的相似三角形关系不变,参数改变
|
||||

|
||||
/triangle.webp)
|
||||
可得如下关系
|
||||
$$\tan{\frac{fovY}{2}}=\frac{t}{|n|}$$
|
||||
$$aspect=\frac{r}{t}$$
|
||||
|
|
|
@ -14,7 +14,7 @@ date: 2022-05-19T11:55:15+08:00
|
|||
3. 光线方向(许多光线中的一条),l
|
||||
4. 模型表面性质(如,颜色,粗糙度等)
|
||||
|
||||

|
||||

|
||||
|
||||
#### blinn-phong
|
||||
|
||||
|
@ -26,7 +26,7 @@ date: 2022-05-19T11:55:15+08:00
|
|||
2. 漫反射(diffuse reflection):来自于光在物体表面的散射现象
|
||||
3. 环境光(ambient lighting):光在物体之间弹射,最终在整个环境中形成的一个基本光
|
||||
|
||||

|
||||

|
||||
|
||||
由此可见,一个物体在渲染后体现的颜色是这三种光的总和,即每个位置的颜色就是specular+diffuse+ambient
|
||||
|
||||
|
@ -37,7 +37,7 @@ date: 2022-05-19T11:55:15+08:00
|
|||
|
||||
根据lambert's cosine law,反射点吸收能量的多少与反射点法线和光线的夹角有关,即如图中表现的$\cos{\theta}=l\cdot n$
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
由此我们可以将漫反射总结为如下公式(lambertian Shading)
|
||||
|
@ -54,7 +54,7 @@ $L_d=k_d(I/r^2)max(0,n\cdot l)$
|
|||
|
||||
高光(Specular)指的是视线在一定的角度区域观看模型表面时会产生一个类似镜面反射的效果
|
||||
|
||||

|
||||

|
||||
|
||||
如图中黄色区域为可见高光的视线范围
|
||||
|
||||
|
@ -65,7 +65,7 @@ $$ h=bisector(v,l) = \frac{v+l}{ || v+l || } $$
|
|||
$$L_s=k_s(I/r^2)max(0,\cos \alpha)^p$$
|
||||
$$\quad =k_s(I/r^2)max(0,n \cdot h)^p$$
|
||||
|
||||

|
||||

|
||||
|
||||
$ k_s $ : 镜面反射系数
|
||||
$ p $ : 高光的面积,P越大高光面积越小
|
||||
|
@ -73,7 +73,7 @@ $ L_s $ : 计算的高光效果光线
|
|||
|
||||
高光的效果和范围大小与$k_s$和p有关,下图展示了变化效果
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
##### ambient Term (环境光)
|
||||
|
@ -88,7 +88,7 @@ $k_a$ : 环境光系数,确定当前环境的底色
|
|||
|
||||
##### Blinn-phong Reflection Model
|
||||
|
||||

|
||||

|
||||
|
||||
$$L = L_a + L_d + L_s $$
|
||||
$$\quad = k_aI_a+k_d(I/r^2)max(0,n\cdot l)+k_s(I/r^2)max(0,n\cdot h)^p$$
|
||||
|
@ -105,19 +105,19 @@ $$\quad = k_aI_a+k_d(I/r^2)max(0,n\cdot l)+k_s(I/r^2)max(0,n\cdot h)^p$$
|
|||
1. 三角形面或一个法线向量视为是一个平面
|
||||
2. 对平滑表面的表现力不友好
|
||||
|
||||

|
||||

|
||||
|
||||
逐顶点渲染(Gouraud shading)
|
||||
1. 根据三角形顶点对颜色进行插值计算
|
||||
2. 每一个顶点都有一个法线向量
|
||||
|
||||

|
||||

|
||||
|
||||
1. 如何获取逐顶点的法线向量
|
||||
1. 对于标准的几何图形:顶点的法线向量就在顶点位置
|
||||
2. 对于非标准的几何图形:包含该顶点的周围几个表面的法线取平均值,可由计算公式$$ N_v=\frac{\sum_{i}N_i}{\lVert \sum_{i}N_i \rVert}$$ 得到
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
逐像素渲染(phong shading)
|
||||
|
@ -125,7 +125,7 @@ $$\quad = k_aI_a+k_d(I/r^2)max(0,n\cdot l)+k_s(I/r^2)max(0,n\cdot h)^p$$
|
|||
2. 对每一个像素计算完整的渲染模型
|
||||
3. 注意:非Blinn-Phong反射模型
|
||||
|
||||

|
||||

|
||||
|
||||
------------------------------
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ date: 2022-07-25T15:23:18+08:00
|
|||
|
||||
用于描述光线和不同材质间的作用关系
|
||||
|
||||

|
||||

|
||||
|
||||
上图从左至右分别为三维空间中的网格模型,渲染出的两种不同结果
|
||||
|
||||
|
@ -20,7 +20,7 @@ date: 2022-07-25T15:23:18+08:00
|
|||
|
||||
漫反射:任何一根光线打到漫反射位置的点上会被均匀地分散到各个不同的方向上去
|
||||
|
||||

|
||||

|
||||
* 漫反射材质可定义任何一个不同的点上不同的漫反射系数
|
||||
|
||||
经验定义:
|
||||
|
@ -34,7 +34,7 @@ date: 2022-07-25T15:23:18+08:00
|
|||
|
||||
因此如果如果这个点不发光也不吸收光(白的),那就意味着所有的光进来多少就发射出去多少。也就是进来多少Irradiance,就会出去多少Irradiance,因为Radiance是一致的的,所以入射和出射的Radiance也要是一样的
|
||||
|
||||

|
||||

|
||||
|
||||
要使Li等于Lo,所以BRDF为$1/\pi$,此时是完全不吸收能量的
|
||||
|
||||
|
@ -47,12 +47,12 @@ $$f_r = \rho/\pi$$
|
|||
|
||||
类似于镜面反射又有些粗糙
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
###### 类玻璃/水的通透材质
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
左图为玻璃球(水的性质),右图有颜色且来自于玻璃球壳内,说明折射光在玻璃里传播时会被部分吸收
|
||||
|
@ -64,7 +64,7 @@ $$f_r = \rho/\pi$$
|
|||
|
||||
镜面反射:入射角等于反射角
|
||||
|
||||

|
||||

|
||||
|
||||
##### 计算公式
|
||||
|
||||
|
@ -83,7 +83,7 @@ $$f_r = \rho/\pi$$
|
|||
|
||||
所以已知$\theta和\phi$,就可以计算出射方向
|
||||
|
||||

|
||||

|
||||
|
||||
镜面反射:
|
||||
|
||||
|
@ -126,7 +126,7 @@ $$f_r(p,\omega_0,\omega_i) = F_r(\omega_r)\frac{\delta(\omega_i - \omega_r)}{\co
|
|||
形成原因:光线打到的海水表面时,光线会往不同的方向去折射,对于海底的某一个点来说,有几率接收到来自不同方向打过来的光
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
|
@ -134,7 +134,7 @@ $$f_r(p,\omega_0,\omega_i) = F_r(\omega_r)\frac{\delta(\omega_i - \omega_r)}{\co
|
|||
|
||||
不同材质拥有不同的额折射率,如真空认为是1,水为1.333,折射率越高说明光在穿过这个材质时会被折射得非常厉害,折射角会非常小,体现出不同波长的光被折射得不同程度
|
||||
|
||||

|
||||

|
||||
|
||||
方位角的朝向中,入射光和折射光也是正好相反的
|
||||
|
||||
|
@ -142,7 +142,7 @@ $$f_r(p,\omega_0,\omega_i) = F_r(\omega_r)\frac{\delta(\omega_i - \omega_r)}{\co
|
|||
|
||||
$$\eta_i \sin\theta_i = \eta_t \sin\theta_t$$
|
||||
|
||||

|
||||

|
||||
|
||||
由斯内尔定律可计算折射角的余弦
|
||||
|
||||
|
@ -172,7 +172,7 @@ $$\frac{\eta_i}{\eta_t} > 1$$
|
|||
人在水底,往各个不同的方向看,只能看到一个锥形的区域(97.2度)。如下图,最左边的一根光线的折射角就已经达到90度了,如果角度再大一点,所有能量都会反射到池子底部
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
#### BSDF = BRDF + BTDF
|
||||
|
||||
|
@ -182,7 +182,7 @@ BRDF中的R表示反射,折射是BTDF,其中的T是transmit。BRDF和BTDF加
|
|||
|
||||
反射率取决于入射角(和光的偏振)的现象
|
||||
|
||||

|
||||

|
||||
|
||||
如上图中,反射现象随着视角变化而明显
|
||||
|
||||
|
@ -192,7 +192,7 @@ BRDF中的R表示反射,折射是BTDF,其中的T是transmit。BRDF和BTDF加
|
|||
|
||||
下图的另外两根线表示的是极化现象,和光线的波动性有关,其实光线是沿着各个不同方向有振动的,极化就是只沿着某一个方向振动(S和P是两个方向的极化)
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
##### 导体
|
||||
|
@ -201,14 +201,14 @@ BRDF中的R表示反射,折射是BTDF,其中的T是transmit。BRDF和BTDF加
|
|||
|
||||
导体的折射率是复数,需要一个N和一个K
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
##### 菲涅尔项的公式
|
||||
|
||||
一个0到1之间的数,有多少能量会被反射,2个不同的极化(polarization:S和P)会告诉你不同的反射率,如果考虑不极化的光,就将2项平均
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
|
@ -245,7 +245,7 @@ $$R(\theta) = R_0 + (1 - R_0)(1 - \cos\theta)^5$$
|
|||
|
||||
漫反射将光反射到各个方向上就是认为所有的微表面都像一个很小的镜子,分布又各不规则,最后形成的分布就会把光打到各个不同的方向上去
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
##### 微表面法线分布
|
||||
|
@ -256,12 +256,12 @@ glossy材质:
|
|||
|
||||
如下图的表面,看起来很平,它们的分布法线差的不太远,基本都是朝上的。所以如果将它们的分布画出来,它们的法线会集中在宏观的表面法线的周围
|
||||
|
||||

|
||||

|
||||
diffuse材质:
|
||||
|
||||
如下图,如果表面粗糙(意味着所有的微表面会沿着不同的方向),如果将法线画出来,那它的分布就会离中心离的特别远都会有分布的值
|
||||
|
||||

|
||||

|
||||
|
||||
* 微表面模型的BRDF公式
|
||||
|
||||
|
@ -281,13 +281,13 @@ diffuse材质:
|
|||
|
||||
光线近似平行于表面时更易发生自遮挡,这种入射方向为掠射角(Grazing Angle),阴影遮掩的提出正是用于修正掠影角
|
||||
|
||||

|
||||

|
||||
|
||||
-------------------
|
||||
|
||||
使用微表面材质渲染得到的图像质量很高,且微表面模型可描述的物体种类较多,金属、皮质、木头
|
||||
|
||||

|
||||

|
||||
|
||||
#### 各向同性/各向异性材质
|
||||
|
||||
|
@ -295,17 +295,17 @@ diffuse材质:
|
|||
|
||||
当金属为拉丝金属,就会产生如图现象
|
||||
|
||||

|
||||

|
||||
|
||||
* 各向同性:认为其微表面不存在一定的方向性,或方向性微弱
|
||||
|
||||
下图可见法线在各个方向上的分布是均匀的
|
||||
|
||||

|
||||

|
||||
|
||||
* 各向异性:认为其法线分布具有明确的方向性
|
||||
|
||||

|
||||

|
||||
|
||||
* Anisotropic BRDFs
|
||||
|
||||
|
@ -317,13 +317,13 @@ $$f_r(\theta_i,\phi_i;\theta_r,\phi_r) \neq f_r(\theta_i,\phi_i;\theta_r, - \phi
|
|||
|
||||
正常尼龙做法为水平方向和竖直方向的一根压一根,其各向异性在对角线上有不同的表现
|
||||
|
||||

|
||||

|
||||
|
||||
* 天鹅绒
|
||||
|
||||
底层有很多伸出去的纤维,如果这些纤维往各个不同方向上分布是均匀的,就可认为是各向异性。但我们可将纤维拨到一边去,认为造出各向异性效果
|
||||
底层有很多伸出去的纤维,如果这些纤维往各个不同方向上分布是均匀的,就可认为是各向异性。但我们可将纤维拨到一边去,人为造出各向异性效果
|
||||
|
||||

|
||||

|
||||
|
||||
#### BRDF属性
|
||||
|
||||
|
@ -378,7 +378,7 @@ BRDF可以用各种各样不同的模型去描述,但这些模型都是基于
|
|||
|
||||
测量后可以不用推出一些模型,可以直接用测的数据
|
||||
|
||||

|
||||

|
||||
|
||||
##### 怎么测量
|
||||
|
||||
|
@ -386,13 +386,13 @@ BRDF可以用各种各样不同的模型去描述,但这些模型都是基于
|
|||
|
||||
BRDF是2个方向(一个入射方向,一个出射方向)的一个函数,如果盯着一个着色点看,并改变它的入射方向(比如拿一个灯从四面八方照它),相机从四面八方去拍它,这样就可以覆盖BRDF所有可能的输入方向和可能的输出方向对,这样就可以做测量
|
||||
|
||||

|
||||

|
||||
|
||||
* 实践仪器
|
||||
|
||||
这个器械有2个爪子,一个抓相机,一个抓光源,将样本放在正中间(球心),这2个爪子可以在球面上任意的旋转
|
||||
|
||||

|
||||

|
||||
|
||||
* 算法
|
||||
|
||||
|
@ -449,6 +449,6 @@ BRDF库存储了很多不同的材质,大多数是假设各向同性的
|
|||
|
||||
存储数据量大(未压缩)
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ $$\sum_{i = 1}^n p_i = 1$$
|
|||
|
||||
如图,对于这四个可供选择的长方形,每一个选择有一个值为$X_i$,每一个选择都对应一个概率为$p_i$,那么期望则为将所有值乘以其对应的概率后累加得到的数值
|
||||
|
||||

|
||||

|
||||
|
||||
可见上图的期望值为
|
||||
|
||||
|
@ -47,7 +47,7 @@ $$E[X] = \sum_{i=1}^n \frac{i}{6} = (1+2+3+4+5+6)/6 = 3.5$$
|
|||
|
||||
随机变量的取值可以是一些固定的值(离散型),也可以是下图所示一些连续的值(连续型)
|
||||
|
||||

|
||||

|
||||
|
||||
某一位置的概率为其周围一小段微元与曲线相连线形成的梯形面积
|
||||
|
||||
|
@ -88,7 +88,7 @@ $$E[Y] = E[f(X)] = \int f(x)p(x)dx$$
|
|||
|
||||
若函数较为复杂,如下图所示,不便于使用解析方法,就要使用数值的方法计算(蒙特卡洛积分)
|
||||
|
||||

|
||||

|
||||
|
||||
#### 大致流程
|
||||
|
||||
|
@ -122,7 +122,7 @@ $$F_N = \frac{1}{N} \sum_{i = 1}^N {\frac{f(X_i)}{p(X_i)}}$$
|
|||
|
||||
* 在a到b之间均匀采样时,我们使用的概率密度函数(PDF)在各处的值相等,即为一个常数,又已知PDF在积分域上的积分值为1,此PDF可解出值为$\frac{1}{(b-a)}$
|
||||
|
||||

|
||||

|
||||
|
||||
* 采用蒙特卡洛积分计算时,需要知道f(Xi)和p(Xi),随机采样得到的值为Xi,蒙特卡洛积分只需计算f(Xi)除以p(Xi)的平均值,p(Xi)的值始终为$\frac{1}{(b-a)}$
|
||||
|
||||
|
@ -150,7 +150,7 @@ Specular材质:光线在物体表面能发生镜面反射则称为此材质,
|
|||
|
||||
Glossy材质:有镜面反射的样子,但又有些许模糊,类似毛玻璃效果,有一定粗糙度但能产生高光
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
* whitted-style ray tracing 在遇到漫反射时会停止光线弹射直接做相应的shading
|
||||
|
@ -159,7 +159,7 @@ Glossy材质:有镜面反射的样子,但又有些许模糊,类似毛玻
|
|||
|
||||
两个示例中左侧为直接光照,右侧为全局光照,都采用路径追踪的方式计算得到
|
||||
|
||||

|
||||

|
||||
|
||||
可见在场景中只有上面一个光源的情况下,在直接光照里,天花板为黑色,但实际上光线会发生多次弹射,天花板应是亮的,右侧才是我们想要的效果
|
||||
|
||||
|
@ -186,7 +186,7 @@ $$L_o(p,w_o) = L_e(p,w_o) + \int_{\Omega+} {L_i(p,w_i)f_r(p,w_i,w_o)(n\cdot w_i)
|
|||
|
||||
假设存在下图场景,我们认为各个方向进来的光$\omega i$ 均匀分布在球面上
|
||||
|
||||

|
||||

|
||||
|
||||
* 假设该点不发光,因而直接光照强度结果来自于四面八方入射来的光照强度
|
||||
|
||||
|
@ -263,7 +263,8 @@ shade(p, wo)
|
|||
##### 全局光照
|
||||
|
||||
全局光照下,我们需要考虑反射面反射过来的光,计算从Q反射到P点反射了多少辐射能
|
||||

|
||||
|
||||

|
||||
|
||||
只需在直接光照的算法中添加分支便可支持全局光照
|
||||
|
||||
|
@ -310,7 +311,7 @@ Return Lo
|
|||
|
||||
如下图,打到第一个物体上后反射出N根光线,打到第二个物体后会再发出N个光线,即变成$N^2$条光线,会超出处理能力
|
||||
|
||||

|
||||

|
||||
|
||||
解决方法:
|
||||
|
||||
|
@ -388,12 +389,12 @@ low SPP下,计算速度快,图片噪声多
|
|||
|
||||
High SPP下,计算速度慢,图片噪声少
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
##### 算法依旧不高效的原因
|
||||
|
||||

|
||||

|
||||
|
||||
光线能否打到光源上取决于运气,当光源小时往往会浪费过多光线,需要改用更好的PDF用来采样,而非简单的均匀采样
|
||||
|
||||
|
@ -401,7 +402,7 @@ High SPP下,计算速度慢,图片噪声少
|
|||
|
||||
蒙特卡洛允许许多采样方法,我们可以直接在光源上采样
|
||||
|
||||

|
||||

|
||||
|
||||
n'为光源本身朝向,在与着色点连线后可得$\theta$(连线和着色点法线的夹角) $\theta$'(连线和光源法线的夹角),此时若在视为二维平面的光源上均匀采样,则PDF为$\frac{1}{A}$
|
||||
|
||||
|
@ -463,7 +464,7 @@ shade(p, wo)
|
|||
|
||||
发生下图蓝色物体遮挡在光源和着色点之间时,需要判断光源能否贡献到着色点
|
||||
|
||||

|
||||

|
||||
|
||||
判断方式:
|
||||
|
||||
|
@ -494,7 +495,7 @@ shade(p, wo)
|
|||
|
||||
最终path tracing的出的效果
|
||||
|
||||

|
||||

|
||||
|
||||
可见,path tracing 与照片相比能够做到几乎百分百相似
|
||||
|
||||
|
|
|
@ -36,13 +36,13 @@ $$\Phi \equiv \frac{d_Q}{d_t} [W = Watt] [lm = lumen]$$
|
|||
|
||||
辐射通量同时可以表示为在单位时间内通过一个感光平面的光子数量
|
||||
|
||||

|
||||
/another_defination_of_flux.webp)
|
||||
|
||||
#### 辐射强度(Radiant Intensity)
|
||||
|
||||
定义:单位时间内,单位立体角辐射的能量
|
||||
|
||||

|
||||
/Radiant_Intensity_define.webp)
|
||||
|
||||
坎德拉(Candela): 发光强度的SI单位。一坎德拉是光源在给定方向上的发光强度,该光源发出540 $\times $1012Hz的单色辐射,并且在该方向上的辐射强度为1/683瓦/球面度
|
||||
|
||||
|
@ -56,7 +56,7 @@ $$\Phi \equiv \frac{d_Q}{d_t} [W = Watt] [lm = lumen]$$
|
|||
|
||||
微分立体角:球面上当立体角的方向与Z轴的夹角($\theta$)、绕着Z轴旋转的角($\phi$)发生改变时,会在对应方向的球面上框出一片区域,该区域对应的立体角即为微分立体角
|
||||
|
||||

|
||||
/differential_solid_angles1.webp)
|
||||
|
||||
对于球体$S^2$:
|
||||
$$\Omega = \int_{S^2} {d\omega} = \int_0^{2\pi} \int_0^{\pi} {\sin\theta d{\theta} d{\phi}} = 4\pi$$
|
||||
|
@ -64,7 +64,8 @@ $$\Omega = \int_{S^2} {d\omega} = \int_0^{2\pi} \int_0^{\pi} {\sin\theta d{\thet
|
|||
|
||||
在辐射度量中,我们也会用$\omega$表示三维空间中的一个方向,可以使用$\theta和\phi$的方式来定义其位置,并利用$\sin \theta d_{\theta} d_{\phi}$来计算微分立体角
|
||||
|
||||

|
||||
/differential_solid_angles_w.webp)
|
||||
|
||||
|
||||
#### 光强(Intensity)
|
||||
|
||||
|
@ -78,7 +79,7 @@ $$\Phi = \int_{S^2} {Id\omega} = 4\pi I$$
|
|||
|
||||
$$I = \frac{\Phi}{4\pi}$$
|
||||
|
||||

|
||||
/Isotropic_Point_source.webp)
|
||||
|
||||
#### 现代LED灯实例
|
||||
|
||||
|
@ -90,19 +91,20 @@ $$I = \frac{\Phi}{4\pi}$$
|
|||
|
||||
Itensity = 815 lumens / 4pi sr = 65 candelas
|
||||
|
||||

|
||||
/modern_LED.webp)
|
||||
|
||||
#### 辐照度(Irradiance)
|
||||
|
||||
定义:单位面积内的能量
|
||||
|
||||

|
||||
/Irradiance_define.webp)
|
||||
|
||||
|
||||
单位面积需与入射光线垂直才算是接收到的范围,否则要将其投影到垂直的方向
|
||||
|
||||
例如Lambert's Cosine Law中平行光打到单位面上如果垂直则可以接收到6根光线,平面若倾斜则只能接收到三个光线,接收到的能量要乘以$\cos \theta$
|
||||
|
||||

|
||||
/Lambert_cosine_law_irradiance.webp)
|
||||
|
||||
--------------------------
|
||||
|
||||
|
@ -114,7 +116,7 @@ Itensity = 815 lumens / 4pi sr = 65 candelas
|
|||
|
||||
采用辐照度则认为对于最中间的球壳来说,其半径为1,则下图中该点出的辐照度为$E = \phi / (4\pi 1^2 )$,球壳半径为r时,辐照度为$\phi / (4 \pi r^2)$,也就等于$E/r^2$
|
||||
|
||||

|
||||
/Irradiance_Fallof.webp)
|
||||
|
||||
由此可得出并非Idensity在衰减,而是Irradiance在衰减
|
||||
|
||||
|
@ -123,7 +125,7 @@ Itensity = 815 lumens / 4pi sr = 65 candelas
|
|||
|
||||
定义:单位立体角下每单位面积下的power
|
||||
|
||||

|
||||
/radiance_define.webp)
|
||||
|
||||
由此可知power需要进行两次微分,一次立体角,一次投影后单位面积
|
||||
|
||||
|
@ -142,7 +144,7 @@ Radiance: 每单位角的Irradiance
|
|||
|
||||
从一个方向打到一个很小的面上的能量,即为入射辐射
|
||||
|
||||

|
||||
/Incident_radiance_define.webp)
|
||||
|
||||
是沿着给定光线到达表面的光(给定表面上的点和入射方向)
|
||||
|
||||
|
@ -150,7 +152,7 @@ Radiance: 每单位角的Irradiance
|
|||
|
||||
王某一个方向(立体角)辐射的能量即为出射辐射
|
||||
|
||||

|
||||
/Exiting_radiance_define.webp)
|
||||
|
||||
是沿着给定光线到达表面的光(给定表面上的点和出射方向)
|
||||
|
||||
|
@ -163,6 +165,6 @@ radiance: dA从某一个方向收到的能量
|
|||
|
||||
E(p)即为irradiance,等于所有方向上的Radiance的和
|
||||
|
||||

|
||||
/Irradiance_vs_radiance.webp)
|
||||
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ date: 2022-05-12T09:10:25+08:00
|
|||
#### 屏幕空间
|
||||
屏幕空间可以被看做是由一组像素点构成,每个像素点可以被视为中心为$(x+0.5,y+0.5)$的一个正方形,
|
||||
|
||||

|
||||

|
||||
|
||||
--------------
|
||||
|
||||
|
@ -32,7 +32,7 @@ for(int x = 0 ; x < xmax; ++x)
|
|||
|
||||
可视化过程如图
|
||||
|
||||

|
||||

|
||||
----------------
|
||||
|
||||
#### 判断像素点在三角形内部
|
||||
|
@ -93,7 +93,7 @@ static bool insideTriangle(int x, int y, const Vector3f* _v)
|
|||
|
||||
使用包围盒将三角形包围后,只判断包围盒内的像素点是否在三角形内能够减少这种情况的出现
|
||||
|
||||

|
||||

|
||||
|
||||
代码实例
|
||||
|
||||
|
@ -109,5 +109,5 @@ static bool insideTriangle(int x, int y, const Vector3f* _v)
|
|||
##### incremental triangle Traversal
|
||||
对于每一行像素点,只遍历三角形最左到最右的像素点,只适用于较窄的且经过旋转的三角形
|
||||
|
||||

|
||||

|
||||
|
||||
|
|
|
@ -12,13 +12,13 @@ date: 2022-07-27T22:55:53+08:00
|
|||
|
||||
从光源打出一些sub-path,从摄像机出发也可以生成另外一系列的子路径。双向路径追踪会将这些子路径的端点连接起来形成一条完整的路径
|
||||
|
||||

|
||||

|
||||
|
||||
### BDPT适用的场景
|
||||
|
||||
图例中,左图为路径追踪,右图为双向路径追踪,适用的都是每个像素32个采样点,但可见双向路径追踪能产生更好的效果
|
||||
|
||||

|
||||

|
||||
|
||||
原因:
|
||||
|
||||
|
@ -50,7 +50,7 @@ date: 2022-07-27T22:55:53+08:00
|
|||
|
||||
不断在一个path周围产生更多path就可以找到所有的path
|
||||
|
||||

|
||||

|
||||
|
||||
#### MLT方法与BDPT的效果对比
|
||||
|
||||
|
@ -58,7 +58,7 @@ date: 2022-07-27T22:55:53+08:00
|
|||
|
||||
在下图中类似的场景下MLT的效果很好,其适合做复杂、困难的光线传播
|
||||
|
||||

|
||||

|
||||
|
||||
Caustics是光线经过聚焦打在游泳池底,然后被人眼看见。光线要穿过水的表面(凹凸不平,还有浪),会被聚焦到一系列的地方(水面有办法将光线聚焦到一系列的线上)。这种情况渲染起来非常困难,因为假设游泳池底是diffuse的,光线会先经过一个specular的水面,游泳池底被我们看见也要经过一个specular(这种路径简称SDS(specular-diffuse-specular))
|
||||
|
||||
|
@ -69,7 +69,7 @@ MLT难以在理论上预估最后收敛的速度(path tracing中使用的蒙特
|
|||
|
||||
所有操作都是局部的,有些像素收敛快,有的像素收敛慢,使渲染出来的结果图像看上去比较脏
|
||||
|
||||

|
||||

|
||||
|
||||
不适用于渲染动画,因为不同连续帧的收敛速度不同,画面会产生严重抖动
|
||||
|
||||
|
@ -82,13 +82,13 @@ MLT难以在理论上预估最后收敛的速度(path tracing中使用的蒙特
|
|||
尤其适用于渲染Caustics和Specular-Diffuse-Specular(SDS)
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
#### 实现方法
|
||||
|
||||
* 从光源出发,光子碰到物体后计算所有反射和折射,直到光子打到diffuse的物体上停止,此时整理所有光子即可得到光子位置信息
|
||||
|
||||

|
||||

|
||||
|
||||
* 从眼睛或相机开始,往各个不同方向打出各种各样的子路径,计算反射和折射直到打在diffuse的物体上
|
||||
|
||||
|
@ -102,14 +102,15 @@ MLT难以在理论上预估最后收敛的速度(path tracing中使用的蒙特
|
|||
* 计算N个光子所占的面的面积
|
||||
* 计算密度:用光子的数量N除以它们占的面积
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
#### N的取值
|
||||
|
||||
如果用很少的光子的数量,就会得到一个很有噪声的图,如果用更多的光子,结果虽然会好一些,但是得到的结果会糊
|
||||
|
||||

|
||||

|
||||
|
||||
##### 产生取值问题的原因(有偏的原因)
|
||||
|
||||
* 计算密度时,我们认为密度时当前这个点的周围取一个微小的面积dA,它里面有多少个光子
|
||||
|
@ -145,7 +146,7 @@ BDPT中,生成两个sub-path再将端点连起来,如果有的path满足下
|
|||
|
||||
往往用于电影行业渲染
|
||||
|
||||

|
||||

|
||||
|
||||
### 实时辐射度算法(Instant Radiosity(IR))
|
||||
|
||||
|
@ -159,7 +160,7 @@ BDPT中,生成两个sub-path再将端点连起来,如果有的path满足下
|
|||
|
||||
* 看到如下图中的着色点后就用新的光源来照亮(相当于实际考虑光线弹射两次)
|
||||
|
||||

|
||||

|
||||
|
||||
#### 优缺点
|
||||
|
||||
|
@ -175,7 +176,7 @@ VPL不能做glossy的物体
|
|||
|
||||
窄缝发光问题与距离平方向有关,在计算light sampling时,更改立体角的采样为对面积的采样,所以产生了面积乘以cos除以两个点之间的距离的值,当两个点距离极近时就会得到一个非常大的结果
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
## 高级外观建模
|
||||
|
@ -186,11 +187,11 @@ VPL不能做glossy的物体
|
|||
|
||||
雾
|
||||
|
||||

|
||||

|
||||
|
||||
云
|
||||
|
||||

|
||||

|
||||
|
||||
--------------------
|
||||
|
||||
|
@ -200,7 +201,7 @@ VPL不能做glossy的物体
|
|||
2. 光线路径上如果有很多小的晶体则会把光线随机反射到其他方向上去
|
||||
3. 传播的过程中也可能会接收到从其他方向反射过来的光
|
||||
|
||||

|
||||

|
||||
|
||||
#### 散射计算
|
||||
|
||||
|
@ -208,7 +209,7 @@ VPL不能做glossy的物体
|
|||
|
||||
下图相位函数决定了散射的方式和方向(与BRDF类似,BRDF决定如何反射,相位函数决定如何散射)
|
||||
|
||||

|
||||

|
||||
|
||||
#### 散射介质渲染
|
||||
|
||||
|
@ -218,15 +219,15 @@ VPL不能做glossy的物体
|
|||
|
||||
超能特工队
|
||||
|
||||

|
||||

|
||||
|
||||
游戏:刺客信条
|
||||
|
||||

|
||||

|
||||
|
||||
巧克力(流体模拟)
|
||||
|
||||

|
||||

|
||||
|
||||
### 毛发建模(Hair/fur/fiber)缩写:BCSDF
|
||||
|
||||
|
@ -234,7 +235,7 @@ VPL不能做glossy的物体
|
|||
|
||||
可见头发会有两种高光,一种无色发白,一种有色
|
||||
|
||||

|
||||

|
||||
|
||||
#### 高光计算
|
||||
|
||||
|
@ -242,11 +243,11 @@ VPL不能做glossy的物体
|
|||
|
||||
* kajiya-Kay Model
|
||||
|
||||

|
||||

|
||||
|
||||
但表现却不太符合现实,与Blinn-Phong类似
|
||||
|
||||

|
||||

|
||||
|
||||
* Marschner Model
|
||||
|
||||
|
@ -256,19 +257,19 @@ VPL不能做glossy的物体
|
|||
2. 一部分会穿透到头发里发生折射,可记为T,一根光线要穿透一根头发需要穿透两次,因而产生TT的光线传播方式
|
||||
3. 光线发生一次穿透进入头发内部,在头发内壁上发生一次反射后返回,返回时再发生一次穿透,记为TRT
|
||||
|
||||

|
||||

|
||||
|
||||
在这一模型中(下图左),我们会将头发认为是一个玻璃的圆柱(总体可认为是扭曲,但局部必定是直的),包含两种结构,外层cuticle(表层),内层cortex(皮层)
|
||||
|
||||
头发内部存在有色素,光线穿透后会有部分被吸收再向外传播
|
||||
|
||||

|
||||

|
||||
|
||||
该模型也考虑了三种光线和模型之间的相互作用(上图右)
|
||||
|
||||
将计算结果综合后可得到一个十分拟真的效果
|
||||
|
||||

|
||||

|
||||
|
||||
当然上述过程只定义了单根头发与光线的相互作用,与多根头发作用时需要额外计算多次散射
|
||||
|
||||
|
@ -278,11 +279,11 @@ VPL不能做glossy的物体
|
|||
|
||||
最终幻想15(ff15)
|
||||
|
||||

|
||||

|
||||
|
||||
疯狂动物城
|
||||
|
||||

|
||||

|
||||
|
||||
-------------------------
|
||||
|
||||
|
@ -290,7 +291,7 @@ VPL不能做glossy的物体
|
|||
|
||||
人的毛发计算模型往往不能用于动物毛发计算,如下图,左侧为人的毛发模型计算结果,可见其不足以描述光线与动物毛发的相互作用
|
||||
|
||||

|
||||

|
||||
|
||||
* 生物结构
|
||||
|
||||
|
@ -302,61 +303,62 @@ VPL不能做glossy的物体
|
|||
|
||||
动物毛发中的髓质更大,光线进入后更容易发生反射
|
||||
|
||||

|
||||

|
||||
|
||||
由此可见,Marschner Model中忽略髓质在动物毛发计算中并不适用
|
||||
|
||||

|
||||

|
||||
|
||||
有无髓质的对比
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
#### 双层圆柱模型(Double Cylinder Model)
|
||||
|
||||
该模型中加入了对髓质的精确描述
|
||||
|
||||

|
||||

|
||||
|
||||
光线在打到表面后依旧会发生反射,穿过结构后也可能无法到达髓质或是到达后没有发生反射,与Marschner Model中一样,存在R、TT、TRT
|
||||
|
||||
同样会有部分光穿过髓质的时候发散到各个方向上去(TTs),TRT也相同,在穿过髓质的过程中,两次都有可能被散射,形成TRTs
|
||||
|
||||

|
||||

|
||||
|
||||
可以使用5个不同的分量,在原来的3个模型上加上2个散射的结果
|
||||
|
||||

|
||||

|
||||
|
||||
##### 应用
|
||||
|
||||
下图中的仓鼠,由60万根毛发组成,在每像素中有1024个采样点的采样率下,每帧需要渲染36.9分钟
|
||||
|
||||

|
||||

|
||||
|
||||
猩球崛起
|
||||
|
||||

|
||||

|
||||
|
||||
狮子王
|
||||
|
||||

|
||||

|
||||
|
||||
#### 颗粒材质(Granular Material)
|
||||
|
||||
如香料、盐、糖等等
|
||||
|
||||

|
||||

|
||||
|
||||
计算量很大,但可以做些简化
|
||||
|
||||
比如一个沙子城堡,每一单元上由不同石子构成,各自成分占比也可得出,渲染结果在离得近的时候可以看到一粒一粒的,离得远的情况下就会是一个沙丘
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
--------------------
|
||||
|
||||
|
@ -370,13 +372,13 @@ VPL不能做glossy的物体
|
|||
|
||||
即并非沿着一个方向传播并被吸收,可以被传导到其他方向上去
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
在物理上,常常认为光线在某一个点进入某一个表面,在里面发生了大量散射,从另一个点钻出
|
||||
|
||||

|
||||

|
||||
|
||||
#### 次表面散射(Subsurface Scattering)
|
||||
|
||||
|
@ -388,7 +390,7 @@ BRDF: 光线打到这个点,并从这个点出来,所有作用都发生在
|
|||
|
||||
BSSRDF:可理解为吧BRDF的概念延伸到从一个点以任意方向进来再从任意一个其他的地方以任意方向出去
|
||||
|
||||

|
||||

|
||||
|
||||
* 定义
|
||||
|
||||
|
@ -409,27 +411,27 @@ $$L(x_o,\omega_o) = \int_A\int_{H^2} {S(x_i,\omega_i,x_o,\omega_o)L_i(x_i,\omega
|
|||
|
||||
光线打到物体上与物体底部出现光源类似,会从底部照亮着色点周围的一片,为了物理上的真实,推出一个光源不够,还要对应上方有一个光源,还要对应上方存在一个光源,相当于有两个光源照亮周围着色点的一块
|
||||
|
||||

|
||||

|
||||
|
||||
* 效果
|
||||
|
||||
BRDF,类石膏材质效果
|
||||
|
||||

|
||||

|
||||
|
||||
BSSRDF,类大理石
|
||||
|
||||

|
||||

|
||||
|
||||
如图,BRDF渲染的皮肤效果显得干燥,BSSRDF则能有很好的效果
|
||||
|
||||

|
||||

|
||||
|
||||
* 应用
|
||||
|
||||
人脸渲染
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
### 布料(cloth)
|
||||
|
@ -440,7 +442,7 @@ BSSRDF,类大理石
|
|||
|
||||
纤维(fiber)是最基础的,纤维可以缠绕成不同的股(ply),不同的股再经过不同的缠绕形成线(yarn)
|
||||
|
||||

|
||||

|
||||
|
||||
Woven or Knitted(编织或针织)
|
||||
|
||||
|
@ -456,7 +458,7 @@ Woven or Knitted(编织或针织)
|
|||
|
||||
布料模型大多数并非在一个表面上,难以使用BRDF来表示
|
||||
|
||||

|
||||

|
||||
|
||||
* 解决方案1
|
||||
|
||||
|
@ -464,112 +466,114 @@ Woven or Knitted(编织或针织)
|
|||
|
||||
计算量庞大,计算时间长
|
||||
|
||||

|
||||

|
||||
|
||||
* 解决方案2
|
||||
|
||||
布料本身是纤维,渲染每一根纤维也能产生很好的效果,计算量同样惊人
|
||||
|
||||

|
||||

|
||||
|
||||
* 应用
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
#### 有细节的材质(Detailed Appearance)
|
||||
|
||||
如下图,渲染结果不错但并不真实,因为结果过于完美
|
||||
|
||||

|
||||

|
||||
|
||||
真实情况下车上会有高光,高光周围会有类似于蜘蛛网结构的划痕。鼠标上则会有由很多小的凸起形成的高光
|
||||
|
||||

|
||||

|
||||
|
||||
下图由微表面模型渲染得出,结果完美但不真实
|
||||
|
||||

|
||||

|
||||
|
||||
加入了实际可能产生不完美的地方
|
||||
|
||||

|
||||

|
||||
|
||||
模拟被同方向刷出的各项异性材质
|
||||
|
||||

|
||||

|
||||
|
||||
* 微表面模型中的法线分布
|
||||
|
||||
微表面模型中重要的是微表面的法线分布,描述分布时,往往使用非常简单的模型(正态分布、高斯),得到的自然是没有什么细节的结果(法线分布没有体现各种各样的变化和细节)
|
||||
|
||||

|
||||

|
||||
|
||||
在蜗牛壳上贴了一个大的法线贴图,每个面都可以产生高光,所有高光形成一起就可以变成一个大高光
|
||||
|
||||

|
||||

|
||||
|
||||
Metallic flakes:可替换别的模型,例如很多人在车漆中添加的亮片,亮片会形成很多不同的方向,不同方向会形成不同的反光
|
||||

|
||||
|
||||

|
||||
|
||||
虽然能够定义各种细节,但渲染十分困难,需要渲染接近一个月才能得到这个结果
|
||||
|
||||

|
||||

|
||||
|
||||
* 渲染困难的原因:
|
||||
|
||||
认为每一个微表面是一个镜面,如下图场景中有一个针孔摄像机和一个点光源,那从摄像机打根光线过去,打到哪个表面,就可以知道它的法线,也就可以知道它的镜面反射方向,所以也就很难通过反射的方式让光线打到光源上。从光源打过来也是同理,打到一个微表面,并且知道如何反射,但就是反射不到摄像机上去
|
||||
|
||||

|
||||

|
||||
|
||||
解决:
|
||||
由于一个像素会覆盖很多的微表面,如果将一个小的范围内的微表面的法线分布计算出来便可代替原本光滑的分布并用在微表面模型里
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
* P-NDF的形状:
|
||||
|
||||
如果考虑像素覆盖的范围,就可以得到各种各样神奇的法线分布(NDF)。可以想象一个像素覆盖了非常多的微表面,那这些微表面自然会显示出一些统计学的规律,那如果覆盖的范围小,就会显示出一些很独特的性质,法线分布就会看上去很有特点
|
||||
|
||||

|
||||

|
||||
|
||||
不同类型的法线贴图会引起不同的法线分布
|
||||
|
||||

|
||||

|
||||
|
||||
* 例子和应用
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
游戏中的应用-古墓丽影中的雪地
|
||||
|
||||

|
||||

|
||||
|
||||
#### 波动光学
|
||||
|
||||
引入细节后,还用几何光学解释就不对,物理上当物体非常小,小到和光的波长相当时,就不能假设光线是沿直线传播的,而必须假设这个光是一个波,这就会涉及到衍射和干涉现象的发生
|
||||
|
||||

|
||||

|
||||
|
||||
比如在黑屋里,用点光源照亮一个金属片,会在本身只有一个颜色的金属片上看到各种各样的颜色
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
白光照射后反射出来的便为白光,如果不是白的就一定有波动光学(Wave Optics)
|
||||
|
||||
波动光学得出的BRDF与几何光学的BRDF很像但具有不连续的特点(光会发生干涉,会引起部分区域加强或减弱)
|
||||
|
||||

|
||||

|
||||
|
||||
以下为波动关系渲染的结果
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
--------------------
|
||||
|
||||
|
@ -579,32 +583,33 @@ Metallic flakes:可替换别的模型,例如很多人在车漆中添加的亮
|
|||
|
||||
如下图可定义各种各样的花纹,花瓶打碎后可见花瓶内部纹理,可定义一个三维纹理
|
||||
|
||||

|
||||

|
||||
|
||||
存储量在三维下会变得很大,可利用noise函数(x,y,z),给定任何x,y,z可得到对应的值,这样可以实现什么时候用就什么时候去查
|
||||
|
||||

|
||||

|
||||
|
||||
procedural更多意味着不生成,需要时再查询
|
||||
|
||||
* 车上的锈
|
||||
|
||||
可生成一系列噪声,可对噪声做出一系列操作(二值化(binary noise));铁锈往往是不同区域有不同分布,这个噪声如果为0到1,当函数值大于0.8时认为是1,小于0.8就认为是0
|
||||
|
||||

|
||||

|
||||
|
||||
应用最广泛的是柏林(Perlin)噪声
|
||||
|
||||
* 生成地形
|
||||
|
||||

|
||||

|
||||
|
||||
* 生成海浪
|
||||
|
||||

|
||||

|
||||
|
||||
* 生成木头纹理
|
||||
|
||||

|
||||

|
||||
|
||||
常用Houdini来做程序化材质,且是先程序化生成再拿去使用
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ date: 2023-08-10T13:35:34+08:00
|
|||
|
||||
已知两个向量$\vec{V}$和$\vec{W}$,考虑它们所张成的平行四边形,此时$\vec{V}$和$\vec{W}$的叉乘($\vec{V}\times\vec{W}$)就是这个平行四边形的面积
|
||||
|
||||

|
||||

|
||||
|
||||
叉乘是顺序强相关的计算,计算顺序与方向或叉乘值的正负相关,顺序交换后通常叉乘的值相反
|
||||
|
||||
|
@ -20,7 +20,7 @@ date: 2023-08-10T13:35:34+08:00
|
|||
|
||||
如下图中,由于$\vec{V}$在$\vec{W}$的左侧,与基向量相反,所以叉乘的值就是负的
|
||||
|
||||

|
||||

|
||||
|
||||
### 叉乘的计算
|
||||
|
||||
|
@ -57,13 +57,13 @@ $$
|
|||
|
||||
本质是构成的矩阵记录了将基向量$\hat{i}$和$\hat{j}$移至$\vec{V}$和$\vec{W}$的线性变换,行列式便度量了变换前后的面积变换比例,即此时的行列式的值就是平行四边形的面积就是叉乘的值,当然变换后的$\vec{V}$在$\vec{W}$的左侧,叉乘的值为负值
|
||||
|
||||

|
||||

|
||||
|
||||
当两个向量垂直或是越趋近于垂直时,平行四边形的面积越大,叉乘的值越大,越趋近于同向,平行四边形越小,叉乘值越小
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
### 三维向量
|
||||
|
||||
|
@ -71,7 +71,7 @@ $$
|
|||
|
||||
方向则由右手定则定义
|
||||
|
||||

|
||||

|
||||
|
||||
计算公式
|
||||
|
||||
|
@ -201,4 +201,4 @@ $$
|
|||
|
||||
上述方法的几何解释
|
||||
|
||||

|
||||

|
|
@ -18,6 +18,9 @@ steps:
|
|||
- hugo
|
||||
- rsync -a --delete --exclude '.user.ini' public/ /data
|
||||
|
||||
trigger:
|
||||
branch: main
|
||||
|
||||
volumes: #声明数据卷
|
||||
- name: blog
|
||||
host:
|
||||
|
|
After Width: | Height: | Size: 6.8 MiB |
After Width: | Height: | Size: 11 MiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 6.9 KiB |
After Width: | Height: | Size: 5.8 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 7.1 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 6.8 KiB |
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 9.9 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 6.7 KiB |
After Width: | Height: | Size: 5.8 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 9.4 KiB |
After Width: | Height: | Size: 7.9 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 8.7 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 8.0 KiB |
After Width: | Height: | Size: 8.4 KiB |
After Width: | Height: | Size: 7.8 KiB |
After Width: | Height: | Size: 7.3 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 5.0 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 8.9 KiB |
After Width: | Height: | Size: 7.9 KiB |
After Width: | Height: | Size: 8.6 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 6.7 KiB |
After Width: | Height: | Size: 5.5 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 8.0 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 680 B |
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 39 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 9.3 KiB |
After Width: | Height: | Size: 9.9 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 16 KiB |