HoloLensを使ってPDBに登録されているタンパク質の立体構造を現実空間に投影する

概要

HoloLens向けのアプリをビルドして実機にデプロイするところをまとめてみました。 Microsoftが用意しているHello World的なチュートリアルをなぞってみます。
Holograms 100

ただのCubeを表示させるだけだと味気ないので、

www.rcsb.org

PDBからタンパク質の立体構造のデータを取ってきて、PyMolとBlenderで適当に加工した3Dデータを表示させます。

動画をキャプチャすると見た目がしょぼく見えてしまいますがこんな感じになります。

Animated GIF  - Find & Share on GIPHYgph.is

このように、HoloLensを使えば、空間を認識してマーカーなしでその場にオブジェクトを置くことができます。

必要なもの

HoloLensのアプリ開発環境

PDBデータの加工

内容

1. HoloLensのアプリ開発に必要なツールのインストール

詳しくは、MicrosoftのInstall the toolsを参照のこと。

https://developer.microsoft.com/ja-jp/windows/holographic/install_the_tools

をそれぞれインストールする。

インストール時の留意点

Visual Studio 2015 Update 3

Tools (1.4)Windows 10 SDK (10.0.10586)を併せてインストールする必要がある。

HoloLens Emulator

Hyper-Vの機能をあらかじめONにしておく必要がある。
方法は以下の通り。
1. CortanaでHyper-Vと検索。
2. Windowsの機能の無効化と有効化(コントロールパネル)をクリック。
3. Hyper-Vの項目にチェックを付け、パソコンを再起動

f:id:biodata:20170129192348p:plain

Unity

Windows Store .NET Scripting BackEndを併せてインストールする。

2. PDBデータの加工に必要なツールのインストール

Anacondaのインストール

PyMolがPythonで動作するソフトであるため、Python3をあらかじめパソコンにインストールしておく。

Download Anaconda Now! | Continuum

Python2.7でも構わないが、今回はPython3.5のほうをダウンロードしてインストールした。

PyMOLのインストール

下記の記事に紹介されているので詳しくはそちらを参照のこと。
PyMOL インストール

1. 非公式のPythonパッケージのインストーラーを配布しているサイトへ行き、
Python Extension Packages for Windows - Christoph Gohlke

  • Pmw-2.0.1-py3-none-any.whl
  • pymol-1.8.5.0-cp35-cp35m-win_amd64.whl
  • pymol_launcher-1.0-cp35-cp35m-win_amd64.whl

をそれぞれダウンロードする。

f:id:biodata:20170129194356p:plain

2. コマンドプロンプトを開き、先ほどダウンロードしたファイルからPyMOLをインストールする。

$ pip install Pmw-2.0.1-py3-none-any.whl
$ pip install pymol-1.8.5.0-cp35-cp35m-win_amd64.whl
$ pip install pymol_launcher-1.0-cp35-cp35m-win_amd64.whl

Anacondaをインストールしていれば、ScipyWheelがインストールされているはずですが、万が一上記のライブラリがインストールされていない場合は下記のように自身でインストールする。 f:id:biodata:20170129195840p:plain

Anaconda Navigatorを起動して、Environmentsをクリックし、Allを選択して、それぞれのライブラリを検索する。 インストールしたいライブラリにチェックを付け、右下のApplyボタンをクリックして該当するライブラリをインストールする。

3. PyMOLの実行ファイルのショートカットを作っておく。 PyMOLはC:\Users\自分のユーザー名\Anaconda3\PyMOL.exeにあるので、ショートカットを作っておいてデスクトップなどに置いておくと便利です。

f:id:biodata:20170129201027p:plain

Blenderのインストール

下記のURLからインストーラーをダウンロードし、自身の環境にインストールする。
https://www.blender.org/download/

3. Unityに取り込ませるタンパク質の立体構造のデータを用意する

PDBのサイトから適当なタンパク質の立体構造をダウンロード

下記のURLからPDBのサイトへアクセスします。

RCSB Protein Data Bank - RCSB PDB

PDBのサイトから、好きなタンパク質の名前で検索をかけ、適当なタンパク質のデータを選択する。 各立体構造のページに飛んだら、右上のDownload Filesボタンをクリックして、PDB Formatのファイルをダウンロードする。

f:id:biodata:20170129205608p:plain

ちなみ、今回使用したデータはこちら。

