SlideShare a Scribd company logo
1 of 22
はじめての
こんぴゅうとしぇえだあ
〜Compute Shaderに入門してみた話〜
沼
わたしはだあれ?
名前:めーぷる
職種:Unityエンジニア
Twitter:@MapleSyrupCS6
ブログ:めーぷるのおもちゃばこ
担当カラー:あおとぱんだ
こんぴゅうとしぇえだあってなに?
GPUを使用して単純処理を並列化し、大量の演算を
高速に実行するために用いられる。
→つまりCPUでやると重たい処理を軽くできるもの
こんぴゅうとしぇえだあってなに?
よく例えられるのが、1人の天才と100人の凡人という話
1人の天才(CPU) 100人の凡人(GPU)
こんぴゅうとしぇえだあってなに?
1人100おばあちゃん 1人1おばあちゃん
疲れたおばあちゃん(ただし100人いる)をおんぶするというだけのタスク
こんぴゅうとしぇえだあってなに?
1人100おばあちゃん 1人1おばあちゃん
こっちのほうが負荷がすくないし早い↓↓
こんぴゅうとしぇえだあってなに?
ただし...コンピュートシェーダーの向いてるタスクは
ふつうのシェーダーと一緒で、すべてが独立して計算可能なもの
→あたえられたデータのみでみちびきだせるもの
まわりのことを一切気にせずに自分だけで計算を終えれるもの
いま助けているおばあちゃんしかわ
からない。
さっき助けてたおばあちゃん?
だれそれ?
となりにいるおばあちゃん?
なにそれ?
さすが凡人じ
ゃ...
なにができるの?
凹さん edomさん
パーティクルを扱うものが多そう
https://twitter.com/edo_m18/status/12017522463099084
81?s=20
https://www.youtube.com/watch?v=G-
4k8Zur7zY&feature=youtu.be
なにができるの?
他にも
・物理シミュレーション
・流体シミュレーション
・群シミュレーション
などに使われたりする
なんでシェーダーっていうの?
描画をあつかうシェーダーっていうものがあって
それを扱うGPUの膨大な演算能力が目をつけられて
描画を抜いた「計算のためだけのシェーダー」がうまれた
なんでシェーダーっていうの?
コンピュートシェーダー
= GPGPUのためのシェーダー
なんでシェーダーっていうの?
GPGPU
(General-Purpose computing on Graphics Processing Units)
→GPUを画面描画以外の汎用的な計算につかうこと
こんぴゅうとしぇえだで作ってみた
https://youtu.be/1QxyXRxmdMo
こんぴゅうとしぇえだで作ってみた
2箇所コンピュートシェーダーを使った
1.パーティクルの動き
2.頂点の取得
こんぴゅうとしぇえだで作ってみた
1.パーティクルの動き
パーティクルをコンピュートシェーダーで扱う方法は
edomさんの記事を参考にした↓↓
Compute ShaderとGraphics.DrawMeshInstancedIndirectを使ったレンダリングを理解する
こんぴゅうとしぇえだで作ってみた
パーティクルがキューブの方
向に飛んでいくように計算
Particle.compute
こんぴゅうとしぇえだで作ってみた
2.頂点の取得
・範囲内の頂点からパーティクルを出したい
・範囲内の頂点の色を変えたい
→頂点はふつう数万から数十万ある
こんぴゅうとしぇえだで作ってみた
GetVertex.cs GetVertex.Compute
頂点シェーダー
Particle.cs
触れてるか
どうかの判
定
頂点カラー
の変更
頂点の格納
メッシュの
頂点データ
人オブジェ
クトの位置
触れてる頂
点の配列
Particle.compute
パーティクル
の計算
GetVertex.Compute
こんぴゅうとしぇえだで作ってみた
・まずはCPUで実装してみる
→慣れてないところからいきなりコンピュートシェーダーで実装しようと
すると混乱してくるので、C#でまず実装したい内容を書いてそれをコンピ
ュートシェーダーに書き換えるというやりかたが混乱しにくい
・あきらめないこころ
→だんだんわけがわからなくなってきますがあきらめないこころがだいじ
コツ?
どうやって入門するの?
おすすめ記事など
IKD-Memberさん
https://qiita.com/IKD-
Member/items/f424b3e53a6482ca
b884
edomさん
https://edom18.hateblo.jp/entry/2019/11/25/0
81232
IndeieVisualLabさん
https://twitter.com/mattatz/status/12
54353324423307264
どうやって入門するの?
めーぷるのおもちゃばこ
っていうブログおすすめ
【Unity】Compute Shader入門①
〜オブジェクトを実際に動かしてみて完全に理解〜
https://www.wwwmaplesyrup-cs6.work/entry/MapleComputeTutorial1
おわり

More Related Content

What's hot

点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】Unity Technologies Japan K.K.
 
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!Unity Technologies Japan K.K.
 
「3Dゲームをおもしろくする技術 」のいろいろな読み方
「3Dゲームをおもしろくする技術 」のいろいろな読み方「3Dゲームをおもしろくする技術 」のいろいろな読み方
「3Dゲームをおもしろくする技術 」のいろいろな読み方Kouji Ohno
 
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計UnityTechnologiesJapan002
 
アニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdfアニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdfinfinite_loop
 
MAYAで作ったアニメーションをUnityに取り込んで動かしてみるの巻
MAYAで作ったアニメーションをUnityに取り込んで動かしてみるの巻MAYAで作ったアニメーションをUnityに取り込んで動かしてみるの巻
MAYAで作ったアニメーションをUnityに取り込んで動かしてみるの巻poko ponmaru
 
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...KLab Inc. / Tech
 
