生活中有许多曲面、曲线需要去表示。这里也有许多表示几何的方法:
Implicit
- algebraic surface
- level sets
- distance functions
- ...
Explicit
- point cloud
- polygon mesh
- subdivision, NURBS
- ...
Implicit表达
通常,隐式表达被定义为f(x,y,z)=0,其中f(x,y,z)是一个xyz的关系表达式。
隐式表达可以很容易的判断点与表面的关系。\(f(x_0,y_0,z_0)<0\)时说明在内部,\(f(x_0,y_0,z_0)>0\)说明在外部。
Explicit表达
显式表达通常是直接给出或者使用参数映射
显示表达的画出来图很容易,只需要在参数范围上采样就可以:
但是很难判断点和曲面的关系。
更多隐式表达曲面的方式
Algebraic Surfaces
但是代数表达很难表达复杂的曲面
Constructive Solid Geometry
Distance Functions
大佬:https://iquilezles.org/articles/raymarchingdf/
定义一个复杂曲面的过程如CSG所示,可以通过对一些隐式几何的并交difference操作去表达(其实可以理解成用基础几何体创造新几何体的过程)
距离函数可以表达一个空间中的点距离最近表面的值,可以认为表达了场景中的表面信息。表达新几何的过程,就是融合已知距离函数的过程。
其中Blending是线性插值(插值的目标是sdf值)的意思,有一个例子:
我们的目标是将A B表面融合,那么应该变成左边一半是黑色右边一半是白色空间。在第一列的blend(A,B)中,老师的意思是直接对颜色做线性插值会得到的结果,但这其实并不是我们想要的几何表面。
但是通过将SDF值融合,就能达到表面融合的目的:blend(SDF(A),SDF(B))
水平集
水平集是一种类似距离场的表达。
类似在医院拍片的时候,当f(x)等于不同值时可以拍出来不同的组织器官和切片。
Fractals(分形)
Exhibit self-similarity, detail at all scales
隐式表达的 Pros & COns
Pros:
- compact description (e.g., a function)
- certain queries easy (inside object, distance to surface)
- good for ray-to-surface intersection (more later)
- for simple shapes, exact description / no sampling error
Cons:
- difficult to model complex shapes
• easy to handle changes in topology (e.g., fluid)