今回はHoloLensでの表現実験枠です。
HoloLensを使用すれば現実とデジタル情報がまじりあう世界を創り上げることができます。SF映画やフィクションの生き物を仮想的にですが、現実世界に再現できるのです。
今回はファンアートとしてHoloLens 2でアニメ世界を再現して見ます。
〇Fate
今回再現する世界はFateの世界です。
Fateシリーズは劇場を含むアニメやPC、スマホゲームで人気のタイトルです。
過去の伝説や史実の偉人を魔力によって現代に召喚して闘う独特な世界観が人気です。
筆者は数年前友人が楽しそうにゲームをプレイする姿を見て初めて見て、今ではファンの一人です。
今回はFate作品中に登場する[令呪]と呼ばれる魔力の結晶をHoloLensで再現します。
〇令呪とは?
作品中で令呪を使用すると使役しているサーバントと呼ばれるキャラクターに命令を強制したり、魔力により攻撃を強化することなどができます。
令呪の特徴として手の甲に模様が現れ一度使用するごとに模様の一部が減っていきます。 通常最大3画(3回)使用できます。
コスプレなどでグローブやペイントのほかタトゥーシールなどで手軽に表現できますが、今回HoloLensを用いて実際に使用できる[令呪]を作成します。
〇作ったもの
〇実装
〇要件定義
・自分自身の手の甲に模様が現れる
・音声で令呪を使用すると模様が一つ減る
今回は前者の模様が現れる点を再現します。
〇準備
①HoloLens 2用にUnityで新規プロジェクトを作成します。
②[令呪]の画像を用意する(今回は背景がくりぬかれたpng画像が必要なのでインターネト上の画像を元にトレースしてにペイントソフトで自作しました。)
〇HandTrackingの設定
今回は令呪が手の甲に現れる設定を行います。
HandTrackingの設定を行います。
①[MixedRealityToolkit]のInspectorウィンドウから[Input]を選択します。
②HandTrackingのタグを展開します。 このプロファイルはHandTrackingに関するプレファブを設定しています。
③[Palm Prefab]を選択します。 このプレファブは手のひらのデバッグに使用されます。
デフォルトでは[HandAxis]と呼ばれる手の軸を取れるプレファブが設定されています。
同様のプレファブに[HandJointGizmo]があります。 こちらは手のジョイントの軸などを確認するためのプレファブです。
[Hand Axis]プレファブを改造して令呪を作成します。
④[Hand Axis]プレファブを展開し[Quad]を追加します。
この状態で実行すると手にQuadが表示されます。
デフォルトのままではサイズが大きすぎて手自体が見えないのでプレファブへ戻り大きさ、位置を調整します。
⑤Quadに新規で作成したマテリアルをアタッチします。
マテリアルには令呪の画像をテクスチャとして設定し、MRTKStandardShaderへShaderを変更、[Cutout]に設定します。
CutoutにすることでPng画像の余白が非表示になります。
⑥Quadを複製、同様に第二の令呪、第三の令呪を作成します。
以上で令呪が手の甲に沿ってついてくるようになりました。
次は余計なオブジェクトを消していきます。
⑦[Hand Axis]の[X],[Y],[Z]の各オブジェクトを非表示にします。
⑧[Hand Joint Sphere]プレファブ、[HandJointSmall]プレファブを開きアタッチされているマテリアルを透過させ非表示にします。
Hand Jointは手のジョイントの位置を取得できるので可能な限りゲームオブジェクト自体を非表示にすることは避けます。
⑨[Hand Mesh Prefab]に設定されているプレファブ(デフォルトでは[ArticulatedHandMesh])を展開し、非表示になるようにします。
[ArticulatedHandMesh]の場合[Auto Pulse]を切り、[Pulse]をゼロにすることで非表示にしています。
今回は今後の拡張性を考え必要最低限のみの変更を行っています。 できるならMRTKStandardなどのShaderに変え非表示になるようにしましょう。
これで令呪のみが表示されるようになりました。
以上で手に沿って令呪が付いてくるようになりました。
⑩最後にエディタだけではなく実機でも表示できるように[HandTracking]から[Hand Mesh Visualization Modes]と[Hand Joint Visualization Modes]を[Everything]へと切り替えます。
これで実機でもエディタ同様手に令呪が表示されるようになります。
次回以降機能を付けていきます。