https://files.rcsb.org/download/3Q0L.pdb

PyMOL上でリボン構造とSurface構造を保存する

PyMOLをWindows10上で起動し、[File]->[Open]から先ほどダウンロードしてきたPDBファイルを開く。

f:id:biodata:20170129212436p:plain

開いたデータ(ここでは「3qOl」)の欄の横にあるHボタンをクリックし、メニューの先頭のeverythingを選択する。

f:id:biodata:20170129213329p:plain

すると、右図のように立体構造の表示がクリアされる。

次に、Sボタンをクリックし、メニューのcartoonを選択する。

f:id:biodata:20170129213829p:plain

すると、リボン構造としてタンパク質の立体構造が表現される。

これをBlenderで取り込めるVRML2ファイルとして保存する。

f:id:biodata:20170129214208p:plain

Surface構造も同様の手順で取得する。 まず、先ほどと同様にHボタンをクリックし、メニューの先頭のeverythingをクリックすることでリボン構造を消す。

次に、Sボタンをクリックし、メニューの先頭のsurfaceを選択する。

f:id:biodata:20170129215106p:plain

すると今度は、Surface構造としてタンパク質の立体構造が表示される。 これをBlenderで取り込めるVRML2ファイルとして保存する。

Blenderで3Dデータを加工する

Blenderを起動する。起動した初期画面にはCubeがあらかじめ設置されているので、まずはこれを消す。 右クリックでオブジェクトを選択して、キーボードの「Delete」ボタンを押すと、ウインドウ上に「Delete」するか求められるので「Delete」をクリックしてCubeを消す。

f:id:biodata:20170129234927p:plain

BlenderVRML2ファイルを取り込めるかどうか確認する。 [File]->[User Preferences]をクリックして、Blender User Preferencesを開く。

Add-onsのタブをクリックし、VAML2を検索する。Web3D X3D/VAML2 formatの項目にチェックが付いていない場合は、チェックを付けて左下のSave User Settingsをクリックする。

f:id:biodata:20170129221119p:plain

次に、Blenderにタンパク質の立体構造のデータ(リボン構造とSurface構造)を取り込ませる。
[File]->[Import]->[X3D Extensible 3D(.x3d/.wrl)]をクリックする。そして、先ほどPyMOLで用意したリボン構造のほうのVAML2ファイルを選択しBlenderにインポートする。

blender_1.png (637.9 kB)

  • 取り込んだリボン構造に対して右クリックし、オブジェクトを選択する。
  • キーボードのTabキーを押して、Object ModeからEdit Modeに切り替える。
  • 右端のカラムからMaterialボタンを押す。
  • +ボタンをクリックして、新しいMaterialMaterial.001を作成する。
  • 新しく作ったMaterialを選択して、Assignボタンをクリックする。
  • Diffuseの項目で適当な色を選択する。
  • Tabキーを押して、Object Modeに戻る。
  • もとからあったShapeを選択し、-ボタンをクリックして消す。

Blender 2017-01-29 23.19.35.png (1.9 MB)

結果として、このようにリボン構造に色がつくはずです。

同じ要領でSurface構造をBlenderにインポートする。

  • 先程と同様に、右クリックでSurface構造のみを選択した状態で、Tabキーを押しEdit Modeに切り替える。
  • 右端のカラムからMaterialボタンを押す。
  • Diffuseの項目で適当な色を選択する。
  • Transparencyにチェックを付ける(リボン構造と異なり、Surface構造は透明になるように設定します)。
  • Alpha値を0.3に設定する(透明度を設定。0に近いほど透明度が増す)。
  • Tabキーを押し、Object Modeに切り替える。
  • キーボードのAキーを押し、オブジェクトを全選択。
  • Sキーを押し、マウスを動かしてオブジェクトのサイズが小さくなるように調節する。 もとのサイズだと保存したファイルが大きくなるので、できるだけ容量を抑えるためにサイズを小さくします。

Blender 2017-01-29 22.53.00.png (2.3 MB)

最後に、完成したオブジェクトを、UnityにインポートできるFBXファイルとしてエクスポートする。 [File]->[Export]->[FBX(.fbx)]をクリックし、任意の場所・名前で保存。

f:id:biodata:20170130000603p:plain

4. Unity上でHoloLensアプリをつくる

新しいプロジェクトの作成

