プログラムでポリゴンジオメトリを何かしら操作するなら、C++で利用できる計算幾何学ライブラリCGALが有名ですね。色々なアルゴリズムが実装されていて便利。
Unity C#環境で使える似たようなライブラリが無いかと探してみたら、そのものズバリC++のCGALをC#でラップしたCGALDotNetというライブラリがUnityのフォーラムで紹介されていた。
CGALDotNet
CGALはcomputational geometric algorithm library(計算幾何学アルゴリズムライブラリ)の略で、三角形化、ボロノイダイアグラム、ポリゴンと多面体のブール演算、ポイントセット処理、曲線の配置、サーフェスとボリュームメッシュの生成、ジオメトリ処理、アルファシェイプ、凸包アルゴリズム、形状の再構築など、様々なアルゴリズムを提供します。
計算幾何学アルゴリズムには、(浮動小数点などの)計算精度の問題に影響されて無効な結果を生成してしまうものも多くあります。CGALでは、計算精度を損なうことなく任意の数値を扱える正確な数値表現を提供することでこの問題を解決しています。この正確な数値表現は高度に最適化されていますが、パフォーマンスにはトレードオフがあります。正確な結果よりも処理速度が必要な場合、CGALは倍精度を使用した不正確な数値表現も提供しています。
CGALDotNetはC++で書かれたライブラリCGALのC#ラッパーであり、CGALへの手軽なアクセスを提供しますが、いくつか制限があります。CGALDotNetは、ポイント、ベクトル、ボックス、円など、CGALにデータを渡すための様々な幾何学的構造体を提供しています。これらのC#構造体は倍精度に制限されているため、CGALとのデータ受け渡しの際に精度が損なわれる可能性があります。
以下は正確な数値表現でポリゴンを作成する例です。//create some points. var points = new Point2d[count]; //create a polygon using the exact predicates exact construction kernel. var polygon = new Polygon2<EEK>(); //set the polygons points. polygon.SetPoints(points);以下は不正確な数値表現でポリゴンを作成する例です。
//create some points. var points = new Point2d[count]; //create a polygon using the exact predicates inexact construction kernel. var polygon = new Polygon2<EIK>(); //set the polygons points. polygon.SetPoints(points);この正確な計算(exact computation)のパラダイムについては、CGALのページのを参照してください。
CGALDotNetはまだ開発途上で、現在は64ビットのWindows向けバイナリしか提供されていないらしい。
ジオメトリオブジェクトのCGALDotNetGeometryなど、関連するリソースがいくつか別リポジトリで管理されているようだ。
別プロジェクトのCGALDotNetUnityにUnityで利用する場合のサンプルがあり、Unityのデータ形式とCGALDotNetのデータ形式を相互に変換するための拡張メソッドが提供されている↓
Unity Extensions
CGALDotNetは他のプロジェクトから独立するように設計されていますが、C#で記述されているのでそのままUnityと併用できます。
CGALDotNetUnityプロジェクトには、UnityのオブジェクトとCGALDotNetのオブジェクト間の変換を支援する拡張メソッドが用意されています。
以下に例を示します。//These extension methods need the numeric namespace. using CGALDotNetGeometry.Numerics; //Create a CGALDotNet point. var point1 = new Point3d(); //Convert it to a unity vector. var vector = point1.ToUnityVector3(); //And back to a CGALDotNet point. var point2 = point1.ToCGALPoint3();ポイントやベクトルの配列、レイやボックスなどの形状にも似たメソッドが用意されています。
ポリゴンをGameObjectに変換するメソッドもあります。//These extension methods need the polygon namespace. using CGALDotNetGeometry.Polygons; //Create a polygon. var polygon = new Polygon2(points); //Convert polygon to a game object with a triangulated mesh of the polygon. //Polygon points are 2D and will be converted to 3D for the mesh. var mesh = polygon.ToUnityMesh("polygon", position, material);
ちょっと触ってみたところ、CGAL側で作成したポリゴンをUnityのGameObjectとして表示するのは楽だけど、UnityのGameObjectからCGALへポリゴンを持って行く方法はあまり整備されてないみたい。
関連記事
Unite 2014の動画
Google App Engineのデプロイ失敗
ZBrushでアヴァン・ガメラを作ってみる 頬の突起を作り始...
C++の抽象クラス
3Dモデルを立体視で確認できるVRアプリを作っている
ZBrushCore
ZBrushでアヴァン・ガメラを作ってみる
フリーのUV展開ツール Roadkill UV Tool
ZBrushでアヴァン・ガメラを作ってみる 腕の作り込み
pythonの機械学習ライブラリ『scikit-learn』
Boost オープンソースライブラリ
ファンの力
ポリ男をリファイン
第20回 文化庁メディア芸術祭『3DCG表現と特撮の時代』
Unityの薄い本
顔のモデリング
ZBrushのハードサーフェイス用ブラシ
Structure from Motion (多視点画像から...
Google XML Sitemap Generatorプラ...
Mixamo:人型3Dキャラクターアニメーション制作サービス
映画『ゴジラ-1.0』 メイキング情報まとめ
Webサイトのワイヤーフレームが作成できるオンラインツール
ZBrush 2018での作業環境を整える
ZBrushでアヴァン・ガメラを作ってみる 全体のバランス調...
布地のシワの法則性
BlenderでPhotogrammetryできるアドオン
Open Shading Language (OSL)
Netron:機械学習モデルを可視化するツール
Caffe:読みやすくて高速なディープラーニングのフレームワ...
ZBrushの練習 手のモデリング
AnacondaとTensorFlowをインストールしてVi...
cvui:OpenCVのための軽量GUIライブラリ
ZBrushでゴジラ2001を作ってみる 側頭部のボリューム...
PeopleSansPeople:機械学習用の人物データをU...
ZBrushでアヴァン・ガメラを作ってみる 脚のトゲの作り直...
WordPressプラグインによるサイトマップの自動生成
ZBrushでゴジラ2001を作ってみる 頭の概形作り
株式会社ヘキサドライブの研究室ページ
頭蓋骨からの顔復元と進化過程の可視化
Python拡張モジュールのWindows用インストーラー配...
ZBrushでアヴァン・ガメラを作ってみる 全体のバランス調...
MPFB2:Blenderの人体モデリングアドオン
コメント