何が?
まじかよ
three.jsを「遅い」と思わせ
ないデータの扱い方
2017/2/15 jey-en
何作ったのさ
Three.jsというモノを使い、
Xbox360で配信していた
3D同人ゲームの
移植を行った
(1面のみの、おためし版)
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
もくじのようなもの
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
three.jsって?
オープンソースの、100%JavaScriptで作られた、
3D(WebGL)を扱いやすくするためのJSライブラリ。
https://threejs.org/
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
ココがイイぞ!three.jsでゲーム制作
ゲーム作成に必要なモノは揃ってる。
アタリ判定、モデルとRayとの交点(高さ検出)、3D&2Dベクトル型、Matrix型、
ボーン、クォータニオン、3D座標からスクリーン座標&その逆などなど、
DirectXを触ったことがある人なら,ごくごくすんなりと開発できるはず。
ゼロからの人は、まぁ、頑張れ。いつか日の光は見える。
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
ココがイイぞ!three.jsでゲーム制作
豊富なインポータ。
json(blender)、FBX、obj、なんとMMDも対応している。
MMDはモデル&アニメーションだけでなく、
頂点モーフまで対応。
あんなモデルが即ブラウザで表示できて動く!
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
ココがイイぞ!three.jsでゲーム制作
遅くない。っていうか早い。
そして出来ることが多い
幾つかある3Dラッパーの中では最速。らしい。
シェーダーもぶっ叩ける。触れば触るほど
やれることが増えていく。楽しい!
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
ここからが本題です。
配信直前で泣かない
ためのお話をしましょう
すこし先の話をしよう。
ゲームが完成した!
スペース借りて、公開だ!
「すごーい!君は
ブラウザで動く3Dゲームが作れる
フレンズなんだね!」
ちくしょう!台無しにしやがった!!
誰もお前を愛さない
シングルスレッドの限界に挑むデータロード
おさらい:
JavaScriptは、シングルスレッドである。
WebWorker?とりあえず忘れろ。
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
シングルスレッドの限界に挑むデータロード
three.jsの、モデルデータの読み込みについてのフロー
ダウンロード完了後に、
「ローダープラグインが、モデルデータをthree.js用に変換する」
その後、メインプログラム側のコールバックにした「Load」に入る。
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
データ
ダウンロード
ローダーでの解析・変換 ロード後コールバック
ローダーライブラ
リ
ユーザーコード
three.jsの、モデルデータの読み込みについてのフロー
ヤバイのは実は、「ダウンロードの時間」ではなく、
「ローダーでの解析時間」 と 「コールバック時処理」 のあわせ技!!
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
データ
ダウンロード
ローダーでの解析 ロード後コールバック
マルチ可能 マルチ不可能!!!
シングルスレッドの限界に挑むデータロード
three.jsの、複数モデルデータの読み込みについてのフロー
ヤバイのは実は、「ダウンロードの時間」ではなく、その後の時間!
DL ローダーでの解析 ロード後コード
DL
DL
DL
ローダーでの解析 ロード後コード
画面更新可能 画面更新不可能画面更新不可能
誰もお前を愛さない
じゃあどうしよう。
魔法の呪文を唱えましょう。
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
シングルスレッドの限界に挑むデータロード
大正義
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
シングルスレッドの限界に挑むデータロード
three.jsの、モデルデータの読み込みについてのフロー
第一の改善点
一番楽に済む改修点がコレ。
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
データ
ダウンロード
ローダーでの解析
ロード後コー
ド
ここにSetTimeOut
シングルスレッドの限界に挑むデータロード
three.jsの、モデルデータの読み込みコード第一の改善
コレを・・
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
loader.load( modelFile, function ( object ) {
mesh = object;
mesh.position.y = -10;
scene.add( mesh );
//中略
}, onProgress, onError );
シングルスレッドの限界に挑むデータロード
three.jsの、モデルデータの読み込みコード第一の改善
こうじゃ。
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
loader.load( modelFile, function ( object ) {
var loadEnd = function (_object) {
mesh = (_object;
mesh.position.y = -10;
scene.add( mesh );
//中略
};
setTimeout(loadEnd(object), 10);
}, onProgress, onError );
シングルスレッドの限界に挑むデータロード
three.jsの、複数モデルデータの読み込みについてのフロー
現在のフローがこんな感じ
DL ローダーでの解析 ロード後コード
DL
DL
DL
ローダーでの解析 ロード後コード
画面更新が可能になった!
three.jsの、複数モデルデータの読み込みについてのフロー
次の問題はこの「1つのまとまりの大きさ」が、まだ大きい・・・・。
DL ローダーでの解析 ロード後コード
DL
DL
DL
ローダーでの解析 ロード後コード
2.5~3秒 0.3秒
大正義
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
シングルスレッドの限界に挑むデータロード
three.jsの、モデルデータの読み込みコード第一の改善
オープンソースの醍醐味を活かそう。
ローダーを独自改修し、SetTimeOutを仕込む!
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
シングルスレッドの限界に挑むデータロード
MMDLoader.jsの、モデルデータの読み込みコードの魔改造
コレを・・
//83行目(ビルド後ファイル・ver r84時点)
THREE.MMDLoader.prototype.load = function ( modelUrl, vmdUrls, callback, onProgress, onError ) {
var scope = this;
this.loadModel( modelUrl, function ( mesh ) {
scope.loadVmds( vmdUrls, function ( vmd ) {
scope.pourVmdIntoModel( mesh, vmd );
callback( mesh );
}, onProgress, onError );
}, onProgress, onError );
};
シングルスレッドの限界に挑むデータロード
MMDLoader.jsの、モデルデータの読み込みコードの魔改造
こうじゃ
//83行目(ver r84時点)
THREE.MMDLoader.prototype.load = function ( modelUrl, vmdUrls, callback, onProgress, onError ) {
var scope = this;
this.loadModel( modelUrl, function ( mesh ) {
var modeLoadEnd= function (_mesh) {
scope.loadVmds( vmdUrls, function ( vmd ) {
scope.pourVmdIntoModel( _mesh, vmd );
callback(_mesh );
}, onProgress, onError );
};
setTimeout(modeLoadEnd( mesh ), 10);
}, onProgress, onError );
};
シングルスレッドの限界に挑むデータロード
three.jsの、複数モデルデータの読み込みについてのフロー
トータルの読み込み時間は変わらないが、間に画面更新が可能になった!
DL ローダーでの解析 ロード後コード
DL
DL
DL
ロード後コード
2.5~3秒 0.3秒
ローダーでの解析
大正義
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
シングルスレッドの限界に挑むデータロード
JunkFieldsでのデータの読み込みについてのフロー
メッシュ地形DL
本地形データDL
主人公メカデータDL
ボイスデータDL
敵メカデータDL
敵メカデータDL
本編ボイスデータDL
タダの暗闇
(長くて0.5秒) 戦闘説明デモ画面(全部見ると1分近い)
戦
闘
本
編
本
編
初
期
化
シナリオスクリプトDL
ココはイケてない。three.jsでゲーム制作
Unityの強力なアセットストアが使えない。
リソースは全て自前で用意する必要がある。
ストア以外でもUnity限定配信とかのフリーモデルとかある。
過剰なUnity信仰文化氏ね。
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
ココはイケてない。three.jsでゲーム制作
ガチで3Dゲームを作りたいなら、
おとなしくUnityにしとけ!
ソース丸見えチートし放題問題&アセットストアの有用性で、
Unityのメリットが上回ると思う(個人の感想です)。
企業ユースのゲームとしては、three.jsはやっぱりキツイと思う。
three.jsでゲーム作成」というノウハウは少なく、デビュー作にはVeryHard
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
今回の話と関係のない結論
●ガチじゃない、さくっと3Dゲームを作って公開したい!
ということに関しては、three.js は選択肢の一つとして十分オススメ出来る!
●本業がゲーム畑にいない人&元同人ゲーム作者にこそ、
覚えていただきたい選択肢!
●ゲーム以外で3Dの表現を使いたいなら、three.js最高!!
はじめに three.js って何さ
ココがイイぞ!
three.jsでゲーム制作
ココがイケてない。
three.jsでゲーム制作
その他
悪あがき
シングルスレッドの限界に挑むデータロード
おわり
ありがとうございました。お疲れ様でした。
three.jsが気になったひとは、ぜひ
three.js ぱんつ 検索

More Related Content

PDF
【DL輪読会】Novel View Synthesis with Diffusion Models
PPTX
(2017.6.9) Neo4jの可視化ライブラリまとめ
PPTX
20160526 依存関係逆転の原則
PDF
MLflowによる機械学習モデルのライフサイクルの管理
PDF
SSII2022 [SS1] ニューラル3D表現の最新動向〜 ニューラルネットでなんでも表せる?? 〜​
PDF
数式を使わずイメージで理解するEMアルゴリズム
PPTX
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
PDF
(今ちゃんと振り返る) ゴール指向要求分析 入門
【DL輪読会】Novel View Synthesis with Diffusion Models
(2017.6.9) Neo4jの可視化ライブラリまとめ
20160526 依存関係逆転の原則
MLflowによる機械学習モデルのライフサイクルの管理
SSII2022 [SS1] ニューラル3D表現の最新動向〜 ニューラルネットでなんでも表せる?? 〜​
数式を使わずイメージで理解するEMアルゴリズム
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
(今ちゃんと振り返る) ゴール指向要求分析 入門

What's hot (20)

PPTX
Soft Rasterizer: A Differentiable Renderer for Image-based 3D Reasoning
PDF
三次元表現まとめ(深層学習を中心に)
PDF
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
PDF
デキるプログラマだけが知っているコードレビュー7つの秘訣
PDF
【DL輪読会】GradMax: Growing Neural Networks using Gradient Information
PDF
[DL輪読会]ICLR2020の分布外検知速報
PDF
三次元点群を取り扱うニューラルネットワークのサーベイ
PDF
ガイデットフィルタとその周辺
PDF
中級グラフィックス入門~シャドウマッピング総まとめ~
PDF
【DL輪読会】Bridge-Prompt: Toward Ordinal Action Understanding in Instructional Vi...
DOCX
マハラノビス距離とユークリッド距離の違い
PDF
【DL輪読会】Hierarchical Text-Conditional Image Generation with CLIP Latents
PDF
Neural scene representation and rendering の解説(第3回3D勉強会@関東)
PPTX
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
PDF
グラフデータ分析 入門編
PDF
Union find(素集合データ構造)
PDF
ドメイン駆動設計の正しい歩き方
PDF
Unityでオニオンアーキテクチャ
PDF
Convolutional Neural Networks のトレンド @WBAFLカジュアルトーク#2
PDF
【DL輪読会】Segment Anything
Soft Rasterizer: A Differentiable Renderer for Image-based 3D Reasoning
三次元表現まとめ(深層学習を中心に)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
デキるプログラマだけが知っているコードレビュー7つの秘訣
【DL輪読会】GradMax: Growing Neural Networks using Gradient Information
[DL輪読会]ICLR2020の分布外検知速報
三次元点群を取り扱うニューラルネットワークのサーベイ
ガイデットフィルタとその周辺
中級グラフィックス入門~シャドウマッピング総まとめ~
【DL輪読会】Bridge-Prompt: Toward Ordinal Action Understanding in Instructional Vi...
マハラノビス距離とユークリッド距離の違い
【DL輪読会】Hierarchical Text-Conditional Image Generation with CLIP Latents
Neural scene representation and rendering の解説(第3回3D勉強会@関東)
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
グラフデータ分析 入門編
Union find(素集合データ構造)
ドメイン駆動設計の正しい歩き方
Unityでオニオンアーキテクチャ
Convolutional Neural Networks のトレンド @WBAFLカジュアルトーク#2
【DL輪読会】Segment Anything
Ad

Viewers also liked (16)

PDF
海外で注目されてるJs framework “mithril”の特徴
PPTX
Web Workers
PDF
OSC京都 2015 LT 「テスト自動化の闇と向き合う」
PDF
Onsen UI 2.0とUIライブラリの未来
PDF
20151201 私がSeleniumを使ってスクリーンショットを撮るまでに出会った闇の全て
PDF
第2回html5jゲーム部勉強会 Oh! JavaScript 夢の続きを語ろうよ〜emscriptenの逆襲 - html5編
PDF
意識低くMeteor紹介
PDF
軽量フレームワークNancy
PDF
私がSeleniumを使ってスクリーンショットを撮るまでに出会った闇の全て
PDF
Riot + generator で始める新しいデータバインディング
PPTX
Web Workerで○○する話
PPTX
ライオンでも分かるVuejs
PDF
Vue.js入門
PDF
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
PDF
最近のストリーム処理事情振り返り
PDF
サイボウズのフロントエンド開発 現在とこれからの挑戦
海外で注目されてるJs framework “mithril”の特徴
Web Workers
OSC京都 2015 LT 「テスト自動化の闇と向き合う」
Onsen UI 2.0とUIライブラリの未来
20151201 私がSeleniumを使ってスクリーンショットを撮るまでに出会った闇の全て
第2回html5jゲーム部勉強会 Oh! JavaScript 夢の続きを語ろうよ〜emscriptenの逆襲 - html5編
意識低くMeteor紹介
軽量フレームワークNancy
私がSeleniumを使ってスクリーンショットを撮るまでに出会った闇の全て
Riot + generator で始める新しいデータバインディング
Web Workerで○○する話
ライオンでも分かるVuejs
Vue.js入門
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
最近のストリーム処理事情振り返り
サイボウズのフロントエンド開発 現在とこれからの挑戦
Ad

Recently uploaded (17)

PDF
9_前田音葉さん:「Yakushima Islandってなんか変じゃない?」.pdf
PDF
My Inspire High Award 2024(岡田秀幸).pptx.pdf
PDF
14_「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」公文国際学園高等部古澤琴子.pdf
PPTX
PPT KANJI IRODORI SHOKYUU 1 BAB 9 (FURIGANA)
PDF
12_星の杜中学校小倉ももこ『家族ってなに』inspirehigh発表物.pdf
PDF
8_「世の中の流行はどのようにして生まれるのか」学校法人聖ドミニコ学園竹野はるいpptx.pdf
PDF
11_「なぜ議会への関心が低いのか?」長野県長野西高等学校 片桐 菜々美さん.pdf
PDF
「なぜ、好きなことにいつかは飽きるの?」大塚莉子 - My Inspire High Award 2024.pdf
PDF
外国人が日本のテーブルマナーに驚く理由は?_公文国際学園高等部 角田 恵梨佳さん
PDF
共同売店から考える沖縄の新しい流通のしくみ2025琉球大学流通原論講義資料.pdf
PDF
12_「家族とは何か」星の杜中学校小倉ももこ『家族ってなに』inspirehigh.pdf
PDF
7_「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」明治大学付属中野八王子中学校宮本ゆりかさん.pdf
PDF
6_「老いることは不幸なこと?」植草学園大学附属高等学校森 珠貴さんinspirehigh.pdf
PDF
5_「AIと仲良くなるには?」日本大学東北高等学校南梨夢乃さんinspirehigh.pdf
PDF
13_「他者と自分、対立を防ぐには?」市原中央高等学校 大野リリinspirehigh.pdf
PDF
10_「孤独は敵なのか?」 桜花学園高等学校堀川愛可さんinspirehigh.pdf
PDF
3_「本当の『悪者』って何?」鷗友学園女子中学校_福島 雪乃さんinspirehigh.pdf
9_前田音葉さん:「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024(岡田秀幸).pptx.pdf
14_「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」公文国際学園高等部古澤琴子.pdf
PPT KANJI IRODORI SHOKYUU 1 BAB 9 (FURIGANA)
12_星の杜中学校小倉ももこ『家族ってなに』inspirehigh発表物.pdf
8_「世の中の流行はどのようにして生まれるのか」学校法人聖ドミニコ学園竹野はるいpptx.pdf
11_「なぜ議会への関心が低いのか?」長野県長野西高等学校 片桐 菜々美さん.pdf
「なぜ、好きなことにいつかは飽きるの?」大塚莉子 - My Inspire High Award 2024.pdf
外国人が日本のテーブルマナーに驚く理由は?_公文国際学園高等部 角田 恵梨佳さん
共同売店から考える沖縄の新しい流通のしくみ2025琉球大学流通原論講義資料.pdf
12_「家族とは何か」星の杜中学校小倉ももこ『家族ってなに』inspirehigh.pdf
7_「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」明治大学付属中野八王子中学校宮本ゆりかさん.pdf
6_「老いることは不幸なこと?」植草学園大学附属高等学校森 珠貴さんinspirehigh.pdf
5_「AIと仲良くなるには?」日本大学東北高等学校南梨夢乃さんinspirehigh.pdf
13_「他者と自分、対立を防ぐには?」市原中央高等学校 大野リリinspirehigh.pdf
10_「孤独は敵なのか?」 桜花学園高等学校堀川愛可さんinspirehigh.pdf
3_「本当の『悪者』って何?」鷗友学園女子中学校_福島 雪乃さんinspirehigh.pdf

three.jsを「遅い」と思わせないデータの扱い方

Editor's Notes

  • #2: えーみなさま、はじめましてでございます。
  • #3: 大したことは言いません。どうぞご歓談メインで、聞き流していただければと思います。 そのかわりウルサクさせていただきます。 ということでライトニングトークのお題です。
  • #4: スリーJSを「遅い」と思わせないデータの扱い方 ということで、お話させていただきたいと思います。よろしくお願いします。 -- 30s
  • #5: 今さらお前は誰だ、ということでですね、申し遅れました。私、タムラと申します。スリーJSで、個人制作でゲームなんて作ってみました。個人制作です。ゲーム作りをプロでやってるわけじゃありません、大したお話はできません。 チョット時間が5分からはみ出ちゃうと思うんですけど、ちらっとどんなゲームか、30秒ほど動画でおみせします。 このゲーム、お世辞ではなく、Edgeが一番早いです。 はい、お粗末様でした。
  • #6: 本日の流れ。どうでもいいですね。多分この通りに喋りません。時間使っちゃったし。 1m
  • #7: えーそもそもスリーJsってなんぞや、ということなんですが、JavaScriptの3Dプログラム向けのライブラリです。さきほど豊島さんがスリーJsって言ってたのでちょっと安心しました。知名度ちゃんとありますね。 WebGLをラッピングして、使いやすくしてくれたものです。もちろんオープンソースです。すげえ!
  • #8: この辺は流しますね。 えー大体あります。ゲーム向けメソッド多いです。素敵!はい次。
  • #9: インポータも結構そろってます。MMD、動かせます。楽しいです。
  • #10: だいたいこんなかんじです。すりーJSなんて初めて聞いたし、細かく知りたーい、と思ってくださったら、ググってみてください。 はい。 1m15s
  • #11: 今日はですね、完成直前とか、配信を意識するとか、そういう最後の段階で詰まったときの、解決につながる、かもしれないお話をさせていただきます。 先ほどカシマさんからも、ブラウザゲーム復興だーなんてありましたが、そんなリリース前のお話です。
  • #12: すりーJSで根性だして、3Dゲームを完成させました! すごい!やりきった! サーバースペースを用意して、アップロードして公開するとしましょう。
  • #13: もーね、きっと明日の朝には、すごーい、たーのしー!のコメントでいっぱいだ!!ワクワクしますね。  って思うと、
  • #14: 大体の場合、こうなるんですね。 あーあ。コレダメなやつだ。かーらーの
  • #15: こうなるんですね。 何がいけなかったのでしょう? 1m45
  • #16: いまさらな話をさせていただきます。JavaScriptは、シングルスレッドです。何を今更です。みんな知ってるだろうと。 2m
  • #17: こちらに、3Dモデルデータを、ダウンロードして使えるようにするまでフローを書いてみました。  ご覧の通り、ダウンロードの後に、まずは 「 ローダー側での処理 」がありまして、 すりーJS用に頂点データとか何やらを変換します。  みんな書くのは最後のコールバックのところだけ。 でも、その前にも動いてる処理がある、そのことをちょっと思い出しましょう。 2m30s
  • #18: そうなんです。2D画像やオーディオと違って、ダウンロード即実行可能、じゃなくて、間に一発いるんですね。 この解析部分、当然、タダのJavaScriptなんで、ふつーにシングルスレッドで走ります。   さぁ、もう嫌な予感がしてきましたね。
  • #19: これが複数ファイルだと、こうなります。ダウンロードは確かに時間のかかる処理かもしれないですが、ダウンロードは別スレッドですので、その間、画面を止めないのは、実はそれほど難しくない。 スピナーでもくるくる回しとけばいいんです。 ヤバイのはその後。 ここで、この1組の処理が終わるまで、画面の更新が一切行われなくなります。でもって、その次のファイルも同じように、長く止まっちゃうと。 もーヤバイです。スピナー君もこの最中は、回ってくれません。 
  • #20: んで、こうなります。 秒間1フレームという地獄のできあがりです。 2m30
  • #21: じゃあどうしましょうってことで、魔法の呪文を唱えましょう。 みんな知ってるあの呪文です。  せーの!
  • #22: SetTimeOut!みんな大好き。最強です。今回もなんとかしてもらいましょう。
  • #23: ということで、解析が終わったところの、ロード後のコードのところで、SetTimeOutをはさみます。
  • #24: 元がコレですね。っていうかスライドのソースの字なんて見えませんね。ざっくりいきます。予想できると思いますけど、 コレを、
  • #25: こんな感じ。setTimeout の呼び出しを付けるだけ。これだけで、結構なんとかなります。
  • #26: この回収で、タイムライン的にはこんな感じになります。SetTimeOutのおかげで、画面更新のタイミングができます。 ぶっちゃけローポリで、アニメーションが長くないキャラだったら、これでなんとかなることも多いです。だがまだ足りないこともあると。
  • #27: これがデカイデータだとどうなるか。 自分のゲームのデータで3000頂点、5000フレームかな、ですと、解析時間だけで3秒。 画面ごと固まってるってのは、やっぱりキッツイですよね。まだなんとかしたい。なんとかできないだろうか。
  • #28: お前の力は、こんなもんじゃないだろと。まだいけます。なんとかしてもらいましょう。
  • #29: こっから先は、ソースをいじくるのが、ちょっと疲れます。必要ならば、やってみる感じです。 オープンソースって事を活かしましょう。フォークしても、ビルドしたやつをいじっても、どっちでもいいんじゃないですか。
  • #30: 例のMMDローダーを試しにいじってみることにしましょう。 元がコレですね。見えませんね。  まぁ続けますけど、見た感じ、二つの処理が繋がってるぞと。コレを、
  • #31: こうするわけですね。やったことは、さっきと同じです。 処理の区切りを意識して、見つけて、そこにSetTimeOutを仕込んでいく、それだけです。
  • #32: こうすることで、当然、トータルの読み込み時間は減りませんが、間に画面が更新できるタイミングが生まれます。 これを必要な負荷に応じて分割を増やすことで、止まったような画面を見なくて済む、かもしれません。頑張れば!
  • #33: ありがとうSetTimeout。今回も世界は救われた。君のことは忘れない!
  • #34: というわけで時間ないんですけど、自分のゲームのロード部分の図解です。 小刻みにいろいろなファイルが読まれていって、間あいだで画面の更新ができてます。ありがとうSetTimeOut! はい! --------- 最後に、自分が作ったゲームでの、データのロードの図解っぽいやつです。 (1分以上余ってた場合のみ全部言う) 最初に、ワイヤーフレームで表示する用の軽いモデルデータのダウンロードが走りまして、そのモデルのダウンロードと読み込みが終わると、いわゆる戦闘説明画面っぽいデモが入ります。そのデモ画面の最中、裏ではガリガリとダウンロードとダウンロード後の解析をやるわけですが、こんな感じでSetTimeOutを使って、それぞれが小刻みに読まれていく感じなんですね。んで、全部終わった所で本編突入です。これで、いわゆる「止まらないけど後ろではロードしてるんだぞ」という画面が可能になりました。何かの参考になれば幸いです。
  • #35: ちょっとお時間が余ってますので、 順番が前後しましたが、すりーじぇいえすの欠点といいますかなんといいますか、無理矢理な話しですけども。余談を話します。  unityのアセットストアが使えないので、データの用意に苦労することになるんですね。 3Dのデータって作れる人は2Dに比べたら一気に少なくなりますから、そこをカバーできるアセットストアは、ホント凄いと思います。リソースの自前は、おもったよりもキツイです。 まぁこれはあくまでUnityと比べたら、ということで。unity以外の環境からしたら、別に劣ってるということじゃないです。Unityがスゴすぎるだけ。 でも、 今日見せてだいたプレイカンバスは楽しそうだったので、 もし次、こういう機会があれば、プレイカンバスとの比較も用意してみたいなと思います。
  • #36: ということで、まとまらないまとめなんですけれども、 Unityでよくね、以上ですって、話が終わっちゃうので。ブラウザで公開したい!という特殊な事情がない限りは、別にthree.jsにこだわることって無いと思います。とにかく、3Dモデルデータが用意できるかどうか、まず最初の分かれ目はそこですね。
  • #37: --- 残り15s ------------ ということで、なんか今日話したことと全然関係ないまとめのようなんですけど、先ほどですね、オガワさんからWebGLでゲームはお金にはならんという泣ける結論がありましたけども、もしゲームを個人で作ってる人とかいらっしゃたら、three.jsは、ぜひやってみろと!面白いぞ!と、おすすめしたいと思います。
  • #38: ということで、おつきあいいただきまして、ありがとうございました。 すりーJSが気になった方はですね、ぜひとも画面に出てる、どーしょもないキーワードとかでググっていただいて、少しでも興味をもって頂けたら幸いです。 ということで、以上になります。 ありがとうございました。