SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
WEBGL WITH WASM
EMSCRIPTEN NIGHT 2018 DECEMBER
WHO AM I?
@KYASBAL-1994 (石井 翔)
▸ 東工大 M1
▸ 未踏2016スーパークリエータ
▸ Web開発のためのWebGLフレームワーク”Grimoire.js”作者
▸ 未踏アドバンスト2018イノベータ
▸ 普段はWebGLとかWebXR周りのことをやっている人
導入
WASMでスレッドが使えるようになる!
▸ これでマルチコアをフル活用したWASMばっかりのWebサ
イトを作れるぞ!
▸ もっと活かせるコアはたくさんある!
導入
WEBGL
▸ WebGLって単語を知っているよって方?
▸ WebGL使ったことあるよって方?
導入
WEBGLとは?
🤔ちょっと微妙
導入
WEBGLはWEBで3DCGを行う為だけのものじゃない
▸ GPUを用いて主に3DCGなどの描画を高速に行うAPI
🤯 CPU ? GPU ?
導入
WEBGLはWEBで3DCGを行う為だけのものじゃない
🤯 CPU ? GPU ?
導入
WEBGLの得意な処理の例
▸ グラデーションをかける
▸ 入力:

各点の一番近い3つの頂点から
の距離

3つの頂点の色
▸ 出力: 色
▸ ある点の色を決める際に別の点
の色が関係ない
WASMと共にWEBGLも活用してもっと高速化しよう
WEBGL+WASMの実例
WEBGLとWASMを用いた線分認識
WASMの効果
GPUを用いた事前処理
WASMでの処理時間 JSでの処理時間
GPUで可能な処理: 色の勾配を求める処理

(Sobel フィルタリング)

輝度を2値に分解する処理
CPUでしかできない処理: 線分検出(RANSAC)
WEBGL+WASMの実例
デモ
WASMとWEBGLを連携させてみよう
▸ 流石にマーカー認識は難しいのでエッジのセグメンテーショ
ンをします
デモコード: https://github.com/kyasbal-1994/emscripten-night
デモ
WASMとWEBGLを連携させてみよう
▸ WebGLだけでは難しい。

(隣同士のピクセルの値によって処理が変わってしまう)
デモコード: https://github.com/kyasbal-1994/emscripten-night
デモ
WASMとWEBGLを連携させてみよう
▸ WASMだけでもできるが、勾配の計算はGPUでやると早い
デモコード: https://github.com/kyasbal-1994/emscripten-night
WASMとWEBGLでメモリを共有する
▸ WASM側にallocとdeallocを実装する
WASMでALLOCしたメモリをJS側で表示する
▸ js側からallocを呼び出して、ポインタを取得する
▸ このポインタを用いてシェアされたUint8Arrayを作れる
画像として使う際の例
テキスト
補足) UINT8ARRAY コンストラクタ
▸ 4つ目の第一引数に直接memoryを渡す
▸ byteOffsetにwasm側で取得したpointerを渡す
▸ lengthにメモリ全体の長さを渡す
▸ これはただのビューなのでコピーのコストなどは生じない
WEBGLでSOBELフィルタを描画する
▸ WASM関係の話の場なので省略するが比較的簡単なチュー
トリアルを見ればエッジの抽出ができる

参考) https://wgld.org/d/webgl/w055.html
中心の画素を決める際に左右上下斜めの色を見て

係数をかけて足し合わせる
WEBGLで描いた内容をWASMに渡す
▸ Framebufferというものに描画することによって、
Uint8Arrayに書き出すことができる
WASMで幅優先探索を行なってメモリに直接色を乗せる
まとめ
まとめ
▸ 同じ処理を入力が若干違うもの同士に適用する際には
WebGLを使うと早い
▸ WASM側でallocしたポインタをjsに渡す
▸ js側でUint8Arrayなどに渡して切り出す
▸ WebGL側でFBOに描画してreadPixelsを用いればWASM側
に直接GPUで描画したテクスチャを渡すことができる

Mais conteúdo relacionado

Mais procurados

PWAでタイマーを 作ってみた
PWAでタイマーを 作ってみたPWAでタイマーを 作ってみた
PWAでタイマーを 作ってみたYuhei FUJITA
 
最近知ったBootstrapの注意点
最近知ったBootstrapの注意点最近知ったBootstrapの注意点
最近知ったBootstrapの注意点Kawaji Masaki
 
