osxでopenvdbを気合で動かす


OpenVDBとはなんぞや

簡単に言えば「Volume Dataを.vdbというformatで効率的に保存するためのLibrary」です(詳細は公式を要確認, Sample Dataはここ).

OpenVDBは2013年頃から開発がスタートしたため,あまり新しいものではありません.

一方で,最近はBlender 2.83でOpenVDBのサポートが始まったこと,Realtime fluid simulation toolであるEmbergenの台頭,相変わらずお強いHoudini,CV界隈でImplicit Representationで形状復元をする研究が盛んなこと(Lecture movie)などが絡まり合い,OpenVDBの需要は高くなっていくと考えられます.

OSXで使えない...なんで?

そこで,今のうちにOpenVDBに慣れていこう...と思ったのですが,公式githubのTutorialに沿ってosx環境下でInstallを行おうとすると,以下のようなエラーで詰みます.

CMake Error at CMakeLists.txt:36 (find_package):
  Could not find a package configuration file provided by "OpenVDB" with any
  of the following names:

    OpenVDBConfig.cmake
    openvdb-config.cmake

  Add the installation prefix of "OpenVDB" to CMAKE_PREFIX_PATH or set
  "OpenVDB_DIR" to a directory containing one of the above files.  If
  "OpenVDB" provides a separate development package or SDK, be sure it has
  been installed.

この問題はTutorialに沿ってInstallしたとしても,OpenVDBConfig.cmake/usr/local/lib/cmake以下に生成されないことに起因するのですが,issueを見る限り,現在も解決はされていないようです.

上記issueでは解決策として,cmakeを行う際にtarget_link_directories/usr/local/libを,target_include_directories/usr/local/includeを加えた後,linkする際に-lOpenVDBとする方法が提案されていました.

しかし,OpenVDBはOpenEXRとTBBに依存しているため,これだけでは動きません1

Solution

この問題に対し,CMakeLists.txt内部で以下のようにすると解決しました.

# tbb
find_library(TBB_LIBRARY tbb HINTS /usr/local/lib)

# openexr
find_library(HALF_LIB half HINTS /usr/local/lib)

# openvdb
list(APPEND SAMPLE_INCLUDE_DIR /usr/local/include)
find_library(OpenVDB_LIBRARY openvdb HINTS /usr/local/lib)

## include headers
include_directories(${SAMPLE_INCLUDE_DIR})
add_executable(sample ${SAMPLE_SOURCES})
target_link_libraries(
    sample
    ${TBB_LIBRARY}
    ${HALF_LIB}
    ${OpenVDB_LIBRARY}
)

公式TutorialのHello Worldは動作確認済

tiny sampleを以下に上げたので,何かの参考になれば幸いです.

おまけ

C++側で生成したvdbをBlenderで読んでいる図.

これで自作Simulator開発が捗りますね!


  1. bloscにも依存していますが関係なかったようなので省略]