商品サンプル画像
転生貴族、鑑定スキルで成り上がる ~弱小領地を受け継いだので、優秀な人材を増やしていたら、最強領地になってた~(19) (マガジンポケットコミックス)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
ブラッククローバー 37 (ジャンプコミックスDIGITAL)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
平成敗残兵すみれちゃん(7) (ヤングマガジンコミックス)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
WIND BREAKER(23) (マガジンポケットコミックス)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
継母の心得2 (レジーナCOMICS)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
記事の概要
three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する Part-01
作成日:2025-04-13
最終更新日:2025-04-13
記事の文字数:3974
VRoidWebツール情報技術
本記事のトピック
  • 概要
  • 1. JSモジュールの読み込み
  • 2. VRoidモデルの読み込み
  • 3. 表示用canvasの用意
  • 4. シーンの表示
  • 5. ライトの表示
  • 6. VRoidモデルの表示
  • 7. カメラの設定
  • 8. カメラで撮影した内容を表示&毎フレーム更新
  • サンプルコードはこちら
  • 今回書けなかった内容
three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する Part-01
概要

three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する方法を載せています。
以下のステップにしたがってコード例を載せています。

(以降のPartも含めて)本稿で用いるvrmのバージョンは「0」前提です
座標軸が違うらしいので、1とかを使うと向きが狂うと思います。
サンプルコード内に含んでいるvrmファイルもバージョン0にしています。

WebページにVRoidを表示する大まかなステップ

  1. JSモジュールの読み込み
  2. VRoidモデルの読み込み
  3. 表示用canvasの用意
  4. シーンの表示
  5. ライトの表示
  6. VRoidモデルの表示
  7. カメラの設定
  8. カメラで撮影した内容を表示&毎フレーム更新

また、合わせて実際に動作確認できる(であろう)サンプルコードも下部に載せています。

1. JSモジュールの読み込み

以下のJSモジュール(ライブラリ)を使用しています。

・three.js(Web上で3Dを表示するための基本的なモノが入っている)
・GLTFLoader.js:gltfモデルを読み込む(VRoidもgltfを拡張している)
・OrbitControls.js(カメラを動かせるようにする)
・BufferGeometryUtils.js(GLTFLoader.jsにて使用)
・three-vrm.js(VRoidを読み込むのに使用)

これらのモジュールをあらかじめ以下のように読み込んでおく必要があります(BufferGeometryUtils.jsは不要)。

import * as THREE from './three.module.js'; import { GLTFLoader } from './GLTFLoader.js'; import { OrbitControls } from './OrbitControls.js'; import { VRMLoaderPlugin } from './three-vrm.module.min.js';
2. VRoidモデルの読み込み

VRoidモデルの読み込みは以下で簡単にできます(これは読み込みだけなので、画面上には表示されない)。

// VRoid読み込み const loader = new GLTFLoader(); loader.register((parser) => new VRMLoaderPlugin(parser)); loader.load( './model.vrm', // vrmファイルへのパスを書く (gltf) => { // ここに読み込み完了した後の処理、すなわち「3」以降のコードを書いていく }, (progress) => { // 読み込み中の処理 console.log(`進捗率:${parseInt(100.0 * (progress.loaded / progress.total))}%`); }, (error) => console.error(error) // 読み込み失敗したときの処理 );

説明もコード中にあるので、分からなければ読んでください。

3. 表示用canvasの用意

あらかじめモデル(というより3D空間)をWebページ上に表示するためのcanvasを用意しておきましょう。

// とりあえず縦横300pxとする const canvasWidth = 300; const canvasHeight = 300; // canvasの用意 const renderer = new THREE.WebGLRenderer({ antialias: true }); renderer.setSize( canvasWidth, // canvasの横幅 canvasHeight // canvasの縦幅 ); document.body.appendChild(renderer.domElement); // canvasを画面上に追加
4. シーンの表示

とにもかくにもシーン(3D空間)の設定が必要です。

// シーンの設定 const scene = new THREE.Scene(); scene.background = new THREE.Color(0xffffff); // 背景色の設定
5. ライトの表示

明かりがないと真っ暗です。明かりの設定をします。
ライトのタイプは色々ありますが、ここでは太陽のように特定の場所から光を出して明るくするタイプにしています。

// ライトを設定してシーンに追加 const light = new THREE.DirectionalLight(0xffffff, 3.0); light.position.set(1.0, 1.0, 1.0).normalize(); scene.add(light); // シーンに追加するのを忘れない
6. VRoidモデルの表示

ここでようやくVRoid表示。読み込んだVRMをシーンに追加するのみ。

// VRMモデルを設定してシーンに追加 const vrm = gltf.userData.vrm; scene.add(vrm.scene);
7. カメラの設定

一番大切かもしれない、カメラ設定をします。

必須ではないですが、
OrbitControls(カメラをユーザ操作で動かせるようにする)を使うために「注視点の設定」と、モデルの顔付近にあらかじめカメラを移動しておくための「初期位置」設定も入れています。