ReactでCMSを作ったときにハマったこと
ReactでCMSを作ったときにハマったことReactでCMSを作ったときにハマったこと
ReactでCMSを作ったときにハマったことkazuki matsumura
 
【2017早めの夏休み自由研究】SPAとサーバーレスについて
【2017早めの夏休み自由研究】SPAとサーバーレスについて【2017早めの夏休み自由研究】SPAとサーバーレスについて
【2017早めの夏休み自由研究】SPAとサーバーレスについてkazuki matsumura
 
Devops4cloudlbuilder ja
Devops4cloudlbuilder jaDevops4cloudlbuilder ja
Devops4cloudlbuilder jaGo Chiba
 
React Nativeでお絵描きしてみた
React Nativeでお絵描きしてみたReact Nativeでお絵描きしてみた
React Nativeでお絵描きしてみたkazuki matsumura
 
普段Reactを触ってる僕が Angularを触ってみた感想を共有する
普段Reactを触ってる僕が Angularを触ってみた感想を共有する普段Reactを触ってる僕が Angularを触ってみた感想を共有する
普段Reactを触ってる僕が Angularを触ってみた感想を共有するkazuki matsumura
 
デザイナーさんでもできる Browsersync からはじめる作業効率化
デザイナーさんでもできる Browsersync からはじめる作業効率化デザイナーさんでもできる Browsersync からはじめる作業効率化
デザイナーさんでもできる Browsersync からはじめる作業効率化Kumiko SHIMIZU
 
Bootstrapを使ってみよう
Bootstrapを使ってみようBootstrapを使ってみよう
Bootstrapを使ってみようKawaji Masaki
 
WebGLことはじめ
WebGLことはじめWebGLことはじめ
WebGLことはじめKazuya Hiruma
 
MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方Kazuki Shibata
 
勉強会vol.16 Instapage
勉強会vol.16 Instapage勉強会vol.16 Instapage
勉強会vol.16 InstapageGIG inc.
 
デザイナーさんでもできる Browsersync からはじめる作業効率化・春
デザイナーさんでもできる Browsersync からはじめる作業効率化・春デザイナーさんでもできる Browsersync からはじめる作業効率化・春
デザイナーさんでもできる Browsersync からはじめる作業効率化・春Kumiko SHIMIZU
 
オープンソースプロジェクトのはじめかた@Creators MeetUp #25
オープンソースプロジェクトのはじめかた@Creators MeetUp #25オープンソースプロジェクトのはじめかた@Creators MeetUp #25
オープンソースプロジェクトのはじめかた@Creators MeetUp #25Erina Takei
 
ホームページ制作
ホームページ制作ホームページ制作
ホームページ制作yosuke mizusawa
 
KMC Font Project 1 - フォント製作・Typeface Designの基本
KMC Font Project 1 - フォント製作・Typeface Designの基本KMC Font Project 1 - フォント製作・Typeface Designの基本
KMC Font Project 1 - フォント製作・Typeface Designの基本k maztani
 
SVGの基本&活用法。SVGのメリットと事例を基礎から学ぶ。
SVGの基本&活用法。SVGのメリットと事例を基礎から学ぶ。SVGの基本&活用法。SVGのメリットと事例を基礎から学ぶ。
SVGの基本&活用法。SVGのメリットと事例を基礎から学ぶ。Daisuke Koshimizu
 
Middlemanによる静的サイト作成術
Middlemanによる静的サイト作成術Middlemanによる静的サイト作成術
Middlemanによる静的サイト作成術豊明 尾古
 
ソースコードをAAに変換するやつやってみた
ソースコードをAAに変換するやつやってみたソースコードをAAに変換するやつやってみた
ソースコードをAAに変換するやつやってみたTakahashi Koki
 
久しぶりにWebエンジニアのためのプロジェクションマッピング
久しぶりにWebエンジニアのためのプロジェクションマッピング久しぶりにWebエンジニアのためのプロジェクションマッピング
久しぶりにWebエンジニアのためのプロジェクションマッピングKatsuyaENDOH
 

Mais procurados (20)

PWAでタイマーを 作ってみた
PWAでタイマーを 作ってみたPWAでタイマーを 作ってみた
PWAでタイマーを 作ってみた
 
最近知ったBootstrapの注意点
最近知ったBootstrapの注意点最近知ったBootstrapの注意点
最近知ったBootstrapの注意点
 
