2019年6月の成果物を紹介する(シェーダーライブコーディングをやったぞ!)
はじめに
毎月やっている月毎に制作したシェーダーの紹介第5回目です。
今月はこちらの勉強会に登壇したこともあって、シェーダー以外にも成果物がありました!!
そちらも合わせて紹介します。今回は月末に成果物が偏ってしまったので、日付毎の紹介はしません。
KLab TECH Meetup #4で登壇した!
「シェーダーライブコーディングのすすめ」という題で、いかに面白くワクワクするものかという事を熱く語ってきました。
一生遊べると噂のシェーダーライブコーディングを布教するために趣味全開で話します!
— かねた (@kanetaaaaa) 2019年5月28日
ご興味がある方は是非聴きに来て下さい!!https://t.co/RB5rScY9oh#klab_meetup
さらに、登壇後の懇親会で先月から練習していたシェーダーライブコーディングを実演することもできました!!
昨日の勉強会の懇親会中に20分間のライブコーディングでシェーダーを作りました!
— かねた (@kanetaaaaa) 2019年6月19日
初めて人前でコーディングをしたんですが、めちゃくちゃ楽しかったです!!
(当日動かなかったpmod修正済です...)
差分
- q.x = abs(p.x ) - 10.;
+ q.x = abs(q.x ) - 10.;https://t.co/LH3TT4YzSU#klab_meetup pic.twitter.com/k61c3O2ZA1
先日の #klab_meetup の懇親会で行った20分のライブコーディング映像を公開しました!
— かねた (@kanetaaaaa) 2019年6月21日
実況解説は@gam0022 さんと@songofsaya_さんです
突発ながら面白い実況で場を盛り上げてくださって非常に楽しかったです!
動画でもこの空間の楽しさが伝わると思うので是非ご覧ください!https://t.co/1CDeXMfJlT
動画を見てもらえばわかるように大盛況で、この実演で見に来てくださった方々に確実にシェーダーライブコーディングの楽しさを伝えることができたと確信できました!
突発ながら実況解説で盛り上げてくださった我無氏とさやちゃんぐbot氏に感謝です!!
野次が飛んで来たり、煽られながらするライブコーディングは最高に面白かったです!
当日に行ったライブコーディングは実は完全即興ではなく、2日程前に試作品を作ってから数回通しで練習しています。
私自身ライブコーディングを始めてまだまだ日が浅いので完全即興となるとどんなルックにしようと考えたり、技量的な制約であまりかっこよくならないので、楽しんでもらうという意味では練習してきてよかったと思います。(当日は思わぬ不具合でライブ感を演出することもできました?)
が、いつかは完全即興で盛り上げてみたいです!
今回のパフォーマンスが少しでも楽しいと感じた人は、Tokyo Demo Festに参加しましょう、100倍楽しめることを保証します。
今回の発表内容を記事向けにしてこちらに投稿しているのでご興味がある方は是非初めて見てください。
レイマーチングを完全に理解できるかもしれないシェーダー
先ほどの登壇資料の途中に登場した解説図を作るために、シェーダーで作ったアニメーションです。
本日の資料のために眺めるだけでレイマーチングを完全に理解できるかもしれないシェーダーを作りました🤔https://t.co/Hia4I0Dgii#klab_meetup pic.twitter.com/kIuU4USxRJ
— かねた (@kanetaaaaa) 2019年6月19日
もともとはシェーダーで作る予定はなくて、良い作図ソフトが無いか、同じく登壇者の我無氏に聞いたところ
「かねたさんならGLSLで作図すると思った...:(」と煽られてしまったので泣きながら作りました。
結果的に掛かった時間は半日程で、発表後の受けも良かったためシェーダーで作ってよかったです!
発表中にも言いましたが、シェーダーライブコーディングはお勧めしますが、作図をシェーダーオンリーでやるのはお勧めしません!!
ちなみにアニメーションの情報はすべて timeLine
という関数に集約されています。
float sum = 0.0; float tl(float val, float offset, float range) { float im = sum + offset; float ix = im + range; sum += offset + range; return clamp((val - im) / (ix - im), 0.0, 1.0); } void timeLine(float time) { float t = tl(time, 1.0, 0.5); uvToP = mix(0.0, 1.0, eio(t)); t = tl(time, 1.0, 1.0); cameraPos = mix(vec3(0.0), vec3(5., 5., -2.), eio(t)); cameraTarget = vec3(0.0, 0.0, 5.); t = tl(time, 0.5, 1.0); raySphereAlpha = mix(0., 1., t); cornersAlpha = mix(0., 1., t); .......
tl
という関数は、4月に投稿したRemapという関数を変形したものです。
第一引数は現在時刻
第二引数は最後に定義したアニメーション終了から再生開始までの待ち時間
第三引数はアニメーションの幅(長さ)です
戻り値はそのアニメーションが再生開始(0.0)~再生終了(1.0)までの状態をfloatで返します。
tl
関数を使うたびに、そのアニメーションの終了時刻がグローバル変数の sum
に記録されていくので、それを使って関数内で良しなにアニメーションを制御しています。
tl
でどんどんアニメーションを定義していって、戻り値を使って位置情報等を合成すると今回のような複雑なアニメーションを簡単に定義できます。(読めるとは言っていない..)
VRChatで即興ライブコーディング
ブタジエン氏にお誘いをいただいて、VRChat内でシェーダーライブコーディングができるのかテストという名目で完全即興で行いました!
時間は正確に測っていませんが20分~30分ぐらいだった気がします。
(ポキャブラリー→ボキャブラリー)お誘いいただいて、数十分VRChat内でわいわい言いながらシェーダーライブコーディングやっていました!
— かねた (@kanetaaaaa) 2019年6月23日
やはり完全即興だと考える時間が多くて難しいですね🤔
ポキャブラリーを増やさねば...!https://t.co/DUAOHeiExE#glsl pic.twitter.com/erjqyb6EV9
地面と空がさみしいですね... 地面はチェッカーボードぐらい入れても良かったかなぁと今なら思います。
完全即興だとまだまだなのでこれからも精進します!
この会で普段twitterで私が眺めている強い人達と初めて会話ができてとても刺激になりました!
次の機会もあるかも?とのことなのでかっこいいシェーダーをライブコーディングできるように練習しておきます!!
さいごに
6月後半は激動の週でした。
登壇でいろいろな方とも交流が生まれて今後がとても楽しみです!
そしていろいろな方がレイマーチングやシェーダーライブコーディングに興味を持ってくれて楽しいです!
映像も良いですが、そろそろ音楽シェーダーに手を付けないといけないなとも感じています。(Houdiniもやりたい...)
7月は何を作るかまだ未定ですが、もし何か作ったら紹介します。