Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
画像処理から始めるコンピュートシェーダ / Introduction to Image Pro...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
sotanmochi
September 23, 2019
Technology
2.7k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
画像処理から始めるコンピュートシェーダ / Introduction to Image Processing using Compute Shader
UniteEve2のLT登壇資料
sotanmochi
September 23, 2019
More Decks by sotanmochi
See All by sotanmochi
URP/HDRPを使ったVRM対応アプリの開発方法 / VRM Importer Extension
sotanmochi
0
1.7k
Diminished Reality 入門 / Introduction to Diminished Reality
sotanmochi
2
9.5k
Unityでテクスチャにお絵描きするための線分描画アルゴリズムの話 / Line drawing algorithm using fragment shader
sotanmochi
2
4k
MagicOnionでマルチプレイゲームを作ってみる / Introduction to developing multiplayer games using MagicOnion
sotanmochi
1
2.6k
SmartRig Bipedを使ってみよう / Introduction to SmartRig Biped
sotanmochi
0
3.5k
VRMを使ったAR/MR撮影ツールを試作開発してみた話 / Prototype of Mobile Mixed Capture
sotanmochi
0
1.8k
リアルとバーチャルの融合によって越えられない壁を壊す / TechCafe vol.8 LT
sotanmochi
0
300
ユニティちゃんと鬼ごっこができるMRゲームと戦術位置解析システム / Mixed reality game and tactical position analysis
sotanmochi
0
720
Research modeで取得した深度(Depth)データを可視化する / Depth data visualization for Hololens RS4 Research mode
sotanmochi
0
210
Other Decks in Technology
See All in Technology
GitHub Copilot 最新アップデート – 「一歩先」の実践活用術
moulongzhang
5
1.7k
AWS Security Agent といっしょに脅威モデリングをやってみよう
amarelo_n24
1
210
いまさら聞けない「仕様駆動開発入門」 〜AI活用時代の開発プロセスを考える〜
findy_eventslides
2
200
起点・思考・出力で分解する 〜PM業務の自動化設計〜
kazu_kichi_67
1
1.1k
本当の”仕事”を手放せる未来が見えた
mu7889yoon
0
130
アラート調査向けAIエージェントの本番導入とその後/AI Agents for Alert Investigation: Production Deployment and After
taddy_919
0
140
データレイクの「見えない問題」を可視化する
sansantech
PRO
1
200
2026年6月23日 Syncable Tech + Start Python Club にて
hamukazu
0
150
螺旋型キャリアの生存戦略 / kinoko-conf2026
rakus_dev
1
980
2026-06-24_人とAIの責務分離に基づく開発プロセスの提案.pdf
takahiromatsui
0
120
Comment regagner la souveraineté de vos données tout en étant payé grâce à Nostr !
rlifchitz
0
200
ぼっちではじめた登壇が「51名」「241件」の発信に化けた
subroh0508
1
310
Featured
See All Featured
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
The Curse of the Amulet
leimatthew05
2
13k
Code Reviewing Like a Champion
maltzj
528
40k
Ruling the World: When Life Gets Gamed
codingconduct
0
260
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
400
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Tell your own story through comics
letsgokoyo
1
960
Ethics towards AI in product and experience design
skipperchong
2
310
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
630
Testing 201, or: Great Expectations
jmmastey
46
8.2k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
440
Transcript
2019/09/23 Soichiro Sugimoto sotan (@sotanmochi) 画像処理から始めるコンピュートシェーダ
2 自己紹介 杉本 宗一郎(Soichiro Sugimoto) sotan (@sotanmochi) xR系Unityエンジニア xRに関する応用研究・プロトタイプ開発 ・DR(Diminished Reality:隠消現実感)の研究
・VR/ARのアプリケーション開発
コンピュートシェーダで画像処理を実装した例 カメラ画像をイラスト風に変換するフィルター(試作開発中) 3 Before After 動画1:https://youtu.be/gxmsS83Uens 動画2:https://youtu.be/5ffZ56EAlXA
コンピュートシェーダ GPUをグラフィックス描画以外の汎用的な目的で活用できるようにする仕組み (GPGPUのための仕組み) 大量のデータを並列処理する汎用的なプロセッサとしてGPUを活用できる 通常のレンダリングパイプラインと切り離された独立したシェーダ (ラスタライザなどのグラフィックス処理が走らない) HDRPのポストエフェクトやVisual Effect Graphのパーティクルに使われている 4
コンピュートシェーダで画像処理を実装する ピクセル単位の並列化によって画像処理を高速化 5 逐次処理のイメージ 並列処理のイメージ
コンピュートシェーダで画像処理を実装する 基本的な考え方 ・全体の処理の流れはCPU側で実装 ・ピクセルごとの処理(データを並列処理する部分)はGPU側で実装 ・画像全体に対する処理の終了を待つ箇所はカーネルを分けて実装 6
実装例のコードを見ながら 基本的な考え方やポイントを確認していきます (※アルゴリズムの中身は気にしない) 7
コンピュートシェーダで画像処理を実装する カメラ画像をイラスト風に変換するフィルター処理の実装例 8 バイラテラルフィルタ エッジ検出 乗算(BF and エッジ) BF+エッジ+コントラスト調整 バイラテラルフィルタ
エッジ検出(ソーベルフィルタ) 乗算(BF and エッジ) コントラスト調整(トーンカーブ)
コンピュートシェーダで画像処理を実装する 全体の処理の流れはCPU側(C#スクリプト)で実装 9 バイラテラルフィルタ エッジ検出(ソーベルフィルタ) 乗算(BF and エッジ) コントラスト調整(トーンカーブ) フィルタ処理を順番に呼び出している
コンピュートシェーダで画像処理を実装する 全体の処理の流れはCPU側(C#スクリプト)で実装 10 バイラテラルフィルタ エッジ検出(ソーベルフィルタ) 乗算(BF and エッジ) コントラスト調整(トーンカーブ) フィルタ処理を順番に呼び出している
処理の複雑さの都合により 詳細なコードは 実際の処理と逆順で見ていきます
コンピュートシェーダで画像処理を実装する 全体の処理の流れはCPU側(C#スクリプト)で実装 11 バイラテラルフィルタ エッジ検出(ソーベルフィルタ) 乗算(BF and エッジ) コントラスト調整(トーンカーブ) データをセットした後、コンピュートシェーダ(指定したカーネル)を実行する
コンピュートシェーダで画像処理を実装する ピクセルごとの処理(データを並列処理する部分)はGPU側で実装 12 バイラテラルフィルタ エッジ検出(ソーベルフィルタ) 乗算(BF and エッジ) コントラスト調整(トーンカーブ) 1つのグループにつき16x16=256並列で
実行される(並列数の上限はデバイスによる) 1つのピクセルに対する処理
コンピュートシェーダの並列処理のモデル 画像出典: Direct Compute – Bring GPU Computing to the
Mainstream https://www.nvidia.com/content/GTC/documents/1015_GTC09.pdf 13
コンピュートシェーダの並列処理のモデル 画像出典: Direct Compute – Bring GPU Computing to the
Mainstream https://www.nvidia.com/content/GTC/documents/1015_GTC09.pdf 14 1つのグループにつき THREADS_X × THREADS_Y の並列数で 実行される(並列数の上限はデバイスによる)
コンピュートシェーダで画像処理を実装する 全体の処理の流れはCPU側(C#スクリプト)で実装 15 バイラテラルフィルタ エッジ検出(ソーベルフィルタ) 乗算(BF and エッジ) コントラスト調整(トーンカーブ) Thread
Groups X = 80 Thread Groups Y = 45 指定したスレッドグループ数でコンピュートシェーダ(カーネル)を実行する 1つのグループにつき16x16=256並列で実行される時 ・X方向のスレッド数:16 ・Y方向のスレッド数:16 1280x720の解像度の画像全体を処理するために必要な グループ数 ・X方向:1280 / 16 = 80 ・Y方向: 720 / 16 = 45
コンピュートシェーダで画像処理を実装する ピクセルごとの処理(データを並列処理する部分)はGPU側で実装 16 バイラテラルフィルタ エッジ検出(ソーベルフィルタ) 乗算(BF and エッジ) コントラスト調整(トーンカーブ) 全てのスレッドの中から
実行中のスレッドを識別できるID (画像のピクセル位置に相当) 1つのピクセルに対する処理
コンピュートシェーダで画像処理を実装する 画像全体に対する処理の終了を待つ箇所はカーネルを分けて実装 (グローバル同期(異なるスレッドグループ間の同期)が必要なため) 17 バイラテラルフィルタ エッジ検出(ソーベルフィルタ) 乗算(BF and エッジ) コントラスト調整(トーンカーブ)
エッジ検出処理では、グレースケールに変換後、フィルタ処理を実行している
コンピュートシェーダで画像処理を実装する 画像全体に対する処理の終了を待つ箇所はカーネルを分けて実装 (グローバル同期(異なるスレッドグループ間の同期)が必要なため) 18 バイラテラルフィルタ エッジ検出(ソーベルフィルタ) 乗算(BF and エッジ) コントラスト調整(トーンカーブ)
BFの反復はCPU側で制御 データをセットして実行 × N回
コンピュートシェーダで画像処理を実装する カメラ画像をイラスト風に変換するフィルター処理の実装例 19 バイラテラルフィルタ エッジ検出 乗算(BF and エッジ) BF+エッジ+コントラスト調整 バイラテラルフィルタ
エッジ検出(ソーベルフィルタ) 乗算(BF and エッジ) コントラスト調整(トーンカーブ)
まとめ コンピュートシェーダはGPUを汎用的な並列処理に活用できる仕組み ピクセル単位の並列化によって画像処理を高速化できる 基本的な考え方 ・全体の処理の流れはCPU側で実装 ・ピクセルごとの処理(データを並列処理する部分)はGPU側で実装 ・画像全体に対する処理の終了を待つ箇所はカーネルを分けて実装 20
ありがとうございました
Appendix
コンピュートシェーダを始めるための参考資料 Unity Graphics Programming vol.1 第2章 ComputeShader入門 https://indievisuallab.stores.jp/items/59edf11ac8f22c0152002588 Hello, DirectCompute
https://www.slideshare.net/dasyprocta/hello-direct-compute Direct Compute – Bring GPU Computing to the Mainstream https://www.nvidia.com/content/GTC/documents/1015_GTC09.pdf Compute Shader Magic ~あなたの描画エンジンでコンピュートシェーダを活用するアイデア(CEDEC 2013) https://cedil.cesa.or.jp/cedil_sessions/view/1002 23
コンピュートシェーダで画像処理を実装? なぜコンピュートシェーダを使う? 画像処理ならピクセルシェーダ(フラグメントシェーダ)で実装できるのでは? 24
コンピュートシェーダの利点 コンピュートシェーダを使った演算にはピクセルシェーダに比べて 以下のような利点がある ・出力先リソースの任意の位置に書き込み可能 ・データ共有やスレッド間同期のメカニズム ・指定した数のスレッドを明示的に起動でき、パフォーマンスを最適化できる ・描画パイプラインと無関係なので、コードの保守が簡単 (参考:「DirectX11 3Dプログラミング [改訂版]
第2部21章(p.332)」) 25
コンピュートシェーダで画像処理を実装する 画像全体に対する処理の終了を待つ箇所はカーネルを分けて実装 (グローバル同期(異なるスレッドグループ間の同期)が必要なため) 26 バイラテラルフィルタ エッジ検出(ソーベルフィルタ) 乗算(BF and エッジ) コントラスト調整(トーンカーブ)
エッジ検出処理では、グレースケールに変換後、フィルタ処理を実行している
コンピュートシェーダで画像処理を実装する ピクセルごとの処理(データを並列処理する部分)はGPU側で実装 27 バイラテラルフィルタ エッジ検出(ソーベルフィルタ) 乗算(BF and エッジ) コントラスト調整(トーンカーブ) 周囲のピクセル値を使って計算
コンピュートシェーダで画像処理を実装する 画像全体に対する処理の終了を待つ箇所はカーネルを分けて実装 (グローバル同期(異なるスレッドグループ間の同期)が必要なため) 28 バイラテラルフィルタ エッジ検出(ソーベルフィルタ) 乗算(BF and エッジ) コントラスト調整(トーンカーブ)
BFの反復はCPU側で制御 データをセットして実行 × N回
コンピュートシェーダで画像処理を実装する ピクセルごとの処理(データを並列処理する部分)はGPU側で実装 29 周囲のピクセル値を使って計算
END