MRが楽しい

MRやVRについて学習したことを書き残す

ParaViewで3Dオブジェクトを読み込む Disk/CylinderTutorial編

ParaView の学習枠です。
前回、実施を見送った disk_out_ref.ex2 の確認を行います。
bluebirdofoz.hatenablog.com

今回は以下の記事を参考に、データの確認と ParaView の機能確認を実施します。
・Disk/Cylinder Tutorial
 http://homework.uoregon.edu/pub/class/sciprog/rect.html


ParaView を起動し、メニューから File -> Open で disk_out_ref.ex2 を読み込みます。
f:id:bluebirdofoz:20170818014212j:plain

Properties の Variables を全てチェック状態にして Apply をクリックします。
f:id:bluebirdofoz:20170818014222j:plain

次に Display の設定を以下の通り設定します。
Representation:SurfaceWithEdges
Coloring:Pres
f:id:bluebirdofoz:20170818014234j:plain

次に Set view direction to +Z ボタンをクリックします。カメラ位置がZ軸基準で反対側からの視点になります。
f:id:bluebirdofoz:20170818014243j:plain

少しドラッグしてカメラを動かすと、オブジェクトの形が分かります。
f:id:bluebirdofoz:20170818014254j:plain

メニューから Filters -> Common -> Contour をクリックします。
PipelineBrowser に Contour が追加されます。
f:id:bluebirdofoz:20170818014304j:plain

Contour オブジェクトに以下の設定を行い、Apply ボタンをクリックします。
ContourBy:Temp
ValueRange:400
f:id:bluebirdofoz:20170818014314j:plain

Contour の Aplly と共に disk_out_ref.ex2 オブジェクトが非表示になっていると思います。
disk_out_ref.ex2 オブジェクトの Representation を Wireframe にすると以下のように確認できます。
f:id:bluebirdofoz:20170818014322j:plain

メニューから Filters -> Alphabetical -> ExtractSurface をクリックします。
PipelineBrowser に ExtractSurface が追加されます。
f:id:bluebirdofoz:20170818014331j:plain

ExtractSurface の Properties から Apply ボタンをクリックします。
そのまま、ExtractSurface を選択した状態で、Filters -> Common -> Clip をクリックします。
ExtractSurface の子オブジェクトとして、Clip オブジェクトが追加されます。
f:id:bluebirdofoz:20170818014339j:plain

Clip の Properties から Normal を以下の通り設定します。
Normal 0 -1 0
Apply ボタンをクリックすると以下の表示となります。
f:id:bluebirdofoz:20170818014356j:plain

次に断面箇所の可視化です。
disk_out_ref.ex2 オブジェクトを選択した状態で Filters -> Common -> Slice をクリックします。
disk_out_ref.ex2 の子オブジェクトとして Slice オブジェクトが追加されます。
f:id:bluebirdofoz:20170818014405j:plain

Slice の Properties から Normal を以下の通り設定します。
Normal 0 -1 0
Apply ボタンをクリックすると以下の表示となります。
f:id:bluebirdofoz:20170818014413j:plain
先ほどまで空洞だった断面にカラーマッピングが行われました。


最後に流線の確認です。
disk_out_ref.ex2 オブジェクトを選択した状態で Filters -> Common -> StreamTracer をクリックします。
disk_out_ref.ex2 の子オブジェクトとして StreamTracer オブジェクトが追加されます。
f:id:bluebirdofoz:20170818014423j:plain

StreamTracer の Properties から Apply ボタンをクリックします。
そのまま、StreamTracer を選択した状態で、Filters -> Alphabetical -> Tube をクリックします。
StreamTracer の子オブジェクトとして、Tube オブジェクトが追加されます。
f:id:bluebirdofoz:20170818014432j:plain

Tube の Properties から Apply ボタンをクリックします。
ついでに Tube オブジェクトを見やすくするため、その他のオブジェクトを非表示にします。
以下のような見た目になります。
f:id:bluebirdofoz:20170818014444j:plain

参考にしたページと少し形状が異なります。
これの理由は分かりませんでした。データが更新されている可能性もあります。

少々線が分かりづらいので Radius を調整して線の太さを変えました。
f:id:bluebirdofoz:20170818014455j:plain

StreamTracer を選択した状態で、Filters -> Common - > Glyph をクリックします。
StreamTracer の子オブジェクトとして、Glyph オブジェクトが追加されます。
f:id:bluebirdofoz:20170818014510j:plain

