SlideShare une entreprise Scribd logo
1  sur  111
WAVE_WITH_GLSL
このスライドはComgGig2で発表
したものです。
こんにちは!
自己紹介
• RaspBerry Pi 持ってました
自己紹介
• RaspBerry Pi 持ってました
• はんだ付けに失敗しました
自己紹介
• RaspBerry Pi 持ってました
• はんだ付けに失敗しました
• 新しいの買いました
自己紹介
• RaspBerry Pi 持ってました
• はんだ付けに失敗しました
• 新しいの買いました
• Survoblasterしか入ってません
自己紹介
• C#に挫折
自己紹介
• C#に挫折
• ActionScript
自己紹介
• C#に挫折
• ActionScript + Stage3D
自己紹介
• C#に挫折
• ActionScript + Stage3D
• よりネイティブなコートが書きたい
自己紹介
• C#に挫折
• ActionScript + Stage3D
• よりネイティブなコートが書きたい
• →C++
自己紹介
• C#に挫折
• ActionScript + Stage3D
• よりネイティブなコートが書きたい
• →C++ SDL Opengl
自己紹介
• C#に挫折
• ActionScript + Stage3D
• よりネイティブなコートが書きたい
• →C++ SDL Opengl GLSL
自己紹介
• C#に挫折
• ActionScript + Stage3D
• よりネイティブなコートが書きたい
• →C++ SDL Opengl GLSL
WAVE_WITH_GLSL
WAVE_WITH_GLSL
GLSLで波をやってみよう
WAVE_WITH_GLSL
GLSLで波をやってみよう
WAVE_WITH_GLSL
GLSLで波をやってみよう
GLSLって何?
GLSLとは
• GLSL (OpenGL Shading Language) は
GLslangとしても知られ、C言語をベー
スとした高レベルシェーディング言語
である。これはアセンブリ言語やハー
ドウェアに依存した言語を使わないで、
開発者がグラフィックスパイプライン
を直接制御できるようにOpenGL ARB
で策定された。
• Wikipediaより引用
GLSLとは
• GLSL (OpenGL Shading Language)
はGLslangとしても知られ、C言語を
ベースとした高レベルシェーディング
言語である。これはアセンブリ言語や
ハードウェアに依存した言語を使わな
いで、開発者がグラフィックスパイプ
ラインを直接制御できるようにOpenGL
ARBで策定された。
• Wikipediaより引用
OpenGLって何?
OpenGLとは
• OpenGL(オープンジーエル、Open
Graphics Library)は、Khronosグルー
プが策定しているグラフィックスハー
ドウェアのアプリケーションプログラ
ミングインタフェース (API)。2次元・3
次元コンピュータグラフィックス両方
が扱える。
• Wikipediaより引用
OpenGLとは
• オープン仕様として公開され、幅広い
処理系に対応しているため、広く一般
に普及している。グラフィックデバイ
スとの直接通信を行なう抽象化レイ
ヤーAPIであるため、非常に高速に動作
し、高精度な3D画像を描画できる。有
償・無償の豊富な補助ライブラリがあ
るのも特色として挙げられる。
• Wikipediaより引用
まとめると
OpenGLとは
OpenGLとは
• 高品質なグラフィックスが
OpenGLとは
• 高品質なグラフィックスが
• 速く、
OpenGLとは
• 高品質なグラフィックスが
• 速く、
• フリーで、
OpenGLとは
• 高品質なグラフィックスが
• 速く、
• フリーで、
• いろいろなところで使える。
OpenGLとは
• 高品質なグラフィックスが
• 速く、
• フリーで、
• いろいろなところで使える。
• たまに違うバージョン使うとで自分が
使ってたAPIが非推奨でつらくなる
APIは簡単だよ!!
GLSLとは
• GLSL (OpenGL Shading Language) は
GLslangとしても知られ、C言語をベー
スとした高レベルシェーディン
グ言語である。これはアセンブリ言
語やハードウェアに依存した言語を使
わないで、開発者がグラフィックスパ
イプラインを直接制御できるように
OpenGL ARBで策定された。
• Wikipediaより引用
シェーディング言語って
何?
シェーディング言語とは
• 行列、ベクトルなどの型をサポートし
ている、グラフィックス向けの処理に
特化した言語。
シェーディング言語とは
• 行列、ベクトルなどの型をサポートし
ている、グラフィックス向けの処理に
特化した言語。
• GPU上で直接実行されるため、非常に
高速に動作する。
まとめると
GLSLとは
GLSLとは
• OpenGLで表示を行うときに、
何らかの効果をつけることができるもの
GLSLとは
• OpenGLで表示を行うときに、
何らかの効果をつけることができるもの
• GPUを使った高速な処理で、
リアルタイムに表示できる。
GLSLの仕組み
GLSLの仕組み
• 頂点シェーダー、フラグメントシェー
ダー、ジオメトリシェーダーというも
のがあります。
GLSLの仕組み
• 頂点シェーダー、フラグメントシェー
ダー、ジオメトリシェーダーというも
のがあります。
• 僕はジオメトリシェーダーほとんど
使ってないです。
GLSLの仕組み
• プログラム
• ↓ いろいろなデータ
• 頂点シェーダー
• ↓ いろいろなデータ
• フラグメントシェーダー
• ↓ 色情報
• 画面
いろいろなデータって
何?
いろいろなデータ
• 頂点情報
いろいろなデータ
• 頂点情報
• テクスチャ
いろいろなデータ
• 頂点情報
• テクスチャ
• 変換行列
いろいろなデータ
• 頂点情報
• テクスチャ
• 変換行列
•なんでも送れるよ
WAVE_WITH_GLSL
GLSLで波をやってみよう
波を作ってみる
• 頂点シェーダーでメッシュを波の形に
変形します。
波を作ってみる
• 頂点シェーダーでメッシュを波の形に
変形します。
• フラグメントシェーダーで反射とか
屈折を計算します
頂点シェーダーでの変形
頂点シェーダーでの変形
• まず細かく分割された平らなメッシュ
を作っておきます。
頂点シェーダーでの変形
• それぞれの頂点を、X座標とZ座標と時
間から計算していい感じの高さに移動
させ、メッシュを波の形に変形します。
頂点シェーダーでの変形
• それぞれの頂点を、X座標とZ座標と時
間から計算していい感じの高さに移動
させ、メッシュを波の形に変形します。
• 法線の向きはその頂点が含まれる面の
法線の平均で求めます。
どうやって変形するか
パーリンノイズ
パーリンノイズ
• Ken Perlinさんが作った偉いノイズ
何が偉いの?
パーリンノイズ
• 自然なノイズができる
パーリンノイズ
• 空間上の点Xでの乱数を取得する。
パーリンノイズ
• 空間上の点Xでの乱数を取得する。
• 空間内に格子があると考える。
パーリンノイズ
• 空間上の点Xでの乱数を取得する。
• 空間内に格子があると考える。
• それぞれの格子点からランダムな方向
に正規ベクトルが伸びていると考える
パーリンノイズ
• Xが含まれる領域を構成する格子点それ
ぞれに対し、(格子点→X)とさきほど
のランダムなベクトルとの内積をとる。
パーリンノイズ
• 適当に補完する。
• http://webstaff.itn.liu.se/~stegu/TNM022-
2005/perlinnoiselinks/perlin-noise-math-faq.html
パーリンノイズ
• 恥ずかしながら自分の実装は重すぎて
使い物にならなりませんでした
パーリンノイズ
• 恥ずかしながら自分の実装は重すぎて
使い物にならなりませんでした
• https://github.com/ashima/webgl-noise
から拝借させていただきました。
パーリンノイズ
• 好都合なことにこのノイズ生成方法は
任意個の引数から一つの値を返せます。
パーリンノイズ
• 好都合なことにこのノイズ生成方法は
任意個の引数から一つの値を返せます。
• 引数にX座標、Z座標、時間を与えると
いい感じの高さにしてくれました。
パーリンノイズ
• その部分だけを実装してみた。
フラグメントシェーダー
フラグメントシェーダー
• 反射、屈折用にスカイボックスを用意
する。
スカイボックスって何?
スカイボックス
• こういう画像から
スカイボックス
• こういうものを作る
フラグメントシェーダー
• 頂点シェーダーから、頂点座標と法線
を受け取る。
フラグメントシェーダー
• 頂点シェーダーから、頂点座標と法線
を受け取る。
• そこから光の反射、屈折ベクトルを計
算して、スカイボックスから色情報を
得て、元の色と混ぜた色を出力する。
フラグメントシェーダー
• 頂点シェーダーから、頂点座標と法線
を受け取る。
• そこから光の反射、屈折ベクトルを
計算して、スカイボックスから色情報
を得て、元の色と混ぜた色を出力する。
反射ベクトルの求め方
反射ベクトル
• 法線ベクトルをN、入射ベクトルをVと
置くと、
反射ベクトル
• 法線ベクトルをN、入射ベクトルをVと
置くと、
• 𝑁 × 2 × 𝑑𝑜𝑡(−𝑉, 𝑁) + 𝑉
• で求まる。
フラグメントシェーダー
• 頂点シェーダーから、頂点座標と法線
を受け取る。
• そこから光の反射、屈折ベクトルを
計算して、スカイボックスから色情報
を得て、元の色と混ぜた色を出力する。
屈折ベクトルの求め方
スネルの法則
スネルの法則
• この角度の時・・・
スネルの法則
•
sin(α)
sin(β)
=
𝑛2
𝑛1
• (𝑛1は空気の屈折率、𝑛2は水の屈折率)
• が成り立つ。
屈折ベクトル
• スネルの法則を使って計算する。
屈折ベクトル
• スネルの法則を使って計算する。
• 簡単のため、屈折率の比を
n (=
sin(β)
sin(α)
) と定義する
屈折ベクトル
• V、N、nから屈折ベクトルを求める
屈折ベクトル
• V、N、nから屈折ベクトルを求める
• cos(α) = 𝑑𝑜𝑡(−𝑉, 𝑁)
• cos(β) = 1 − 𝑛2(1 − 𝑐𝑜𝑠2(α))
屈折ベクトル
• V、N、nから屈折ベクトルを求める
• cos(α) = 𝑑𝑜𝑡(−𝑉, 𝑁)
• cos(β) = 1 − 𝑛2(1 − 𝑐𝑜𝑠2(α))
• 𝑉 × 𝑛 + n × cos α − cos β × 𝑁
と求まる
フラグメントシェーダー
• 反射光と屈折光をそれぞれ0.7倍して混
ぜた場合
フラグメントシェーダー
• フレネル効果を考えて比率を調整する。
フレネル効果って何?
フレネル効果
• 水面をのぞき込む角度によって、屈折
光がよく見えたり反射光がよく見えた
りする現象。
フレネルの式
フレネルの式
• 光が透過物の表面でどれだけ反射する
かを求める式。
フレネルの式
• こういう角度の時・・・
フレネルの式
•
sin 𝛼−𝛽
sin 𝛼+𝛽
2
+
tan 𝛼−𝛽
tan 𝛼+𝛽
2
2
• で求められる。
フレネルの式
• VとNから求める
フレネルの式
• VとNから求める
• cos α , cos β , 𝑛 から求まればよい
フレネルの式
• VとNから求める
• cos α , cos β , 𝑛 から求まればよい
• 展開すると・・・
フレネルの式
• VとNから求める
• cos α , cos β , 𝑛 から求まればよい
• 展開すると・・・
•
n×cos α −cos(β)
n×cos α +cos(β)
2
+
n×cos β −cos(α)
n×cos β +cos(α)
2
2
フラグメントシェーダー
• フレネル効果を実装した(屈折光は光
が減衰すると考えて0.5倍した)
フラグメントシェーダー
• カメラを波に合わせて移動
まとめ
まとめ
• GLSLを使うと簡単に効果を作れる
まとめ
• GLSLを使うと簡単に効果を作れる
• 可能性は無限大
まとめ
• GLSLを使うと簡単に効果を作れる
• 可能性は無限大
• GLSLの波はまだ中高生にはあまり届い
ていない?
友人Kとの会話
• 僕「画像処理もGLSLでやろう!」
友人Kとの会話
• 僕「画像処理もGLSLでやろう!」
• K「並行処理で常勝!」
友人Kとの会話
• 僕「画像処理もGLSLでやろう!」
• K「並行処理で常勝!」
• 僕「・・・」
みんなOpenGLやろう!
WAVE_WITH_GLSL
ご清聴ありがとうございました