Unityを起動して、右上のNEWをクリック。プロジェクト名をPDBViewerとして、Create projectボタンをクリックして、新しいプロジェクトを作成する。

f:id:biodata:20170131000041p:plain

タンパク質の立体構造のデータをインポート

上記で作成したタンパク質の立体構造のFBXファイルをUnityにインポートする。 方法は簡単で、ProjectタブのAssetsの直下に、該当のFBXファイルをドラッグ&ドロップでインポートする。

f:id:biodata:20170130001139p:plain

[Ctrl]+[S]で新しいSceneを適当な名前で保存する。今回はPDBViewerという名前で保存した。

HoloLens向けにMain cameraの設定

次に、HoloLens向けにMain cameraの設定(Inspector)を変更する。

  • TransformのPositionを(X: 0, Y: 1, Z: -10)から(X: 0, Y: 0, Z: 0)に変更。
  • CamemraのClear FlagsをSkyboxからSolid colorに変更。
  • CameraのBackgroundのRGBA値を(0, 0, 0, 0)に変更。
  • CameraのNear Clip Planeを0.3から0.85に変更(85 cmより近い地点ではオブジェクトの表示を消す)。

f:id:biodata:20170130002329p:plain

タンパク質の立体構造のデータをSceneに追加

Assetsから、Hierarchyにタンパク質の立体構造のデータをドラッグ&ドロップで配置する。

f:id:biodata:20170130223439p:plain

TranformでPositionを(X: 0, Y: 0, Z: 0.5)、Scaleを(X: 0.1, Y: 0.1, Z: 0.1)に設定する。

f:id:biodata:20170130224043p:plain

HoloLens向けにビルドするための設定変更
1. Unity Performance settings

[Edit]->[Project Settings]->[Quality]をクリックして、Qualityの設定画面を出す。

f:id:biodata:20170130224935p:plain

Defaultの横にある下三角ボタンをクリックし、Fastestを選択する。

f:id:biodata:20170130230111p:plain

QualityをFantasticからFastestにしておかないとFPSの低下を招き、結果としてHoloLens上での動作がもたつく。

2. Unity Build settings

HoloLens向けのビルドの設定を行う。

まず、[File]->[Build Setting…]をクリックして、ビルドの設定画面を出す。

f:id:biodata:20170130230535p:plain

  • SDKUniversal 10に変更。
  • UWP Build TypeをD3Dに変更。
  • Unity C# Projectsにチェックを付ける。

最後に、Windows Storeを選択して、左下のSwitch Platformをクリックする。 すると、UnityのマークがWindows Storeに移動し、Build対象が切り替わったことが確認できます。

f:id:biodata:20170130231254p:plain

Player Settings...をクリックし、Settings for Windows StoreのOther settingsのVirtual Reality Supportedにチェックを付ける。

Virtual Reality SDKsの項目で、Windows Holographicを選択する。

f:id:biodata:20170130232207p:plain

先ほど行ったビルドの設定を先にしておかないと、Virtual Reality Supportedの設定でWindows Holographicが選択肢に出てこないので注意。

3. ビルドを行う

[File]->[Build Settings…]をクリックし、ビルドの設定画面を開き、Buildボタンをクリック。

どこにアプリをビルドするか聞かれるので、Appフォルダを新規作成してそこにアプリをビルドする。

f:id:biodata:20170130232642p:plain

5. Visual StudioからHoloLensへアプリをデプロイする

ビルドが終わるとプロジェクトのウインドウが開くので、AppフォルダからPDBViewer.slnをクリックする。

f:id:biodata:20170130233315p:plain

Visual Studioが起動する。Package.appxmanifestを右クリックして、View Codeをクリックする。

f:id:biodata:20170130233953p:plain

TargetDeviceFamilyの名前のところをWindows.UniversalからWindows.Holographicに変更し、ファイルを保存。

f:id:biodata:20170130233820p:plain

HoloLensをUSB経由でパソコンに接続し、Visual Studio上で以下のように設定する。

  • DebugReleaseに変更。
  • ARMx86に変更。
  • Local MachineDeviceに変更。

[Debug]->[Start Without Debugging]をクリックし、HoloLensにアプリをデプロイする。

f:id:biodata:20170130234535p:plain

以上になります。よくよく見ると今回プログラミングを一切していません…。

参考

詳しくはこちらを参照のこと。

Holograms 100