Glyph の Properties で以下の通り設定し、Apply ボタンをクリックします。
GlyphType:Cone
Vectors:V
ScaleFactor:0.5
f:id:bluebirdofoz:20170818014522j:plain
流線の方向が三角錐で表示されるようになりました。

次に Tube オブジェクトの Properties を開き、Coloring 設定を SolidColoer に変更します。
f:id:bluebirdofoz:20170818014532j:plain

以下の手順でカラーマップの変更を実施します。
1.Glyph の Properties を開きます。
2.Coloring の設定を Temp に変更します。
3.Edit をクリックし、Color Map Editor を開きます
4.MappingData をクリックしてカラーパレットを表示します。
5.任意のカラーを選択します。
f:id:bluebirdofoz:20170818014548j:plain

OKボタンをクリックすると、以下のようにカラーマップの設定が反映されます。
f:id:bluebirdofoz:20170818014556j:plain

表示設定を変更します。
Properties の Background から Color をクリックします。
するとカラーパレットが表示されるので 黒色 を選択して OK ボタンをクリックします。
f:id:bluebirdofoz:20170818014606j:plain
背景色が黒になりました。

Clip オブジェクトを表示状態にすると、別々のカラーパレットが表示されます。
f:id:bluebirdofoz:20170818014615j:plain

最後にボリュームレンダリングを実施します。
Clip オブジェクトは再度、非表示にします。
disk_out_ref.ex2 オブジェクトを選択し、Display 設定を以下の通り設定します。
Representation:Volume
Coloring:Temp
Edit -> カラーマップを作成
f:id:bluebirdofoz:20170818014624j:plain

以上で ParaView サンプルデータの確認は完了です。
まだ一部の機能を触ることができただけですが、その用途と利便性を体験できたと思います。

ParaViewで3Dオブジェクトを読み込む

ParaView の学習枠です。
直近の目標を ParaView で作成したデータを hololens で確認することと定めました。
ともあれ本日は昨日の続きです。公式ページからサンプルデータを取得して ParaView で確認してみます。

サンプルデータは以下のページから取得可能です。
・The ParaView Tutorial
 https://www.paraview.org/Wiki/The_ParaView_Tutorial

ページ下部にある「The ParaView Tutorial Data」をクリックしてデータをダウンロードします。
f:id:bluebirdofoz:20170817014716j:plain

ダウンロードした ParaViewTutorialData.zip を展開すると以下のファイルが入っています。
・can.ex2
・disk_out_ref.ex2
・headsq.vti

まずは can.ex2 について確認します。
ParaView を起動し、メニューから File -> Open で can.ex2 を読み込みます。
f:id:bluebirdofoz:20170817014726j:plain

Source からのオブジェクト配置と同様、まず PipelineBrowser にオブジェクトが表示されます。
Apply ボタンを押して反映すると、赤い四角のオブジェクトが表示されます。
f:id:bluebirdofoz:20170817014735j:plain

画面を左クリックしてドラッグするとカメラ位置を変更できます。
f:id:bluebirdofoz:20170817014749j:plain
半分に切った円柱と長方形を組み合わせたオブジェクトであることが確認できます。

ここで画面中央部の Time バーに注目してみます。
「max is 43」という記載があり、時間軸の情報を持っていることが分かります。
f:id:bluebirdofoz:20170817014757j:plain

試しに再生ボタンを押してみると……。
f:id:bluebirdofoz:20170817014807j:plain
長方形が移動を開始し、円柱が押しつぶされるアニメーションが確認できました。

因みにこのとき、Source -> AnnotateTime オブジェクトを配置しておくと、ビューに時間情報が表示されます。
f:id:bluebirdofoz:20170817014816j:plain

今回使用した ex2 ファイル形式は3Dファイル形式の一種のようです。
・Exodus II File Specification
 https://cubit.sandia.gov/public/13.2/help_manual/WebHelp/finite_element_model/exodus/exodus2_file_specification.htm
詳しい情報は得られませんでしたが、今回の動作を見るに。
頂点情報のほか、メッシュ情報や時間遷移に関する情報を持つファイル形式のようです。


disk_out_ref.ex2 についてですが、これはなかなか奥深そうなので次回に持ち越します。
・Disk/Cylinder Tutorial
 http://homework.uoregon.edu/pub/class/sciprog/rect.html