ReactでCMSを作ったときにハマったこと
ReactでCMSを作ったときにハマったことReactでCMSを作ったときにハマったこと
ReactでCMSを作ったときにハマったこと
 
【2017早めの夏休み自由研究】SPAとサーバーレスについて
【2017早めの夏休み自由研究】SPAとサーバーレスについて【2017早めの夏休み自由研究】SPAとサーバーレスについて
【2017早めの夏休み自由研究】SPAとサーバーレスについて
 
Devops4cloudlbuilder ja
Devops4cloudlbuilder jaDevops4cloudlbuilder ja
Devops4cloudlbuilder ja
 
React Nativeでお絵描きしてみた
React Nativeでお絵描きしてみたReact Nativeでお絵描きしてみた
React Nativeでお絵描きしてみた
 
普段Reactを触ってる僕が Angularを触ってみた感想を共有する
普段Reactを触ってる僕が Angularを触ってみた感想を共有する普段Reactを触ってる僕が Angularを触ってみた感想を共有する
普段Reactを触ってる僕が Angularを触ってみた感想を共有する
 
デザイナーさんでもできる Browsersync からはじめる作業効率化
デザイナーさんでもできる Browsersync からはじめる作業効率化デザイナーさんでもできる Browsersync からはじめる作業効率化
デザイナーさんでもできる Browsersync からはじめる作業効率化
 
Bootstrapを使ってみよう
Bootstrapを使ってみようBootstrapを使ってみよう
Bootstrapを使ってみよう
 
WebGLことはじめ
WebGLことはじめWebGLことはじめ
WebGLことはじめ
 
MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方
 
勉強会vol.16 Instapage
勉強会vol.16 Instapage勉強会vol.16 Instapage
勉強会vol.16 Instapage
 
デザイナーさんでもできる Browsersync からはじめる作業効率化・春
デザイナーさんでもできる Browsersync からはじめる作業効率化・春デザイナーさんでもできる Browsersync からはじめる作業効率化・春
デザイナーさんでもできる Browsersync からはじめる作業効率化・春
 
オープンソースプロジェクトのはじめかた@Creators MeetUp #25
オープンソースプロジェクトのはじめかた@Creators MeetUp #25オープンソースプロジェクトのはじめかた@Creators MeetUp #25
オープンソースプロジェクトのはじめかた@Creators MeetUp #25
 
ホームページ制作
ホームページ制作ホームページ制作
ホームページ制作
 
KMC Font Project 1 - フォント製作・Typeface Designの基本
KMC Font Project 1 - フォント製作・Typeface Designの基本KMC Font Project 1 - フォント製作・Typeface Designの基本
KMC Font Project 1 - フォント製作・Typeface Designの基本
 
SVGの基本&活用法。SVGのメリットと事例を基礎から学ぶ。
SVGの基本&活用法。SVGのメリットと事例を基礎から学ぶ。SVGの基本&活用法。SVGのメリットと事例を基礎から学ぶ。
SVGの基本&活用法。SVGのメリットと事例を基礎から学ぶ。
 
Middlemanによる静的サイト作成術
Middlemanによる静的サイト作成術Middlemanによる静的サイト作成術
Middlemanによる静的サイト作成術
 
ソースコードをAAに変換するやつやってみた
ソースコードをAAに変換するやつやってみたソースコードをAAに変換するやつやってみた
ソースコードをAAに変換するやつやってみた
 
久しぶりにWebエンジニアのためのプロジェクションマッピング
久しぶりにWebエンジニアのためのプロジェクションマッピング久しぶりにWebエンジニアのためのプロジェクションマッピング
久しぶりにWebエンジニアのためのプロジェクションマッピング
 

Semelhante a Emscripten night "WebGL + WASM"

Three.js使ってみた
Three.js使ってみたThree.js使ってみた
Three.js使ってみた晴哉 谷口
 
スマホにおけるWebGL入門
スマホにおけるWebGL入門スマホにおけるWebGL入門
スマホにおけるWebGL入門Yohta Kanke
 
PWAを使ってWebXRコンテンツをオフラインで動くようにする手順について
PWAを使ってWebXRコンテンツをオフラインで動くようにする手順についてPWAを使ってWebXRコンテンツをオフラインで動くようにする手順について
PWAを使ってWebXRコンテンツをオフラインで動くようにする手順についてWheetTweet
 
