Babylon.jsで作るVRコンテンツ

5.1K Views

June 23, 23

スライド概要

JavaScriptのフレームワークの一つであるBabylon.jsを使ってパーティクルを実装し、VR空間で見れることを目指したハンズオン資料になります。
初学者レベルを想定とした内容となっておりBabylon.jsがはじめての方にもおススメできる内容となっています。

profile-image

XR系、セキュリティ系のことを情報として残す用途で使ってます。 誤字脱字、技術的な指摘歓迎します。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

パーティクルの実装とVR体験

2.

自己紹介 エンジニアをしてるrickyといいます XR系の事が好きでよく勉強しています XRを用いて教育・業務効率・体験を拡張させたいと思っています 今は ・モデリングで空間の構築能力を高めること ・XRでの物理現象の実装を理解しコンテンツの拡張に活かすこと ・XRについて周知することによる業界全体の活性化

3.

リンクなど ・Twitter ・GitHub ・note

4.

概要 Babylon.jsとは? HTML5、WebGL、WebVR、Web Audio によって 3D ゲームとエクスペリエンスを構築するための 完全な JavaScript フレームワーク ⇒JavaScriptでXRコンテンツが作れる!! https://learn.microsoft.com/ja-jp/training/modules/build-mixed-reality-with-babylonjs/1-webxr-babylonjsより引用

5.

