Polyscope:3Dデータ操作用GUIライブラリ

ポリゴンMeshや点群などの3Dデータを扱うビューア、インターフェイスを提供するライブラリ。VTKなんかよりもずっと手軽に導入できそう。MITライセンス。

Polyscope



Polyscopeは、Meshや点群などの3Dデータ用のC++/Pythonビューア・ユーザーインターフェイスです。Polyscopeを使えば、プログラムや動的なGUIを通じてデータを登録でき、即座に情報を美しく可視化できます。Polyscopeは軽量になるよう設計されており、プログラム全体の「所有権を奪う」ことはなく、既存のコードベースや一般的なライブラリと簡単に統合できます。Polyscopeが目指すのは、たった1行のコードを通じてデータへの便利なビジュアルインターフェイスの提供することです。

Polyscopeではstructurequantityのパラダイムを採用しています。structureとは、サーフェスMeshや点群など、シーン内の幾何学的オブジェクトのことです。quantityとは、スカラー関数やベクトル場など、structureに関連付けられたデータのことです。

任意の構造や数量を登録すると、Polyscopeはそれらをインタラクティブな3Dシーンに表示し、可視性の切り替え、データのカラーマッピングとマップの調整、シーン内をクリックして数値を照会する「ピッキング」等、定型的問題を処理できます。

ソースコードはGitHubで配布されている↓
https://github.com/nmwsharp/polyscope



コード例を見ると、3Dデータの可視化GUIをかなりお手軽に実現できるようです↓

Polyscopeでデータを可視化する簡単なワークフローは以下のようになります:

C++:

#include "polyscope/polyscope.h"
#include "polyscope/surface_mesh.h"

// Initialize polyscope
polyscope::init();

// Register a point cloud
// `points` is a Nx3 array-like container of points
polyscope::registerPointCloud("my points", points)

// Register a surface mesh structure
// `meshVerts` is a Vx3 array-like container of vertex positions
// `meshFaces` is a Fx3 array-like container of face indices  
polyscope::registerSurfaceMesh("my mesh", meshVerts, meshFaces);

// Add a scalar and a vector function defined on the mesh
// `scalarQuantity` is a length V array-like container of values
// `vectorQuantity` is an Fx3 array-like container of vectors per face
polyscope::getSurfaceMesh("my mesh")->addVertexScalarQuantity("my_scalar", scalarQuantity);
polyscope::getSurfaceMesh("my mesh")->addFaceVectorQuantity("my_vector", vectorQuantity);

// View the point cloud and mesh we just registered in the 3D UI
polyscope::show();

Python:

import polyscope as ps

# Initialize polyscope
ps.init()

### Register a point cloud
# `my_points` is a Nx3 numpy array
ps.register_point_cloud("my points", my_points)

### Register a mesh
# `verts` is a Nx3 numpy array of vertex positions
# `faces` is a Fx3 array of indices, or a nested list
ps.register_surface_mesh("my mesh", verts, faces, smooth_shade=True)

# Add a scalar function and a vector function defined on the mesh
# vertex_scalar is a length V numpy array of values
# face_vectors is an Fx3 array of vectors per face
ps.get_surface_mesh("my mesh").add_scalar_quantity("my_scalar", 
        vertex_scalar, defined_on='vertices', cmap='blues')
ps.get_surface_mesh("my mesh").add_vector_quantity("my_vector", 
        face_vectors, defined_on='faces', color=(0.2, 0.5, 0.5))

# View the point cloud and mesh we just registered in the 3D UI
ps.show()

Polyscopeは、楽に利用できるよう設計されています。ビルドは簡単で、10行未満のコードで視覚化できます。
C++ではいくつかのテンプレートマジックにより、既に使用しているデータ型をPolyscopeで受け入れることができるでしょう!

関連記事

SONY製のニューラルネットワークライブラリ『NNabla』

ZBrushのお勉強

MeshLab:3Dオブジェクトの確認・変換に便利なフリーウ...

無料で使える人体3DCG作成ツール

CNN Explainer:畳み込みニューラルネットワーク可...

ZBrush 4R7

ZBrushでアヴァン・ガメラを作ってみる 下半身のバランス...

Open Shading Language (OSL)

CGのためのディープラーニング

映画『シン・仮面ライダー』 メイキング情報まとめ

OpenCVのfindEssentialMat関数を使ったサ...

チャットツール用bot開発フレームワーク『Hubot』

書籍『The Art of Mystical Beasts』...

UnityでPoint Cloudを表示する方法

Google App EngineでWordPress

Unity MonoBehaviourクラスのオーバーライド...

ZBrushでアヴァン・ガメラを作ってみる 甲羅のバランス調...

ラクガキの立体化

ROSの薄い本

Photo Bash:複数の写真を組み合わせて1枚のイラスト...

Raspberry PiのGPIOを操作するPythonライ...

ZBrush 4R8 リリース!

WordPress on Google App Engine...

ZScript

トランスフォーマーの変形パターンを覚えるのは楽しいと思うんだ

ZBrush 2018へのアップグレード

Mixamo:人型3Dキャラクターアニメーション制作サービス

ゴジラ三昧

3D復元技術の情報リンク集

OpenCVで顔のランドマークを検出する『Facemark ...

Webサイトのワイヤーフレームが作成できるオンラインツール

『シン・ゴジラ』のコンセプトアニメーションのメイキング動画が...

ZBrushでアヴァン・ガメラを作ってみる 下アゴの付け根を...

映画『ゴジラ-1.0』 メイキング情報まとめ

ZBrush キャラクター&クリーチャー

続・ディープラーニングの資料

『スター・ウォーズ 最後のジェダイ』のVFXブレイクダウン ...

OpenCV

Google Colaboratoryで遊ぶ準備

書籍『3次元コンピュータビジョン計算ハンドブック』を購入

オープンソースのテクスチャマッピングシステム『Ptex』

NeRF (Neural Radiance Fields):...

コメント