20170719 GCPUG OSAKA #3
20170719 GCPUG OSAKA #320170719 GCPUG OSAKA #3
20170719 GCPUG OSAKA #3Yuya Ohara
 
GoImagickThumbnail
GoImagickThumbnailGoImagickThumbnail
GoImagickThumbnailYo Ya
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門miso- soup3
 
2017/09/02 CloudGaragere lease tour in okayama LT
2017/09/02 CloudGaragere lease tour in okayama LT2017/09/02 CloudGaragere lease tour in okayama LT
2017/09/02 CloudGaragere lease tour in okayama LTTakeshi Furusato
 
JavaScriptでCGを扱う WebGL紹介
JavaScriptでCGを扱う WebGL紹介JavaScriptでCGを扱う WebGL紹介
JavaScriptでCGを扱う WebGL紹介Isao Ebisujima
 
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話Katsunori Kanda
 
Glide活用イメージ紹介20220421
Glide活用イメージ紹介20220421Glide活用イメージ紹介20220421
Glide活用イメージ紹介20220421kazu_1803
 
Visual Studio 2017 で Azure Functions の開発
Visual Studio 2017 で Azure Functions の開発Visual Studio 2017 で Azure Functions の開発
Visual Studio 2017 で Azure Functions の開発Yasuaki Matsuda
 
VueとAWSAppSyncで始めるチャットアプリ開発
VueとAWSAppSyncで始めるチャットアプリ開発VueとAWSAppSyncで始めるチャットアプリ開発
VueとAWSAppSyncで始めるチャットアプリ開発Ryosuke Izumi
 
ShareWisをFirefoxで動かすためのSVG的とりくみ
ShareWisをFirefoxで動かすためのSVG的とりくみShareWisをFirefoxで動かすためのSVG的とりくみ
ShareWisをFirefoxで動かすためのSVG的とりくみKohei Kadowaki
 
若手エンジニアとして今年頑張ったこと
若手エンジニアとして今年頑張ったこと若手エンジニアとして今年頑張ったこと
若手エンジニアとして今年頑張ったことTsukasa Omukai
 
AWS SDK for Go を使って作ってみた話
AWS SDK for Go を使って作ってみた話AWS SDK for Go を使って作ってみた話
AWS SDK for Go を使って作ってみた話uchimanajet7
 

Semelhante a Emscripten night "WebGL + WASM" (18)

Three.js使ってみた
Three.js使ってみたThree.js使ってみた
Three.js使ってみた
 
スマホにおけるWebGL入門
スマホにおけるWebGL入門スマホにおけるWebGL入門
スマホにおけるWebGL入門
 
PWAを使ってWebXRコンテンツをオフラインで動くようにする手順について
PWAを使ってWebXRコンテンツをオフラインで動くようにする手順についてPWAを使ってWebXRコンテンツをオフラインで動くようにする手順について
PWAを使ってWebXRコンテンツをオフラインで動くようにする手順について
 
20170719 GCPUG OSAKA #3
20170719 GCPUG OSAKA #320170719 GCPUG OSAKA #3
20170719 GCPUG OSAKA #3
 
GoImagickThumbnail
GoImagickThumbnailGoImagickThumbnail
GoImagickThumbnail
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
 
2017/09/02 CloudGaragere lease tour in okayama LT
2017/09/02 CloudGaragere lease tour in okayama LT2017/09/02 CloudGaragere lease tour in okayama LT
2017/09/02 CloudGaragere lease tour in okayama LT
 
今更GWTで遊ぶぜ!
今更GWTで遊ぶぜ!今更GWTで遊ぶぜ!
今更GWTで遊ぶぜ!
 
JavaScriptでCGを扱う WebGL紹介
JavaScriptでCGを扱う WebGL紹介JavaScriptでCGを扱う WebGL紹介
JavaScriptでCGを扱う WebGL紹介
 
vImageのススメ
vImageのススメvImageのススメ
vImageのススメ
 
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
 
Glide活用イメージ紹介20220421
Glide活用イメージ紹介20220421Glide活用イメージ紹介20220421
Glide活用イメージ紹介20220421
 
Visual Studio 2017 で Azure Functions の開発
Visual Studio 2017 で Azure Functions の開発Visual Studio 2017 で Azure Functions の開発
Visual Studio 2017 で Azure Functions の開発
 
VueとAWSAppSyncで始めるチャットアプリ開発
VueとAWSAppSyncで始めるチャットアプリ開発VueとAWSAppSyncで始めるチャットアプリ開発
VueとAWSAppSyncで始めるチャットアプリ開発
 
