geometry3Sharp:Unity C#で使えるポリゴン操作ライブラリ

Unityはポリゴンのオブジェクトを扱う割に、意外とポリゴンジオメトリを操作するAPIが貧弱。
でも、ポリゴンジオメトリ操作の有名なライブラリはC++かPythonに偏っており、直接C#で利用できるライブラリは少ない。

そんな中で有力な選択肢になるのがgeometry3Sharpなんだけど、すでにメンテナンスが止まっており、フォークプロジェクト geometry4Sharpの使用が公式に推奨されている。

とはいえ、geometry4Sharpの方はドキュメントや配布(NuGet Packageなど)がまだあまり整備されていないので、しばらくの間はgeometry3Sharpの方が小回りが効いて便利そう。長期プロジェクトへの採用はgeometry4Sharpを前提にした方が良さそうだけど。

geometry3Sharp



ジオメトリ計算のためのオープンソース(Boost-license)のC#ライブラリです。

geometry3SharpはUnityと互換性があります。UnityプロジェクトのScripting Define SymbolsG3_USING_UNITYを設定すれば、g3とUnityのVector型の間を透過的に相互利用できます。(本README最下部の詳細をご覧ください)
このライブラリはC# 4.5向けに開発されていますが、.NET 3.5 Unityランタイムでも一部機能を除いて動作します。

現状、一部unsafeコードが含まれていますが、このコードはごく限られた高速バッファコピー処理でのみ使用されており、safeバージョンが必要な場合は削除できます。(例:Unity Webプレーヤー用など)

NuGet Packageを利用できます。このパッケージはgithubのmaster ブランチからほぼ毎月更新されため、「より」安定しています。
現在、このパッケージには.NET 4.5と.NET Standard 2.0のdllが含まれています。他にご希望がありましたら、メールにてご連絡いただければ追加可能です。

作者のWebサイトでデータ構造の説明チュートリアルが公開されている。
http://www.gradientspace.com/

また、geometry3Sharpを使用して作られたGUIツール COTANGENTがある。



geometry3SharpをUnityで利用するには↓

Unity Interop

geometry3Sharpは、Unityの型との透過的な変換をサポートしています。これを有効にするには、UnityプロジェクトのPlayer Settings > Playerの Scripting Define SymbolsG3_USING_UNITYの定義を追加してください。

有効にすると、以下のようなコードが透過的に機能します。

Vector3 unityVec;
Vector3f g3Vec;
unityVec = g3vec;
g3vec = unityVec;

float型からdouble型への変換は透過的に機能しますが、double型からfloat型への変換には明示的なキャストが必要です。

Vector3d g3vecd;
g3vecd = gameObject.transform.position;
gameObject.transform.position = (Vector3)g3vecd;

この機能は、Vector2、Vector3、Quaterion、Ray、Color、Bounds (w/ AxisAlignedBox3f)で機能します。
これらの変換が等式では機能しないことに注意してください。したがって、Vector3fとVector3を追加するには、一方を明示的にもう一方へキャストする必要があります。

そして後継のフォークプロジェクト geometry4Sharp

geometry4Sharp

ジオメトリ計算のためのオープンソース(Boost-license)のC#ライブラリです。
geometry4Sharpはgeometry3sharpをフォークしたプロジェクトです。

まだNuGetパッケージは利用できません。パッケージはmainブランチから更新される予定です。

仕様はまだほとんどgeometry3Sharpと変わらないようだが、namespaceがg3からg4に変更されてる(笑)

関連記事

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

Regard3D:オープンソースのStructure from Motionツール

映画『ブレードランナー 2049』のVFX

ZBrushでリメッシュとディティールの転送

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

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

NeRF (Neural Radiance Fields):深層学習による新規視点合成

Netron:機械学習モデルを可視化するツール

Physically Based Rendering

konashiのサンプルコードを動かしてみた

テスト

UnityのuGUIチュートリアル

ラクガキの立体化 分割ラインの変更・バランス調整

OpenCV 3.3.0-RCでsfmモジュールをビルド

ZBrushのお勉強

Blender 2.81でIntel Open Image Denoiseを使う

WordPressのテーマを自作する

Ambient Occlusionを解析的に求める

Pythonのソースコードに特化した検索エンジン『Nullege』

BlenderでPhotogrammetryできるアドオン

Boost オープンソースライブラリ

OpenMayaRender

Google App EngineでWordPress

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

マルコフ連鎖モンテカルロ法

CycleGAN:ドメイン関係を学習した画像変換

OpenFace:Deep Neural Networkによる顔の個人識別フレームワーク

クラスの基本

AnacondaとTensorFlowをインストールしてVisual Studio 2015で使う

ファンの力

HD画質の無駄遣い その2

OpenCV 3.3.0 contribのsfmモジュールのサンプルを動かしてみる

ラクガキの立体化 目標設定

Google App Engineのデプロイ失敗

Unreal Engine Tokyo MeetUp!へ行ってきた

UnityユーザーがUnreal Engineの使い方を学ぶには?

映画『ミュータント・タートルズ』を観てきた

このブログのデザインに飽きてきた

天体写真の3D動画

ZBrushの練習 手のモデリング

ZBrushでアヴァン・ガメラを作ってみる 爪とトゲを追加

Quartus II

コメント