衛星ライトのバーチャルキャストでの撮影方法

#はじめに
配信や動画撮影にも使われる
メタバースコミュニケーションサービス
バーチャルキャスト:https://virtualcast.jp/

この記事では、よくバーチャルキャストを使用した動画を作っている
VTuber衛星ライトがどのように撮影しているか解説したいと思います。

基本的なカメラの使い方は公式のこちらの方が分かりやすいです。
[なぜなにバーチャルキャスト#06～カメラを使ってみよう！]
(https://virtualcast.jp/blog/2019/10/nazenani6/)
[なぜなにバーチャルキャスト#07～もっとカメラを使ってみよう！]
(https://virtualcast.jp/blog/2019/10/nazenani7/)



今回、こういう記事を書くのが初めてなので優しい目で読んでくれたら助かります。

▼今まで衛星ライトがバーチャルキャストで撮影した動画

有名VTuber様8名を呼んだデスゲーム企画
・デスらないゲーム
<iframe width="560" height="315" src="https://www.youtube.com/embed/wP1-3ECvMVI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

カエル人間さんとバーチャルキャストで撮影した
・あっちむいてホイの必勝法動画
<iframe width="560" height="315" src="https://www.youtube.com/embed/Xg7cVrS-pbY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>


#スタジオとルーム
現在バーチャルキャストにはスタジオとルームという2つのシステムがある。
衛星ライトは撮影では主にスタジオをしようしています。

ルームは現在(2021年12月3日)、撮影画面を切り替えることができずモニターカメラのみとなっている。
（カメラAPIで出したディスプレイをカメラモニターの前に置く方法はあるがちょっと画質悪くなるのであまり使いたくはない）
![2021111510402204_ベータ版衛星ライトテストルーム_衛星ライト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2322295/66491a79-9fe7-cbd7-bf8b-2ceb0523bce7.png)
※ストリームカメラも近々アップデートで追加されるらしいので個人的に撮影の幅が広がるので楽しみ！

なので、衛星ライトはコラボなどをするときはスタジオ機能を使用している。

#カメラをスイッチングしてみた

スタジオではハンディカメラとモニターカメラは
VCIのLuaスクリプトから操作することができ、
バーチャルキャストはキーボード入力も少しだけ可能なので
キーボードを入力したときにカメラが移動するようなスクリプト書く。

バーチャルキャストの詳細設定でVCI操作キーを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2322295/7483e60c-263b-a964-79d6-8829aed22422.png)

※たしかデフォルトでは矢印キーになっていたと思うけど片手で操作できるようにWASDに変更している。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2322295/a1834282-0c01-dbf3-d413-363d3dbb9872.png)

バーチャルキャストでは方向キーと1～4のキーでVCIを操作することができる。

##スイッチングVCIを作ってみよう
キー入力でカメラの位置を変えるスクリプト

```lua
--モニターカメラ
local mirror = vci.studio.GetWindowCamera()
--ハンディカメラ
local camera = vci.studio.GetHandiCamera()

function update()
    --数字キーが入力された時にモニターカメラを座標に移動させる
    if vci.me.GetButtonInput(1) then
        --移動する座標
        mirror.SetPosition(Vector3.__new(0, 1.25, 8.5))
        --向き
        mirror.SetRotation(Quaternion.Euler(0, 180, 0))
    end

    if vci.me.GetButtonInput(2) then
        mirror.SetPosition(Vector3.__new(0, 1.5, 8.5))
        mirror.SetRotation(Quaternion.Euler(10, 180, 0))
    end

    if vci.me.GetButtonInput(3) then
        mirror.SetPosition(Vector3.__new(0, 2, 12))
        mirror.SetRotation(Quaternion.Euler(10, 180, 0))
    end

    if vci.me.GetButtonInput(4) then
        mirror.SetPosition(Vector3.__new(0, 1, 12))
        mirror.SetRotation(Quaternion.Euler(0, 180, 0))
    end
end
```

これをVCIのLuaに入れておけば座標なので多用性は全然ないのですが
指定した位置にカメラを移動することができる。
VR内で手動でカメラを移動させると職人じゃない限り寸分の狂いもなく中心に配置することは不可能ですがVCIで制御することによってちゃんと真ん中に移動させることができる！！

どうしても動画を編集しているときとか角度がずれていたり、ステージからずれていたりするとイライラしてしまうので座標でカメラ制御はオススメです。（衛星ライトが気にしすぎなだけかもしれない。）
![2021112119141131_遊園地建設予定地_衛星ライト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2322295/0320a4d8-fa37-8b96-fabf-f8480625881f.png)
※カメラを手動で移動させる衛星ライト

衛星ライトは撮影中に片手でキーボード入力をしてカメラの位置を変えている。

##LookAtなカメラを作ろう

スタジオのプリセットアイテムで追従カメラはあるが
スタジオオーナーのみ追従するカメラとなっているので
ハンディカメラを物やオーナー以外の人を追従するように
LookAtなカメラを作る。

<iframe width="560" height="315" src="https://www.youtube.com/embed/q7sm9c0FpVM?start=286" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

この動画のサッカーゲームではボールを追従するようにカメラを制御している。

上の参考動画のカエル人間さんとの動画ではスタジオのオーナーじゃない人を追従するように撮影している。

```lua
local ball1 = vci.assets.GetSubItem("Ball1")
local ball2 = vci.assets.GetSubItem("Ball2")
local box1 = vci.assets.GetSubItem("Box1")
local box2 = vci.assets.GetSubItem("Box2")
local mirror = vci.studio.GetWindowCamera()
local camera = vci.studio.GetHandiCamera()

local change_No = 0
local lookAt_flg = true
function update()
    if vci.me.GetButtonInput(1) then
        camera.SetPosition(Vector3.__new(0, 1, 5.5))
        camera.SetRotation(Quaternion.Euler(0, 180, 0))
        camera.SetFieldOfView(60)
        lookAt_flg = false
    end
    if vci.me.GetButtonInput(2) then
        camera.SetPosition(Vector3.__new(0, 1, 5.5))
        camera.SetRotation(Quaternion.Euler(0, 180, 0))
        camera.SetFieldOfView(45)
        lookAt_flg = false
    end

    if vci.me.GetButtonInput(3) then
        change_No = 1
        lookAt_flg = true
        camera.SetFieldOfView(15)
    end
    if vci.me.GetButtonInput(4) then
        change_No = 2
        lookAt_flg = true
        camera.SetFieldOfView(15)
    end
    if (change_No == 1 and lookAt_flg == true) then
        local forward = camera.GetPosition() - ball1.GetPosition()
        forward = forward.normalized
        local rot = Quaternion.LookRotation(-forward, Vector3.up)
        rot = rot * Quaternion.AngleAxis(-2.5, Vector3.left) --向き補正
        camera.SetRotation(rot)
    end
    if (change_No == 2 and lookAt_flg == true) then
        local forward = camera.GetPosition() - ball2.GetPosition()
        forward = forward.normalized
        local rot = Quaternion.LookRotation(-forward, Vector3.up)
        rot = rot * Quaternion.AngleAxis(-2.5, Vector3.left) --向き補正
        camera.SetRotation(rot)
    end
end
```

きれいなコードが書けないのを許してほしい。
今回はハンディカメラを動かしています。
1と2は固定カメラに設定して3と4は装着できるオブジェクトに追従するように設定しています。

lookAtのコードは公式wikiを参考にしました。
[VCIでライブのようなカメラの動きを作る](https://virtualcast.jp/wiki/vci/sample/systemitem/livecamera?s[]=lookat)

これで後はコラボ相手にカメラが追従するオブジェクトを付けてもらうだけ

![2021102716242784.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2322295/496c0c15-452a-72be-05d5-35e06c8b2fdd.png)
※小さいオブジェクトをカエル人間さんの頭に着けてもらいました。

#複数画面撮りたい
カメラのスイッチングにも限界はある。
ましてや、ゲーム中などの動きが激しいときは撮りきれないことが多々ある。

複数画面撮れればなぁ…！

ということでバーチャルキャストの性質上1画面しか撮れないので
コラボ相手にゲストカメラを出してもらって撮影してもらおう！

[ゲストカメラ](https://virtualcast.jp/wiki/virtualcast/studio/item/guestcamera)
![guestcamera.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2322295/796b41b6-39bf-3373-64d7-191b3e3622cd.png)
(引用：https://virtualcast.jp/wiki/virtualcast/studio/item/guestcamera)

ただ、ゲストカメラはVCIで操作することはできないので
これだけは手動で移動させなければならない。

デスらないゲームでは2人にゲストカメラを出していただき録画してもらっていた。
動きが多いカメラは主に自分で撮り、ゲストカメラは動かさなくて済むように引きで撮っている。

場面ごとにカメラ配置の図を作っておくと共有しやすいし想像もしやすい。

デスらないゲーム第1ゲーム図
![ゲーム1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2322295/e31d2816-ca66-a413-3136-0ca4a054df16.jpeg)

デスらないゲーム第2ゲーム図
![ゲーム3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2322295/440510e0-c2c4-4717-422e-50e5136841df.jpeg)

引きのカメラは基本的に高い位置に配置するので
[THE SEED ONLINE](https://seed.online/home)から巨大なアバターを入れて配置しました

撮影が終了したら動画を送ってもらい編集するという形になります。

#音声について
コラボをするときの録音はDiscordで行っています。
バーチャルキャストでも録音は出来るのですが、距離減衰や左右の音のバランスが録れなかったりなど
色々理由はあるのですがDiscordをしようしております。

Discordを使用するデメリットとしては動画のリップシンクとズレてしまうことがあります。
それは編集で画をずらして対処しています。

#おわり
今回は衛星ライトのバーチャルキャストでの撮影方法をまとめさせて頂きましたが
ちょっと説明不足な所もありますがわからないことがあれば気軽に聞いてください。
[衛星ライトのTwitter](https://twitter.com/satellite_right)にDMでもリプでも送ってくれれば返信すると思います。

あとVTuberなのでチャンネル登録よろしくお願いいたします。
[衛星ライトのYouTube](https://www.youtube.com/channel/UCynZHSIbBsBi6fD-Uv2TRHA)

今後のバーチャルキャストのアップデートでルームでの撮影や色々できることが増えていくと思います。

動画を作るVTuberとしてカメラを通して皆さんに今後もおもしろを届けられたらなと思います。
読んで頂きありがとうございました。