headsq.vti を確認します。
同じくメニューから File -> Open で headsq.vti を読み込みます。
f:id:bluebirdofoz:20170817014828j:plain

読み込み直後は四角形の輪郭線が見えるだけですが、これは Display の設定が Outline になっているためです。
Display の設定を Surface に切り替えて、カメラ位置を移動してみます。
f:id:bluebirdofoz:20170817014841j:plain

長方形のオブジェクトに模様が見えました。
このオブジェクトは頭部CTスキャンの映像オブジェクトのようです。

試しに、オブジェクトの中身がどうなっているか見てみましょう。
ツールバーにある Slice ボタンをクリックします。
f:id:bluebirdofoz:20170817014855j:plain
すると画面のようなオブジェクトを囲む長方形とそれを分割する赤いラインが表示されます。

Slice1 オブジェクトのPlaneParameters を操作し、CTスキャンの方向に合わせて赤いラインを設定します。
断面を確認したい位置にせって出来たら Apply ボタンをクリックして反映します。
f:id:bluebirdofoz:20170817014906j:plain

この状態で headsq.vti を非表示にすると……。
f:id:bluebirdofoz:20170817014915j:plain
オブジェクトの断面図が確認できました。

因みに vti ファイル形式は VTK ImageData というVTKの標準フォーマットファイルとのことです。
・vtkファイルフォーマット(バイナリ形式)
 http://bigvalley.hatenablog.com/entry/2016/02/03/160414
XML形式のため、テキストエディタで中身を確認できます。
vtp,vti,vtr,vts,vtu の種類があり、vti は直交直線に関するデータを表現するらしい。
VTKは利用の機会が多そうなので、機会を作って他のVTK形式についても確認してみたいところです。

ParaViewで3Dオブジェクトを作成する

本日は ParaView の学習枠です。
……とはいえ、現状何か目的ある訳でもないんですよね。
とりあえず、3Dモデルの作成、3Dファイルの読み込み、アニメーションの作成辺りを順を追って確認していきます。

今回は3Dオブジェクトの作成です。まず、簡単な図形を表示してみます。
メニューから Source -> Cone を選択してみます。
f:id:bluebirdofoz:20170816003949j:plain

選択しましたが、この時点では3Dビューに何も表示されません。
しかし、PipelineBrowser を確認すると、Cone オブジェクトが追加されています。
f:id:bluebirdofoz:20170816004001j:plain

この状態で Properties タブの Aplly ボタンをクリックすると、Cone オブジェクトが配置されます。
f:id:bluebirdofoz:20170816004011j:plain

オブジェクトの設定を変更する際は Properties タブの値を操作して再び Apply ボタンを押します。
例えば、Resolution(解像度)とHeight(高さ)を変更してみると、以下のように変化します。
f:id:bluebirdofoz:20170816004019j:plain

Cone はRadius(半径)、Capping(底面描画)といった円錐としての設定情報を保持しています。
オブジェクトは自分がどういったオブジェクトかの情報を持っている訳ですね。
Blenderのメッシュ追加よりもUnityでのゲームオブジェクト追加に近いイメージでしょうか。

同じやり方で、Source 内にあるオブジェクトを全て試してみました。
f:id:bluebirdofoz:20170816004049j:plain
使ってみただけでは用途がよく理解できないものが3割ほど……。
もしParaView内で自作の3Dオブジェクトを作るなら「ProgrammableSource」でコーディング?
あくまで「可視化ツール」なので複雑な3Dモデル作成はBlenderなど外部ソフトで行うのが正しい使い方?
この辺りはソフト間の3Dデータの連携調査を行いつつ、調べていきたいところです。

最後に ParaView のプロジェクト保存はメニューから File -> Save State で保存できます。
f:id:bluebirdofoz:20170816004144j:plain

次回は公式ページのサンプルデータを使って、3Dファイルの読み込みを試します。

3Dツールの環境構築手順 ParaView編

hololensの開発環境とは関係ありませんが、利用機会がありParaViewをインストールしました。
端的に説明すれば、ParaViewはオープンソースのデータ可視化ソフトです。
3Dビューア繋がりで ParaView のインストール手順を記録しておきます。

ParaView のダウンロードページは以下です。
・ParaView
 https://www.paraview.org/

右上のDownloadをクリックしてダウンロードページを開きます。
f:id:bluebirdofoz:20170815011811j:plain

