OpenVDBを使ったリメッシュワーク

なんだかんだ昔にHoudiniのチュートリアルとかの解説書いてましたCGSLABのハヤシヒカルです。

Houdini Advent Calendar 2018の22日目です。

今回はOpenVDBについて書いていきます。

OpenVDBとは?

OpenVDBといえば雲や炎、水などのグリッドベースのボリュームメトリックシミュレーションの結果をやり取りする際に使ったり、レンダリングの効率化に使ったりすることがあるかと思います。

実はそれ以外にボリュームとしてジオメトリを扱うので、ブーリアンを行ったりするのに最適な構造にトポロジーを意識せずに行うことが可能になります。

CGSLABでは高解像度な3Dスキャニングを行っている関係から、リトポまわりも重要な要素として研究を行っています。

ただ自身がモデラーではないのと、CGSLABではプロップのスキャニングに注力している部分で、使いやすいオートリトポツールを求めていました。

HoudiniのOpenVDB

さてOpenVDBの各ノードを見てみましょう。


今回使うノードとしては以下の内容です。

  • VDB from Polygons:ポリゴンをVDBに変換するノード
  • VDB Combine:VDB同士をブーリアンなどするノード
  • Convert VDB:VDBデータを任意のデータに変換するノード

簡単な内容ですがOpenVDBでブーリアンして、ポリゴンにするまでの流れを紹介します。

OpenVDBノードを使ったリメッシュ

今回は高解像度メッシュの特定部分だけを抽出してみましょう。

ポリゴンのVDB化

まずは特定部分を抽出するためのメッシュと抽出対象のメッシュを用意します。

今回は先日スキャニングした猿の頭蓋骨のモデルを利用しました。

こちらのデータの歯の部分だけを抽出します。

抽出用にBOXを使って簡単にセレクトする領域に変形します。

ポリゴンのVDB化

これらのメッシュをVDB化してみましょう。

ポリゴンをVDB化するにはVDB from Polygonsノードに接続するだけで行なえます。

このようにメッシュが細かい斑点に変わりましたが、これでボリュームグリッド化することができました。

VDBのブーリアン

VDBのブーリアン処理などにはVDB CombineノードにVDB状態のノードを接続します。

基本はA/Bの処理になるので、コネクションは2つしかありません。

演算の方法はOperationで切り替えられます。

今回は”SDF Intersection“でAの領域で、Bのメッシュを抽出することができます。

VDBのポリゴン化

これでVDBのデータを編集できましたので、ポリゴン化して最終結果を見てみましょう。

Convert VDBノードにVDBデータを接続することで任意のデータに変換できます。

最後にConvert Toを切り替えてPolygonsにすることでVDBデータをポリゴンに変換することができます。

このように簡単に高解像度メッシュをブーリアンしたりすることが可能です。

実際にやってみるとわかりますが非常に高速にブーリアンしたりメッシングすることが可能です。

このパフォーマンスを経験すると手放せないツールになるのではないかと思います。

是非皆さんも年末年始にCC0で配布されているスキャンデータを利用してOpenVBDに変換したり触ってみてもらえればと思います。

https://sketchfab.com/geoffreymarchal

非常に簡単な内容ですが、VDBを触る足がかりにして貰えればと幸いです。

なお今回の内容を動画でも紹介しています。是非こちらも御覧ください。

2D/3Dのスキャニングサービス自体も提供していますので、もし案件などで利用されたいと思いましたら問い合わせフォームやメンバーにご連絡いただければと思います。

それではHoudini Advent Calendar 2018 22日目担当のハヤシヒカルでした。

明日23日目はJunichiro Horikawaさんの「HoudiniとDB」です。