はなちるのマイノートスマートフォン用の表示で見るはなちるのマイノートUnityをメインとした技術ブログ。shaderTweetはじめに今回はComputeShaderでチャンネル変換してみようという記事になります!ComputeShaderとはGPUを計算のために使ってみようというもので、計算を爆速化できることが多いです。最近画像処理に少しハマっていて、この100本ノックをComputeShaderで実装してみようかなと密かに計画しています。はなちるのマイノート今回はその第一問であるチャンネル変換というものをしてみようと思います。はじめにチャンネル変換コード解説さいごに参考チャンネル変換これは単純にRGBをBGRの順番になるように入れ替えています。ちなみにRは赤,Gは緑,Bは青のことです。OpenCVではこのBGRがよく使われるみたいですね。コードComputeShaderはこんな感じ。Texture[id.xy].w);}C#でのCPU側のコードはこちら。初回というわけで少しComputeShaderについて説明を加えます。GPUでどんなように処理されているかを簡単にするために、入力画像を512*512と仮定しましょう。ピクセル(RGBA:float[4])が512*512個あるということです。GPUは並列処理が得意なので、今回も並列処理を活用して高速化をはかっています。この並列処理にはスレッド,スレッドグループの二つがとても重要になっています。スレッドを決まった単位でまとめたものをスレッドグループと呼び,以下の画像のような関係にあります。Docs今回の場合は、一つのピクセルの色の計算に一つのスレッドを用いていて、合計512*512個のスレッドを利用して並列で計算させています。それを一つのスレッドグループに8*8*1個のスレッド,64(=512/8)*64*1個のスレッドグループを用意して実現させているとうわけですね。実際の書き方は是非参考に貼ったリンクをみていただけると分かりやすいと思います。さいごにおそらく100問目まではやらないと思いますが、飽きるまではこれ関係の投稿が続くかもしれません。興味がある方は是非お付き合いください。相変わらず画像処理100本ノックをしています。はてなブログProUnityをメインとした技術ブログ。(9)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。