ShareWisをFirefoxで動かすためのSVG的とりくみ
ShareWisをFirefoxで動かすためのSVG的とりくみShareWisをFirefoxで動かすためのSVG的とりくみ
ShareWisをFirefoxで動かすためのSVG的とりくみ
 
Webページで学ぶJavaScript2013 第0回
Webページで学ぶJavaScript2013 第0回Webページで学ぶJavaScript2013 第0回
Webページで学ぶJavaScript2013 第0回
 
若手エンジニアとして今年頑張ったこと
若手エンジニアとして今年頑張ったこと若手エンジニアとして今年頑張ったこと
若手エンジニアとして今年頑張ったこと
 
AWS SDK for Go を使って作ってみた話
AWS SDK for Go を使って作ってみた話AWS SDK for Go を使って作ってみた話
AWS SDK for Go を使って作ってみた話
 

Mais de 翔 石井

WebでのARには ハードル(闇)がいっぱいある話
WebでのARには ハードル(闇)がいっぱいある話WebでのARには ハードル(闇)がいっぱいある話
WebでのARには ハードル(闇)がいっぱいある話翔 石井
 
DotsLT AA Overview
DotsLT AA OverviewDotsLT AA Overview
DotsLT AA Overview翔 石井
 
Grimoire.js Community announcement June 20 2016
Grimoire.js Community announcement June 20 2016Grimoire.js Community announcement June 20 2016
Grimoire.js Community announcement June 20 2016翔 石井
 
WebGLで浮動小数点テクスチャを扱う話
WebGLで浮動小数点テクスチャを扱う話WebGLで浮動小数点テクスチャを扱う話
WebGLで浮動小数点テクスチャを扱う話翔 石井
 
jThree community kickoff
jThree community kickoffjThree community kickoff
jThree community kickoff翔 石井
 
jThree announcment 4-24
jThree announcment 4-24jThree announcment 4-24
jThree announcment 4-24翔 石井
 
jThree 0.10 alpha release
jThree 0.10 alpha releasejThree 0.10 alpha release
jThree 0.10 alpha release翔 石井
 
チョコ溶かす奴
チョコ溶かす奴チョコ溶かす奴
チョコ溶かす奴翔 石井
 
Dynamic lighting and dropping shadow in WebGL
Dynamic lighting and dropping shadow in WebGLDynamic lighting and dropping shadow in WebGL
Dynamic lighting and dropping shadow in WebGL翔 石井
 
Efficacy of deferred rendering in WebGL
Efficacy of deferred rendering in WebGLEfficacy of deferred rendering in WebGL
Efficacy of deferred rendering in WebGL翔 石井
 

Mais de 翔 石井 (10)

WebでのARには ハードル(闇)がいっぱいある話
WebでのARには ハードル(闇)がいっぱいある話WebでのARには ハードル(闇)がいっぱいある話
WebでのARには ハードル(闇)がいっぱいある話
 
DotsLT AA Overview
DotsLT AA OverviewDotsLT AA Overview
DotsLT AA Overview
 
Grimoire.js Community announcement June 20 2016
Grimoire.js Community announcement June 20 2016Grimoire.js Community announcement June 20 2016
Grimoire.js Community announcement June 20 2016
 
WebGLで浮動小数点テクスチャを扱う話
WebGLで浮動小数点テクスチャを扱う話WebGLで浮動小数点テクスチャを扱う話
WebGLで浮動小数点テクスチャを扱う話
 
jThree community kickoff
jThree community kickoffjThree community kickoff
jThree community kickoff
 
jThree announcment 4-24
jThree announcment 4-24jThree announcment 4-24
jThree announcment 4-24
 
jThree 0.10 alpha release
jThree 0.10 alpha releasejThree 0.10 alpha release
jThree 0.10 alpha release
 
チョコ溶かす奴
チョコ溶かす奴チョコ溶かす奴
チョコ溶かす奴
 
Dynamic lighting and dropping shadow in WebGL
Dynamic lighting and dropping shadow in WebGLDynamic lighting and dropping shadow in WebGL
Dynamic lighting and dropping shadow in WebGL
 
Efficacy of deferred rendering in WebGL
Efficacy of deferred rendering in WebGLEfficacy of deferred rendering in WebGL
Efficacy of deferred rendering in WebGL
 

Emscripten night "WebGL + WASM"