// カメラの設定 const camera = new THREE.PerspectiveCamera( 35, canvasWidth / canvasHeight, 0.1, 1000 ); // カメラの初期位置関連の定義 const DEFAULT_CAMERA_CONFIG = { position: { // カメラ初期位置の補正 x: -0.15, y_heightOffset: 0.025, z_distance: 0.4, }, targetPos: { // カメラ注視点の補正 x: 0.04, y: 0, z: 0, } }; // 注視点の設定(頭を基準に調整) const vrmHeadPos = new THREE.Vector3(); vrm.humanoid.getRawBoneNode('head').getWorldPosition(vrmHeadPos); // モデルの頭を基準にする(最初からモデルの顔が出ている状態にしたいので) const controls = new OrbitControls(camera, renderer.domElement); vrmHeadPos.x += DEFAULT_CAMERA_CONFIG.targetPos.x; vrmHeadPos.y += DEFAULT_CAMERA_CONFIG.targetPos.y; vrmHeadPos.z += DEFAULT_CAMERA_CONFIG.targetPos.z; controls.target.copy(vrmHeadPos); // カメラの初期位置の設定(頭を基準に調整) const cameraPos = vrmHeadPos.clone().add( new THREE.Vector3( DEFAULT_CAMERA_CONFIG.position.x, DEFAULT_CAMERA_CONFIG.position.y_heightOffset, DEFAULT_CAMERA_CONFIG.position.z_distance ) ); camera.position.copy(cameraPos); // カメラ設定を反映 controls.update();
8. カメラで撮影した内容を表示&毎フレーム更新

カメラで撮影した内容をあらかじめ用意しておいたcanvasに表示します。

1回表示するだけなら、「renderer.render(scene, camera);」だけで良いのですが、カメラで撮影した内容を毎フレーム更新するために、以下のように定期的に更新する形にする必要があります。

