- 概要
- 1. JSモジュールの読み込み
- 2. VRoidモデルの読み込み
- 3. 表示用canvasの用意
- 4. シーンの表示
- 5. ライトの表示
- 6. VRoidモデルの表示
- 7. カメラの設定
- 8. カメラで撮影した内容を表示&毎フレーム更新
- サンプルコードはこちら
- 今回書けなかった内容
three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する方法を載せています。
以下のステップにしたがってコード例を載せています。
WebページにVRoidを表示する大まかなステップ
- JSモジュールの読み込み
- VRoidモデルの読み込み
- 表示用canvasの用意
- シーンの表示
- ライトの表示
- VRoidモデルの表示
- カメラの設定
- カメラで撮影した内容を表示&毎フレーム更新
また、合わせて実際に動作確認できる(であろう)サンプルコードも下部に載せています。
以下のJSモジュール(ライブラリ)を使用しています。
・three.js(Web上で3Dを表示するための基本的なモノが入っている)
・GLTFLoader.js:gltfモデルを読み込む(VRoidもgltfを拡張している)
・OrbitControls.js(カメラを動かせるようにする)
・BufferGeometryUtils.js(GLTFLoader.jsにて使用)
・three-vrm.js(VRoidを読み込むのに使用)
これらのモジュールをあらかじめ以下のように読み込んでおく必要があります(BufferGeometryUtils.jsは不要)。
VRoidモデルの読み込みは以下で簡単にできます(これは読み込みだけなので、画面上には表示されない)。
説明もコード中にあるので、分からなければ読んでください。
あらかじめモデル(というより3D空間)をWebページ上に表示するためのcanvasを用意しておきましょう。
とにもかくにもシーン(3D空間)の設定が必要です。
明かりがないと真っ暗です。明かりの設定をします。
ライトのタイプは色々ありますが、ここでは太陽のように特定の場所から光を出して明るくするタイプにしています。
ここでようやくVRoid表示。読み込んだVRMをシーンに追加するのみ。
一番大切かもしれない、カメラ設定をします。
必須ではないですが、
OrbitControls(カメラをユーザ操作で動かせるようにする)を使うために「注視点の設定」と、モデルの顔付近にあらかじめカメラを移動しておくための「初期位置」設定も入れています。
カメラで撮影した内容をあらかじめ用意しておいたcanvasに表示します。
1回表示するだけなら、「renderer.render(scene, camera);」だけで良いのですが、カメラで撮影した内容を毎フレーム更新するために、以下のように定期的に更新する形にする必要があります。
サンプルコードはGitHubにあります。
多分ローカル上では動かないので、どこかのサーバにアップするなりして動作確認してください。
なお、サンプル内に今回使用したJSライブラリ(モジュール)も含んでいます。これらは、three-vrmはピクシブ(Pixiv株式会社)、それ以外はthreejsのオープンソースプロジェクトによって提供されているものなので、公開する際はそのあたりの判断はご自身で行った上でお願いします(と言ってもどちらもMITライセンスなので気にしなくていいかもしれませんが)。
次書く機会があれば、以下を書こうと思います。
- ポーズ / 表情の変更方法
- 口の形の変更方法
(ほどほどだけど)きちんとカメラ目線にする- 変なテクスチャが表示されてしまう問題→サンプルコードで使用しているVRoidの首や背中に黒いテクスチャが出る
- 解像度問題の対応→スマホのような高解像度端末だと、表示が綺麗にならない