SideFX Houdini を使って点群を Dynamics 365 Guides およびPower Apps で作成されたアプリの Mixed Reality コンポーネント用に最適化された 3D オブジェクトに変換する
このチュートリアルでは、次のタスクの手順をステップごとに説明します。
点群 を 3D オブジェクトに変換します。
Dynamics 365 Mixed Reality アプリケーションのパフォーマンス目標に合うように、ポリゴン数を減らして、3D オブジェクトを最適化します。
最適化された 3D オブジェクトを.glb ファイルとしてエクスポートして、Dynamics 365 Guides および Power Apps で作成されたアプリの Mixed Reality コンポーネントで使用できるようにします
処理パイプライン テンプレートを作成して、今後、点群をすばやく最適化できるようにします。
このチュートリアルは、SideFX Houdini と Microsoft Dynamics 365 Guides および Power Apps がどのように機能するかを示すための情報提供のみを目的として作成されています。 お客様によるサード パーティ アプリケーションの使用には、お客様とサード パーティ間の条件が適用されます。 Microsoft Corporation は、SideFX との提携やパートナーシップの関係にあるわけではなく、SideFX または SideFX の製品の推奨や資金援助は一切行っていません。 他のコンテンツ作成アプリを使用して 3D オブジェクトを準備することもできます。
Houdini とは
Houdini は、3D 手続き型コンテンツを作成するためのツールです。 Houdini は、非破壊型ノードベースのツール システムを使用して、プロセス パイプラインと 3D コンテンツを設計します。
環境の設定
環境を設定するには、次のタスクを完了する必要があります。
SideFX Labs 拡張機能をインストールします。
写真測量用に AliceVision を設定します。
SideFX Labs 拡張機能のインストール
SideFX Labsは、Houdini をより迅速に起動して実行するために役立つツールのテスト グラウンドです。 この無料ツールのコレクションには、点群を最適化された 3D オブジェクトに変換するために役立つツールが含まれています。 SideFX Labs を使用するには、Houdini 18 以降を使用している必要があります。
SideFX では、これらのツールのインストールに役立つチュートリアル ビデオ を提供しています。
メモ
SideFX Labs をインストールする前に、Houdini をインストールする必要があります。 Houdini をインストールする方法の詳細をご覧ください。
Houdini を開きます。
SideFX Labs をインストールするには、Houdini ウィンドウの上部にあるプラス記号 を選択し、Shelves を選択してから、SideFX Labs チェック ボックスをオンにします。
ウィンドウの上部に表示されるツールバーで、Update Toolset を選択して、インストーラーを開きます。
Update を選択してツールをインストールします。
正常にインストールされると、ツールバーにさらに多くのツールが表示されます。 その後、このチュートリアルを続行できます。
写真測量用の AliceVision の設定
AliceVision は、Mikros Image によって開発された、写真測量コンピューター ビジョン フレームワークです。 3D 再構築とカメラ追跡アルゴリズムを提供します。 AliceVision と AliceVision プラグインの詳細をご覧ください。
Houdini 用の AliceVision プラグインをインストールしてセットアップする方法については、SideFX チュートリアルをご覧ください。
点群を Houdini にインポート
Houdini は、PLY ファイル形式の点群ファイルをインポートできます。 ファイルが PTS ファイル形式の場合は、手動で PLY 形式に変換できます。
.pts ファイルの.ply ファイルへの変換
任意のファイル エディタで .pts ファイルを開き、次のヘッダーを追加します。
************************ ply format ascii 1.0 element vertex 534993 property float x property float y property float z property uchar intensity property uchar red property uchar green property uchar blue end_header ************************
ヘッダーの element vertex の横にある値 534993 を、元々.pts ファイルの先頭に表示されていた値 (今はヘッダーの直後にあります) に置き換えます。
この値は、点群内のポイントの総数です。
ヘッダーの後の元の値を削除します。 この変更を行う前と後のファイルを並べて比較したものを、次の表に示します。 element vertex の値は、赤で強調表示されています。
.pts ファイルの先頭 .ply ファイルの先頭 .ply ファイル名拡張子をつけて、ファイルを保存します。
.ply ファイルのインポート
Houdini を開きます。 新しいシーンが自動的に作成されます。 この手順では、ノードのチェーンを構築して、点群を 3D オブジェクトに処理します。 これらのノードは、Houdini ウィンドウの右下のウィンドウで構築されます。
右下のウィンドウを右クリックして、TAB Menu を開きます。 (または、Tab キーを押します。)
TAB Menu で、Import > File を選択し、Geometry ウィンドウを選択してノードを配置します。
file1 ノードの中央でダブルクリックして (または I を押して)、ノードのファイル選択部分にドリルダウンし、File Chooser ボタンを選択して、インポートするファイルを選択します。
ファイル ブラウザーが表示されたら、インポートする .ply 点群ファイルの場所を参照し、ファイルを選択して Accept を選択します。
点群がウィンドウのメイン部分に表示されます。 表示されない場合は、マウス ホイールを使用して、点群全体が表示されるまでズームアウトします。
点群の準備
点群の方向の修正
点群を初めてインポートすると、方向が正しくない場合があります。 変換ノードをノードツリーに追加すると、方向を修正できます。
Geometry ウィンドウで右クリックして TAB Menu を開き、Manipulate > Transform を選択して、変換ノードを追加します。
file1 ノードの下部にあるドットから、transform1 ノードの上部にあるドットに、ドラッグします。 これにより、file1 ノードの出力を transform1 ノードの入力に接続します。 次に、transform1 ノードの右側を選択します。 transform1 ノードの右側が青色になり、ウィンドウのメイン部分でノードがアクティブになります。このため、モデルの方向が変更された後でも、モデルを確認できます。
ヒント
Houdini でプロセスの特定の段階でモデルを表示するには、適切なノードの右側をクリックします。 この機能は、前の状態の 3D オブジェクトを確認し、その状態で発生した変更を編集する必要がある場合に、役立ちます。
モデルの回転を修正するには、ノード ウィンドウの上にあるオプション ウィンドウで、Rotate 行に値を追加します。 多くの場合、x の値を 270 に設定すると、モデルを正しい位置に回転させることができます。 それでうまく行かない場合には、別の値を試してください。
点群を原点の中心に配置するには、変換ノードの後に Axis Align ノードを追加します。 ノードを配置するには、Geometry ウィンドウをホバーして、Tab キーを押して TAB Menu を開き、Labs>Geo>Labs Axis Align の順に選択します。
transform1 ノードの下部にある出力ドットをドラッグして、axisalign1 ノードの上部にある入力ドットに接続します。 点群を原点 (理想的な場所) の上に配置するには、既定値のままにします。
点群をクリーン アップしてストレイ ポイントを削除する
点群に削除する必要があるストレイ ポイントがある場合は、個々のポイントまたはポイントのグループを選択して削除できます。
Geometry select 方法を Points に変更し、Select ツールを Lasso Picking に変更します。
メモ
必要に応じて、別の方法を使用できます。
削除するポイントを選択します。
Delete キーを押します。 新しい blast1 ノードが表示されます。 このノードの上部にある入力ドットは、最後に操作していたノードの下部にある出力ドットに接続されています。
適切な結果になるまで、ポイントを削除します。 削除するたびに、新しいブラスト ノードが追加されます。これはいつでも表示または削除できます。
点群をメッシュに変換
glTF とリアルタイム レンダリング アプリケーションは、どちらもを三角化ポリゴン表面として表すオブジェクトを必要とします。 Particle Fluid Surface コマンドを使用すると、ポイントをポリゴン ジオメトリとして、論理サーフェスに接続できます。
Geometry ウィンドウを選択して TAB Menu を開き、Fluid>Particle Fluid Surface を選択します。 次に、ノードを選択して、Geometry ペインに追加します。
transform1 ノードの下部にある出力ドットをドラッグして、particlefluidsurface1 ノードの左上にある入力ドットに接続します。 次に、pariclefluidsurface1 ノードの右側を選択して、ウィンドウのメイン部分でノードをアクティブ化します。
ウィンドウのメイン部分で、点群がメッシュとしてレンダリングされます。 Geometry ウィンドウの上の右上のウィンドウで Surfacing タブが選択されています。
カラー データが点群内のポイントに関連付けられている場合は、Transfer Attributes フィールドの末尾に文字 Cd を追加すると、カラー属性を使用できます。 すると、カラーがメッシュに表示されます。
次の図に示すように、メッシュに穴がある場合は、右上のウィンドウの Particle Separation スライダーと Voxel Scale スライダーを調整して、問題を修正します。
デシメート (プロセス全体の次の手順) 用にメッシュを準備するには、Output で Convert To フィールドの値を Surface Polygon Soup から Surface Polygons に変更します。 これにより、メッシュを再メッシュして、デシメートできます。
Geometry ウィンドウを右クリックして TAB Menu を開き、Polygon>Remesh の順に選択します。 再メッシュ ノードが追加され、メッシュを三角形に変換できます。 これにより、3D オブジェクトをデシメートして、パフォーマンス要件を満たすポリゴン数にすることができます。
particlefluidsurface1 ノードの下部にある出力ドットをドラッグして、remesh ノードの左上にある入力ドットに接続します。 Remesh ノードの中央を選択して、Geometry ウィンドウの上のウィンドウでアクティブ化します。 次に、Remesh ノードの右側を選択して、ウィンドウのメイン部分でモデルをアクティブ化します。 これで、再メッシュのプロパティを編集できます。ウィンドウのメイン部分のモデルには、それらの編集が反映されます。
Element Sizing の下のオプションを試して、必要な結果を取得します。 Edge Lengths フィールドは、既定値 (Uniform) のままにするか、または Adaptive を選択し、Relative Density スライダー (およびその他のオプション) を調整して必要なメッシュを作成できます。
3D オブジェクトのデシメートによるパフォーマンスの向上
アプリケーション固有の目標を達成するには、3D オブジェクトのデシメートが必要となることがあります。 デシメートとは、モデルのサーフェス ポリゴンを再計算して、より少ないポリゴンで同様の形状を作成するプロセスです。 このプロセスにより、視覚的な忠実性は低下しますが、パフォーマンスの向上に役立ちます。 HoloLens でシーンの複雑性が低い場合に使われる高品質モデルと、シーンの複雑性が高い場合に使われる低品質モデルの比較を、次の表に示します。
高ポリゴンの 3D オブジェクト | 低ポリゴンの 3D オブジェクト |
---|---|
500,000 個の三角形 | 8,000 個の三角形 |
モデルのデシメート
Geometry ウィンドウで、Tab キーを押して TAB Menu を開き、Polygon>PolyReduce を選択して、Geometry ウィンドウに PolyReduce ノードを配置します。
remesh ノードの下部にある出力ドットをドラッグして、polyreduce1 ノードの左上にある入力ドットに接続します。 polyreduce1 ノードの中央を選択してから、ノードの右側を選択して、ウィンドウのメイン部分でノードをアクティブ化します。
Reduction Amount の下の Target フィールドで、Output Polygon Count を選択して、Number To Keep スライダーを使ってポリゴン数を調整し、パフォーマンス要件を満たしながら、適切な視覚的忠実性を保つようにします。
点群が最適化された 3D メッシュに変換されました。 次の手順では、高解像度のテクスチャを 3D オブジェクトにベイク処理して、デシメートの前に存在していた視覚的な忠実性の一部を復元します。
低ポリゴン メッシュへの高解像度テクスチャのベイク処理
メッシュ内のポリゴン数を減らすことのデメリットの 1 つは、詳細の多くが失われる可能性があることです。 その詳細の一部を復元するには、それをキャプチャし、低ポリゴン モデルの上にレイヤー化されたテクスチャとして適用します。 テクスチャのベイク処理と呼ばれるこのプロセスでは、高ポリゴン モデルからすべてのサーフェスの写真を撮り、それらをつなぎ合わせて、低ポリゴン モデルの上にラップします。 これにより、低ポリゴン モデルによるパフォーマンスの向上を図りながら、高ポリゴン モデルの詳細の一部を維持できます。
テクスチャ座標 (UV とも呼ばれます) は、モデルのジオメトリに格納されている数値のペア (U と V) です。 これらの数値は、2D 画像を 3D サーフェスにマッピングする方法を表しています。これにより、サーフェス プロパティを画像として定義できます。 画像は、シンプルなデカールとすることも、粗さやメタリックなどの複雑なマテリアル コンポーネントとすることもできます。 メッシュの UV 位置を手動で生成することも、半自動または自動でプロセスを実行することもできます。 AutoUV サーフェス オペレーターは、UV を生成できる Houdini のツールの 1 つです。 このツールは、いくつかの自動メソッドを使用して、UV を作成します。
テクスチャのベイク処理
Geometry ウィンドウを右クリックして TAB Menu を開き、Labs>UV>Labs Auto UV の順に選択して、AutoUV ノードをシーンに追加します。
Method の下で、Method フィールドの値を UV Unwrap に変更します。
polyreduce1 ノードの下部にある出力ドットをドラッグして、autouv1 ノードの上部にある入力ドットに接続します。
「前」のオブジェクトと「後」のオブジェクトを並べて表示するには、ビューポート レイアウト ボタンを選択し、2 つのビューを並べるを選択します。
ウィンドウのメイン部分のドロップダウンメニューで、Set View > UV viewport を選択します。
アンラップされた UV が左側に表示され、3D オブジェクトが右側に表示されます。
Geometry ウィンドウで、Labs>Output>Labs Maps Baker を選択して、maps‑baker1 ノードを追加します。
autouv1 ノードの下部にある出力ドットをドラッグして、maps_baker1 ノードの左上にある入力ドットに接続します。 (左上のドットは 低解像度入力 ノードです。)
particlefluidsurface1 ノードの下部にある出力ドットをドラッグして、maps_baker1 ノードの右上にある入力ドットに接続します。 (右上のドットは 高解像度入力ノードです。)
maps_baker1 ノードを選択し、Bake の下で、Preview Channel フィールドの値を diffuse に変更します。 Bake Options の下で、Diffuse Map フィールドを diffuse に設定します。
ヒント
プロジェクトを特定のフォルダーに保存するには、前の図に示されている Output Directory フィールドの横にある File Chooser ボタンを選択します。 テクスチャをベイク処理すると、.pngテクスチャ ファイルは、render フォルダー (保存されたプロジェクトのルート フォルダーに作成されています) に保存されます。 プロジェクトを独自のフォルダーに保存すると、ベイク処理されたテクスチャを見つけやすくなります。
maps_baker1 ノードを選択して、オプション ウィンドウで Bake を選択します。
Geometry ウィンドウを右クリックして TAB menu を開き、Managers>Material Network を選択して、matnet1 ノードをシーンに追加します。
matnet1 ノードをダブルクリックして、VEX Builder ウィンドウを開きます。
VEX Builder ウィンドウを右クリックして、Shaders > Principled Shader を選択し、Principled Shader マテリアルを追加します。
オプション ウィンドウの Surface タブで、スライダーを使用して、Roughness フィールドの値を 0.6 に、Metallic フィールドの値を 0.1 に変更します。 (これらのフィールドは任意に設定できますが、これらの値は既定値を使うことから始めることをお勧めします。)
Textures タブの Base Color の下で、Use Texture のチェック ボックスをオンにします。 次に、File Chooser ボタンを選択し、以前に render フォルダー ファイルに保存した *_color.png テクスチャ ファイルを選択します。 これで、Principled Shader を使用できるようになりました。
メモ
さらにマテリアルを変更することもできます。 チュートリアルのためには、この構成で十分です。
VEX Builder ウィンドウで、Back (左矢印) ボタンを選択し、Geometry ウィンドウに戻ります。
Material > Material を選択し、マテリアル ノードを Geometry ウィンドウに配置します。
autouv1 ノードの下部にある出力ドットをドラッグして、material1 ノードの上部にある入力ドットに接続します。
material1 ノードを選択して、Operator chooser ボタンを選択します。 次に、Choose Operator ダイアログ ボックスで、file1>matnet1>principledshader1 を選択し、以前に作成した Principled Shader を選択します。
ノードの右側を選択して、ウィンドウのメイン部分でそれをアクティブ化します。
テクスチャは、低ポリゴン 3D オブジェクトの上にレンダリングされます。 十分な結果が得られたら、次のステップに進みます。
モデルを .glb ファイルにエクスポート
このステップでは、モデルを .glb ファイルにエクスポートして、Dynamics 365 Guides および Power Apps で使用できるようにします。
Geometry ウィンドウを右クリックして TAB Menu を開き、Export>ROP GLTF Output を選択します。
material1 ノードの下部にある出力ドットをドラッグして、rop_gltf1 ノードの上部にある入力ドットに接続します。
上部のウィンドウで、Export Type フィールドの値を glb に変更します。
Output File フィールドの横にある File Chooser ボタンを選択し、.glb ファイルの名前と宛先を入力します。 必ず .glb をファイル名の末尾に追加してください。 完了したら Accept を選択します。
Render to Disk を選択して、エクスポートを完了し、.glb ファイルを作成します。
テンプレートを作成して設定を他の点群に再利用する
テンプレートを作成すると、時間と労力を節約できます。 この方法では、点群用に作成した設定を、他の点群に使用できます。 この場合でも手動で Bake を選択する必要があり、またいくつかの値を調整する必要があることもありますが、多くの処理を自動化できます。
テンプレートの作成
現在使用しているジオメトリを、既定のジオメトリに置き換えます。 この手順により、テンプレート ファイルが軽量になり、すばやく読み込めるようになります。
Geometry ウィンドウで、ファイル ノードの中央を選択して、上部ウィンドウの File メニューに切り替えます。
Geometry File フィールドの値を default.bgeo に変更して、Reload Geometry を選択します。
ジオメトリが再描画され、汎用キューブとなっていることを確認します。
ファイル名を一般的な名前 (たとえば Template) に変更します。
ファイル > 保存 を選択して、覚えやすい名前 (Prep_Template など) を入力します。
Houdini を閉じます。
テンプレートを使用する
Houdini を開き、File>Open を選択して、先ほど作成したテンプレートを選択します。
Geometry ウィンドウで、ファイル ノードの中央を選択して、上部ウィンドウの File メニューに切り替えます。 次に、Geometry File フィールドの横にある File Chooser ボタンを選択して、.ply 点群ファイルを選択します。
Reload Geometry を選択して、点群をシーンに読み込みます。
maps_baker1 ノードに移動し、Bake を選択して、新しいテクスチャを 3D オブジェクトにベイク処理します。
material1ノードの右側を選択して、ベイク処理されたモデルを表示します。
次のいずれかの手順を実行します。
十分な 3D オブジェクトが生成されたら、rop_gltfB ノードに移動し、Render to Disk を選択して 3D オブジェクトをエクスポートします。
生成された 3D オブジェクトが十分でない場合は、particlefluidsurface1、remesh、polyreduce1 の各ノードの設定を調整してください。 モデルが十分になったら、再度テクスチャのベイク処理を行い、3D オブジェクトをエクスポートします。
Dynamics 365 Guides または Power Apps での 3D オブジェクトの表示
3D オブジェクトの準備が完了したら、次のリンクを参照して、Dynamics 365 Guides または Power Apps でモデルを使用する方法を確認します。
詳細
このチュートリアルに含まれているスクリーンショットは Houdini ソフトウェア プログラムから取得したもので、Houdini のソフトウェアの使用方法を明確に説明することを目的としています。 SideFX Houdini の詳細情報はこちらをご覧ください。
Microsoft Corporation は、Houdini の使用から生じたか、これらの手順に従ったことにより生じたいかなる種類の損害に対しても責任を負わず、このような損害の全責任を明示的に否認します。 このドキュメントは、お客様に一般的な情報を提供するためにのみ作成されており、個別の事業計画や仕様は考慮されていません。
このドキュメント内での商標名および画像の使用は、情報提供または説明のためのみを目的としています。Microsoft Corporation がこれらの使用に関して商業的な主張、スポンサーシップ、推奨を行っていることを示唆するものではありません。