「王子様のささやき朗読VR」で使った技術の概要

VR

はじめに

はじめまして。

イケメンテックラボで 「王子様のささやき朗読VR」の メインエンジニアを務めている、茨田と申します。
ジークレストには2016年に新卒として入社し、様々なプロジェクトを経て、現在は、イケメンテックラボと新規開発事業のエンジニアを兼任しております。

今回はイケメンテックラボから発表した初のコンテンツ「王子様のささやき朗読VR」について、使用した技術の紹介をさせていただきます。
今回は全体像のみの説明とし、一つ一つの技術の詳細や利用方法については次回以降の記事で紹介していきたいと思います。

弊社について

まず最初に、弊社は株式会社ジークレストといい、「夢王国と眠れる100人の王子様」や「茜さすセカイでキミと詠う」など、主にスマートフォンの女性向けゲームを開発運営しています。
現在運営しているタイトルは全て2Dのイラストやアニメーションを使用したもので、社内にはUnityで3Dのものを開発するノウハウがありませんでした。

そこで、今回イケメンテックラボでは、あえて社内にノウハウの無い技術を使用して開発をしようということが決まりUnityで3Dを表現する「王子様のささやき朗読VR」がつくられました。

王子様のささやき朗読VRについて

今回つくった「王子様のささやき朗読VR」は、タイトルからもわかる通り、VR空間の中で王子様に囁かれたいという願望が含まれたコンテンツになります。

キャラクターは、「夢王国と眠れる100人の王子様」に登場するキャラクターであるビッキー王子に決まりました。ビッキーの 肩にはカエルのケロタも乗っています。

最初に貰ったオーダーは、「2人きり」で、「雰囲気ある」場所で、「囁かれたい」というものでした。これらの条件を満たすために重要なことは何か、ということを考えました。それで導き出された大目標が2つ、
・なるべく原作に近づける
・自分がここにいて、相手がそこにいるという現実の様な距離感の実現
といった点に注力して進めていきました。

実際のアプリのキャプチャー画像

使った技術について

メインに使った技術はVRで、「Unity」と「GoogleVR」を使って実現しています。
使ったVR機器は比較的新しい技術に挑戦するため、「Daydream」と「Galaxy S8」を使用しました。

現実のような距離感を実現するために

現実の様な距離感を実現しつつ、王子様に囁かれたいということで、立体音響に挑戦しました。立体音響には「Resonance Audio」を使用しています。
立体音響では、現実世界の様に音源の位置によって、聞こえる方向だったり、音量だったりを変化させることができます。
これにより、環境音や喋る声などを、現実の様な距離感で実現しました。

部屋の中の音の配置図

また、環境音などを適切なタイミングで鳴らすために「Timeline」の機能で再生タイミングの調整などを行なっています。

次回以降、実際の使い方や立体音響とタイムラインを使った時の問題点などを紹介していきたいと思います。

現実の人間に近づけるために

次に、モデルの動きも現実に近づけるために色々こだわりました。モデルの動き自体は、「モーションキャプチャ」を利用し、機械の様な動きではなく、現実の人間に限りなく違い物にしました。
また、口元の動きは、「OVRLipSync」を使ってキャラクタの口が音声に合わせて動くよう工夫しました。目元も、ある程度の周期で瞬きをするようになっています。

「あ」の音を喋っているビッキー

こちらも次回以降、それぞれの機能の実際の使い方やモーションの読み込みの時に起きた問題点などを書いていきたいと思います。

原作に近づけるために

次に、見た目を原作に近づけるために「ユニティちゃんトゥーンシェーダー」
(© UTJ/UCL) (以降UTS)を使用しました。
UTSは影などをベタ塗りにして、アニメのような見た目にすることができるシェーダーです。

UTSの適応前(左)と適応後(右)

また、原作は2Dのため、なるべく見た目が破綻しないようにに3Dにする必要がありました。
そのために、原作のキャラを4面図に書き起こし、どの面から見ても、破綻が起きにくくしました。
モデルのポリゴン数も端末の限界に挑戦して、6万ポリゴンを使って作成しています。

こちらも次回以降、UTSの簡単な設定方法や、UTSを使った時に引っかかった点、モデルを作る際に気をつけたことなどを書いていきたいと思います。

スムーズに動かすために

最終調整では、ポリゴン数が仇となり、FPSが落ちてカクカクになってしまい、「Profiler」などを使い計測をして、ボトルネックの最適化などを行ないました。

詳細ではボトルネックになっていた部分や、計測方法、問題の解決方法などを書いていきたいと思います。

最後に

次回以降、各機能の利用方法などの詳細について書いていきたいと思います。

よろしくお願いいたします。