Voxel Mesh化手法についてメモ( Voxel Meshing )

SDFなどのVoxelからMeshを生成する手法のメモ。
もとのSDFのセルと、Mesh化で管理されるVoxelは一致しないので注意。
もとのSDFのセル中心を頂点とするようなVoxel上でMesh化が実行される。

Marching Cubes

Polygonising a scalar field (Marching Cubes)

Voxelの頂点のパターンからそのVoxelのポリゴンパターンをLookupしてMesh化する。
シャープな形状が作りにくいらしい。

Dual Contour

https://people.eecs.berkeley.edu/~jrs/meshpapers/SchaeferWarren2.pdf

あるVoxelを構成する辺について、SDFをの符号が異なる両端を持つ辺に注目し、辺を横切るような等値面の交差位置と法線をSDFの勾配等から計算する。
一つのVoxelについて境界面は複数存在する可能性があり、すべての境界面からの距離の自乗和が最小になるような一点をそのVoxel内の頂点として最小二乗法で推定する。
すべてのVoxelについて上記の点を計算し、隣接Cellで点同士をつなげてMeshを構成する。
シャープな形状を作ることができるらしい。
Voxel毎に最小二乗法を解く必要があるためコストが高い可能性。
また自己交差メッシュができてしまう可能性もある。

SurfaceNets

https://www.merl.com/publications/docs/TR99-24.pdf
Smooth Voxel Mapping: a Technical Deep Dive on Real-time Surface Nets and Texturing | by DreamCat Games | Aug, 2020 | Medium
NaiveSurfaceNets/NaiveSurfaceNets.cs at master · TomaszFoster/NaiveSurfaceNets · GitHub


Meshを構成するVoxel内の頂点を推定することはDual Contourと同様だが、複数ある辺と等値面の交差位置を平均した地点を頂点位置とするところが異なる。