環境に合わせて項目を選択してDownloadをクリックします。
f:id:bluebirdofoz:20170815011820j:plain
ParaViewはオープンソースのため、ソースコードをダウンロードし、手を加えることもできます。
今回はひとまず動きを見たいのでバイナリをダウンロードしました。

ダウンロードしたParaView-5.4.1-RC4-~.exeを実行します。
インストーラが起動するので、次へ をクリックします。
f:id:bluebirdofoz:20170815011833j:plain

ライセンス契約書が 同意する をクリックします。
f:id:bluebirdofoz:20170815011843j:plain

インストール先フォルダを指定して 次へ をクリックします。
f:id:bluebirdofoz:20170815011851j:plain

スタートメニューフォルダの設定を行い(そのままでも問題なし)インストール をクリックします。
f:id:bluebirdofoz:20170815011901j:plain

これでParaViewのインストールは完了です
f:id:bluebirdofoz:20170815011912j:plain

Windowsでバイナリインストールの場合、特に難しい点はありませんでした。
ただソースコードのビルドはWindows環境ではなかなか手間なようなので、そちらはLinux環境を用いた方が良さそうです。

ショートカットから ParaView-5.4.1-RC4 を選択すると、ParaViewが起動します。
f:id:bluebirdofoz:20170815011930j:plain

今週はこのツールを色々触ってみることにします。
個人的に 5.4 のリリースノートに Virtual Reality Support の見出しがあるのが気になるところ。
・ParaView 5.4.0 Release Notes
 https://blog.kitware.com/paraview-5-4-0-release-notes/

UnityにBlenderで作成した小物とアニメーションを取り込む

本日はUnityの技術調査枠です。
前回メガネの3Dモデルにアニメーションを設定しました。
bluebirdofoz.hatenablog.com

Unityへの取り込みについても試してみます。
以前ダンスモーションを取り込んだ方法を応用します。
bluebirdofoz.hatenablog.com

3DモデルをUnityへの取り込む時の注意事項は以下にまとめています。
bluebirdofoz.hatenablog.com
今回もサイズ調整とテクスチャのコピーを事前に実施しています。

ではFBX形式で出力します。
今回はモデルと一緒にアニメーションを出力するため、「アーマチュア」と「メッシュ」をチェックして出力します。
f:id:bluebirdofoz:20170814001752j:plain

UnityのAssetsに出力したFBXファイルを取り込みます。
f:id:bluebirdofoz:20170814001759j:plain
作成したアニメーションファイルが含まれていることが分かります。

この状態でアニメーションを確認すると、「閉じる」「開く」のアニメーションが確認できます。
f:id:bluebirdofoz:20170814001809j:plain

このとき、ダンスモーション取り込み時の違いとして、メガネのRigは「Generic」のまま変更しません。
f:id:bluebirdofoz:20170814001819j:plain
明らかにヒューマノイド型のボーンではないので、ある意味当然ですね。
このメガネのモーションデータはこのモデル専用のモーションデータとなります。

最後にScene内の利用方法ですが、これはダンスモーションと同様です。
メガネ用のアクションコントローラを作成し、Animatorコンポーネントのコントローラに設定します。
f:id:bluebirdofoz:20170814001829j:plain

シーンを再生すると……。
f:id:bluebirdofoz:20170814001839j:plain
メガネが開閉アクションを行いました。

以前、紹介したアニメーションの設定方法と組み合わせれば好きなタイミングで小物をアクションさせることができます。
bluebirdofoz.hatenablog.com

Blenderで小物にアニメーションを設定する

本日はBlenderの学習枠です。
前回メガネにボーンを設定したのでアニメーションを作成してみようと思います。
bluebirdofoz.hatenablog.com

今回、参考にしたのは以下のページです。
・【Blender】ボーンを動かしてアニメーションを作成する
 http://yugalab.sakura.ne.jp/archives/2570
・初心者のための!作って学ぶBlenderの基礎:⑤アニメーションを設定する
 http://nvtrlab.jp/column/2-5

では早速、blenderを開きます。
ビューの一つを「ドープシート」、モードを「アニメーション」に切り替えます。
新規をクリックしてアニメーションを新規作成します。
f:id:bluebirdofoz:20170813220249j:plain

アクション名を設定し、「F」ボタンを有効にしておきます。
f:id:bluebirdofoz:20170813220258j:plain

