View on GitHub

lectures

Three.js(付録 B)

three_js/Home


Microsoft 3D ライブラリの活用

付録 1で拡張子gltfのモデルデータを利用した。 ここでは手早く3D モデルを得る方法として Windows 10 で利用できる「3D ビューアー」を通じてダウンロード可能な 3D モデルを Three.js 適したデータに変換する方法を紹介する。

3D ビューアーから利用できるモデルのファイルはgltfのバイナリ形式である、glbである。
得られるモデルは高品質なものの、ファイルサイズが数十メガバイトと大容量である。 このままブラウザアプリで利用すると、ユーザに大きな負担を与えてしまう。

Visual Studio Code を利用すれば数ステップの手順でファイルサイズを抑えられる。

3D ビューアーからモデルをダウンロードする

Windows 10 の「 3D ビューア」を起動する。

3D_viewer_01.png

「ようこそ」画面を閉じる。

3D_viewer_02.png

メニューの「 3D ライブラリ」を選択する。

3D_viewer_03.png

今回は例として「 SF とファンタジー」から「スペースシャトル」を選択する。

3D_viewer_04.png

3D_viewer_05.png

名前を付けて保存を選択する。作業場所として空のフォルダを作成すると作業しやすい。

3D_viewer_06.png

無用なトラブルを避けるため、ファイル名は半角英数字とする。ここでは「Shuttle.glb」とした。

3D_viewer_07.png

ファイルサイズ削減の流れ

ファイルサイズ削減の概要は次の通りである。上記で例としてダウンロードしたShuttle.glbはファイルサイズ約 22MB である。
このデータサイズの原因のほとんどは高解像度のテクスチャにある。 しかしながら、本演習で想定するような比較的簡単なブラウザアプリではそこまで高品質なテクスチャは必要ない。

そこで、以下の手順でテクスチャの解像度を落とす。

以上の手順は Visual Studio Code と任意の画像編集ソフトを使って実施する。

Visual Studio Code で glb ファイルからテクスチャと頂点データを抽出する

まずは、gltf拡張機能をインストールする。
準備の項で「 Live Server 」をインストールしたときと同じ要領で実施する。 拡張機能の検索は「 GLTF 」と入力すればよい。

gltf_vscode_01.png

Visual Studio Code でglbファイルを保存したフォルダを開く。

gltf_vscode_02.png

フォルダに存在するオリジナルのglbファイル(例ではShuttle.glb)をクリックする。
Visual Studio Code 上ではエラーが表示されるが、問題はない。

gltf_vscode_03.png

ファイル名が表示されているタブ(例ではShuttle.glb)を右クリックして、「 gltf: Import from GLB 」を選択する。

gltf_vscode_04.png

ファイル保存ダイアログが開くので、glbファイルと同じ場所に拡張子をgltfに変えて(例ではShuttle.gltf)保存する。

gltf_vscode_05.png

gltfファイルと数枚のテクスチャ、拡張子「bin」の頂点データが出力される。

gltf_vscode_06.png

テクスチャのサイズは下図の通りである。一枚 4MB 以上もある。

gltf_vscode_07.png

テクスチャのリサイズ

テクスチャ画像(上記の場合は拡張子pngの4つのファイル)のサイズを縮小する。
以下の点に十分注意すること。

以上を守れば、どのような方法で画像を縮小しても構わない。 ツールの例としてはRalpha Image Resizerがある。

テクスチャを 256 画素四方に縮小するとファイルサイズは次のようになる。

gltf_vscode_08.png

分離したデータの glb への統合

最後に、分離したテクスチャと頂点データを再度まとめなおす。 Visual Studio Code でgltfファイル(例ではShuttle.gltf)をクリックし、ファイル名が表示されているタブを右クリックして「 Export to GLB 」を選択する。

gltf_vscode_09.png

ファイル保存ダイアログが開くので、名前をオリジナルのglbと違うものに変えて(例ではShuttle_min.glbとしている)保存する。

gltf_vscode_10.png

ファイルサイズが激減していることが分かる。

gltf_vscode_11.png

サイズ削減後の glb ファイルの見栄えを確認する

ブラウザでglTF Viewerを開き、完成したglbファイルをドラッグ&ドロップする。
オリジナルモデルとサイズ削減後モデルの比較は次の通りである。

gltf_viewer_02.png

gltf_viewer_01.png

オリジナルに比べると当然テクスチャ解像度低下による劣化があるが、本演習の用途ではこれで十分である。
また 1 ファイルで数十メガバイトものモデルデータをユーザにダウンロードさせるのはかなりのストレスになるので避けるのが妥当である。

Three.js で glb を読込む

THREE.GLTFLoaderでロードし、シーンに追加すれば表示できる。
Shuttle_min.glbThreeJS-master/assets/downloads/Shuttle_min.glbとなるように配置して、ThreeJS-master/lecB/appendixB0.htmlをこれまで同様に実行すれば、以下のようになる。

appendix20_1.png

Android 端末で最初に実行した際は、表示されるまでにややタイムラグがあるかもしれない。


three_js/Home