animate();
function animate() { // 定期的にanimateを呼び出し、canvas表示内容を更新 requestAnimationFrame(animate); renderer.render(scene, camera); }
サンプルコードはこちら

サンプルコードはGitHubにあります。

多分ローカル上では動かないので、どこかのサーバにアップするなりして動作確認してください。

なお、サンプル内に今回使用したJSライブラリ(モジュール)も含んでいます。これらは、three-vrmはピクシブ(Pixiv株式会社)、それ以外はthreejsのオープンソースプロジェクトによって提供されているものなので、公開する際はそのあたりの判断はご自身で行った上でお願いします(と言ってもどちらもMITライセンスなので気にしなくていいかもしれませんが)。

今回書けなかった内容

次書く機会があれば、以下を書こうと思います。

  • ポーズ / 表情の変更方法
  • 口の形の変更方法
  • (ほどほどだけど)きちんとカメラ目線にする
  • 変なテクスチャが表示されてしまう問題→サンプルコードで使用しているVRoidの首や背中に黒いテクスチャが出る
  • 解像度問題の対応→スマホのような高解像度端末だと、表示が綺麗にならない
コメントログ
※コメントは最新50件が表示されます
コメント投稿




画面下部の「コンタクト」からも連絡可能です。
管理人ツイート
商品サンプル画像
アルスラーン戦記(23) (週刊少年マガジンコミックス)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
八雲立つ 灼 11 (花とゆめコミックススペシャル)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
勇者パーティを追い出された器用貧乏 ~パーティ事情で付与術士をやっていた剣士、万能へと至る~(16) (シリウスコミックス)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
実は俺、最強でした?(17) (シリウスコミックス)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
管理人作品宣伝
VRoidテクスチャミキサー
Webサイト / 最終更新:2025-05-23
【一部機能返礼特典】本ツールはVRoidテクスチャを作成するためのもので、複数の画像を…【一部機能返礼特典】本ツールはVRoidテクスチャを作成するためのもので、複数の画像をレイヤーを重ねて合成できます。 とは言っても細かい設定は現状できないため、用途としては以下です。 ・VRoidStudioのテクスチャの色を変えたり、飾りを付けたり、キャラクターをTシャツの胸のあたりに載せるとか ・シンプルな衣装(下着や靴下など)に模様や飾りを付ける ・衣装の色や大まかなデザインを検討したいとき 「レイヤーの移動・リサイズ」や「カラーコードの自由追加」は正式版でのみ利用可能です。

HPで閲覧する(デモ版)HPで閲覧する(正式版)利用素材等の詳細情報返礼特典
VRoidポーズ集-Part03
3Dモデル / 最終更新:2024-12-03
VRoidのポーズデータ(vroidpose)集です。 写真とかによくありそうなポーズ…VRoidのポーズデータ(vroidpose)集です。 写真とかによくありそうなポーズが中心に入っています。

Boothで閲覧する利用素材等の詳細情報
作品一覧はこちら
関連ページ
JavaScriptでアナログ時計とデジタル時計を表示するコード
最終更新日:2025-05-29
概要 最近アナログ時計を使ったので、アナログ時計を表示するJavaScriptコードを載せます。 …
記事を閲覧する
three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する Part-03
最終更新日:2025-04-20
概要 three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する方…
記事を閲覧する
three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する Part-02
最終更新日:2025-04-15
概要 three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する方…
記事を閲覧する
three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する Part-01
最終更新日:2025-04-13
概要 three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する方…
記事を閲覧する
GIF / APNG(アニメーション付きPNG)ファイル解析ページ
最終更新日:2025-03-31
ファイル読込・操作 以下に調べたいファイルを読み込ませてください。 ファイル情報 カラーパレットを…
記事を閲覧する
gifler.js仕様メモ
最終更新日:2025-03-23
本ページの趣旨 「gifler.js」という、gifアニメーションをcanvasに簡単に表示できる…
記事を閲覧する
普通の文章をホラーっぽく変換
最終更新日:2024-12-24
テキスト:ホラー変換 ※表示までに時間が掛かることがあります。 変換結果 …
記事を閲覧する
【プログラミング】実例で分かるかもしれない再帰処理
最終更新日:2024-12-15
本ページは以下動画の台本を書き起こしたものです 解説の趣旨・方向性 皆さん、こんばんは今回はプログ…
記事を閲覧する
管理人について
最終更新日:2024-12-12
「ふじみ むい」と言います ひょんなことから肉体を得たのでその肉体を使って活動をしています。 とい…
記事を閲覧する
SNSツイート一元化対応(Twitter・Misskey・Mastodon・Bluesky)-公開
最終更新日:2024-12-06
概要 SNSツイートを一元化するためのツールを作成しています(古い記事ですが、こちらのページで紹介…
記事を閲覧する
本サイトのタグ一覧
NovelAIR18VRoidWebサイト作成Webツールととモノ。アークナイツアークナイツ-ステージ攻略日記アズールレーンアズールレーン-日記ウマ娘ギャラリーゲームデビラビローグネットスラング系プログラミングホラーポケットタウン怪談気ままな日記情報技術情報技術-WebAPI知的財産権統合戦略白夜極光本サイトについて魔王スライム様がんばる!漫画
人気記事
メイド・オブ・ザ・デッド-攻略お助け情報
最終更新日:2024-05-01
スコア:1144.1976 pt
ネタバレ注意! 本ページは『メイド・オブ・ザ・デッド』の情報を記録しているものです。 攻略の参考に…
記事を閲覧する
剣と魔法と学園モノ。2G - パーティ編成確認ツール
最終更新日:2024-05-09
スコア:919.8905 pt
ツール概要 ととモノ。2Gのパーティ編成を考える際に使うツールです。 あくまでストーリークリアまで…
記事を閲覧する
ポケットタウン_パズル一覧
最終更新日:2025-05-02
スコア:594.1512 pt
グレーのピースの数 (Number of gray pieces):検索グレーピースの数を入力して、…
記事を閲覧する
地獄先生ぬ~べ~で好きな切ないエピソード
最終更新日:2025-07-08
スコア:208.9286 pt
概要 初代というべきか、週刊少年ジャンプで連載されていた地獄先生ぬ~べ~の切ないエピソードの中で好…
記事を閲覧する
剣と魔法と学園モノ。3 - パーティ編成確認ツール
最終更新日:2025-05-07
スコア:191.3649 pt
ツール概要 ととモノ。3のパーティ編成を考える際に使うツールです。 攻略本や攻略wikiを参考にし…
記事を閲覧する
ヒカルの碁で、なぜ佐為は消えたのか
最終更新日:2025-04-21
スコア:168.1000 pt
概要 ヒカルの碁で佐為が消えた理由について、「ヒカルの才能を目覚めさせるという役割を終えたから」と…
記事を閲覧する
本サイトについて
最終更新日:2025-08-24
スコア:110.0000 pt
本サイトの概要 概要 個人ブログのようなものです。とくにジャンルはありません。 本サイト内の情報に…
記事を閲覧する
ゲーム『イカれた狩場の看板娘』の紹介・レビュー
最終更新日:2025-05-01
スコア:103.2688 pt
記事概要 イカれたゲームを紹介するぜ! イカれた狩場の看板娘! 以上だ! ちなみにそんなイカれてな…
記事を閲覧する
最新記事
本サイトについて
最終更新日:2025-08-24
本サイトの概要 概要 個人ブログのようなものです。とくにジャンルはありません。 本サイト内の情報に…
記事を閲覧する
スプシを使って柔らかくAPIからログ記録
最終更新日:2025-07-27
概要 Googleスプレッドシート(=スプシ)を使って、クライアント側の情報などを以下のように簡単…
記事を閲覧する
地獄先生ぬ~べ~新アニメで設定変わったところ(3話まで)
最終更新日:2025-07-13
概要 地獄先生ぬ~べ~の新アニメが2025-07-02(木)よりやっていますが、そこで設定が変わっ…
記事を閲覧する
地獄先生ぬ~べ~で好きな切ないエピソード
最終更新日:2025-07-08
概要 初代というべきか、週刊少年ジャンプで連載されていた地獄先生ぬ~べ~の切ないエピソードの中で好…
記事を閲覧する
商品サンプル画像
D.C.Ⅱ.S.S.~ダ・カーポⅡセカンドシーズン~(TV番組)
商品ページ
Amazon
非収益広告(手動登録)
サクラ度:○(問題なし)