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で受け入れることができるでしょう!

関連記事

Python for Unity:UnityEditorでPythonを使えるパッケージ

D3.js:JavaScriptのデータビジュアライゼーションライブラリ

mentalrayのSubsurface Scattering Shader『misss_fast_...

この本読むよ

OpenMVSのサンプルを動かしてみる

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

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

C++ 標準テンプレートライブラリ (STL)

フルCGのウルトラマン!?

Mayaのシェーディングノードの区分

OpenCVのバージョン3が正式リリースされたぞ

GAN (Generative Adversarial Networks):敵対的生成ネットワーク

為替レートの読み方 2WAYプライス表示

Deep Fluids:流体シミュレーションをディープラーニングで近似する

Raspberry Pi 2のGPIOピン配置

Unityの薄い本

ZBrushで仮面ライダー3号を造る 仮面編 ClipCurve

ZBrushからBlenderへモデルをインポート

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

ZBrushでアヴァン・ガメラを作ってみる 壊れたデータの救出

Google Earth用の建物を簡単に作れるツール Google Building Maker 公...

Adobe Photoshop CS4 Extendedの3Dモデル編集機能

オーバーロードとオーバーライド

ゴジラの造形

まだ続くブログの不調

プロシージャル手法に特化した本が出てるみたい(まだ買わないけど)

TensorFlowでCGを微分できる『TensorFlow Graphics』

UnityのTransformクラスについて調べてみた

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

OpenMVS:Multi-View Stereoによる3次元復元ライブラリ

WordPress on Google App Engineを1週間運用してみて

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

Runway ML:クリエイターのための機械学習ツール

トランスフォーマー/ロストエイジのメイキング

Konashiを買った

なんかすごいサイト

Physically Based Rendering

ブログのデザイン変えました

海外ドラマのChromaKey

SIGGRAPH 2020はオンライン開催

『ピクサー展』へ行ってきた

LuxCoreRender:オープンソースの物理ベースレンダラ

コメント