スマホゲームにおけるARxキャラクターコンテンツまとめとアイデア

# はじめに
この記事は[QualiArts Advent Calendar 2021](https://qiita.com/advent-calendar/2021/qualiarts)の4日目の記事になります。

クライアントエンジニアの山本優威というものです。
今回は勉強会などで調べたスマホゲームにおけるARと3Dキャラクターの主機能と今後のアイデアについて紹介していきます。

# 現在のAR x キャラクターコンテンツについて
現在、配信されているスマホゲームの中にはAR機能をキャラクターコンテンツの一つとして実装されているゲームが増えてきています。
また単体のARアプリとして3Dモデルを用いたキャラクターと何かできるアプリはかなり少ないです。
ですので今回はAR機能をキャラクターコンテンツの一つとして実装している方を取り上げてみたいと思います。

早速ですが実際に数々のゲームのAR機能を触ってみた結果、以下のことが分かりました。

### ほぼ必須で実装されている機能
|機能    |内容     　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　 |  
|:-------------------------|:-------------------------|
|画像撮影　　　　　　　                |ARで写したキャラクターと現実の世界を背景とした画像を端末に保存|
|キャラクターの変更             |他のキャラクターに変更|
|衣装の変更                  |キャラクターの身に付けている衣装・アクセサリーの変更|
|ポーズの変更                 |立ちポーズの変更 ※一部のゲームでは動きあり|
|表情の変更                  |表情の変更 ※ポーズに付随しているパターンもあり|

ほぼ必須で実装されている機能から分かることは、キャラクターコンテンツとして実装するものにおいては3Dキャラクター達をAR空間上に出現させ**写真撮影をする機能**が多いということです。その中でもキャラクターに変化を与える為、衣装やポーズを変更し様々なシチュエーションで撮影させるように工夫されているようです。
またポーズに関しては立ちポーズが多いようで、座っているようポーズや寝そべっているようなポーズは少ない印象でした。これは壁や床、家具に不自然にめり込んでいるように見えてしまうのを避ける意味があるのかもしれません。

### +αで実装されている機能
|機能    |内容     　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　 |  
|:-------------------------|:-------------------------|
|録画撮影　　　　　　　                |動きのあるポーズが存在する場合に動画という形で端末に保存する|
|オクルージョン                |3Dモデルの前後関係の把握 / 例えば3Dモデルより手前に手や物がある場合は3Dモデルの一部を手前にあるものに合わせて隠すなど|
|UI非表示                   |3Dモデルを鑑賞しやす位よういに画面に表示されているUIを隠す|
|3Dモデルの大きさ変更          |0(0.01)からデフォルトのサイズまで変更可能|
|3Dモデルの向き変更           |Y軸を中心にモデルを回転|
|3Dモデルの座標変更           |出現させた3Dモデルを検知した平面の別の座標に移動|

+αで実装されている機能から分かることは**ほぼ必須で実装されている機能の補助的な機能**が多いということです。これはユーザーのストレスを少なくしたり、より現実味を持たせるような意味合いがあると思います。
またオクルージョンに関しては現状対応しているゲームが少ないですが実装されているゲームを確認してみると、そもそもオクルージョンの対応機種が少なく活躍する場面が少なかったり、逆に撮影機能の邪魔をしたり、かなり端末の動作が重くなったりと今後の課題があるように感じました。
その他にも3Dモデルの大きさに関してはShaderとの兼ね合いもあると思いますので、元々使用しているShaderの問題で実装できないなどの問題もありそうです。私が以前AR機能を導入した際は3Dモデルのアウトラインが太くなったり、光源の問題が少しありました。

### 同時出現数の特徴
私が触ったAR機能では**同時に出現可能なキャラクターの数は1体**までのものが多く、複数体出現可能なものは1,2つしか確認できませんでした。
これはメモリ的な問題が大きいのかなと予想しています。私も実際にキャラクターコンテンツとしてAR機能をゲームに導入した際にメモリ管理で苦しめられた思い出があります。

## 現在のAR x キャラクターコンテンツにない機能
「現在のAR x キャラクターコンテンツについて」から分かったことを踏まえ、**現状のARを用いたキャラクターコンテンツにない機能(少ない)を実現可能な範囲**を考慮し考えてみます。また今後、必須になってくる可能性がある機能についても考えてみます。

### 1. オクルージョン
先程+αで実装されている機能でも記載していますが、**対応機種の少なさ**や**端末の動作が不安定**になる点からまだまだ課題があると感じですが今後端末の性能が向上した際に、より現実味を持たせるには手っ取り早い方法だと思います。また後から後述するハンドトラッキングと組み合わせると更に必須級の機能になってくるのかなと考えています。

[ARFoundation3.1](https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@3.1/manual/index.html)以降では既にデフォルトの機能として入っており、ARKit/ARCoreの両プラットフォームに対応しています。ARFoundatioinのオクルージョン機能に関してはjyukoさんの「[AR FoundationでPeople Occlusionを実装する](https://www.jyuko49.com/entry/2019/10/15/094408)」が凄く分かりやすく解説してあり参考になりますので、是非見てみて欲しいです！

### 2. ハンドトラッキング
最近スマホでハンドトラッキングを実現しようと研究が盛んになっている機能。
ARFoundationとGoogleが提供しているフレームワークの[MediaPipe](https://google.github.io/mediapipe/)、それと最近Unityに追加されたニューラルネットワーク推定ライブラリの[Barracuda](https://docs.unity3d.com/Packages/com.unity.barracuda@2.0/manual/index.html)を組み合わせてようやく実現ができるようです。

参考：
[MediaPipe Unity Plugin](https://github.com/homuler/MediaPipeUnityPlugin)
keijiro様の[HandPoseBarracuda](https://github.com/keijiro/HandPoseBarracuda)

ハンドトラッキングが実現できれば3Dキャラクターに触れたり、物を渡したりと更に一つ先のアクションが可能になると考えています。例えば握手会やキャラクターの頭を撫でるなど、より現実味が出るかと。
ですがこちらもオクルージョン同様、対応端末の制限や動作の不安定さなどありますので、今後に期待する感じになるかと思います。

### 3. 空間認識精度の向上
[ARKit3.5以降](https://developer.apple.com/jp/augmented-reality/arkit/)でLiDARを搭載した端末において現実空間の物体の認識精度が向上しました。垂直や水平の平面しか認識できなかったものが、**ドアや窓、机、椅子などを自動で認識**して、処理を分けれるようになりました。例えばですがキャラクターを椅子に座らせるようにしたり、窓を覗かせるような動作も可能になってきました。
ですのでキャラクターコンテンツとして使用する場合はシチュエーションにプラスして使うことができるのではないかなと思います。

# まとめ
今回は現在のARを用いたキャラクターコンテンツから今後への展開について考えてを紹介して見ました。
技術的な話はできませんでしたが、現状撮影機能で止まっているAR x キャラクターコンテンツを今後も作っていく中で、どのような分野・機能に注力していけばが明確になったと思います。
また今回紹介したもの以外にも多くのアイデアが出てくると思いますので、その度に私自身で実践し都度まとめていこうと思います。
最後まで読んでいただき、ありがとうございました。

# [余談] 撮影禁止領域について
キャラクターコンテンツには切っても切り離せない問題で、ARカメラがキャラクターにめり込んだ時や見えてはいけないものが見えたときに表示させる機能になります。特に女性の3Dモデル・キャラクターを使用している場合、スカートの中が見えてしまう時に対策が施されていることが多いです。
今回も色々なゲームを触っている最中にどのような対策がされているか調べてみましたので、少しまとめてみたいと思います。

### 対策① 撮影禁止領域を設けない
誤解のあるタイトルですが、この対策をしているキャラクターコンテンツについてはそもそも**見られても大丈夫な衣装だったり、見られてはいけない部分は全て黒く塗りつぶされている**場合があります。
また出現させたキャラクターが激しく動く場合などのコンテンツに関しては、こちらの対策がされていることが多いです。キャラクターが動作する度に禁止領域の表示が何度も出てこられても困りますからね...。

### 対策② 端末の角度によって画面を見えないようにする
こちらは端末の向きにもよりますが縦画面で操作している場合、スマホを地面と平行近づける動作を行うと発生します。単純かつ簡単に実装ができるので凄いコスパが良い対策だと思います。
ですがその機能が撮影だった場合、少しばかり制限がかかったり見上げるような写真が撮れなかったりするので、**ARカメラとキャラクターがどのぐらい近いと禁止領域の表示がされるか**など別の調整が必要になるかもしれません。
ただ立ちポーズの場合しかほぼ意味ないような感じですので、別のポーズをさせる場合はまた対策が必要そうです。

### 対策③ 下半身の当たり判定を広くする
こちらはそもそものキャラクターがめり込んだ時の禁止領域判定を下半身の部分のみ広くする対策です。
ですがその機能が撮影だった場合、下半身の部分の当たり判定を広く取っているので、ほぼほぼ正面からの撮影に限られるので自由度が少し下がるのかなという印象です。
またこちらも対策②と同じように立ちポーズの場合しかほぼ意味ないような感じですので、別のポーズをさせる場合はまた対策が必要そうです。

### 対策④ 見えてはいけないもの自体がカメラに移った瞬間、画面を見えないようにする
今真野で①~③の対策では最悪の場合、見えてしまう可能性があったのですが、こちらの対策ですと手間は少しかかりますが完璧に見ることができない状態を作り出せます。
方法は色々と考えられるのですが、一番簡単なのは見えてはいけないものに当たり判定をつけてカメラからレイを飛ばす方法でしょうか。こちらの方法は私自身あまり試したことがないので、今度やってみようかなと思います。

#[余談] まとめ
画像で説明するのが少し難しいのが悔しいですが、各ゲームで様々な対策がされていて面白いと思いました。
また禁止領域の表示は画面全体を黒い画像で覆いテキストを表示させるようなものが一般的ですが、一部のゲームでは世界観に合ったユニークな禁止領域の表示をしていました。
おそらく今後もAR機能をキャラクターコンテンツとして取り入れる際に禁止領域の対策は必要になってくると思いますので、完璧に対応するべきかどうか要議論を重ねてから決めたいですね。
余談の方も最後まで読んでいただき、ありがとうございました。