狠狠撸

狠狠撸Share a Scribd company logo
Real Time
              Image Processing
                        with OpenGL ES 2.0




13年3月24日日曜日
カメラ

          OpenGL ES テクスチャ

          Custom Fragment Shader

              CAEAGLLayer

                UIView



13年3月24日日曜日
カメラ

          OpenGL ES テクスチャ

          Custom Fragment Shader   ?爆速(GPU)
                                   ?多彩な表現
              CAEAGLLayer          ?無限の自由度

                UIView



13年3月24日日曜日
Fragment Shaderって何だよ(怒

              よくある画像処理プログラミング

          const int wide = 100;
          const int high = 100;
          unsigned char pixels[wide * high * 4] = {0};
          for(int y = 0 ; y < high ; ++y)
          {
             for(int x = 0 ; x < wide ; ++x)
             {
                unsigned char *color = pixels + 4 * (y * wide + x);
                color[0] = 32;
                color[1] = 12;
                color[2] = 0;
                color[3] = 120;
             }
          }




13年3月24日日曜日
Fragment Shaderって何だよ(怒


          const int wide = 100;
          const int high = 100;
          unsigned char pixels[wide * high * 4] = {0};
          for(int y = 0 ; y < high ; ++y)
          {
             for(int x = 0 ; x < wide ; ++x)
             {



                                  Fragment Shader!
              }
          }




13年3月24日日曜日
Basics
                                      浮動小数点精度
         precision highp float;

         uniform sampler2D videoInput;        ユーザー定義定数
         uniform float iGlobalTime;
         uniform vec2 iResolution;

         varying highp vec2 uv;
         void main()
         {
             vec2 unused1 = iResolution;
             float unused2 = iGlobalTime;

              gl_FragColor = texture2D(videoInput, uv);
         }
                 出力色                     画像         座標




13年3月24日日曜日
precision highp float;

          uniform sampler2D videoInput;
          uniform float iGlobalTime;
          uniform vec2 iResolution;

          varying vec2 uv;
          void main()
          {
              vec2 unused = iResolution;

              float stongth = sin(iGlobalTime) * 0.5 + 0.5;
              float waveu = sin((uv.y + iGlobalTime) * 20.0) * 0.5 * 0.1 * stongth;
              gl_FragColor = texture2D(videoInput, uv + vec2(waveu, 0));
          }




13年3月24日日曜日
precision highp float;

              uniform sampler2D videoInput;
              uniform float iGlobalTime;
              uniform vec2 iResolution;

              varying vec2 uv;

              void main(void)
              {
                  vec2 unused = iResolution;

                  float blurx = sin(iGlobalTime) * 0.5 + 0.5;
                  float offsetx = blurx * 0.05;

                  vec2 ruv = uv + vec2(offsetx, 0.0);
                  vec2 guv = uv;
                  vec2 buv = uv - vec2(offsetx, 0.0);

                  float r = texture2D(videoInput, ruv).r;
                  float g = texture2D(videoInput, guv).g;
                  float b = texture2D(videoInput, buv).b;

                  gl_FragColor = vec4(r, g, b, 1.0);
              }




13年3月24日日曜日
precision highp float;
          uniform sampler2D videoInput;
          uniform float iGlobalTime;
          uniform vec2 iResolution;
          varying vec2 uv;
          float gray(vec4 color)
          {
              return (color.r + color.g + color.b) * 0.33333333;
          }
          void main(void)
          {
              float unused = iGlobalTime;

              float pixelwide = 1.0 / iResolution.x;
              float pixelhigh = 1.0 / iResolution.y;

              vec4 c = texture2D(videoInput, uv);
              float c_value = gray(c);

              vec4   l   =   texture2D(videoInput,     uv   +   vec2(-pixelwide, 0.0));
              vec4   u   =   texture2D(videoInput,     uv   +   vec2(0.0, pixelhigh));
              vec4   r   =   texture2D(videoInput,     uv   +   vec2( pixelwide, 0.0));
              vec4   b   =   texture2D(videoInput,     uv   +   vec2(0.0, -pixelhigh));

              float difference = 0.0;

              difference       =   max(difference,   abs(c_value     -   gray(l)));
              difference       =   max(difference,   abs(c_value     -   gray(u)));
              difference       =   max(difference,   abs(c_value     -   gray(r)));
              difference       =   max(difference,   abs(c_value     -   gray(b)));

              difference = clamp(difference * 20.0, 0.0, 1.0);

              gl_FragColor = vec4(difference, difference, difference, 1.0);
          }
13年3月24日日曜日
Enjoy Shader!



     https://github.com/Ushio/RealTimeImageProcessing




13年3月24日日曜日

More Related Content

What's hot (20)

シェーダーしよっ☆ Let's play shaders!
シェーダーしよっ☆ Let's play shaders!シェーダーしよっ☆ Let's play shaders!
シェーダーしよっ☆ Let's play shaders!
Yuichi Higuchi
?
Quantum computer adder
Quantum computer adderQuantum computer adder
Quantum computer adder
RikuyaKubota
?
【罢别肠丑叠耻锄锄】第9回肠辞肠辞蝉2诲-虫勉强会「シェーダ书いてますか?」
【罢别肠丑叠耻锄锄】第9回肠辞肠辞蝉2诲-虫勉强会「シェーダ书いてますか?」【罢别肠丑叠耻锄锄】第9回肠辞肠辞蝉2诲-虫勉强会「シェーダ书いてますか?」
【罢别肠丑叠耻锄锄】第9回肠辞肠辞蝉2诲-虫勉强会「シェーダ书いてますか?」
nyagasuki
?
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
UnityTechnologiesJapan002
?
Ijpc2015 2-a ioiウエハース
Ijpc2015 2-a ioiウエハースIjpc2015 2-a ioiウエハース
Ijpc2015 2-a ioiウエハース
reew2n
?
x86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTx86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNT
takesako
?
【鲍苍颈迟测道场】ゲーム制作に使う数学を学习しよう
【鲍苍颈迟测道场】ゲーム制作に使う数学を学习しよう【鲍苍颈迟测道场】ゲーム制作に使う数学を学习しよう
【鲍苍颈迟测道场】ゲーム制作に使う数学を学习しよう
Unity Technologies Japan K.K.
?
Let's Simulate a Quantum Computer with Pretty Scala
Let's Simulate a Quantum Computer with Pretty ScalaLet's Simulate a Quantum Computer with Pretty Scala
Let's Simulate a Quantum Computer with Pretty Scala
Takatomo Torigoe
?
Qiskit Challenge 2021 Exercise1
Qiskit Challenge 2021 Exercise1Qiskit Challenge 2021 Exercise1
Qiskit Challenge 2021 Exercise1
FukiNakamura
?
iOSプログラマへ。HTML5 Canvasがおもしろい!
iOSプログラマへ。HTML5 Canvasがおもしろい!iOSプログラマへ。HTML5 Canvasがおもしろい!
iOSプログラマへ。HTML5 Canvasがおもしろい!
cocopon
?
Quantum computer adder grover
Quantum computer adder groverQuantum computer adder grover
Quantum computer adder grover
OishiKenta
?
骋尝厂尝によるシェーダーアートことはじめ
骋尝厂尝によるシェーダーアートことはじめ骋尝厂尝によるシェーダーアートことはじめ
骋尝厂尝によるシェーダーアートことはじめ
Yoichi Hirata
?
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
Unity Technologies Japan K.K.
?
Cocos2dshader devcon jp_20120621_en
Cocos2dshader devcon jp_20120621_enCocos2dshader devcon jp_20120621_en
Cocos2dshader devcon jp_20120621_en
Ricardo Quesada
?
积分要素の过渡応答性(惭础罢尝础叠)
积分要素の过渡応答性(惭础罢尝础叠)积分要素の过渡応答性(惭础罢尝础叠)
积分要素の过渡応答性(惭础罢尝础叠)
Tsuyoshi Horigome
?
3次元図形を厂肠丑别尘别で造ろう!
3次元図形を厂肠丑别尘别で造ろう!3次元図形を厂肠丑别尘别で造ろう!
3次元図形を厂肠丑别尘别で造ろう!
vi-iv
?
积分要素の応答性(惭础罢尝础叠)
积分要素の応答性(惭础罢尝础叠)积分要素の応答性(惭础罢尝础叠)
积分要素の応答性(惭础罢尝础叠)
Tsuyoshi Horigome
?
簡単!OpenGL ES 2.0フラグメントシェーダー
簡単!OpenGL ES 2.0フラグメントシェーダー簡単!OpenGL ES 2.0フラグメントシェーダー
簡単!OpenGL ES 2.0フラグメントシェーダー
Eiji Kamiya
?
2次遅れの积分要素の过渡応答性(惭础罢尝础叠)
2次遅れの积分要素の过渡応答性(惭础罢尝础叠)2次遅れの积分要素の过渡応答性(惭础罢尝础叠)
2次遅れの积分要素の过渡応答性(惭础罢尝础叠)
Tsuyoshi Horigome
?
シェーダーしよっ☆ Let's play shaders!
シェーダーしよっ☆ Let's play shaders!シェーダーしよっ☆ Let's play shaders!
シェーダーしよっ☆ Let's play shaders!
Yuichi Higuchi
?
Quantum computer adder
Quantum computer adderQuantum computer adder
Quantum computer adder
RikuyaKubota
?
【罢别肠丑叠耻锄锄】第9回肠辞肠辞蝉2诲-虫勉强会「シェーダ书いてますか?」
【罢别肠丑叠耻锄锄】第9回肠辞肠辞蝉2诲-虫勉强会「シェーダ书いてますか?」【罢别肠丑叠耻锄锄】第9回肠辞肠辞蝉2诲-虫勉强会「シェーダ书いてますか?」
【罢别肠丑叠耻锄锄】第9回肠辞肠辞蝉2诲-虫勉强会「シェーダ书いてますか?」
nyagasuki
?
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
UnityTechnologiesJapan002
?
Ijpc2015 2-a ioiウエハース
Ijpc2015 2-a ioiウエハースIjpc2015 2-a ioiウエハース
Ijpc2015 2-a ioiウエハース
reew2n
?
x86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTx86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNT
takesako
?
【鲍苍颈迟测道场】ゲーム制作に使う数学を学习しよう
【鲍苍颈迟测道场】ゲーム制作に使う数学を学习しよう【鲍苍颈迟测道场】ゲーム制作に使う数学を学习しよう
【鲍苍颈迟测道场】ゲーム制作に使う数学を学习しよう
Unity Technologies Japan K.K.
?
Let's Simulate a Quantum Computer with Pretty Scala
Let's Simulate a Quantum Computer with Pretty ScalaLet's Simulate a Quantum Computer with Pretty Scala
Let's Simulate a Quantum Computer with Pretty Scala
Takatomo Torigoe
?
Qiskit Challenge 2021 Exercise1
Qiskit Challenge 2021 Exercise1Qiskit Challenge 2021 Exercise1
Qiskit Challenge 2021 Exercise1
FukiNakamura
?
iOSプログラマへ。HTML5 Canvasがおもしろい!
iOSプログラマへ。HTML5 Canvasがおもしろい!iOSプログラマへ。HTML5 Canvasがおもしろい!
iOSプログラマへ。HTML5 Canvasがおもしろい!
cocopon
?
Quantum computer adder grover
Quantum computer adder groverQuantum computer adder grover
Quantum computer adder grover
OishiKenta
?
骋尝厂尝によるシェーダーアートことはじめ
骋尝厂尝によるシェーダーアートことはじめ骋尝厂尝によるシェーダーアートことはじめ
骋尝厂尝によるシェーダーアートことはじめ
Yoichi Hirata
?
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
Unity Technologies Japan K.K.
?
Cocos2dshader devcon jp_20120621_en
Cocos2dshader devcon jp_20120621_enCocos2dshader devcon jp_20120621_en
Cocos2dshader devcon jp_20120621_en
Ricardo Quesada
?
积分要素の过渡応答性(惭础罢尝础叠)
积分要素の过渡応答性(惭础罢尝础叠)积分要素の过渡応答性(惭础罢尝础叠)
积分要素の过渡応答性(惭础罢尝础叠)
Tsuyoshi Horigome
?
3次元図形を厂肠丑别尘别で造ろう!
3次元図形を厂肠丑别尘别で造ろう!3次元図形を厂肠丑别尘别で造ろう!
3次元図形を厂肠丑别尘别で造ろう!
vi-iv
?
积分要素の応答性(惭础罢尝础叠)
积分要素の応答性(惭础罢尝础叠)积分要素の応答性(惭础罢尝础叠)
积分要素の応答性(惭础罢尝础叠)
Tsuyoshi Horigome
?
簡単!OpenGL ES 2.0フラグメントシェーダー
簡単!OpenGL ES 2.0フラグメントシェーダー簡単!OpenGL ES 2.0フラグメントシェーダー
簡単!OpenGL ES 2.0フラグメントシェーダー
Eiji Kamiya
?
2次遅れの积分要素の过渡応答性(惭础罢尝础叠)
2次遅れの积分要素の过渡応答性(惭础罢尝础叠)2次遅れの积分要素の过渡応答性(惭础罢尝础叠)
2次遅れの积分要素の过渡応答性(惭础罢尝础叠)
Tsuyoshi Horigome
?

Viewers also liked (11)

静的リンクライフ?ラリ
静的リンクライフ?ラリ静的リンクライフ?ラリ
静的リンクライフ?ラリ
ushiostarfish _
?
Programmer @jc-21 2014/03/29
Programmer @jc-21 2014/03/29Programmer @jc-21 2014/03/29
Programmer @jc-21 2014/03/29
Yuki Higuchi
?
Blur based Weber–Fechner law
Blur based Weber–Fechner lawBlur based Weber–Fechner law
Blur based Weber–Fechner law
ushiostarfish _
?
La espiral de la tercera ley de kepler. Astronomía, Sistema Solar, TierraLa espiral de la tercera ley de kepler. Astronomía, Sistema Solar, Tierra
La espiral de la tercera ley de kepler. Astronomía, Sistema Solar, Tierra
Jorge Diderot Chelén Franulic
?
SWWDC2012_11_17
SWWDC2012_11_17SWWDC2012_11_17
SWWDC2012_11_17
ushiostarfish _
?
2013-07-12 (金) レッツゴーデベロッパー変真 前夜祭
2013-07-12 (金) レッツゴーデベロッパー変真 前夜祭2013-07-12 (金) レッツゴーデベロッパー変真 前夜祭
2013-07-12 (金) レッツゴーデベロッパー変真 前夜祭
tototti
?
いろいろ迷子のレンダラー Lost Child Render
いろいろ迷子のレンダラー Lost Child Renderいろいろ迷子のレンダラー Lost Child Render
いろいろ迷子のレンダラー Lost Child Render
ushiostarfish _
?
Metal Fluid Simulation
Metal Fluid SimulationMetal Fluid Simulation
Metal Fluid Simulation
ushiostarfish _
?
ARC環境で メモリリークを起こす 7つの方法
ARC環境で メモリリークを起こす 7つの方法ARC環境で メモリリークを起こす 7つの方法
ARC環境で メモリリークを起こす 7つの方法
ushiostarfish _
?
ハレとケ展 現場のUnity
ハレとケ展 現場のUnityハレとケ展 現場のUnity
ハレとケ展 現場のUnity
ushiostarfish _
?
静的リンクライフ?ラリ
静的リンクライフ?ラリ静的リンクライフ?ラリ
静的リンクライフ?ラリ
ushiostarfish _
?
Programmer @jc-21 2014/03/29
Programmer @jc-21 2014/03/29Programmer @jc-21 2014/03/29
Programmer @jc-21 2014/03/29
Yuki Higuchi
?
Blur based Weber–Fechner law
Blur based Weber–Fechner lawBlur based Weber–Fechner law
Blur based Weber–Fechner law
ushiostarfish _
?
La espiral de la tercera ley de kepler. Astronomía, Sistema Solar, TierraLa espiral de la tercera ley de kepler. Astronomía, Sistema Solar, Tierra
La espiral de la tercera ley de kepler. Astronomía, Sistema Solar, Tierra
Jorge Diderot Chelén Franulic
?
2013-07-12 (金) レッツゴーデベロッパー変真 前夜祭
2013-07-12 (金) レッツゴーデベロッパー変真 前夜祭2013-07-12 (金) レッツゴーデベロッパー変真 前夜祭
2013-07-12 (金) レッツゴーデベロッパー変真 前夜祭
tototti
?
いろいろ迷子のレンダラー Lost Child Render
いろいろ迷子のレンダラー Lost Child Renderいろいろ迷子のレンダラー Lost Child Render
いろいろ迷子のレンダラー Lost Child Render
ushiostarfish _
?
ARC環境で メモリリークを起こす 7つの方法
ARC環境で メモリリークを起こす 7つの方法ARC環境で メモリリークを起こす 7つの方法
ARC環境で メモリリークを起こす 7つの方法
ushiostarfish _
?
ハレとケ展 現場のUnity
ハレとケ展 現場のUnityハレとケ展 現場のUnity
ハレとケ展 現場のUnity
ushiostarfish _
?

Similar to Real timeimageprocessing (18)

Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Atsushi Tadokoro
?
Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化
Katsutoshi Makino
?
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
Fixstars Corporation
?
プログラミング技法特论第8回
プログラミング技法特论第8回プログラミング技法特论第8回
プログラミング技法特论第8回
Noritada Shimizu
?
2012 03-24-titanium plusquicktigame2d
2012 03-24-titanium plusquicktigame2d2012 03-24-titanium plusquicktigame2d
2012 03-24-titanium plusquicktigame2d
Hiroshi Oyamada
?
DeNA TechCon2016 360VR Live Streaming
DeNA TechCon2016 360VR Live StreamingDeNA TechCon2016 360VR Live Streaming
DeNA TechCon2016 360VR Live Streaming
Takeyuki Ogura
?
础搁コンテンツ作成勉强会:颁#ではじめよう翱辫别苍颁痴(カラートラッキング编)
础搁コンテンツ作成勉强会:颁#ではじめよう翱辫别苍颁痴(カラートラッキング编)础搁コンテンツ作成勉强会:颁#ではじめよう翱辫别苍颁痴(カラートラッキング编)
础搁コンテンツ作成勉强会:颁#ではじめよう翱辫别苍颁痴(カラートラッキング编)
Takashi Yoshinaga
?
础苍诲谤辞颈诲で画像処理リベンジ
础苍诲谤辞颈诲で画像処理リベンジ础苍诲谤辞颈诲で画像処理リベンジ
础苍诲谤辞颈诲で画像処理リベンジ
Daisuke Takai
?
狠狠撸
狠狠撸狠狠撸
狠狠撸
Takefumi MIYOSHI
?
厂颈惫3顿で楽しむゲームとメディアアート开発
厂颈惫3顿で楽しむゲームとメディアアート开発厂颈惫3顿で楽しむゲームとメディアアート开発
厂颈惫3顿で楽しむゲームとメディアアート开発
Ryo Suzuki
?
2012 03-03-titanium plusquicktigame2d
2012 03-03-titanium plusquicktigame2d2012 03-03-titanium plusquicktigame2d
2012 03-03-titanium plusquicktigame2d
Hiroshi Oyamada
?
Cocos2d x-sprite3d
Cocos2d x-sprite3dCocos2d x-sprite3d
Cocos2d x-sprite3d
aktsk
?
Media Art II 2013 第5回:openFrameworks Addonを使用する
Media Art II 2013 第5回:openFrameworks Addonを使用するMedia Art II 2013 第5回:openFrameworks Addonを使用する
Media Art II 2013 第5回:openFrameworks Addonを使用する
Atsushi Tadokoro
?
CG2013 02
CG2013 02CG2013 02
CG2013 02
shiozawa_h
?
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
UnityTechnologiesJapan002
?
KINECT WITH ROS
KINECT WITH ROSKINECT WITH ROS
KINECT WITH ROS
Katsunori Kanda
?
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Atsushi Tadokoro
?
Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化
Katsutoshi Makino
?
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
Fixstars Corporation
?
プログラミング技法特论第8回
プログラミング技法特论第8回プログラミング技法特论第8回
プログラミング技法特论第8回
Noritada Shimizu
?
2012 03-24-titanium plusquicktigame2d
2012 03-24-titanium plusquicktigame2d2012 03-24-titanium plusquicktigame2d
2012 03-24-titanium plusquicktigame2d
Hiroshi Oyamada
?
DeNA TechCon2016 360VR Live Streaming
DeNA TechCon2016 360VR Live StreamingDeNA TechCon2016 360VR Live Streaming
DeNA TechCon2016 360VR Live Streaming
Takeyuki Ogura
?
础搁コンテンツ作成勉强会:颁#ではじめよう翱辫别苍颁痴(カラートラッキング编)
础搁コンテンツ作成勉强会:颁#ではじめよう翱辫别苍颁痴(カラートラッキング编)础搁コンテンツ作成勉强会:颁#ではじめよう翱辫别苍颁痴(カラートラッキング编)
础搁コンテンツ作成勉强会:颁#ではじめよう翱辫别苍颁痴(カラートラッキング编)
Takashi Yoshinaga
?
础苍诲谤辞颈诲で画像処理リベンジ
础苍诲谤辞颈诲で画像処理リベンジ础苍诲谤辞颈诲で画像処理リベンジ
础苍诲谤辞颈诲で画像処理リベンジ
Daisuke Takai
?
厂颈惫3顿で楽しむゲームとメディアアート开発
厂颈惫3顿で楽しむゲームとメディアアート开発厂颈惫3顿で楽しむゲームとメディアアート开発
厂颈惫3顿で楽しむゲームとメディアアート开発
Ryo Suzuki
?
2012 03-03-titanium plusquicktigame2d
2012 03-03-titanium plusquicktigame2d2012 03-03-titanium plusquicktigame2d
2012 03-03-titanium plusquicktigame2d
Hiroshi Oyamada
?
Cocos2d x-sprite3d
Cocos2d x-sprite3dCocos2d x-sprite3d
Cocos2d x-sprite3d
aktsk
?
Media Art II 2013 第5回:openFrameworks Addonを使用する
Media Art II 2013 第5回:openFrameworks Addonを使用するMedia Art II 2013 第5回:openFrameworks Addonを使用する
Media Art II 2013 第5回:openFrameworks Addonを使用する
Atsushi Tadokoro
?
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
UnityTechnologiesJapan002
?

Real timeimageprocessing

  • 1. Real Time Image Processing with OpenGL ES 2.0 13年3月24日日曜日
  • 2. カメラ OpenGL ES テクスチャ Custom Fragment Shader CAEAGLLayer UIView 13年3月24日日曜日
  • 3. カメラ OpenGL ES テクスチャ Custom Fragment Shader ?爆速(GPU) ?多彩な表現 CAEAGLLayer ?無限の自由度 UIView 13年3月24日日曜日
  • 4. Fragment Shaderって何だよ(怒 よくある画像処理プログラミング const int wide = 100; const int high = 100; unsigned char pixels[wide * high * 4] = {0}; for(int y = 0 ; y < high ; ++y) { for(int x = 0 ; x < wide ; ++x) { unsigned char *color = pixels + 4 * (y * wide + x); color[0] = 32; color[1] = 12; color[2] = 0; color[3] = 120; } } 13年3月24日日曜日
  • 5. Fragment Shaderって何だよ(怒 const int wide = 100; const int high = 100; unsigned char pixels[wide * high * 4] = {0}; for(int y = 0 ; y < high ; ++y) { for(int x = 0 ; x < wide ; ++x) { Fragment Shader! } } 13年3月24日日曜日
  • 6. Basics 浮動小数点精度 precision highp float; uniform sampler2D videoInput; ユーザー定義定数 uniform float iGlobalTime; uniform vec2 iResolution; varying highp vec2 uv; void main() { vec2 unused1 = iResolution; float unused2 = iGlobalTime; gl_FragColor = texture2D(videoInput, uv); } 出力色 画像 座標 13年3月24日日曜日
  • 7. precision highp float; uniform sampler2D videoInput; uniform float iGlobalTime; uniform vec2 iResolution; varying vec2 uv; void main() { vec2 unused = iResolution; float stongth = sin(iGlobalTime) * 0.5 + 0.5; float waveu = sin((uv.y + iGlobalTime) * 20.0) * 0.5 * 0.1 * stongth; gl_FragColor = texture2D(videoInput, uv + vec2(waveu, 0)); } 13年3月24日日曜日
  • 8. precision highp float; uniform sampler2D videoInput; uniform float iGlobalTime; uniform vec2 iResolution; varying vec2 uv; void main(void) { vec2 unused = iResolution; float blurx = sin(iGlobalTime) * 0.5 + 0.5; float offsetx = blurx * 0.05; vec2 ruv = uv + vec2(offsetx, 0.0); vec2 guv = uv; vec2 buv = uv - vec2(offsetx, 0.0); float r = texture2D(videoInput, ruv).r; float g = texture2D(videoInput, guv).g; float b = texture2D(videoInput, buv).b; gl_FragColor = vec4(r, g, b, 1.0); } 13年3月24日日曜日
  • 9. precision highp float; uniform sampler2D videoInput; uniform float iGlobalTime; uniform vec2 iResolution; varying vec2 uv; float gray(vec4 color) { return (color.r + color.g + color.b) * 0.33333333; } void main(void) { float unused = iGlobalTime; float pixelwide = 1.0 / iResolution.x; float pixelhigh = 1.0 / iResolution.y; vec4 c = texture2D(videoInput, uv); float c_value = gray(c); vec4 l = texture2D(videoInput, uv + vec2(-pixelwide, 0.0)); vec4 u = texture2D(videoInput, uv + vec2(0.0, pixelhigh)); vec4 r = texture2D(videoInput, uv + vec2( pixelwide, 0.0)); vec4 b = texture2D(videoInput, uv + vec2(0.0, -pixelhigh)); float difference = 0.0; difference = max(difference, abs(c_value - gray(l))); difference = max(difference, abs(c_value - gray(u))); difference = max(difference, abs(c_value - gray(r))); difference = max(difference, abs(c_value - gray(b))); difference = clamp(difference * 20.0, 0.0, 1.0); gl_FragColor = vec4(difference, difference, difference, 1.0); } 13年3月24日日曜日
  • 10. Enjoy Shader! https://github.com/Ushio/RealTimeImageProcessing 13年3月24日日曜日