Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
画像処理から始めるコンピュートシェーダ / Introduction to Image Pro...
Search
sotanmochi
September 23, 2019
Technology
2.8k
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.8k
Diminished Reality 入門 / Introduction to Diminished Reality
sotanmochi
2
9.6k
Unityでテクスチャにお絵描きするための線分描画アルゴリズムの話 / Line drawing algorithm using fragment shader
sotanmochi
2
4.1k
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
750
Research modeで取得した深度(Depth)データを可視化する / Depth data visualization for Hololens RS4 Research mode
sotanmochi
0
220
Other Decks in Technology
See All in Technology
生成AIで高い生産性を求められて、 悩み、乗り越えた話
mot_techtalk
2
130
自律型 AI をセキュアに実装!Gemini と MIG で作る動的コード実行環境
recruitengineers
PRO
1
230
"優秀な誰か"の下位互換にならないために
yut0naga1_fa
0
170
3つのアプローチで目指す チームを強くするAI駆動開発
thkt
0
140
生成AIと進める探索的データ分析(2026.10.03 第122回Tokyo.R勉強会)
tatamiya
2
1.4k
初対面のメンバーがチームを組み、Claude Codeでゼロからサービスをリリース
mkdev10
1
110
メルペイ 会計システム概要と歴史
mewuto
0
200
無理せず続ける、子育てエンジニアの学び
codmoninc
PRO
0
510
Cognition AI Japan - ウェビナー2_テストQA_運用監視
cogakira
0
110
しろおびから始める!ログ活用の第一歩
shumei_ito
0
770
Claude Code本は、どのように執筆チームで書かれたか
oikon48
1
340
AI時代だからこそ推したい!Gitコマンド再入門
munakata
0
160
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
The SEO Collaboration Effect
kristinabergwall1
1
590
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
590
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Building Adaptive Systems
keathley
44
3.2k
Git: the NoSQL Database
bkeepers
PRO
433
67k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
610
The Art of Programming - Codeland 2020
erikaheidi
57
14k
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