GAMES101—学习笔记(更新中)

课程链接:GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibili

一.概述

课程主体

Course Topics 

1.Rasterization 光栅化

2.Curves and Meshes 曲线和网格

3.Ray Tracing 光线追踪

4.Animation/Simulation 动画/模拟

1.图形学不涉及推断推演,属于计算机视觉的内容。

2.2D→3D属于计算机视觉,3D→2D偏向图形学。


二.Review of Linear Algebra线代综述

1.点乘

两向量通过点乘判断方向(大于0同向,小于0反向)。

通过点乘判断距离。

2.叉乘

判断左右。 

a X b 若为正,代表b在a的左侧,即a经过不到180°的逆时针旋转可以与b的方向一致。

判断内与外。

用三角形三顶点与P点组成的向量:如AP和AB,判断AP是否在AB左侧,同理判断其余两边都在左侧。(或三边都为右侧同样可以。)


三.Transformation

引入齐次坐标系,将二维平面的坐标升维,统一形式表示,描述可包含平移的仿射变换。

(先线性变换,再平移变换)

1.View/Camera Transformation 视图/相机投影  

三维坐标具有轮转对称性,导致Ry(α)的特殊。(xyzxyzxyzxyz   y←zx而不是xz)

Rodrigues旋转公式:把三维空间中任意旋转分解为xyz轴三个方向的旋转

2.Projection Transformation 投影变换

1.Orthographic projection 正交投影

将任意大小的立方体根据变换转化为(-1,1)^3的标准立方体

2.Perspective projection 透视投影 (近大远小性质)

根据透视投影的特性,在z面投射到z'面的过程中,x与y坐标的变化适用于相似三角形,即总可以根据相似比例确定投射后x'及y'的相对于z的对应位置。

忽略z的变化,因为在投影过程中,z和z’平面的位置是确定不变的,无需考虑。

因此我们可以确定变换矩阵第三列前两个参数一定是0:

此时还剩AB两个参数没有确定,我们利用z和z'平面的中点,如下图的n和f(这两个特殊点在变换矩阵的作用下的位置总是不变的),联立方程即可解出A和B的值:

到此为止,我们的透视投影到正交投影的变换矩阵 M persp→ortho 就得出了,作用便是将平面z'挤压为平面z的大小(在z'的平面内完成挤压,并且规定z'的中点是不变的),而后我们在乘以M ortho,便可将挤压后的平面投射到预设的位置。

四.Rasterzation

1.Triangles

屏幕就是像素的数组,光栅化意为在屏幕上绘制。

像素是一个个小方格,颜色是均匀的(红绿蓝)

限制屏幕大小为(width,height),则像素Pixel的索引范围从(0,0)到(width-1,height-1)

视口变换viewport

将不含Z方向的XY屏幕中[-1,1]^2转换为屏幕空间[0,width] x [0,height]

LCD液晶显示

利用光的波动性,扭曲偏振光

在某个点取连续函数的值称为采样。

2.MSAA

在像素内部增加多个采样点进行处理

3.Z-Buffer

画家算法Painting Algorithm

对深度排序后绘制,处理不了交叉堆叠问题

深度缓存Z-Buffer

深度缓存按像素处理,同时绘制帧缓存深度缓存

