调整图片源
|
@ -20,14 +20,14 @@ date: 2022-05-15T17:55:10+08:00
|
|||
对同一像素点内采用多个采样点的方式来减少走样但将采样点分散到了一段时间内的多个帧上,在每帧采样时对采样点进行偏移,即抖动(jitter)来实现MSAA中放置多个次采样点的效果
|
||||
|
||||
采样序列也使用Halto sequence
|
||||

|
||||
/Halton_sequence.webp)
|
||||
|
||||
###### jitter的实现
|
||||
|
||||
采样点的位置会在初始化的时候确定,之后需要在与像素中心距离$[0,1]$的范围里发生偏移
|
||||
|
||||
实现这个效果只需要对投影矩阵中的值进行改动
|
||||

|
||||
/offset_projection_matrix.webp)
|
||||
|
||||
图片中标红的值便是在归一化后的坐标空间里偏移值的替换位置
|
||||
|
||||
|
@ -154,7 +154,7 @@ blendFactor = (lastStencil & 0x18) == (currStencil & 0x18) ? blendFactor : 1.f;
|
|||
|
||||
在经过处理后,鬼影现象消失,但当相机从向右旋转时,人物的左侧边缘像素表现效果较差
|
||||
|
||||

|
||||
/revealed_piels_appear_bad.webp)
|
||||
|
||||
为了减少这种情况的产生,我们在blendFactor为1时,返回一个经过高斯模糊的上一帧的颜色值
|
||||
```s
|
||||
|
@ -170,7 +170,7 @@ Gaussian blur使用的卷积核与$3\times3$相邻像素采样一致
|
|||
<br>$ \begin{bmatrix} \frac{1}{16} & \frac{1}{8} &\frac{1}{16} \\\\ \frac{1}{8} &\frac{1}{4} &\frac{1}{8} \\\\ \frac{1}{16} &\frac{1}{8} &\frac{1}{16} \end{bmatrix} $
|
||||
|
||||
处理后依旧有1像素厚的鬼影存在
|
||||

|
||||
/one_pixel_thick_ghosting.webp)
|
||||
|
||||
产生原因:
|
||||
<br>Color history 是线性采样,Stencil history 是点采样,两者在边缘并不相容
|
||||
|
|
|
@ -29,17 +29,17 @@ date: 2022-07-19T16:04:37+08:00
|
|||
1. 通过每个像素投射一条光线的方式来生成图像
|
||||
2. 通过向光源发送光线的方式来生成阴影
|
||||
|
||||

|
||||
/Ray_Casting_theory.webp)
|
||||
|
||||
#### 生成视角射线(Generating Eye Rays)
|
||||
|
||||
Pinhole Camera Model
|
||||
|
||||

|
||||
/Ray_Casting_Generate_Eye_Ray.webp)
|
||||
|
||||
#### 着色像素(shading pixel)
|
||||
|
||||

|
||||
/Ray_Casting_shading_pixel.webp)
|
||||
|
||||
|
||||
### 递归式光线追踪(Recursive Ray Tracing)
|
||||
|
@ -48,11 +48,11 @@ Recursiv Ray Tracing 又名 Whitted-Style Ray Tracing 由T.Whitted在1980年提
|
|||
|
||||
"An improved Illumination model for shaded display"
|
||||
|
||||

|
||||
/eg_Recursive_Ray_Tracing.webp)
|
||||
|
||||
总体计算流程
|
||||
|
||||

|
||||
/Recursive_Ray_Tracing_progress.webp)
|
||||
|
||||
-------------------------------------------
|
||||
|
||||
|
@ -143,14 +143,14 @@ $(p-p') * N = (o + td - p') * N = 0$
|
|||
|
||||
$t = \frac{(p'-o) * N }{d * N}$
|
||||
|
||||

|
||||
/Ray_Intersection_With_Plane.webp)
|
||||
|
||||
|
||||
##### Möller Trumbore Algorithm
|
||||
|
||||
一种更快地得出重心坐标的算法
|
||||
|
||||

|
||||
/Möller_Trumbore_Algorithm.webp)
|
||||
|
||||
|
||||
### 光线追踪的性能瓶颈
|
||||
|
|
|
@ -10,7 +10,7 @@ date: 2022-05-18T14:07:33+08:00
|
|||
|
||||
需要对不同深度的物体进行分类来确定面与面的绘制顺序,复杂度为$O(n\log n)$,其中n为三角形的个数,也存在一个无法解决的问题,不能处理无法确定绘制顺序的物体,例如下图互相遮挡的情况
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
###### Z-Buffer
|
||||
|
@ -23,7 +23,7 @@ date: 2022-05-18T14:07:33+08:00
|
|||
|
||||
Z-Buffer会在生成渲染图的同时根据各采样点(像素)的深度值生成深度图,颜色越深代表距离越近,越浅则越远
|
||||
|
||||

|
||||

|
||||
|
||||
算法
|
||||
|
||||
|
@ -42,5 +42,5 @@ for (each triangle T)
|
|||
|
||||
整体算法流程会形成如下图效果,复杂度为O(n),n为三角形面的数量
|
||||
|
||||

|
||||

|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ date: 2022-07-23T15:05:33+08:00
|
|||
|
||||
从某个立体角($\omega$)来的Radiance会打在dA上,在dA上转换成能量,并以光的形式辐射到另一个方向上去(dLr),即表现为出去的Radiance
|
||||
|
||||

|
||||
/reflaction_radiance_irradiance.png)
|
||||
|
||||
对于dA来说,其接收到的能量只考虑某一方向下立体角的Radiance,在投影后就可以计算dA接收到的Irradiance,Irradiance又会转换成Radiance反射出去
|
||||
|
||||
|
@ -29,7 +29,7 @@ date: 2022-07-23T15:05:33+08:00
|
|||
|
||||
BRDF描述了dA表面是如何把一个方向收集到的能量反射到另一个方向去(定义收集到的能量如何如何往各个方向去分配(漫反射还是镜面反射))
|
||||
|
||||

|
||||
/BRDF_define.png)
|
||||
|
||||
镜面反射下,反射出去的方向上分布了所有能量
|
||||
|
||||
|
@ -41,7 +41,7 @@ BRDF本质上描述了光线和物体是如何作用的,因而BRDF项也定义
|
|||
|
||||
反射方程定义的是任意着色点,在不同的光照下,我们考虑任意一个输入的光照的入射方向对出射方向的贡献,并累加所有入射方向的贡献
|
||||
|
||||

|
||||
/the_reflection_equation.png)
|
||||
|
||||
公式解释:
|
||||
|
||||
|
@ -68,21 +68,21 @@ $$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)
|
|||
|
||||
* 对于一个点光源,反射方程描述Li进来经过BRDF反射到观察方向上去的能量
|
||||
|
||||

|
||||
/understanding_flection_equation1.png)
|
||||
|
||||
* 如果有多个光源,就累加计算每个点光源光线到这个点反射到观测方向上的能量值
|
||||
|
||||

|
||||
/understanding_reflection_equation2.png)
|
||||
|
||||
* 如果有一个面光源(一堆点光源的集合),则将面光源上任意一个点的贡献积分起来
|
||||
|
||||

|
||||
/understanding_reflection_equation3.png)
|
||||
|
||||
渲染方程:
|
||||
|
||||
* 在考虑其他物体反射过来的光时,可以将反射面视为光源,由于渲染方程假设所有方向都是向外的,所以从x点指向反射面就要变成负的
|
||||
|
||||

|
||||
/understanding_rendering_equation1.png)
|
||||
|
||||
该点向某一观察方向辐射出去的Radiance是依赖于其他点辐射出去的Radiance,即为递归过程
|
||||
|
||||
|
@ -91,7 +91,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)
|
|||
|
||||
在某个方向看向一点时,我们不知道看到的能量(Lr)、从其他反射到这一点的Radiance,但其他项都已知,可定义物体的不同材质(diffuse、gloss、specular)
|
||||
|
||||

|
||||
/rendering_equation_simplify.png)
|
||||
|
||||
可利用数学上的一些简单表达式进行简化
|
||||
|
||||
|
@ -147,18 +147,19 @@ $$ L = E +KE+ K^2E +K^3E + \ldots $$
|
|||
|
||||
* 直接光照(光源能直接照射的地方有颜色,其余位置为黑的)
|
||||
|
||||

|
||||
/Direct_illumination_eg.png)
|
||||
|
||||
* 一次间接光照(光弹射两次)
|
||||
|
||||

|
||||
/one-bounce_global_illumination_eg.png)
|
||||
|
||||
* 两次间接光照(光弹射一次,两次,三次累积后的全局光照效果)
|
||||
|
||||

|
||||
/two-bounce_global_illumination_eg.png)
|
||||
|
||||
* 四次间接光照(玻璃灯内部变亮,在弹射三次时,仅足够进入物体,不足以离开物体)(双层玻璃需要两次弹射进入,两次弹射离开)
|
||||
|
||||

|
||||
/four-bounce_global_illumination_eg.png)
|
||||
|
||||
8次弹射和16次弹射只会提高暗处亮度,难以感知到
|
||||
|
||||
|
|
|
@ -12,11 +12,12 @@ $$Image = Synthesis + Capture$$
|
|||
|
||||
当然还有很多种成像方法,最简单的捕捉成像方法是使用相机。当然现在还在研究很多别的更好成像技术(比如:光线的传播其实是有时间的,有一些研究会研究光在极短时间内的传播,就可以看到光线真正在空间中进行传播的过程,这个过程叫Transient image(瞬息图像))
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
## 相机
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
最早的相机起源子小孔成像
|
||||
|
@ -27,7 +28,7 @@ $$Image = Synthesis + Capture$$
|
|||
|
||||
生活中常见的则为带透镜的相机
|
||||
|
||||

|
||||

|
||||
|
||||
### 相机部件
|
||||
|
||||
|
@ -35,17 +36,17 @@ $$Image = Synthesis + Capture$$
|
|||
|
||||
下图为去掉了镜头后的相机快门部分,控制光在多少分之一秒内进入相机
|
||||
|
||||

|
||||

|
||||
|
||||
* 传感器
|
||||
|
||||
记录传感器上任何一个点(像素)的Irradiance
|
||||
|
||||

|
||||

|
||||
|
||||
如果一个相机没有透镜或针孔是无法拍出照片的,如果将一个感光元件直接放在一个人的面前,任何一个点上都可能收集到来自不同方向的光,而这个点作为传感器无法区分来自各个方向的光线,此时会将各个方向的能量都综合在这个点上,会导致所有东西都是模糊的
|
||||
|
||||

|
||||

|
||||
|
||||
前沿中存在传感器可通过方向性的光分开记录的研究,但目前依旧认为只能记录Irradiance而非Radianc
|
||||
|
||||
|
@ -53,15 +54,15 @@ $$Image = Synthesis + Capture$$
|
|||
|
||||
小孔成像现象在公元前就已经被发现和提出
|
||||
|
||||

|
||||

|
||||
|
||||
在今天,针孔摄像机拍摄依旧可行,大多数使用的相机都是带有透镜的,
|
||||
|
||||
真正做一个如下图的针孔(硬纸板中间有一个6mm直径能透光的地方),也能用这个小针孔拍摄某个场景,记录在胶片上。但拍出来的东西是没有深度可言的,任何地方都不会是虚的,都一定是清楚的
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
虚化正是来源于透镜。在计算光线追踪是,我们使用的就是针孔摄像机的模型,所以也得不出不同的地方会有不同的模糊
|
||||
|
||||
|
@ -69,7 +70,7 @@ $$Image = Synthesis + Capture$$
|
|||
|
||||
视场往往意味着能够看到多大的范围,对于广角镜头,通常意味着能够拍到更广的角度,可见的FOV更大,对于手机上的相机,视场就相对比较小
|
||||
|
||||

|
||||

|
||||
|
||||
#### 从小孔成像的针孔摄像机理解视场
|
||||
|
||||
|
@ -89,7 +90,7 @@ $$FOV = 2\arctan(\frac{h}{2f})$$
|
|||
|
||||
不同视场决定不同拍照结果。视场和传感器大小及焦距相关,所以人们通常定义视场(FOV)以35mm格式的胶片为基准,固定传感器的大小,再通过定义焦距的方式来定义FOV
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
|
@ -109,13 +110,13 @@ $$FOV = 2\arctan(\frac{h}{2f})$$
|
|||
|
||||
当视场越窄,看到的东西越远
|
||||
|
||||

|
||||

|
||||
|
||||
#### 传感器(Sensor)大小和视场(FOV)
|
||||
|
||||
小一点的传感器会对应小一点的视场
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
##### 传感器与胶片
|
||||
|
@ -126,7 +127,7 @@ $$FOV = 2\arctan(\frac{h}{2f})$$
|
|||
|
||||
大相机有大的传感器也就有大的分辨率,所以不同相机价格各不相同,相机机身越大,镜头越大越长越好,价格也就越高
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
#### 曝光
|
||||
|
@ -163,7 +164,7 @@ Irradiance往往由光圈大小(影响镜头接收到多少光)和焦距决定
|
|||
* 第二行参数使用分数表示快门速度(1/1000即为快门开放1/1000秒)
|
||||
* 第三行参数是ISO,不同ISO可简单理解为相乘
|
||||
|
||||

|
||||

|
||||
|
||||
#### ISO简单地放大信号会放大噪声
|
||||
|
||||
|
@ -175,7 +176,7 @@ Irradiance往往由光圈大小(影响镜头接收到多少光)和焦距决定
|
|||
|
||||
将光认为是光子,如果快门时间不足,那么进入感光元件的光子数就少,光子数少就会造成noisy
|
||||
|
||||

|
||||

|
||||
|
||||
#### 光圈与F数
|
||||
|
||||
|
@ -187,14 +188,14 @@ Irradiance往往由光圈大小(影响镜头接收到多少光)和焦距决定
|
|||
|
||||
* 如图,调光圈可以直接调出曝光度
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
#### 快门曝光时间对结果的影响
|
||||
|
||||
快门
|
||||
|
||||

|
||||

|
||||
|
||||
* 调节曝光度
|
||||
|
||||
|
@ -204,11 +205,11 @@ Irradiance往往由光圈大小(影响镜头接收到多少光)和焦距决定
|
|||
|
||||
更长的快门时间会造成更严重的运动模糊,对于等长的快门时间,物体运动越快,越容易出现运动模糊
|
||||
|
||||

|
||||

|
||||
|
||||
但是更短的快门时间,曝光度也降低了,所以为了达到相同的亮度,就要调节ISO或光圈的大小
|
||||
|
||||

|
||||

|
||||
|
||||
运动模糊的好处
|
||||
|
||||
|
@ -219,13 +220,13 @@ rolling shutter问题
|
|||
|
||||
电子控制的快门可以认为是任何时刻任何位置同步打开,但机械快门则需要一个过程,如果物体运动比机械快门的速度快就会出现Rolling Shutter问题,因为图像上不同位置可能记录的是不同时间进来的光
|
||||
|
||||

|
||||

|
||||
|
||||
#### 均衡快门和光圈
|
||||
|
||||
快门的时间打开得短就会暗,那就可以提高光圈的大小,用更小的F数。以下的表格上下对应的参数基本可以达到相同的曝光度。但达到的效果并不会一模一样(因为大光圈会引起前景深的问题,快门时间又会引起运动模糊)
|
||||
|
||||

|
||||

|
||||
|
||||
-----
|
||||
|
||||
|
@ -235,17 +236,17 @@ rolling shutter问题
|
|||
|
||||
每秒拍摄更多帧数然后按正常帧数播放,每张照片的快门时间非常少又需要保证每张都清晰且有正常的曝光度,可以用更大的光圈和更高ISO
|
||||
|
||||

|
||||

|
||||
|
||||
#### 超低速(长曝光)摄影
|
||||
|
||||
用非常小的光圈慢慢拍,也就是所谓的延迟摄影,摄影界中称为拉丝,也就是长曝光造成的运动模糊
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
## 镜头
|
||||
|
||||
|
@ -255,13 +256,13 @@ rolling shutter问题
|
|||
|
||||
无论相机还是手机,都不使用单个透镜来成像,往往使用一个透镜组
|
||||
|
||||

|
||||

|
||||
|
||||
* 真正的镜头元素是不理想的
|
||||
|
||||
如下图,一面是凸的,一面是平的,这样就不可能将光聚在一起
|
||||
|
||||

|
||||

|
||||
|
||||
* 我们研究的是理想的薄透镜(忽略厚度)
|
||||
|
||||
|
@ -271,7 +272,7 @@ rolling shutter问题
|
|||
2. 光路有可逆性,如果光线穿过焦点,被透镜折射后会变成平行的一束光
|
||||
3. 假设薄透镜可以任意改变焦距(透镜焦距固定,相机能改是因为透镜组)
|
||||
|
||||

|
||||

|
||||
|
||||
* 透镜满足的物理规律
|
||||
|
||||
|
@ -295,18 +296,19 @@ $$\frac{1}{f} = \frac{1}{z_i}+\frac{1}{z_o}$$
|
|||
|
||||
平行光必定过焦点,过焦点的光会变成平行光
|
||||
|
||||

|
||||

|
||||
|
||||
忽略中间过透镜中心的光
|
||||
|
||||

|
||||

|
||||
|
||||
可见如下图的几何关系,左侧在光到达透镜前可形成两个相似三角形,右侧也相同
|
||||
|
||||

|
||||

|
||||
|
||||
将两组关系做运算
|
||||
|
||||

|
||||

|
||||
|
||||
### 散焦模糊(Defocus Blur)(景深)
|
||||
|
||||
|
@ -318,7 +320,7 @@ $$\frac{1}{f} = \frac{1}{z_i}+\frac{1}{z_o}$$
|
|||
|
||||
* 如果物体不在Focal Plane上会出现模糊
|
||||
|
||||

|
||||

|
||||
|
||||
* 模糊原因
|
||||
|
||||
|
@ -338,7 +340,7 @@ $$\frac{C}{A} = \frac{d'}{z_i} = \frac{|z_s - z_i|}{z_i}$$
|
|||
|
||||
下图光圈f数为1.4,为大光圈,可以看到更模糊的效果
|
||||
|
||||

|
||||

|
||||
|
||||
#### 光圈大小
|
||||
|
||||
|
@ -360,11 +362,11 @@ $$N = f/A$$
|
|||
|
||||
* 例子
|
||||
|
||||

|
||||

|
||||
|
||||
* CoC的大小和F数成反比
|
||||
|
||||

|
||||

|
||||
|
||||
$$C = A\frac{|z_s - z_i|}{z_i} = \frac{f}{N}\frac{|z_s - z_i|}{z_i}$$
|
||||
|
||||
|
@ -376,7 +378,7 @@ $$C = A\frac{|z_s - z_i|}{z_i} = \frac{f}{N}\frac{|z_s - z_i|}{z_i}$$
|
|||
|
||||
* 实例
|
||||
|
||||

|
||||

|
||||
|
||||
#### 具体实现
|
||||
|
||||
|
@ -388,7 +390,7 @@ $$C = A\frac{|z_s - z_i|}{z_i} = \frac{f}{N}\frac{|z_s - z_i|}{z_i}$$
|
|||
|
||||
根据物距$Z_o$和焦距,可计算像距$Z_i$
|
||||
|
||||

|
||||

|
||||
|
||||
* 使用光线追踪算法渲染
|
||||
|
||||
|
@ -399,7 +401,7 @@ $$C = A\frac{|z_s - z_i|}{z_i} = \frac{f}{N}\frac{|z_s - z_i|}{z_i}$$
|
|||
在透镜上另选X",两点连线便可知道其方向,且感光元件上的X'处会记录这条线上的Radiance
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
* 景深(Depth of Field)
|
||||
|
@ -408,11 +410,11 @@ $$C = A\frac{|z_s - z_i|}{z_i} = \frac{f}{N}\frac{|z_s - z_i|}{z_i}$$
|
|||
|
||||
过大的光圈对应大的CoC,一个点会变成更大的圆,所以就会更模糊,但总归在一些地方是不模糊的,即不同光圈大小会影响模糊范围
|
||||
|
||||

|
||||

|
||||
|
||||
如下图中,一个光经透镜会打到一个成像平面,该成像平面附近区域都认为CoC足够小
|
||||
|
||||

|
||||

|
||||
|
||||
景深:实际场景中有一段深度,该深度经透镜后会在成像平面附近形成一段区域,区域内认为CoC是足够小的
|
||||
|
||||
|
@ -424,11 +426,11 @@ $$C = A\frac{|z_s - z_i|}{z_i} = \frac{f}{N}\frac{|z_s - z_i|}{z_i}$$
|
|||
|
||||
如下图,考虑景深的最远和最近处,分别让它们穿过透镜,到某一地方可以得到右边的范围
|
||||
|
||||

|
||||

|
||||
|
||||
DOF参数效果
|
||||
|
||||

|
||||

|
||||
|
||||
* 修改焦距
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ date: 2022-07-09T21:49:09+08:00
|
|||
|
||||
###### 重心坐标定义
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
对于一个三角形的三点坐标A,B,C,平面内的一点(x,y)可以写成三点的线性组合式
|
||||
|
@ -24,7 +24,7 @@ $$(x,y)=\alpha A + \beta B + \gamma C = \alpha + \beta + \gamma = 1$$
|
|||
|
||||
###### 三角形的几何角度下求解
|
||||
|
||||

|
||||

|
||||
|
||||
将点与三个顶点相连,三个三角形的面积分别为$A_A,A_B,A_C$对应的重心坐标的计算式,
|
||||
|
||||
|
@ -57,7 +57,8 @@ $$\alpha = 1 - \beta - \gamma$$
|
|||
对于重心坐标系存在另一种等价视角:
|
||||
|
||||
以A点为原点,AB,AC分别为新的坐标系的单位向量构建坐标系,如图
|
||||

|
||||
|
||||

|
||||
|
||||
给定的任意点P的坐标可表示为$P(\beta , \gamma)$ ,可推出P点坐标满足以下关系
|
||||
|
||||
|
@ -91,7 +92,8 @@ $$
|
|||
###### 重心坐标的用处
|
||||
|
||||
对顶点处的值进行线性插值,如下图
|
||||

|
||||
|
||||

|
||||
|
||||
$$V = \alpha V_A + \beta V_B + \gamma V_C$$
|
||||
|
||||
|
@ -176,7 +178,7 @@ sample's color : 通常为漫反射率值 kd
|
|||
|
||||
此时我们会选取红点位置周围的四个采样点,同时计算其与周围四个采样点的偏移值(s,t)如下图
|
||||
|
||||

|
||||

|
||||
|
||||
可得相应的计算过程:
|
||||
|
||||
|
@ -197,7 +199,7 @@ $$f(x,y) = lerp(t,u_0,u_1)$$
|
|||
|
||||
此时在点采样下会产生摩尔纹和锯齿,如下图
|
||||
|
||||

|
||||

|
||||
|
||||
通常处理是进行超采样,同时也会有几个问题
|
||||
|
||||
|
@ -209,24 +211,24 @@ $$f(x,y) = lerp(t,u_0,u_1)$$
|
|||
|
||||
所以我们更倾向于使用范围序列而非点序列
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
###### Mipmap(支持 Range Query)
|
||||
|
||||
mipmap 可由下图表示
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
对应产生的mip层次结构也由下图表示
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
在计算对应层次的mipmap时,我们需要相邻采样点的纹理坐标来估计纹理内存
|
||||
|
||||

|
||||

|
||||
|
||||
如上图所示,我们能够得到两个值
|
||||
|
||||
|
@ -237,7 +239,7 @@ $$D = \log_2 L$$
|
|||
在使用时往往D值会四舍五入为整数,这会导致纹理的不连续,因此,我们还需要进行下图所示的Trilinear Interpolation 从而得到一个连续的D值
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
在插值处理后的纹理依旧会存在过度模糊(overblur)的现象,但相比于超采样的高性能开销依旧有很大的提升
|
||||
|
||||
|
@ -248,7 +250,7 @@ Anisotropic Filtering
|
|||
2. 对角线纹理处理依旧存在问题
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
EWA filtering
|
||||
1. 权重均衡
|
||||
|
@ -258,7 +260,7 @@ EWA filtering
|
|||
|
||||
Irregular Pixel Footprint in Texture的产生情况如下图
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
#### 纹理的应用
|
||||
|
@ -283,23 +285,23 @@ Irregular Pixel Footprint in Texture的产生情况如下图
|
|||
|
||||
环境光贴图通常指在贴图上绘制模型周围环境光效,实现某些模型反射环境光的效果
|
||||
|
||||

|
||||

|
||||
|
||||
也用于一些镜面反射的物体实现真实光照
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
在一些球型表面贴图会存在形变问题,如下图的顶部和底部
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
立方体贴图则由球体上一个向量沿自身方向映射到立方体上的点获得
|
||||
|
||||

|
||||

|
||||
|
||||
一个立方体使用6个方形纹理贴图来生成纹理
|
||||
|
||||
|
@ -319,7 +321,7 @@ Irregular Pixel Footprint in Texture的产生情况如下图
|
|||
3. 扰动后的法线值为$$n(p) = (-dp,1).normalized()$$
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
扰动法线的计算(3D)
|
||||
|
@ -381,20 +383,20 @@ Displacement mapping
|
|||
2. 与Bump mapping 使用相同纹理贴图
|
||||
3. 会改变模型顶点坐标
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
3D程序化噪声和实体建模
|
||||
|
||||

|
||||

|
||||
|
||||
将部分着色效果提前绘制到贴图上
|
||||
|
||||

|
||||

|
||||
|
||||
3D图像纹理和体绘制
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ date: 2022-05-12T22:08:22+08:00
|
|||
|
||||
屏幕是由一个个像素组成,在光栅化时,只有中心被三角形覆盖的像素会被着色,而且被覆盖的像素点的分布往往是离散的,自然而然地形成如下图斜线形成的阶梯状的锯齿
|
||||
|
||||

|
||||

|
||||
|
||||
---------------
|
||||
|
||||
|
@ -20,15 +20,15 @@ date: 2022-05-12T22:08:22+08:00
|
|||
###### 采样(sample)
|
||||
采样就是将连续信号转换成离散信号(采样信号),经过滤波后会被恢复成重建信号
|
||||
|
||||

|
||||

|
||||
|
||||
如果采样的频率过低,则会发生走样或混叠(aliasing),如图中,蓝色的为原信号,红色为采样点,绿色虚线为重建后的信号
|
||||
|
||||
过低的采样频率会使重建的信号成为低频信号
|
||||

|
||||

|
||||
|
||||
若采样频率恰好是原信号的两倍,重建信号则表现为一条直线
|
||||

|
||||

|
||||
|
||||
采样理论(sampling theorem):采样频率必须为原信号频率的两倍以上,才能完整地重建原始信号,存在一个最大频率,因而采样频率有频带限制
|
||||
<br>奎斯特率(Nyquist rate): 频率为原信号频率两倍的采样频率<br>
|
||||
|
@ -37,28 +37,28 @@ date: 2022-05-12T22:08:22+08:00
|
|||
|
||||
重建时需要采样信号进行滤波,通常使用下图中的三种滤波器(box filter,tent filter,sinc filter),且滤波器的面积必须为1以确保恢复的信号不会被放大或缩小
|
||||
|
||||

|
||||

|
||||
|
||||
box filter 对信号进行滤波并重建信号的过程如下图
|
||||
<br>直接将采样点位置替换为box filter波形的方式会因 box filter 本身的不连续使重建信号产生不平滑的现象<br>
|
||||
但仍然因其易于实现的特性被用于重建
|
||||
|
||||

|
||||

|
||||
|
||||
-----------
|
||||
tent filter 在滤波时会对每个相邻的采样点之间使用线性插值,一次重建的信号更加平滑,但采样点位置会发生斜率突变,所以tent filter 并不完美
|
||||
|
||||

|
||||

|
||||
|
||||
-------------
|
||||
出于让重建信号保持平滑的目的,我们必须使用一个理想低通滤波器
|
||||
|
||||
基于傅立叶变换理论的解释:理想低通滤波器在频域中的表现类似于box filter,在频域中相乘时会过滤掉所有超过这个滤波器宽度的频率,在频域的box fliter 转换到空域的时候会是一个sinc filter ,在频域相乘也等价于在空域中进行卷积,卷积即为滤波
|
||||

|
||||

|
||||
|
||||
例如sinc filter就能够实现过滤高频信号,保留低频信号的理想低通滤波器效果
|
||||
|
||||

|
||||

|
||||
|
||||
对于sinc filter 在假设采样频率为$f_s$,采样点间隔为$\frac{1}{f_S}$的情况下,它会过滤掉超过$\frac{f_S}{2}$的所有高频信息,因此,sinc filter 在采样频率为1.0会是一个理想低通滤波器,此时采样信号的最大频率应当小于$\frac{1}{2}$,但是由于sinc filter 有无限的滤波范围,所以它会在某些范围内出现负值
|
||||
|
||||
|
@ -73,17 +73,17 @@ tent filter 在滤波时会对每个相邻的采样点之间使用线性插值
|
|||
设采样信号灯的采样间隔为整数列,间隔为1,则我们可以通过重采样来将采样点间隔变为a,当$a>1$时会缩小信号(downsampling),$a<1$时会放大信号(upsampling)
|
||||
|
||||
如图,对重建信号使用双倍采样率进行重采样便实现了信号放大
|
||||

|
||||

|
||||
|
||||
这种方法不适用于信号缩小,易使信号过于高频
|
||||
|
||||
对于信号缩小的情况,我们需要先对1间隔采样信号使用$sinc(\frac{x}{2})$ filter 滤波产生一个连续信号,再重采样2间隔,由于频谱范围更大的低通滤波器才能过滤更多的高频信号,类似于对图像进行第一次模糊再重采样产生一个低分辨率图像
|
||||
|
||||

|
||||

|
||||
|
||||
由下图可见,滤波可以对三角形的边缘产生模糊,进而产生一定的反走样效果
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
### 反走样
|
||||
|
||||
|
@ -93,7 +93,7 @@ tent filter 在滤波时会对每个相邻的采样点之间使用线性插值
|
|||
|
||||
对于我们之前提到的采样,我们只对像素正方形的中心进行是否在三角形内部的判断,这意味着对于边缘的像素正方形,无论覆盖面积有多大,只要不包含中心点都会被判定在三角形外,从而不被渲染,当采样率提升,如下图的4spp(sample per pixel)以某种方式混合计算获得更好的像素效果
|
||||
|
||||

|
||||

|
||||
|
||||
Screen-Based Antialiasing 通常在屏幕空间区域使用采样图案来采样从而对颜色进行如下的加权计算
|
||||
|
||||
|
@ -129,7 +129,7 @@ SSAA又被称为全屏幕抗锯齿(full-screen antialiasing,FSAA),也叫超采
|
|||
实现方式简单,只需要一个高分辨率图像和box filter就可以实现
|
||||
|
||||
下图是采样点在像素点内位置类型
|
||||

|
||||

|
||||
|
||||
案例:NAVIDIA's DSR(dynamic super resolution)
|
||||
|
||||
|
@ -142,11 +142,11 @@ SSAA又被称为全屏幕抗锯齿(full-screen antialiasing,FSAA),也叫超采
|
|||
MSAA同样在一个像素中设置多个采样点,在光栅化时计算三角形在像素内对采样点的覆盖率,之后只计算每个片元的像素着色器,采样中心点的位置计算颜色信息再乘上覆盖率,最后输出这个像素的颜色
|
||||
|
||||
颜色计算与深度判断
|
||||

|
||||

|
||||
|
||||
总体流程如下
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
与SSAA不同的是,MSAA只对每个像素计算一次采样,而非对整个图像进行渲染,但计算量依旧倍增
|
||||
|
||||
|
@ -159,6 +159,6 @@ MSAA同样在一个像素中设置多个采样点,在光栅化时计算三角
|
|||
|
||||
例如,EQAA在2f4x模式下,会对每四个采样点计算并通过表的形式存储颜色和深度值(如下图),这使得四个采样点只需1bit空间就可以确认像素位置的着色颜色值
|
||||
|
||||

|
||||

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

|
||||

|
||||
|
||||

|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ date: 2023-08-05T22:33:01+08:00
|
|||
|
||||
由线性变换结论可知变换后向量位置是原向量位置与变换后向量相乘
|
||||
|
||||

|
||||

|
||||
|
||||
由此我们可以推导出在未知变换方式情况下计算变换后向量的方法
|
||||
|
||||
|
|
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 368 KiB |
After Width: | Height: | Size: 532 KiB |
After Width: | Height: | Size: 550 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 544 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 56 KiB |