シェーダー少しだけ触ってみた

背景

slackコミュニティでシェーダー芸というものを知り、簡単そうなので少しだけ触ってみた。 ゲーム製作のためにはある程度は理解しておきたいということもあったので。

やったこと

  • Unityのシェーダー講座を3種類くらいみた(youtube

  • 実際にGSLSで波動っぽいシェーダー書いてみた

  • twiglで公開した(URL消えてしまった。。。)

  • シェーダーグラフでディゾルブや縞縞線のサンプルを作り改変してブロック崩しに組み込んだ

成果

twiglで作ったもの: f:id:shakushi1985365:20201119235802g:plain

シェーダーグラフを使ったゲーム https://unityroom.com/games/n_block_break

GLSLはC言語に非常に似ている言語だが、一部特殊なものがあった。

Swizzling

ベクトルにアクセスするために使う演算子

(例)

vec4 someVec;
someVec.x + someVec.y;

初めは構造体やクラスにアクセスするのと同じだと思ったが、実は違っていて例えばこんな風にかける

vec4 someVec;
someVec.wzyx = vec4(1.0, 2.0, 3.0, 4.0); // Reverses the order.
someVec.zx = vec2(3.0, 5.0); // Sets the 3rd component of someVec to 3.0 and the 1st component to 5.0

https://www.khronos.org/opengl/wiki/Data_Type_(GLSL)#Swizzling

ドットの後に続けてメンバ(x,y,z,w)を好きな順番で、1-4の好きな数書くことができる(重複も可能) そして書いた数の次元のベクトルと同じように扱える。上記例ではsomeVecは4次元ベクトルだが、 someVec.zxには2次元ベクトルを代入できる。

今後

  • もっと色々な表現をできるようにする

  • URPでシェーダーをかけるようになる(あえてシェーダーグラフを使わない)https://tatsuya-koyama.com/devlog/unity/urp-colorful-shader/

  • レイマーチング使って表現してみる

  • SwizzlingみたいなのGLSLの記法をまとめてQiitaに記事を書くのもいいかも