GAMES101笔记_Lec10~12_几何 Geometry
1 几何的表达方式 Introduction to geometry
1.1 几何形体的例子 Examples of Geometry
- 不同形状的杯子有着不同的几何体组成
- 车上有光滑的曲面
- 复杂的机械结构里有各种形状不同的零件
- 布料由很复杂的表面结构,远看是透明的,股由纤维组成,线由股组成…
- 水滴掉落时形成的复杂几何表面
- 很大的场景如何简化几何,《超能陆战队》中就有大量远景城市镜头,对如何简化模型做了研究
- 毛发形成的复杂几何结构
- 微观几何结构
- 树生长枝干、树叶形成的复杂几何结构
1.2 隐式几何 “Implicit” Representations of Geometry
代数曲面(Algebraic surfaces)、CSG(Constructive solid geometry)、水平集(Level set methods)、分形(Fractals)…
1.2.1 隐式几何 Implicit Surface
- 给出点满足某些特定关系 Points satisfy some specified relationship
- 不直观,很难判断面上的点在哪 Sampling can be hard
- 容易判断点在内部还是外部(将点的坐标代入函数判断与0的关系) Inside/Outside tests easy
- 通常将满足的关系化为f(x,y,z)=0f(x,y,z)=0f(x,y,z)=0的形式
1.2.2 代数曲面 Algebraic Surfaces
表面是x、y、z的多项式的零点集 Surface is zero set of a polynomial in x, y, z
1.2.3 CSG Constructive Solid Geometry
- 通过布尔运算组合隐式几何 Combine implicit geometry via Boolean operations
1.2.4 距离函数 Distance Functions
距离函数描述的是:空间中的任意一点到想要表述的几何形体上的任意一点的最小距离(外正或内负,空间中任何一点都定义出来一个值) giving minimum distance (could be signed distance) from anywhere to object
这种方法是通过融合(Blend)距离函数的方式来描述新的物体,得到融合后的距离函数后,可以令距离函数为0时的位置为表面
如下是直接融合两张图和融合距离函数的差别,融合距离函数得到的结果为0处左为黑,右为白
弹幕补充:可以想象两个磁场同时存在,找等势面的情况
1.2.5 水平集 Level Set Methods
对于融合距离函数的方法,得到融合后确定的函数后,可以通过距离函数为0的地方确定为表面;对于解析式很难描述的复杂形状,替代方案是存储数值近似函数的网格,然后通过插值找出为0的表 Closed-form equations are hard to describe complex shapes. Alternative: store a grid of values approximating function
可以提供对形状的更明确的控制(如纹理) Provides much more explicit control over shape (like a texture)
在地理上有类似概念——等高线
在CT、核磁共振等得到的医疗数据(如密度)中,可以找到使密度函数等于某个密度的集合,通过水平集的方法找到表面 Level sets encode, e.g., constant tissue density
水滴在落下四溅的过程中也可以通过定义距离函数或水平集的方式表述水滴和水滴融合在一起后的表面 Level set encodes distance to air-liquid boundary
1.2.6 分形 Fractals
- 表现出自相似性 Exhibit self-similarity, detail at all scales
- 经常被用来描述一些自然现象 “Language” for describing natural phenomena
- 难以控制形状 Hard to control shape!
1.2.7 隐式几何的优缺点 Implicit Representations - Pros & Cons
- 优点 Pros:
- 简洁的描述(如一个函数) compact description (e.g., a function)
- 某些查询容易(物体内部,到表面的距离) certain queries easy (inside object, distance to surface)
- 利于求光线到表面的交集 good for ray-to-surface intersection
- 对于简单的形状,描述准确/没有采样错误 for simple shapes, exact description / no sampling error
- 容易处理拓扑结构的变化(如流体) easy to handle changes in topology (e.g., fluid)
- 缺点 Cons:
- 难以创建复杂的形状 difficult to model complex shapes
1.3 显式几何 “Explicit” Representations of Geometry
三角形面(triangle meshes)、贝塞尔曲面(Bezier surfaces)、曲面细分(subdivision surfaces)、非均匀有理B样条(NURBS)、点云(Point Cloud)…
1.3.1 显式几何 Explicit Surface
- 所有的点都直接或通过参数映射给出 All points are given directly or via parameter mapping
- 容易判断面上的点在哪 Sampling Is Easy
- 难以判断点在内部还是外部 Inside/Outside tests hard
- 除了三角形面,通过参数映射定义的方法也很常见
1.3.2 点云 Point Cloud
- 最简单的表示方法:点列表(x,y,z) Easiest representation: list of points (x,y,z)
- 轻松表示任何类型的几何体 Easily represent any kind of geometry
- 适用于足够大型的数据集 (>>1 点/像素) Useful for LARGE datasets (>>1 point/pixel)
- 通常转换为多边形网格 Often converted into polygon mesh
- 难以使用欠采样的数据进行绘制 Difficult to draw in undersampled regions
1.3.3 多边形面 Plygon Mesh
存储顶点和多边形(通常是三角形或四边形) Store vertices & polygons (often triangles or quads)
更容易进行处理/模拟,自适应采样 Easier to do processing / simulation, adaptive sampling
更复杂的数据结构 More complicated data structures
也许是图形中最常见的表示 Perhaps most common representation in graphics
obj格式文件经常用于图形研究 Commonly used in Graphics research
- 是一个指定顶点、法线、纹理坐标及其连接状况的文本文件 Just a text file that specifies vertices, normals, texture coordinates and their connectivities
- 是一个指定顶点、法线、纹理坐标及其连接状况的文本文件 Just a text file that specifies vertices, normals, texture coordinates and their connectivities
2 曲线 Curves
接下来从曲线开始详细说明其他显式几何表示方法
2.1 曲线的应用 Examples of Curves
- 镜头的运动路径 Camera Paths
- 物体沿曲线运动的动画 Animation Curves
- 矢量文字 Vector Fonts
2.2 贝塞尔曲线 Bézier Curves
- 贝塞尔曲线是需要一系列的控制点去定义的一个曲线,这个曲线满足一些性质,比如下图的要沿着切线方向
2.2.1 贝塞尔曲线的计算——de Casteljau Algorithm
- 定义三个点(二次贝塞尔曲线) Consider three points (quadratic Bezier)
- 根据t值在两条边上分别插值出两个点 Insert two points using linear interpolation on both edges
- 连接两个点再次根据t值插值 Repeat recursively
- t在[0,1][0,1][0,1]不断取值,最终插值得到的点移动的路径即为贝塞尔曲线 Run the same algorithm for every t in [0,1][0,1][0,1]
2.2.2 贝塞尔曲线的代数表示
de Casteljau算法给出了这样一个代数金字塔 de Casteljau algorithm gives a pyramid of coefficients
三次贝塞尔曲线的代数表示如下,写出后发现各项系数正好是二项式平方((1−t)+t)2((1-t)+t)^2((1−t)+t)2 展开的结果 Example: quadratic Bézier curve from three points
推广到n阶,展开项系数是一个描述二项分布的多项式(可以用伯恩斯坦公式来表达)
当n=3时,我们可以用来表示三维空间中的贝塞尔曲线
KaTeX parse error: Expected 'EOF', got '#' at position 136: …{ 3 } t ^ { 3 }#̲pic_center三次贝塞尔曲线下伯恩斯坦多项式对应图像
2.2.3 贝塞尔曲线的性质
- 对于三次贝塞尔曲线,插值的端点:b(0)=b0;b(1)=b3b(0) = b_0;\quad b(1) = b_3b(0)=b0;b(1)=b3
- 对于三次贝塞尔曲线,与端点相切的切线表示的系数为3:b′(0)=3(b1−b0);b′(1)=3(b3−b2)b ^ { \prime } ( 0 ) = 3 ( b _ { 1 } - b _ { 0 } ) ; \quad b ^ { \prime } ( 1 ) = 3 ( b _ { 3 } - b _ { 2 } )b′(0)=3(b1−b0);b′(1)=3(b3−b2)
- 在仿射变换时,只需要对顶点做仿射变换,就能得到这个贝塞尔曲线在仿射变换下的结果(注意限制了时仿射变换,投影变换时不成立) Transform curve by transforming control points
- 贝塞尔曲线在控制点形成的凸包(能够包围给定点的最小凸多边形)内 Curve is within convex hull of control points
2.2.4 分段贝塞尔曲线
当控制点比较多时,贝塞尔曲线并不直观,不易控制
为了便于控制曲线,可以定义多段贝塞尔曲线然后连起来,普遍习惯每四个控制点定义一段 Piecewise cubic Bézier the most common technique
2.2.5 分段贝塞尔曲线的连续性 Piecewise Bézier Curve – Continuity
C0C^0C0连续:只需要点相同 an=b0a_n= b_0an=b0
C1C^1C1连续:点相同并且切线也在一条线上 an=b0=12(an−1+b1)a_n= b_0=\frac{1}{2}(a_{n-1}+b_1)an=b0=21(an−1+b1)
C1C^1C1连续看起来已经不错了,但不能达到工业要求
2.3 其他样条曲线 Other types of splines
2.3.1 样条 Spline
- 样条是通过一定控制点控制的连续的曲线
2.3.2 B样条 B-splines
- B是基函数 Short for basis splines
- B样条具有局部性,不会像贝塞尔曲线一个点影响整个曲线 Require more information than Bezier curves
- 满足贝塞尔曲线具有的所有重要属性(即超集) Satisfy all important properties that Bézier curves have (i.e. superset)
- 本课程没有再详细讲解B样条和非连续性NURBS,推荐了胡事民老师的课
3 曲面
3.1 贝塞尔曲面 Bézier Surfaces
贝塞尔曲面和 4 x 4 控制点阵列 Bezier surface and 4 x 4 array of control points
贝塞尔曲面是由两次贝塞尔曲线得到的
3.2 贝塞尔曲面的计算 Evaluating Bézier Surfaces
使用de Casteljau算法分别计算四条贝塞尔曲线的在u时间上的位置,得到这条移动贝塞尔曲线的4个控制点 Use de Casteljau to evaluate point u on each of the 4 Bezier curves in u. This gives 4 control points for the “moving” Bezier curve
使用一维的de Casteljau算法计算这条移动贝塞尔曲线在v时间上的位置 Use 1D de Casteljau to evaluate point v on the “moving” curve
通过把(u,v)(u,v)(u,v)映射到表面,计算出表面的位置 Evaluate surface position corresponding to (u,v)
- 方法:分离的一维的de Casteljau计算 Method: Separable 1D de Casteljau Algorithm
4 几何处理
4.1 网格细分
4.1.1 Loop细分
连接各边中点,一个三角形会被分为4个三角形
根据新/旧顶点权重不同,更新顶点位置
- 新顶点位置更新为3/8 * (A + B) + 1/8 * (C + D)
- 旧顶点位置更新为(1−n∗u)∗original_position+u∗neighbor_position_sum(1 - n*u) * original\_position + u * neighbor\_position\_sum(1−n∗u)∗original_position+u∗neighbor_position_sum
- 新顶点位置更新为3/8 * (A + B) + 1/8 * (C + D)
顶点的度(vertex degree)是这个顶点上连接边的数量
- Loop细分的结果
4.1.2 Catmull-Clark细分
Loop细分只能用于三角形网格,但是Catmull-Clark细分可以定义四边形面与非四边形面
- 度不为4的点,定义为奇异点,图中有2个奇异点
- 在一次细分过程中,取边上的中点和面中心上的一个点,把这些点连起来
- 一次细分结束后,引入了两个度为3的奇异点(两个三角形中点的点),一共有4个奇异点;也就是说一次Catmull-Clark细分会将非四边形面都变为四边形,并且每一个非四边形面消失,就会引入一个新的奇异点
- 继续细分,奇异点数目不变
- 具体操作
- 两种细分方法收敛结果的对比 Convergence: Overall Shape and Creases
4.2 网格简化 Mesh Simplification
目的:在保持整体形状的同时减少网格元素的数量
4.2.1 边坍缩 Collapsing An Edge
其中一种方法:二次度量误差 Quadric Error Metrics
二次误差:新顶点的位置应该使得与先前的边(面)的距离平方之和最小
简单假设每一条边如果坍缩会导致多大的二次度量误差,然后从二次度量误差最小的开始坍缩
但是坍缩一条边后会改变其他的边的位置,其他边的二次度量误差也必须重新算,所以我们需要每次坍缩完二次度量误差最小的边后,动态的更新其他受影响的边,需要使用到的数据结构是优先队列/堆
通过对局部进行最优解,试图找到全局的最优解,这是一个典型的贪心算法
使用二次度量误差的简化结果 Quadric Error Mesh Simplification
GAMES101笔记_Lec10~12_几何 Geometry相关推荐
- Games101 笔记 Lecture 7-9 Shading (Illumination, Shading)
Games101 笔记 Lecture 7-9 Shading [Illumination, Shading] visibility / occlusion Shading简介 Blinn-Phong ...
- Halcon 学习笔记五:几何定位+仿射变换+测量
Halcon 学习笔记五:几何定位+仿射变换+测量 定位流程 例子一 例子二(药片的定位) 例子三(充电宝定位) 例子四(车牌定位) 其他 定位流程 blob分析 模板匹配 (仿射变换成标准的形状) ...
- Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)
目录 Applications of Textures Environment Map 凹凸贴图 位移贴图 三维纹理 几何 隐式表示 Algebraic Surfaces Constructive S ...
- 几何Geometry(2)(曲线和曲面)(笔记)
文章目录 前言 四.曲线(Curves) 贝塞尔曲线(Bezier Curves) 贝塞尔曲线的德卡斯特里奥算法(Bezier Curves - de Casteljau Algorithm) 三次贝 ...
- GAMES101笔记_Lec01_计算机图形学概述 Overview of Computer Graphics
作为一名想要了解图形学的学生,已经在无数地方看到有人推荐闫令琪老师的GAMES101课程,但由于自己是美术专业,在笼统看过这门课程之后认为这门课有一定学习难度,所以为了打下比较扎实的基础和方便自己日后 ...
- 计算机图形学【GAMES-101】5、几何(距离函数SDF、点云、贝塞尔曲线、曲面细分、曲面简化)
快速跳转: 1.矩阵变换原理Transform(旋转.位移.缩放.正交投影.透视投影) 2.光栅化(反走样.傅里叶变换.卷积) 3.着色计算(深度缓存.着色模型.着色频率) 4.纹理映射(重心坐标插值 ...
- GAMES101笔记_Lec07~09_着色 Shading
0 我们已经学了什么 What We've Covered So Far 空间中定义了一个摄像机,通过某些变换使模型摆好姿势(Model) 通过观测变换让摄像机放在原点,得到标准的 [ − 1 , 1 ...
- 计算机图形学五:几何-Geometry
文章目录 几何(Geometry) 曲面(Curved Surface) 隐式曲面(Implicit Surface) 隐式曲面特点 代数曲面(Algebraic Surface) 构造固体几何(Co ...
- 《计算机视觉之三维重建》笔记3-单视几何
北邮鲁鹏老师的课程<计算机视觉之三维重建(深入浅出sfm和SLAM核心算法)> 笔记 3,单视几何 3.1 2D 直线 平面上直线用 l = ( a , b , c ) T l=(a,b, ...
最新文章
- 【Java代码实现】递归两大经典问题-----“汉诺塔问题” 与 “青蛙跳台阶问题” 讲解
- linux中的和,|和||
- Android之让EditText不被键盘挡住
- java 泛型集合示例_Java 泛型(示例代码)
- APUE 12.7 取消选项
- 垃圾回收算法与实现系列-String在虚拟机中的实现
- keepalived+lvs+nginx高可用
- 英语作业(general version an narrow version about sth)
- 李向阳教授谈中科大AI承继与挑战,IT校友影响力惊人
- CSocket 和CAsyncSocket类介绍
- java关于方法覆盖的叙述_以下关于方法覆盖的叙述中正确的是( )
- ICP备案和经营性ICP有何不同
- 项目管理文档目录结构
- linux udp 端口 抓包,Linux系统-tcpdump常用抓包命令
- mybatis中大于小于号转义字符
- eclipse配置python环境后啷个写java类_在Eclipse上配置Python开发环境
- 在eclipse启动tomcat运行一个web程序,报java.lang.OutOfMemoryError: PermGen space
- 运动控制屏蔽回原点屏蔽z_index是什么_安卓智能手表它不香吗,为什么要花 3199 买 Apple Watch?...
- 为何延时函数不起作用?
- 网页、网站和HTML
热门文章
- Win10应用程序无法正常启动0xc0000018错误解决办法
- 织梦模板使用方法-安装教程
- 【数据可视化】基于Streamlit制作的时间序列数据分析APP(上手简单,附可运行源码)
- 北京理工大学计算机学院复试名单2020,电气与信息工程学院2020年赴北京理工大学复试名单公示...
- 《人月神话》(The Mythical Man-Month)5画蛇添足(The Second-System Effect)
- 一文看懂机器人使用的惯性测量/IMU中常见的名词:陀螺仪/ 加速度计/ 磁力计/MEMS/ IMU/ AHRS/ 6轴(6DOF) /9轴(9DOF)/ 欧拉角/四元数
- h5页面元素聚焦手机无法弹出键盘
- 3个实用的文字转语音方法,让你时刻保持信息更新!
- 这些培训机构的骗局,一定要注意
- CSS基础(19)_绝对定位元素的水平或垂直布局