生活中有許多曲面、曲線需要去表示。這裏也有許多表示幾何的方法:
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)