在光栅化中遍历每一个三角形,对于该三角形中每个像素,记录它的最浅深度(z小于缓存则更新当前rgb到帧缓存中,并更新深度缓存。

对每个像素遍历并记录深度最小值

Z-Buffer算法复杂度:o(n)


五.Shading

对于shading只考虑local,即在该点的各种光照数值,不考虑别的点或物体的存在。(着色具有局部性,着色不等于阴影)

1.漫反射Diffuse Reflection

光照与物体法线的夹角决定了光的亮度

ld:漫反射光

kd:扩散系数(颜色)rgb

I/r^2:点光源到达该shading point的能量 

max(0,n*l):取非负数,使计算有效,法线与光源的余弦值

漫反射与观察方向无关

2.镜面反射Specularly Reflected Light

光照照向接近光滑的物体表面产生反射光v,这个v与真正的镜面反射光R会产生一个夹角

引入半程向量的概念,直接求l与v的角平分线向量h,该向量会与法线向量n产生一个夹角α,以此度量v与R的偏差,方便计算。当n和h足够接近时,可以看到高光

ks:镜面系数

p:控制对可见高光范围的容忍度

镜面反射与观察方向有关

3.环境光照Ambient Term

环境光与观察方向和L无关,是一个常数

布林冯着色模型=环境光+漫反射光+镜面高光

4.着色频率Shading Frequencies

1.逐三角形着色Flat shading

2.逐顶点着色Gouraud shading

顶点法线向量的计算

对该点相邻三角形求法线,进行加权(一般是三角形面积)平均

3.逐像素着色Phong shading

像素法线向量的计算

利用重心坐标


5.图形管线Graphics(Real-time Rendering)Pipeline

着色器Shader

定义Shading中每个顶点或者像素如何操作

6.纹理映射Texture Mapping

三角形的任何一个顶点都规定了对应在纹理上的坐标。

在纹理上的坐标系(u,v)

7.重心坐标Barycentric Coordinates

插值计算

为什么要进行插值计算?

1.获取顶点坐标

2.在三角形中获得平滑变化的值

插值计算些什么?

纹理坐标,颜色,法向量等

如何计算?

利用重心坐标

三角形平面内任意一点都可表示成顶点坐标的线性组合

也可以利用三角形面积比求出

1.双线性插值Bilinear interpolation

如图所示,黑色点阵代表texel纹素,红点代表某个像素映射到纹理的位置,对其相邻4个纹素,在水平方向应用两次插值获得两个点后应用竖直方向的插值,即可得到最终平滑过渡的值。

2.Mipmap

当距离过远时,一个像素可能覆盖多个纹素,会导致走样。

为解决大纹理导致的走样问题,同一纹理生成的多张(log)分辨率不同、大小成倍缩减的纹理。

用于正方形范围内的范围查询

开销是原本的三分之四

如上图所示,要求出(u,v)像素点对应的纹理映射,可以采取近似法:

(1)找到其邻居节点对应的纹理坐标

(2)求出该点与邻居节点在纹理坐标上的距离,并取最大值

(3)在uv系下以该值为边长,该点为中心生成正方形

(4)计算D=log2L,该D表示在第几层的mipmap中,该区域会被映射为1x1的像素

(5)直接取mipmap第D层的值作为结果

3.三线性插值Trilinear Interpolation

在Mipmap第D层和第D+1层同时应用双线性插值后对结果合并再进行一次插值。用于D非整数的情况

4.各向异性过滤Anisotropic Filtering

mipmap在某些情形下会使得远处过于模糊,产生overblur

mipmap处理正方形,而无法处理长或宽被压缩的矩形。相比mipmap各项异性过滤有各个方向的压缩矩形,可查询矩形而非限制在正方形。(开销是原本的三倍)

各向异性过滤允许对以上所示长条形区域作快速的范围查询,而非是大范围的正方形mipmap查询。*(但对斜着的区域还是解决不了问题)

EWA Filtering

将任意不规则形状拆成多个圆形覆盖该形状,多次查询。精准但费时。

8.纹理的作用

1.环境光照

存储环境光

2.凹凸贴图Bump Mapping

纹理可以定义在每个顶点上的相对高度,(法线变化),实现复杂几何的简单表现

1.在不增加三角形的情况下添加表面细节

2.每个像素对其法线进行扰动(只用于着色计算)

3.由纹理定义每个texel的高度偏移

如何修改法向量?

用凹凸贴图定义切线,并逆时针旋转90度,就是法线

3.位移贴图Displacement Mapping

真实改变了三角形顶点的位置

4.3D程序化噪声Procedural Noise

空间中任意一个点都定义了纹理,并通过函数计算出右图,而非实际贴在了物体表面

5.阴影

纹理可以记录一些计算好的信息,并且用于在Shader中进行解释

6.3D体积渲染

9.阴影Shadow Mapping

处理点光源投射的阴影(硬阴影

关键思想:处理某个点并非同时被光源和摄像机看到

具体分两步:

1.第一次投影。认为光源处有一个虚拟相机和一张虚拟场景图。从光源向场景看去,记录每个点所能看到的最大深度。

2.第二次投影。实际从相机出发,渲染出实际场景,并将所求点重新投影回虚拟场景,寻找该点在虚拟场景中的可视深度,与其实际深度作比较,即可看出该点是否在阴影中。 (两趟光栅化)

软阴影不可能存在于点光源(本影,半影的过渡)


六.Geometry

1.隐式几何implicit

定义表达式,找出所有符合该表达式的点。

隐式几何优点:

1.方便表述

2.易于一些查询(到面距离,是否在物体表面等)

3.适用于射线到曲面的相交

4.对于简单的形状描述精确,没有采样误差

5.易于处理拓扑中的更改

缺点:

难以对复杂形状建模

1.距离表述几何Distance Functions  

定义距离函数,不直接描述几何表面,而是描述任何一个点到这个表面的最近距离。

分别对两个几何求距离函数,进行blend

(水平集)当距离函数等于0时,还原(提取)出几何体表面,类似等高线。

2.显式几何explicit

确定二维坐标,而后映射到三维

1.点云Point Cloud

把三角形面离散成点,表示表面的每一个点。

2.多边形网格Polygon Mesh

存储顶点和多边形(通常是三角形或四边形)
易于处理/模拟,自适应采样
更复杂的数据结构
图形中最常见的表示形式

3.曲线和曲面Curves and Surfaces

1.贝塞尔曲线(显式表示)

d.c.算法

找到某个时间t在贝塞尔曲线上的点

1.在b01,b12上找到t

2.连接这两个t,再从该线段上找到b02,该点即为所求点

整条曲线上任意一点都可以由初始的b0,b1,b2三个点和参数t表示。此处系数为1的展开

(1-t+t)

伯恩斯坦多项式(二项式展开)

贝塞尔曲线的性质
1.一定过起点和重点
2.对于三次贝塞尔曲线(4个控制点),确定了起始方向是三倍切线。
3.仿射变换性质 可通过变换控制点变换曲线
4.凸包性质 曲线在控制点的凸包内

补充知识:b-样条,b-splines,NURBS

2.贝塞尔曲面

4x4网格给定16个控制点,做出4条贝塞尔曲线,而后通过不同时间t确定4个点,并将这4个点认为是贝塞尔曲线的控制点,做出新的贝塞尔曲线,利用该曲线伴随时间的移动得到一个曲面。

该面需要两个时间参数u,v,一个水平方向一个竖直方向,u找线,v找面

由于贝塞尔曲面是参数u,v表示的,所以它是显式表示。

4.细分Subdivision

1.Loop Subdivision

思想:先细分,再调整

新生成的点是其周围几个值的平均

老顶点的变动一部分受到自身影响,保留自身的一部分属性,另一部分受该顶点的度影响(周围节点的平均)

2.Catmull-Clark Subdivision(General Mesh)

非四边形面

奇异点(度不为4的点)

更新规则

5.网格简化

1.边坍缩collapsing an edge

使用动态优先队列/堆,储存二次度量,每次取最小的边,而后更新。


七.Ray Tracing

Recursive(Whitted-Style) Ray Tracing

模拟光线不断弹射的过程,在其每一个交点求着色和阴影而后加和。

1.Ray Equation

1.光线和隐式表面求交

2.光线和显示表面求交

(1)判断光线和三角形所在平面的交

(2)判断交点是否在三角形内

一步到位法:

利用重心坐标

2.Bounding Volumes

加速光线三角形求交

简化光线和三角形求交,使用AABB包围盒

思想:将AABB视作三对平行平面,在二维场景中,(xoy)为例子,从光源分别计算到x0x1,y0y1这两对平行平面的进入和移出的时间,而后求这两个时间的交集,得到光源实际进入和移出盒子的时间。

扩展到三维场景:光线何时进入和离开box?

只有当光线进入到所有三个对面,才算进入盒子。光线离开任意一对对面,就算离开盒子。

算法:

1.对于每对对面,各自计算最大和最小进入离开时间。

2.求所有三组进入时间的最大值,离开时间的最小值。

3.当t进入<t离开,说明该段时间光线在盒子里。

处理t<0时:

加速思想:多做光线与box求交,少做与物体求交

1.KD-Tree

1.光线和包围盒求交点

2.若有交点,和其左右子树分别求交点

3.递归,直到求到叶子节点,并判断光线和叶子节点内每个物体是否有交点

缺陷:一个物体可能被多个叶子包含,判断费时。

2.Bounding Volume Hierarchy (BVH)

划分的不是空间而是物体

给物体分类,一个物体不可能同时在两个盒子里。

快速划分算法

KD-Tree和BVH的比较

空间分区(例如KD树)
1.分割空间
2.不重叠区域
3.对象可以包含在多个地区
对象分区(例如BVH)
1.将一组对象划分为不相交子集
2.每组的边框可能在空间上重叠

3***.辐射度量学Radiometry

辐射通量Radiant flux:功率(Q对时间t的导数)

Radiant Intensity:辐射强度,表示从光源任意方向看去,光照强度的大小

立体角:空间中的一个角度

dA表示面积微元

dw表示微分立体角

1.辐照度Irradiance

定义:单位面积上的辐射通量(每个面积上收到的能量)

辐照度与光线和平面所成角度有关

2.辐射亮度Radiance

定义:描述光源发出的光强度在特定方向上的分布情况的物理量

辐射亮度的定义涉及到几个关键概念:

  • 辐射功率(Radiant Power):也称为辐射通量,是单位时间内辐射能量的量度,用瓦特(W)作为单位。
  • 单位面积:辐射亮度考虑的是通过某个特定方向上单位面积的辐射功率。
  • 单位立体角:立体角是三维空间中角的概念,与平面角相似,但它测量的是某点周围空间区域的大小。单位立体角内的辐射亮度反映了光源向该方向发射光的能力。

辐射亮度的单位是瓦特每平方米每球面度(W/m²·sr),其中“sr”表示立体角的单位“球面度”。

3.BRDF

双向反射分布函数:Bidirectional Reflectance Distribution Function

双向反射分布函数(Bidirectional Reflectance Distribution Function,简称BRDF)是用于描述光在被物体表面反射时方向分布特性的函数。它是计算机图形学、光学和视觉感知领域中用于模拟和理解光与物体交互的重要工具。BRDF具体定义了入射光线如何被表面材料反射到不同方向上。

基本概念

BRDF的定义涉及以下几个关键概念:

  • 入射光线:光线落在物体表面的方向。
  • 反射光线:光线从物体表面反射出去的方向。
  • 辐射亮度:表面在特定方向上反射的光的强度。
  • 入射辐照度:落在物体表面的光的强度。

渲染方程

why Ray Tracing?

相较于光栅化更好解决间接光照

4.蒙特卡洛路径追踪

从均匀分布扩展到一般情形,除以每个点的PDF后求和。

The Utah teapot

采用蒙特卡洛积分解渲染方程

如果只在着色点采样,打出去大量光线若不命中光源会造成大量的浪费。如何解决呢?

想办法直接在光源上采样:将对dw的积分转换为对光源上dA的积分

立体角本身是不变的,只不过转化为在dA处求。

对于来自于光源的贡献:用从光源采样来做

对于所有非光源对于该点的贡献:使用RR的普通采样来做

整个流程


七.Materials and Appearances

1.Material

Material==BRDF

漫反射材质

不计损失,入射的irradiance等于出射的irradiance,故入射的Radiance应等于出射的Radiance

Glossy材质反射

透镜反射/折射

1.折射Refraction

当入射介质的折射系数大于出射时会发生全反射。

2.菲涅尔项Fresnel Terms

3.微表面模型Microfacet Material

远处看是外观,近处看是几何

微表面模型的BRDF

D(h)表示考虑什么样的微表面才能把入射反射到对应的出射,换句话说,即满足这对入射出射所对应的half vector对应于该微表面有多少满足的half vector。

4.各向异性和各向同性

微表面材质中,各向同性法线分布相对均匀,而各向异性法线分布具有一定明确的方向性。

特殊而有趣的各向异性材质:velvet天鹅绒


  • 23
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值