面採樣比較常見,體採樣如何實現,就是採樣點不止分佈在表面,在網格內部也存在,各位大神能否提供一定的思路?有沒有相關的論文或者demo,謝謝


如果對均勻性要求不高,隨便採的話,那就是建一個包圍mesh的均勻格子,算網格的signed distance field,然後每個元胞裡面隨機放點,根據distance field判斷不在網格裡面就拒絕掉。

如果要求比較好的均勻性,比如中心Voronoi鑲嵌(CVT),或者藍雜訊,一般就是採完以後跑一個類似Lloyd Relaxation。

幾年以前讀本科時候寫過一個GPU上幹這個的,代碼在這裡:https://github.com/nepluno/sph-lloyd-3d

採出來上圖這個樣子,比較均勻,不過是CVT,還不是特性更好的藍雜訊。後來有一篇文章更理論地分析瞭如何用類似的思路生成藍雜訊:http://eprints.bournemouth.ac.uk/22610/

當然現在一般大家都直接用Houdini了。用VDB from polygons直接建體元樹,然後convert VDB到Volume,最後Points from Volume調調relaxation的參數就直接採好了。點點滑鼠搞定的樣子,非常方便。


如果要設置採樣點之間具最少半徑且緊密,可用 Poisson disk sampling,[1] 提供一個 mathrm{O}(n) 的任意維度演算法,在這個問題上就是三維。

過程中需要檢測點是否位於網格之中,可先體素化(voxelization),例如直接用 OpenVDB [2]。

[1] Bridson, Robert. "Fast Poisson disk sampling in arbitrary dimensions."SIGGRAPH sketches. 2007. Fast Poisson Disk Sampling in Arbitrary Dimensions

[2] Museth, Ken. "VDB: High-resolution sparse volumes with dynamic topology."ACM Transactions on Graphics (TOG)32.3 (2013): 27. http://www.museth.org/Ken/OpenVDB_files/Museth_TOG13.pdf


Tetrahedralization就是表面模型變為體模型

TetGen: A Quality Tetrahedral Mesh Generator and a 3D Delaunay Triangulator


推薦閱讀:
查看原文 >>
相關文章