Games101学习笔记11课

几何分类

隐式几何 Implicit

表示的是一些满足特定关系的点

例如一个几何表示的是 $ x^2 + y^2 + z^2 = 1 $

更通用的情况下,我们可以顶一个函数 $ f(x,y,z) = 0 $,只要我们找到有点满足这个函数,就能隐式地表示出这个几何。

优点:

  • 判断一个点是否在面上十分容易
    • 如果把点对应的$ x $,$ y $和$ z $带入到公式中,只要等于就说明点在面上;负数就说明在物体内,正数就说明在物体外。
  • 对于存储比较有利,因为可以用一个函数来表示图形。
  • 容易处理光线求交
  • 在拓扑结构中描述准确。

缺点:

  • 难以看出哪些点满足公式
    • 例如$ f(x,y,z) = (2-\sqrt{x^2 + y^2})^2 + z^2 + 1 $,无法直观了解到哪些点满足条件
  • 难以描述复杂图形,比如说一头奶牛。

ConstructiveSolid Geometry

通过布尔运算组合隐式几何,从而构造出不同的几何物体

距离函数 Distance Function

使用距离函数来描述一个几何。对于任何一个几何,都不直接去描述他的表面,而是去描述任意一个点到他的最近距离。

上图中,两个球随着距离越来越近,两个球进行了一个融合。

上图中有两个距离函数,通过计算两个小球的距离函数,就能对两个小球进行一个融合。

下图是一个运用距离函数的例子。

假设有A与B两种状态,我们想要求出从A到B之间的任意一个状态,我们定义这个状态为 Blend(A, B)。

此时我们可以先算出$ A $的距离函数$ SDF(A) $与$ B $的距离函数$ SDF(B) $。

对于离边界比较近的点,数字是小的。同时在A中阴影之内的点(可以理解成物体内的点)是负数,阴影之外的点(可以理解成是物体外的点)是正数。

这样可以通过融合 $ SDF(A) $ 与 $ SDF(B) $,可以得到$ Blend(SDF(A), SDF(B)) $,即在对$ A $与$ B $状态的边界进行融合,所以就能得到第三张图。

我们可以blend任意俩个距离函数,得到对应的效果。

水平集 Level Set Methods

与距离函数一样的思想,不过对于使用函数不好表达的形状,可以把数据存储在格子里面来代替表达。

上图可以理解成地理中等高线的思想。

其实也可以定义在三维空间中,比如在人体模型中,定义不同物体的密度,来达到某些效果。

分形 Fractals

自相似的概念,有点类似计算机的递归。例如雪花中,每个雪花放大底下又是一个雪花的样式。常用来表示自然界 中的物体。

显示几何 Explicit

几何所有的点都(1)直接给出,或者(2)通过参数映射的方法定义了所有点。

对于参数映射(parameter mapping)可以理解为

例如:

  • $ f(u,v) = ((2 + \cos u) \cos v, (2 + \cos u) \sin v, \sin u) $

优点:

  • 展示形状会很容易

缺点:

  • 不能容易通过点来判断是否在面上、或者内外。

点云 PointCloud

不考虑物体是个表面,而是表示物体上的点,只要点表示得足够细,则就可以表示这个物体。即只用保存一堆点的x,y,z。

如果点云不够密集,则就表现不出来这个物体的样子了,可以看到底下的部分,是不能看出雕塑的下半身长什么样子的。

贝塞尔曲线Bezier Curve