Contenu connexe

Plus de 理玖 川崎

カードの取り合い
カードの取り合いカードの取り合い
カードの取り合い理玖 川崎
 
区間和剰余クエリ
区間和剰余クエリ区間和剰余クエリ
区間和剰余クエリ理玖 川崎
 
解説:デバッグ
解説:デバッグ解説:デバッグ
解説:デバッグ理玖 川崎
 
解説:歩くNPCたち
解説:歩くNPCたち解説:歩くNPCたち
解説:歩くNPCたち理玖 川崎
 
解説:エンブレム
解説:エンブレム解説:エンブレム
解説:エンブレム理玖 川崎
 
線形識別によるパターン認識
線形識別によるパターン認識線形識別によるパターン認識
線形識別によるパターン認識理玖 川崎
 
解説:サポーター
解説:サポーター解説:サポーター
解説:サポーター理玖 川崎
 
解説:おおきな数を作った
解説:おおきな数を作った解説:おおきな数を作った
解説:おおきな数を作った理玖 川崎
 
解説:吹奏楽部
解説:吹奏楽部解説:吹奏楽部
解説:吹奏楽部理玖 川崎
 

Plus de 理玖 川崎 (14)

RNNで頑張ろう
RNNで頑張ろうRNNで頑張ろう
RNNで頑張ろう
 
カードの取り合い
カードの取り合いカードの取り合い
カードの取り合い
 
石油
石油石油
石油
 
釣り
釣り釣り
釣り
 
区間和剰余クエリ
区間和剰余クエリ区間和剰余クエリ
区間和剰余クエリ
 
解説:ボス
解説:ボス解説:ボス
解説:ボス
 
解説:デバッグ
解説:デバッグ解説:デバッグ
解説:デバッグ
 
解説:貢物
解説:貢物解説:貢物
解説:貢物
 
解説:歩くNPCたち
解説:歩くNPCたち解説:歩くNPCたち
解説:歩くNPCたち
 
解説:エンブレム
解説:エンブレム解説:エンブレム
解説:エンブレム
 
線形識別によるパターン認識
線形識別によるパターン認識線形識別によるパターン認識
線形識別によるパターン認識
 
解説:サポーター
解説:サポーター解説:サポーター
解説:サポーター
 
解説:おおきな数を作った
解説:おおきな数を作った解説:おおきな数を作った
解説:おおきな数を作った
 
解説:吹奏楽部
解説:吹奏楽部解説:吹奏楽部
解説:吹奏楽部
 

Dernier

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 

Dernier (9)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 

WAVE_WITH_GLSL