はじめまして。山形大学VR部ライターの『とこやま』と申します。
先日、以下のようなツイートを見かけました。
keijiroさんの Akvfx と Qiitaの「Unityのカメラ越しにZoomに参加する方法」のコンボでAzure KinectによるVFX付きWebCamアプリができたwww #Unity
エフェクトはキーボードからオンオフ可能にしてみた(それぐらいしかプログラムをしていない(汗))https://t.co/Blm8xDwVsEhttps://t.co/rcrgiIIhKD pic.twitter.com/hcrrNcTb63— ザバイオーネ (@z_zabaglione) April 23, 2020
Azure KinectとkeijiroさんのAkvfxを合わせて使えばZOOMで自分に派手なエフェクトをかけて、カメラに写ることができるというものです。
私もそれにならい、ZOOMで派手に写りたいと考え、実際にやってみました。
※上記のツイートではSpoutを利用してUnityのカメラをZOOMに投影していますが、導入や操作が難しいことから当記事ではOBS-VirtualCamを使ってZOOMに映します。
目次
1. 事前準備
※この記事の内容はAzure Kinect SDK v1.4.0 ・OBS 25.0.8 ・ OBS-VirtualCam 2.0.4 ・ unity 2019.3.15f1 の環境で行っています。
以上の環境の導入がまだの方は下記のサイトを参考にしインストールしてください。
Azure Kinect SDK v1.4.0
OBS 25.0.8 ・ OBS-VirtualCam 2.0.4
unity 2019.3.15f1
https://create.unity3d.com/jp-howto-install-win
2. Akvfx-masterのダウンロード・起動
まず、「Akvfx-master」をダウンロードするため、Githubにアクセスします。
https://github.com/keijiro/Akvfx
画像の赤丸で囲まれた 「Clone or download」 をクリックしたのちに表示される 「Download ZIP」 をクリック。
そうするとPCに「Akvfx-master.zip」がダウンロードされたと思います。
ダウンロードしたZIPファイルを解凍します。
解凍が終わったらUnityHubを起動します。
起動したら 「リストに追加」 をクリックし、先ほど解凍したAkvfx-masterを選択します。
そうするとリストにAkvfx-masterが追加されます。
追加されたAkvfx-masterのUnity バージョンを2019.3.15f1に設定した後にプロジェクト名(Akvfx-masterと太字で書かれている部分)をクリックするとUnityが起動します。
3. 点群の表示・エフェクトのかけ方
(※初回の起動は少し時間がかかります。)
起動したら「Test」という名前のアイコンをクリックすると
Azure Kinectで点群を表示することができるシーンがひらきます。
Unityを初めて使う人のためにざっくり各ウインドウの役割を説明しますと
①Hierarchy : 配置したオブジェクトや、その階層を確認・できる。
②Scene・Game・Asset Store : この3つは各タブをクリックすることで切り替えることができ、Sceneは配置したオブジェクト等の位置関係、Gameは起動した際に表示される画面のプレビュー、Asset Storeは3Dモデルやエフェクトを販売するページ。
③Inspector : 選択しているオブジェクトの情報や設定、使われているスクリプトが確認できる。
④Project・Console : これも同様にタブをクリックで切り替えることができる。Projectは配置する前のファイルを置いておく倉庫のようなもの。新しいファイルを使いたいときはここに追加してから使う。Consoleはエラーメッセージやデバッグログを表示させる場所です。
といった感じです。
ここまで来たら点群を表示させるのは簡単です。
Azure KinectのタイプCのUSBポートをPCのUSB3.0ポートに繋ぎ、もう片方の電源供給用ケーブルをUSBーACアダプタに繋ぎいだ後に②のScene・Gmae・Aset Storeの上部にある再生ボタンをクリックしてシーンを再生すると……。
ゲームビューに切り替わり、カメラの前の点群が表示されれば成功です。
終了するにはもう一度再生ボタンをクリックします。
ここからは①のHierarchyにあるものの役割とエフェクトをONにする方法を説明していきます。
Hierarchyには以上のものが格納されています。
エフェクトはVFXの中に入っています。
文字の色が薄くなっている項目は非アクティブであることを表しています。
最初はLeaves等のエフェクトが非アクティブになっているので、これをアクティブに切り替えることで画面の点群にエフェクトがかかります。
アクティブに切り替えるためには①Hierarchyからアクティブにしたいオブジェクトを選択し、②のチェックボックスをクリックすることでアクティブにできます。
Leavesがアクティブになっている状態でもう一度シーンを再生させて以下のようにエフェクトがかかっていたら成功です。
他のエフェクトも同じ手順でアクティブ化ができます。
エフェクトの重ね掛けも可能です。
ZOOMに移すためOBSに取り込む際はシーンの再生前にGameタブをクリックした後に表示される「Maximaze On Play」を押しておくとシーンを再生したときに画面いっぱいにプレビューが表示されるのでキャプチャしやすいです。
4. ZOOMにOBS経由でUnityの画面を表示させる
Unityにエフェクトをかけた点群を表示させることができたらOBSを起動します。
OBSを起動すると以下の画面が表示されるのでソースウインドウの「+」ボタンをクリックし、ウインドウキャプチャを選択し、画面をキャプチャするためのソースを新規作成します。
ウインドウは[Unity.exe]を選択し、キャプチャ方法とウインドウの一致優先はそのままに、また、カーソルのキャプチャは画面にカーソルが映り込まないように外しておくことをお勧めします。
OBSの画面にUnityのウインドウが表示されれば成功です。
また、映したUnityの画面のサイズは4隅をドラッグ、位置は画面の中心をドラッグすることで変えられますので、ZOOMに映す際にはUnityのUI部分が映らないようにオーバーサイズにしておくことを推奨します。
サイズ・位置調整が済んだらOBSの画面上部のツール(T)→VirtualCamを選択すると仮想カメラ用のウインドウが出てくるので、Startを押すと仮想カメラの出力が始まります。
OBSをこの状態のまま、ZOOMのカメラをONにし使うカメラにOBS-Cameraを選ぶと……。
ZOOMにUnityの画面をカメラ扱いで映すことができました。
また、Unityの仕様でウインドウがアクティブでないと止まってしまうため、Unityのウインドウをクリックして常にUnityを最前面に表示しておく必要があります。
5. さらに扱いやすくする工夫
ここまでの手順を踏むだけでも十分ZOOM会議を楽しくするツールになりえると思います。しかし、
①画面がグリグリ動いてZOOMっぽくない
②ZOOMが背景と人物の境目を認識できないため背景を変えることができない・背景を消すことができない
③エフェクトのON・OFFや種類の切り替えを簡単に行うことができない
といったZOOMと合わせて扱うには少々不便な点があると思います。
ここからはそれを順に最適化していきます。
①画面がグリグリ動いてZOOMっぽくない
この記事だけをご覧になっている方にはわからないと思いますが、初期状態ではカメラが動くため、自分の周りをカメラマンが動いているような映像になります。
このままでもダイナミックで面白いのですが、ZOOM会議で使うにはやはり正面からの固定カメラがいいと考えたので以下の手順でカメラの動きを止めました。
HierarchyからCamera Pirotを選択し、Inspectorの中にあるBrownian Motionのチェックを外します。
このBrownian Motionがカメラを動かすためのスクリプトとなります。
ここで気を付けることは、このCamera Pirot自体を非アクティブにしてしまうとカメラが消え、何も映らなくなってしまうので注意してください。
これでカメラが動くことがなくなり正面からの固定カメラとなります。
②ZOOMが背景と人物の境目を認識できないため背景を変えることができない・背景を消すことができない
このAkvfxでは点群は人物や周りの物や背景を同列に扱うため人も背景も同じように画面に映り、同じようにエフェクトをかけていしまいます。
そこで背景を画面に映さないために少し工夫をしました。
このAkvfxではデプスカメラ(深度カメラ)によって点群を習得・描画しているため、Unity上でも後ろにある点は後ろに、前にある点は前に描画されます。
そのためUnity上で自分と背景の間に壁を作ることで背景を隠しました。
これで背景の色を一色にすることができ、ZOOM上でバーチャル背景を使うことも可能になりました。
③エフェクトのON・OFFや種類の切り替えを簡単に行うことができない
せっかく7種類もエフェクトがあるのに1種類しか使えないのはもったいない……
しかし、エフェクトを切り替えようとすると一度画面を切り替える必要があるため、ZOOM上ではどうしてもUnityのUIが映ってしまいます。
その問題を解決するために簡単であるもののキーボード操作で各エフェクトのON・OFFを切り替えるスクリプトを書かせていただきました。
using System.Collections.Generic;
using UnityEngine;public class VFXcontroll : MonoBehaviour
{
public GameObject Leaves;
public GameObject Lines;
public GameObject Particles;
public GameObject Point;
public GameObject Spikes;
public GameObject Voxel;
public GameObject Web;
// Start is called before the first frame update
void Start()
{}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Z))
{
if (Leaves.activeSelf)
{
Leaves.SetActive(false);
}
else
Leaves.SetActive(true);
}
if (Input.GetKeyDown(KeyCode.X))
{
if (Lines.activeSelf)
{
Lines.SetActive(false);
}
else
Lines.SetActive(true);
}
if (Input.GetKeyDown(KeyCode.C))
{
if (Particles.activeSelf)
{
Particles.SetActive(false);
}
else
Particles.SetActive(true);
}
if (Input.GetKeyDown(KeyCode.V))
{
if (Point.activeSelf)
{
Point.SetActive(false);
}
else
Point.SetActive(true);
}
if (Input.GetKeyDown(KeyCode.B))
{
if (Spikes.activeSelf)
{
Spikes.SetActive(false);
}
else
Spikes.SetActive(true);
}
if (Input.GetKeyDown(KeyCode.N))
{
if (Voxel.activeSelf)
{
Voxel.SetActive(false);
}
else
Voxel.SetActive(true);
}
if (Input.GetKeyDown(KeyCode.M))
{
if (Web.activeSelf)
{
Web.SetActive(false);
}
else
Web.SetActive(true);
}
}
}
Projectウインドウ上で右クリック→Create→C# Scriptで作成し、名前をVFXcontrollに変更した後にテキストエディタ上のスクリプトをコピペして上書き保存してください。
そうするとProject上のVFXVFXcontroll内容も書き換わりますので①のVFXを選択 ②Project内のVFXcontrollをVFXのInspectorにドラッグ ③Inspector内のVFXcontrollの各欄がNoneになっているので、同じ名前のエフェクトを選んで入れてください。
これでシーンの再生中でもキーボードの下段 「Z,X,C,V,B,N,M」 で各エフェクトのONとOFFを切り替えることができるようになりました。
6. まとめ
今回はAzure KinectとAkvfxを使ったZOOM会議の演出について書かせていただきました。
Unityは何でもできるツールなので、一度点群をUnity上に取り込んでしまうと今回ご紹介したエフェクト以外にも様々なことができます。Asset Storeから別のエフェクトなどを追加するのもお勧めです。
まだAzure Kinectは日本では3月に発売されたばかりですが、インターネット上では様々な使い方がすごい勢いで現れています。
今後、Azure Kinectを使った新しいゲームやツールの登場が楽しみです。
AR, VR. XR の活用やGyroEyeに関するお問合せは、こちらからどうぞ