【Unity道場Houdini編】Houdini Engine とプロシージャル法
【Unity道場Houdini編】Houdini Engine とプロシージャル法【Unity道場Houdini編】Houdini Engine とプロシージャル法
【Unity道場Houdini編】Houdini Engine とプロシージャル法UnityTechnologiesJapan002
 
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介Drecom Co., Ltd.
 
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミングUnity Technologies Japan K.K.
 
【Unity】より良い表現のためのライティング戦略
【Unity】より良い表現のためのライティング戦略【Unity】より良い表現のためのライティング戦略
【Unity】より良い表現のためのライティング戦略Takayasu Beharu
 
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しようUnity Technologies Japan K.K.
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介torisoup
 
UniTask入門
UniTask入門UniTask入門
UniTask入門torisoup
 
Mayaカメラデータunityインストール
MayaカメラデータunityインストールMayaカメラデータunityインストール
Mayaカメラデータunityインストール小林 信行
 
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移まべ☆てっく運営
 
ゲームの仕様書を書こうまとめ
ゲームの仕様書を書こうまとめゲームの仕様書を書こうまとめ
ゲームの仕様書を書こうまとめSugimoto Chizuru
 
UnityでUI開発を高速化した件
UnityでUI開発を高速化した件UnityでUI開発を高速化した件
UnityでUI開発を高速化した件Grenge, Inc.
 

What's hot (20)

点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
 
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
 
「3Dゲームをおもしろくする技術 」のいろいろな読み方
「3Dゲームをおもしろくする技術 」のいろいろな読み方「3Dゲームをおもしろくする技術 」のいろいろな読み方
「3Dゲームをおもしろくする技術 」のいろいろな読み方
 
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
 
アニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdfアニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdf
 
MAYAで作ったアニメーションをUnityに取り込んで動かしてみるの巻
MAYAで作ったアニメーションをUnityに取り込んで動かしてみるの巻MAYAで作ったアニメーションをUnityに取り込んで動かしてみるの巻
MAYAで作ったアニメーションをUnityに取り込んで動かしてみるの巻
 
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
 
【Unity道場Houdini編】Houdini Engine とプロシージャル法
【Unity道場Houdini編】Houdini Engine とプロシージャル法【Unity道場Houdini編】Houdini Engine とプロシージャル法
【Unity道場Houdini編】Houdini Engine とプロシージャル法
 
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
 
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
 
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
 
GPU最適化入門
GPU最適化入門GPU最適化入門
GPU最適化入門
 
【Unity】より良い表現のためのライティング戦略
【Unity】より良い表現のためのライティング戦略【Unity】より良い表現のためのライティング戦略
【Unity】より良い表現のためのライティング戦略
 
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
 
UniTask入門
UniTask入門UniTask入門
UniTask入門
 
Mayaカメラデータunityインストール
MayaカメラデータunityインストールMayaカメラデータunityインストール
Mayaカメラデータunityインストール
 
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
 
ゲームの仕様書を書こうまとめ
ゲームの仕様書を書こうまとめゲームの仕様書を書こうまとめ
ゲームの仕様書を書こうまとめ
 
UnityでUI開発を高速化した件
UnityでUI開発を高速化した件UnityでUI開発を高速化した件
UnityでUI開発を高速化した件
 

はじめてのこんぴゅうとしぇえだあ〜ComputeShaderに入門してみた話〜

Editor's Notes

  1. 過去のデータとかを使うものはダメで、あたえられたデータのみでみちびきだせるもの(となりのピクセルとかって定数にできない、そういうのが絡んでくると向いてない) まわりのことを一切気にせずに自分だけで計算を終えれるもの
  2. じゃあ具体的にどういうことができるの?
  3. じゃあ具体的にどういうことができるの?
  4. GPU(グラフィックス・プロセッシング・ユニット)はもともと画面の描画に最適化されたプロセッサーでした。ディスプレイの各ピクセルの色を計算するために大量のデータに対して並列に単純な計算ができるよう設計されていたためです。近年になってGPUの演算性能の向上に伴い、GPUを画面描画以外の汎用的な計算に使おうという流れが出てきました。これをGPGPU(ジーピージーピーユー)といいます。現在、GPGPUは物理シミュレーションや機械学習、暗号通貨の発掘などさまざまな用途で計算に使われています。 コンピュートシェーダーはGPGPUのためのシェーダーで、GPUの演算性能を活かして高速に数値計算をするために追加されました。一般的な3DグラフィックスAPIの他のシェーダーと比較すると次のような用途の違いがあります。
  5. そのGPGPUを行うために作られた書き方の様式のひとつがコンピュートシェーダー もともとはピクセルを扱うためのGPUを使用することから、名残でシェーダーという名前がついている? コンピュートシェーダーはGPGPUのためのシェーダーで、GPUの演算性能を活かして高速に数値計算をするために追加されました。
  6. GPU(グラフィックス・プロセッシング・ユニット)はもともと画面の描画に最適化されたプロセッサーでした。ディスプレイの各ピクセルの色を計算するために大量のデータに対して並列に単純な計算ができるよう設計されていたためです。近年になってGPUの演算性能の向上に伴い、GPUを画面描画以外の汎用的な計算に使おうという流れが出てきました。これをGPGPU(ジーピージーピーユー)といいます。現在、GPGPUは物理シミュレーションや機械学習、暗号通貨の発掘などさまざまな用途で計算に使われています。 コンピュートシェーダーはGPGPUのためのシェーダーで、GPUの演算性能を活かして高速に数値計算をするために追加されました。一般的な3DグラフィックスAPIの他のシェーダーと比較すると次のような用途の違いがあります。
  7. こういう悪役いますよね、通ったとこの花全部枯らしてくみたいな そもそも頂点って数万から数十マンあるよね→処理負荷が高い
  8. IndieVisualLabいま無料配布されてまっせ