ボーンの操作を行うビューも用意します。
Amatureを選択し、ビューの一つを「3Dビュー」、モードを「ポーズ」に切り替えます。
f:id:bluebirdofoz:20170813220309j:plain

ではアニメーションを作成します。まず、メガネを閉じるアニメーションを作成します。
まずはドープシートのフレームを1に合わせた状態で、通常状態のボーンのキーを打ち込みます。
ポーズモードのビューで全てのボーンを選択し、「I」キーを押して「位置回転」をクリックします。
f:id:bluebirdofoz:20170813220320j:plain

キーフレームが登録されます。
f:id:bluebirdofoz:20170813220329j:plain

ドープシートのフレームを進めます。
それぞれのボーンを動かし、メガネを閉じた状態で同じくキーフレームを登録します。
f:id:bluebirdofoz:20170813220353j:plain

これでメガネを閉じるアニメーションが作成できました。
他にもメガネを閉じたフレームのみのポーズアニメーション、逆に開くアニメーションを作成しました。
f:id:bluebirdofoz:20170813220404j:plain

再生ボタンを押すことでアニメーションを確認できます。
f:id:bluebirdofoz:20170813220415j:plain
最初と最後のフレームさえ設定していれば、その間のモーションは自動で補完されます。

Blenderでミラーモディファイアに合わせてボーンを設定する

本日はBlenderの学習枠です。
前回作成したメガネにボーンを設定してテンプルを折り曲げれるようにします。
bluebirdofoz.hatenablog.com

因みにメガネのパーツ名は以下で調べました。考えてみると案外知らない……。
n-oni.jp

メガネはミラーモディファイアを用いて作成しています。
オブジェクトを修正する際の事を考え、ミラーモディファイアを設定したままボーンを設定します。

今回、参考にしたのは以下のページです。
Blenderモデリングツール(アーマチュア
 http://cg.xyamu.net/Blender/entry188.html
・【Blender】アーマチュア(ボーン)とは?簡単な使い方(1/3)
 http://blender-cg.net/armature-bone/
・【Blender】アーマチュアの設定項目(2/3)
 http://blender-cg.net/armature/
・【Blender】ボーンの設定項目(3/3)
 http://blender-cg.net/bone/
Blenderでボーンとオブジェクトを関連付けるには?
 http://b00.sakura.ne.jp/main/gamecreate/2015/10/28/post-210/
・初心者のための!作って学ぶBlenderの基礎:④ボーンを設定する
 http://nvtrlab.jp/column/2-4

最初にオブジェクトモードで 追加 -> アーマチュア -> 単一ボーン でボーンを追加します。
f:id:bluebirdofoz:20170812223819j:plain

Amature を選択するとツールメニューに「アーマチュアオプション」が表示されるのでチェックします。
f:id:bluebirdofoz:20170812223940j:plain

Shift+Eで左右対称のボーンを作成します。
f:id:bluebirdofoz:20170812224003j:plain

テンプルに重なるように位置を調整します。
f:id:bluebirdofoz:20170812224122j:plain
因みに親ボーンから離れた位置にボーンを設定する場合、「接続」のチェックを外す必要があります。

メッシュにアーマチュアモディファイアを適用します。
f:id:bluebirdofoz:20170812224137j:plain

オブジェクトに先ほど作成したアーマチュアを指定します。
f:id:bluebirdofoz:20170812224151j:plain
このとき、ミラーモディファイアを用いている場合は Mirror > Armature の順でモディファイアを設定します。

ウエイトペイントモードに移行します。メッシュオブジェクトを指定した状態でCtrl+Tabを押します。
f:id:bluebirdofoz:20170812224205j:plain

オプションからXミラーにチェックを行い、頂点グループに対応した影響範囲をペイントします。
f:id:bluebirdofoz:20170812224225j:plain

先ほどのモディファイアの設定とXミラーを行っていれば、自動的に逆側のボーンのメッシュ設定も行われます。
f:id:bluebirdofoz:20170812224242j:plain

アーマチュアのポーズモードでボーンを動かしてみると……。
f:id:bluebirdofoz:20170812224252j:plain
動きました。

ボーンを左右別々に動かせば、ちゃんと左右別々にメッシュが動くことも確認できます。
f:id:bluebirdofoz:20170812224356j:plain
これでミラーモディファイアを維持したまま、ボーンの設定が行えました。