【つぶやきGLSL】スポットライト風のアニメ


ツイッターでGLSLを書くという試み「#つぶやきGLSL」があります。

266文字という短いコードで何とかしようという楽しい遊びです。

今回描いたものは結構手こずったので出来上がるまでの流れと、文字数削減の方法を残しておきます。

 

ツールとして twigl.app を使わせていただきます。

 

過去のコードなどは以下に置いてます。

最初の一歩

classic モードで適当に書き始めます。

アイデアとしては3方向からRGBのライトが照らす感じです。

 

各色のライトの範囲を円形に絞りつつ、内積(角度)を色の強さにしてます。

色々試す

geek モードに変えて文字数を減らしながら色々変えて確かめます。

今回は時間変数を使って光を左右に振ってみます。

 

twigl にはアニメーション gif を書き出す機能もあるのですが、今回は表現される色が多く gif に向いてないのでサンプルは静止画か動画にします。

文字数を減らす

geeker モードで表現を変えつつ文字数を減らしていく。

最初は楽しいけど、減らせるところが見つからなかくなったりすると辛い。

文字数削減の変形で以下のような面白い見た目になったりもしましたが、文字数の関係上削られることになりました。

完成

1文字でも多く削っていき何とか 266 文字に収める。

言うのは簡単だけど無理なものは無理だし、妥協と革新のせめぎあいになる。

以下から改行やスペースを除くとちょうど266文字になった。

文字数削減

ベクトルはスウィズル演算子を使って短縮できることが多いです。

出来るだけ新規の宣言を避け、他のベクトルと一緒に定義したいところ。

vec3 であれば 0, 1 のほかに1つ数値を定義できます。

 

ベクトル初期化は書かなくてもいい。

 

normalize のような長いビルドイン関数は3回以上使うなら #define も考える。

無理矢理1文字減らすこともできる。

 

出来た色の代入も多少縮めて書ける。

 

回転行列は長いですが float 宣言を新規で書かなければ多少短くできます。

 

最後に、できるだけ宣言を少なくすることを意識します。

引数もなくていいものはなくす、グローバル変数に入れる。

float f の7文字や vec3 v の5文字を減らすために+4文字くらいで別方法が取れないか模索しているとどんどん楽しくなります。

ああ、PCと一緒に脳が焼ける。


コメントを残す

メールアドレスが公開されることはありません。