今日は ※HMDがなくても楽しめます けどあるとより楽しいです(*´▽`*) 埃を被ってしまっている方は引っ張り出して充電を!

6.

サンプル Babylon.jsを理解するとこんなのが作れたりします(今日の内容ではありません) 実際に弾けるピアノ https://www.youtube.com/watch?v=AmmqhecoANM ドミノ https://youtu.be/P_HeGGSEseo

7.

パーティクルを実装しよう パーティクルのイメージ動画 https://youtu.be/Ld3p3spOumk

8.

Glitch 解説 今回はGlitchというオンラインエディタを使います ・データの引継ぎが容易なため ・実装の反映が速い といった利点があります https://glitch.com/

9.

まずは肩慣らし! 概要編 ・最もシンプルなboxモデルを作ってみます。 ・簡単ですが、出力に慣れましょう!

10.

まずは肩慣らし! 設定編 ・Glitchからソースを取得 https://glitch.com/~particle-test-simple-base 下へスクロールするとRemix という項目があります。

11.

まずは肩慣らし! 設定編 Remixをするとこのような画面が出ます

12.

まずは肩慣らし! 設定編 index.htmlを選択すると既にコードが存在します

13.

まずは肩慣らし! 設定編 Remixをすると勝手に名前が付けられます どれがどれかわからなくならないように Settingsから唯一となる名前に変えましょう 例えばbabylonjs-sample-rickyのように個人名や 数字をつけるといいかもしれません。

14.

まずは肩慣らし! 設定編 画面下にPREVIEWボタンをおして Open preview paneを押しましょう

15.

まずは肩慣らし! 設定編 すると画面右手にプレビュー画面が表示されます (サイズが小さいとみえづらいのでブラウザは可能な限り大きく!)

16.

まずは肩慣らし! コード編 baseコード内に日本語で とあるのでその下に以下のコードを書いてください const box = BABYLON.MeshBuilder.CreateBox("box"); BABYLONを使うと いう宣言 メッシュを作る ボックスを作る

17.

まずは肩慣らし! 完成イメージ

18.

まずは肩慣らし! 補足編 作ったオブジェクトは色々な角度から見ることができます 十字キーを使うことで近づいたり離れたりして見ることができます

19.

パーティクル1 光 概要編 大まかな流れ ・パーティクルの発生地点を作成する ・パーティクルの細かな設定を行う 完成サンプルはこちら (うまくいかないときはこちらを参照してください) https://glitch.com/~particle-test-simple-light

20.

パーティクル1 光 設定編 ・Glitchからソースを取得 https://glitch.com/~particle-test-simple-base 下へスクロールするとRemix という項目があります。

21.

パーティクル1 光 設定編 Remixをするとこのような画面が出ます

22.

パーティクル1 光 設定編 index.htmlを選択すると既にコードが存在します

23.

パーティクル1 光 設定編 Remixをすると勝手に名前が付けられます どれがどれかわからなくならないように Settingsから唯一となる名前に変えましょう 例えばbabylonjs-sample-light-rickyのように個人名や 数字をつけるといいかもしれません。

24.

パーティクル1 光 設定編 画面下にPREVIEWボタンをおして Open preview paneを押しましょう

25.

パーティクル1 光 設定編 すると画面右手にプレビュー画面が表示されます (サイズが小さいとみえづらいのでブラウザはなるべく大きく!)

26.

パーティクル1 光 コード編 モデルの作成 モデルの作成 var sphere = BABYLON.MeshBuilder.CreateSphere("sparkles"); sphere.position = new BABYLON.Vector3(0, 0, 0); モデルの位置

27.

パーティクル1 光 コード編 パーティクルの実装 パーティクルシステムの利用 let particleSystem = new BABYLON.ParticleSystem("sparkles", 1000, scene); particleSystem.particleTexture = new BABYLON.Texture ("https://cdn.jsdelivr.net/gh/capucat/blendermodels/flwr.png", scene); このURLは右の 画像の情報が含 まれている パーティクルのテク スチャを貼り付け パーティクルの総数を指定し ています。生成されるパーテ ィクルの数が多いほど、効果 がより密集して表示される

28.

パーティクル1 光 コード編 particleSystem.emitter = sphere; パーティクルの開始 パーティクル の発生場所 particleSystem.particleEmitterType = new BABYLON.SphereParticleEmitter(); particleSystem.start(); パーティクルの開始

29.

パーティクル1 光 コード編 最後のひと手間 sphere.isVisible = false; sphereモデルを見えなくするコード

30.

パーティクル1 光 完成イメージ

31.

パーティクル2 雨 概要編 パーティクルを簡単に作れる便利機能ParticleHelper を利用して雨を降らせます 完成サンプルはこちら (うまくいかないときはこちらを参照してください) https://glitch.com/~particle-test-simple-rain

32.
[beta]
パーティクル2 雨 コード編
BABYLON.ParticleHelper.CreateAsync("rain", scene,
false).then((set) => {
set.start();

});
Babylon.js v3.3から登場したParticleHelperを用いることで簡単
にパーティクルを作成することも可能

33.

パーティクル2 雨 完成イメージ

34.

パーティクル3 炎 概要編 レンダーパイプラインは物理的な光学的効果をシミュレートできる機能 ゲームや仮想現実などに用いられ質の高いエフェクトを作成に用いる Tone mappingは輝度の高すぎる画像やシーンを適切な表現に Bloomは光の拡散や輝きの効果をシミュレートするグラフィックス技術 完成サンプルはこちら (うまくいかないときはこちらを参照してください) https://glitch.com/~particle-test-simple-fire

35.

パーティクル3 炎 コード編 // Set up new rendering pipeline レンダーパイプライン を使うためのコード var pipeline = new BABYLON.DefaultRenderingPipeline( "default", true, scene );

36.

パーティクル3 炎 コード編 // Tone mapping 画像処理に使用される共通のプロパティをグループ化 scene.imageProcessingConfiguration.toneMappingEnabled = true; scene.imageProcessingConfiguration.toneMappingType = BABYLON.ImageProcessingConfiguration.TONEMAPPING_ACES; scene.imageProcessingConfiguration.exposure = 1; toneMappingの一つであるACESを 利用するためのコード 物理ベースのライティングとマテリアルを使う際は、 シーンの Exposure (露出) を正しく設定する必要があ ります。

37.
[beta]
パーティクル3 炎 完成!
// Fire!
BABYLON.ParticleHelper.CreateAsync("fire",
scene).then((set) => {

set.start();
});

38.

パーティクル3 炎 応用編 bloomを機能させる(true) // Bloom pipeline.bloomEnabled = true; 明るい部分を見つけるた めの輝度閾値 pipeline.bloomThreshold = 0.8; pipeline.bloomWeight = 1; 出力の強さ pipeline.bloomKernel = 64; pipeline.bloomScale = 0.5; 入力テクスチャに対するブラ ーテクスチャの比率。 出力サイズ

39.

VR 概要編 今回のパーティクルはHMDを使うことでVR空間で見ることができます ご自身の作られたパーティクルを生で体験することの楽しさをぜひ味わってくだ さい

40.

VR 概要編 ・Oculus Quest系を使って初期設定を行います ・FirefoxVRでリンクを開きます ・Glitchで作ったアプリのリンクを打ち込みます

41.

VR コード編 コードを書く場所はconst scene = createScene();とengine.runRenderLoopの間に なります

42.

コード編 VR initializeXR(); 下で定義したinitializeXRを呼 び出している async function initializeXR(){ let xr = await scene.createDefaultXRExperienceAsync(); } sceneからXRの機能を付 与している

43.

VR コード編 Settingsから名前を変更しオリジナルの名前に変更しましょう

44.

VR コード編 HMDからFirefoxVRを起動してリンク欄に https://先ほど設定したGlitchの名前.glitch.me/ と入力して下さい 作成したコードが画面上に出力されます

45.

アイデア・改良 サイズを変えたり、量を増やしたり、複数のパーティクルを表示させたりと色々 と遊べます こうしたらどうなるかな?と試してみると理解が深まります! 予めバックアップを取っておくとミスしても安心です

46.

参考サイトなど 参考になるサイトやコミュニティの紹介 Babylon.js playground https://playground.babylonjs.com/ Babylon.js公式チュートリアル https://doc.babylonjs.com/features/introductionToFeatures

47.

最後に 何かおもしろいのができたらTwitterで#babylonとハッシュタグを付けて流してく ださい 見かけたらいいね押しに行きます(*´▽`*) 今日は皆さんお忙しいところハンズオンに参加してくださってありがとうござい ました!

48.

補足資料 https://doc.babylonjs.com/features/featuresDeepDive/particles/particle_system/par ticleHelpe https://doc.babylonjs.com/typedoc/classes/BABYLON.ParticleHelper#constructor