By 闫令琪 UC Santa Barbara https://www.bilibili.com/video/BV1X7411F744
-
What is CG?
-
Why study CG?
-- Applications
-- Fundamental Intellectual
-- Technical Challenges
-
Course Topics
-
Course Logistics
What is CG?
The use of computers to synthesize and manipulate visual information.
Applications:
1、Video Games -- e.g. 只狼 画面足够亮的游戏,往往质量较高(渲染中的全局光照做的比较好)
Borderlands 3 无主之地 卡通风格(怎么实现?)
2、Movies -- The Matrix(黑客帝国) Avatar(阿凡达)
特效(special effects)通过图形学实现(特效的应用并不难,平时见得少,做的粗糙也没太大关系哈哈哈哈) Rendering
3、Animations(动画) -- Zootopia(疯狂动物城)
Frozen 2(冰雪奇缘2)
4、Design -- CAD(Computer Aided Design)计算机辅助制图
Ikea(宜家) 75% of catalog is rendered imagery
5、visualization 可视化
6、Virtual Reality 虚拟现实VR:看到的东西都是电脑生成的
Augmented Reality 增强现实AR:可以看到现实的东西+电脑增加的部分
7、Digital Illustration 数码插画 -- Photoshop
8、Simulation 模拟 -- 沙尘暴、黑洞
9、GUI:Graphics User Interfaces 图形用户接口
10、Typography 字体设计: 点阵/矢量
Course Topics:
- Rasterization 光栅化 OpenGL/Shader如何运作
- Curves and Meshes 曲线与曲面
- Ray Tracing 光线追踪
- Animation / Simulation 动画/模拟
CG ≠ CV Deep Learning
CV是处理现实问题,CG是重现现实世界
- 向量(矢量) Vectors
Vector Addition
Vector Multipication:
在图像中可以找到两个向量的夹角;
找一个向量在另一个向量上的投影;
b-b.perp可以measure两个向量接近的程度;
determine forward/backward;
Cross product 叉乘
Determine left/right
Determine inside/outside
- 矩阵 Matrices
Non-commutative
Associative and distributive
- Why study transformation
- 2D trans: rotation, scale, shear
- Homogeneous coordinates
- Composing transforms
- *3D trans
Why study trans?
-- Modeling 模型变换
-- Viewing 视图变换
1、Scale:缩放变换
2、Reflection:反射
3、Shear:切变
4、Rotate:旋转
以上都是线性变换:能写成 X’ = MX的形式(M是同维度的矩阵)
齐次坐标 Homogeneous coordinates
平移(Translation)变换:不能写成X’ = MX的形式
**但是!**我们不希望平移成为一种special case
解决方法:引入齐次坐标(what’s the cost? -- trade-off)
加入三维坐标:点增加一个1,向量增加一个0
向量是0,点是1的原因:
①保护向量的平移不变性,向量经过左边这个矩阵的乘法之后仍然是(x,y,0)而不是x+tx;
②点是1的话, point-point=0,符合point-point=vector
- vector + vector = vector
- point - point = vector
- point + vector = point
- point + point = 这两个点的中点(根据下面的法则)
w只有0和1有意义,如果不是0/1,三个数都同除w
Affine Transformation(仿射变换):
使用齐次坐标之后,只需要用一个矩阵即可
Affine map = linear map + translation 先线性变换再平移
齐次坐标下的其他变换:
代价(cost):增加了一个维度(但是很多是0,代价不大)
Inverse Transform 逆变换:
Composing Transforms 组合变换:
变换的顺序很重要(矩阵乘法无交换律)
变换的应用顺序是从右到左
-
3D transformations
-
Viewing(观测) transformation
-- View(视图)/ Camera transformation
-- Projection(投影) transformaiton
-- Orthographic(正交) projection
-- Perspective(透视) projection
3D transformations:
原理同二维:
三维中的仿射变换(同样是先线性变换再平移):
三维的缩放&平移:
三维的旋转:
罗德里格斯旋转公式:
三维空间投影到二维平面:
View / Camera transformation:
-
What is view transformation?
-
Think about how to take a photo?
Find a good place and arrange people(model transformation)
Find a good angle to put the camera(view transformation)
Cheese! (projection transformation)
↑MVP变换
Define the camera:
为了方便,把camera平移到原点,同时保持camera和物体的相对位置不变
至此,MV变换已经完成,为之后的P变换奠定基础!
Projection Transformation(投影变换):
-
Perspective projection 透视投影(近大远小)
-
Orthographic projection 正交投影(一叶障目) 相机无限远
更加正规的方法(Bounding Box):
先找到视野的Bounding Box的边界
left,right; top,bottom; near,far.
先平移到中心,再缩放到[-1,1]区间。
**注意:**为了保证右手系,摄像机指向-Z,所以近的物体Z坐标大,远的物体Z坐标小。
Perspective projection(透视投影):
把远平面“挤”成近平面,再作正交投影。
条件:近平面、远平面、远平面中心在挤压过程中不变。
挤压的计算:相似三角形
推导Mpersp->ortho:
推导第三行:
Transformation总结思维导图:
三角形的光栅化
-
Finishing up viewing
-- Viewport transformation
-
Rasterization
-- Different raster displays
-- Rasterizing a triangle
-
Occlusions and Visibility
定义frustum(视锥)的两个概念:
- aspect ratio 宽高比
- field-of-view (fovY) 视场角
概念的相互转化:
定义一个视锥,只需要定义其宽高比和视场角。
投影变换得到了[-1,1]的立方体,怎么画到屏幕上?--光栅化
What is screen?
- An array of pixels
- Size of the array: resolution 像素的多少--分辨率
- A typical kind of raster display 光栅成像设备
Next: Rasterizing Triangles into Pixels.
- A Simple Approach: Sampling(采样)
对三角形采样:判断像素中心是否在三角形内
如何判断这个点是否在三角形内?--向量的叉乘
(Edge cases -- 边界自定义,本课不做处理)
问题:Aliasing(Jaggies) 走样(锯齿) -- 信号的采样率不够高
- Antialiasing 反走样(抗锯齿)
- Z-Buffering 深度缓冲
Today:
-
Antialiasing
-- Sampling theory
-- Antialiasing in practice
-
Visibility / occlusion
-- Z-buffering
Artifacts(瑕疵) due to sampling - “Aliasing”
- Jaggies - 锯齿
- Moire - 摩尔纹
- Wagon wheel effect - 车轮效应
- ……
**本质:**信号变化速度过快,而采样的频率太低
先对信号进行模糊(blurring),滤波(pre-filter),再采样,可以减少锯齿化。(不能先采样再滤波)
Frequency Domain频域
把一个函数分解为不同频率的段,并显示出来。
滤波:
Filtering = getting rid of certain frequency contents 去掉一些特定的频率
傅里叶变换: 时域->频域
①正常图片:
②高通滤波:
③低通滤波:
卷积定理:时域卷积=频域乘积
卷积核(滤波器)越大,频率越低,图像越模糊。
Sampling = Repeating Frequency Contents
采样=重复频率内容
Aliasing = Mixed Frequency Contents
Antialiasing 反走样:
1、*Increase sampling rate 换个显示器
2、先做模糊(低通滤波,过滤高频信息)再做采样
减小频谱的覆盖范围
怎么变模糊?
寻找一个一定大小的低通滤波器进行卷积操作
怎么算出一个像素被覆盖的面积?
Antialiasing By Supersampling(MSAA)
MSAA = Multi Sample Antialiasing
是反走样的近似,不能完全解决走样
把一个像素再分成小像素,判断是否在三角形内
- 至此,模糊操作做完了,再进行采样即可(还是这个结果)
- MSAA进行的是模糊操作(采样操作已经隐含在里面了)
- 并没有提高采样率,只是对三角形的覆盖面积进行近似
**但是!**No free lunch! What’s the cost of MSAA?
- 放置了更多的点,增加了计算量。
Milestones(personal idea):
- FXAA(Fast Approximate AA) 快速近似抗锯齿(后期图像处理抗锯齿,速度很快,效果也好)
- TAA(Temporal AA) 复用上一帧的图像(同一像素的不同位置),即将没有MSAA的图像分布在时间上
Super resolution / super samling:
超分辨率≠抗锯齿,但本质相似
- From low resolution to high resolution
- Essentially still “not enough samples” problem 图片虽然分辨率高,但是采样不足
- DLSS(Deep Learning Super Sampling) 图片拉大后信息缺失,用深度学习进行“猜”
-
Visibility / occlusion
-- Z-buffering 深度缓冲
-
Shading
-- Illumination & Shading
-- Graphics Pipeline
Painter’s Algorithm 画家算法:先画远处的,进行光栅化,再画近处的进行覆盖。
特殊情况:存在互相遮挡的情况,无法定义深度关系,也无法使用画家算法。
由此,引入Z-Buffer.
Z小则近,大则远。与Transform里面的不同(为了简化)
同步生成两幅图 color(FrameBuffer) & depth(Z-Buffer)
注意:Z-Buffer 无法处理透明物体
Shading 着色:
Shading:The process of applying a material to an object.
(不同材质:木头、铅球等不同材质与光源有不同的互动)
A Simple Shading Model(Blinn-Phong Reflectance Model)
- 高光
- 漫反射
- 环境光
只考虑Shading point 自己,不考虑其他情况,即只着色,但没有阴影。 shading ≠ shadow!
Lambert’s cosine law :
漫反射和观测方向没有关系(因此公式里没有v)
Ld:漫反射的光强
kd:漫反射系数(Shading point 的颜色,决定吸收了哪些光,黑色为0(全吸收了),白色为1)
-
Blinn-Phong reflectance model
-- Specular and ambient terms
-
Shading frequencies
-
Graphics pipeline
Blinn-Phong reflectance model:
- Specular
- Diffuse // 上节课讲过,今天讲另外两个
- Ambient
Specular terms:
物体表面比较光滑,光线接近镜面反射
观察方向和镜面反射方向接近(v和R足够接近)
引入半程向量(bisector)h:
v和R接近 就是 n和h接近
- Phong模型:用v和R的接近程度
- Blinn-Phong模型:用n和h的接近程度(改进),半程向量比较好算
指数p:减少容忍度,用来控制高光的大小,通常取100~200
Ambient Term:
环境光:与光源方向、观测方向、法线都无关,是一个常数(某种颜色)。保证没有一个地方完全是黑的
着色过程完成!
Shading Frequencies:
1、Flat shading 逐三角形
2、Gouraud shading 高洛德 逐顶点
3、Phong shading 逐像素
定义逐顶点的法线:
与这个点相关联的三角形的法线的简单平均/加权平均。
加权平均要更准确
定义逐像素的法线:
重心插值
Graphics(Real-time Rendering) Pipeline:
图形管线(一系列的操作):三维场景→二维图片
Shader着色器(OpenGL):
Shader体验网站:https://www.shadertoy.com/view/ld3Gz2
现代图形学发展:
UE4 快速渲染
GPU快速发展
Texture Mapping:纹理映射
定义:三维物体的表面是二维的,相当于贴图(一张图贴到三维模型上去)
纹理坐标:
规定u,v∈[0,1],三角形每个顶点都对应一个(u,v)
无缝衔接纹理的绘制(难度很大),复用时看不出缝隙
- Barycentric coordinates 重心坐标(插值)
- Texture queries
- Applications of textures
Interpolation Across Triangles:Bartcentric Coordinates
1、为什么要做插值?
- 利用三角形顶点的值,得到内部的值(平滑过渡)
2、插值要得到什么?
- 纹理坐标,颜色,法线……
3、怎么做插值?
- 重心坐标
(α,β,γ)均为非负
可以通过面积计算:
利用重心坐标进行插值计算:
注意:投影之后重心坐标会发生变化!
Applying Textures:
问题:Texture Magnification(What if the texture is too small?)
双线性插值:找临近的4个点
What if the texture is too big?
Mipmap (Allowing(fast, approx., square) range queries)
近似的方形范围查询
内存多花销了1/3
1 --> 4/3
计算在Mipmap的第几层:
离得近,细节充足,在低层查询;
离得远,细节模糊,在高层查询。
层与层之间可以用三线性插值:
Mipmap在远处出现了Overblur(Mipmap只能处理正方形,无法处理特殊形状)
Better:各向异性过滤(可以处理矩形,但不能处理特殊形状)