なんだ変態か……でお馴染みの Shadertoy! 猛者たちが集結した Competition 2016
みんな! 頭がおかしくなる準備はできたかな?
今回ご紹介するのは、恐らくこのサイトをご覧のみなさんならご存知かと思いますが、Shadertoy という GLSL 作品をシェアできるサイトの、コンペティションイベントのページです。
つい先日開催されていたもので、大きくわけて三部門のそれぞれで、作品を募るコンペとなっていました。
最終的には、それぞれの部門で獲得したポイントが最も多いユーザーが優勝(?)ということになるのかと思いますが、相変わらず一般人とは純度の異なるシェーダ野郎たちの血が、湧き踊るどころか吹き出してしまったかのような状態になっています。
非常にハイエンドなマシンスペックを求める側面があるかと思いますので、その点には注意してご覧いただくことをおすすめします。その代わり、作品の凄さは WebGL + GLSL というフィールドでは世界最高峰と言っていいと思います。
全体的に意味不明です(褒め言葉)
Shadertoy を知っている、いわゆる一般的な感覚をお持ちの皆様からすると、Shadertoy はいかにも 魔窟 という雰囲気だと思います。
私は普段から WebGL や GLSL に慣れ親しんでいるつもりですが……なかなか Shadertoy レベルにまでは到達できてないなあと感じます。それだけ、真面目な話世界中から優れたシェーダを愛するコーダーたちが集っているサイトでもあるのですね。
今回のイベントは、そんな Shadertoy をプラットフォームに、Competition 2016 と銘打って開催されたもので、NVIDIA がスポンサーになっていたので告知をご覧になった方も多いかもしれません。
今回は、そんなコンペに出展された作品の中から、上位作品を中心にいくつかご紹介しようと思います。
第一部門:Size Coding!
こちらの部門は読んでそのままの意味です。
要は、テンプレートとなるシェーダのビジュアルを 1% のしきい値の誤差範囲内で収めつつ、いかに短いコードで書けるかを競うチャレンジです。
もともとのビジュアルと 1px も誤差なく同じ絵を出すとなると流石に無理だろと思いましたが、1% までは誤差が許容されるルールになっていたわけですね。
テンプレートと同じビジュアルを維持することが条件のチャレンジなので、キャプチャ画像は一枚だけ紹介。
普段から GLSL でレイマーチングやレイトレーシングを実現しているならまだしも、上の画像が既に GLSL 初心者を完全に置き去りにする出来栄えなのは、ここでは触れてはいけません。
GLSL のフラグメントシェーダは、DirectX で言うとピクセルシェーダに相当します。二次元的な平面上で駆動するシェーダながら、そこに三次元空間を作り出し、レイを飛ばすなどして立体形状を描画しているのですね。
描画結果を見ればわかるかと思いますが、影やノイズ、AO なども適用されていて、シンプルですがなかなか見事なレンダリング結果だと思います。これを、外観を損なわないように最適化していくチャレンジ……最初から、いきなりレベル高すぎです!
コンペのページには、エントリーした各作品へのリンクがありますので、それぞれの作品がどのようにコードを最適化したのか。そういった視点で比べてみるというのも面白いかもしれません。
第二部門:Pretty Pixels!
こちらはいわゆるいつもの Shadertoy っぽい感じの作品たちがシノギを削った部門です。
まあ、そうですね。
頭おかしいですね!
Shadertoy はサウンドの入力対応や、キーの入力対応など、作品を作るための豊富な機能を備えています。
似たようなシェーダアート系のサイトだと GLSL Sandbox がありますが、あちらはビジュアル面のみがサポートされている感じですね。Shadertoy にはより多くの機能が揃っていると考えてもらっていいでしょう。
一度オフスクリーンに書き出したシーンを利用したり、サウンドファイルを読み込んで流しながら波形を取ったりといったことができるため、表現力は段違いに高いものになります。
それを使いこなせるだけの技術も、同時に必要となるわけですが。
シェーダだけでシーンをレンダリングする Shadertoy に見られるようなシェーダアート系の作品は、初心者からするとまったくもって意味のわからない世界だと思います。
ここでそれを一言で解説することは難しいですが、二次元平面上の XY 座標についてはシェーダの実行中に取得することができますから、それを元にして三次元空間を作り、あくまでもロジカルに、プログラマブルにシーンを描いていく感じですね。
いわゆるレイトレーシングなどの技術を応用したものがベースになっていますが、一朝一夕で理解するのはちょっと難しいジャンルかもしれません。
全体的に、さすがとしか形容しようのない、ハイレベルな作品が多くなっています。
はじめにちょっと触れましたが、あまりスペックの高くないマシンでは、閲覧そのものがちょっと難しい作品もあると思います。GLSL は確かに高速ですが、それでも、異常に大量の計算を行う場合もあるわけで、マシンに掛かる負荷はちょっと大きめです。
できる限り、ハイエンドなデスクトップ PC などを利用して閲覧してみてください。シーンが負荷で処理落ちしていると、作品の魅力もまた、落ちてしまうと思いますので。
第三部門:Shader Game!
さて、最後の部門となる第三部門は、シェーダだけでゲームを実装しようという、まさに意味不明なお題を掲げて行われました。
そして、意味不明なたくさんの作品が出展されています。
ぜひ、みんなで「頭おかしい YO!」と叫びましょう。
FPS を GLSL だけで表現するとか、どうなんですかね。思いつくのは自由ですが、実際にやってしまうところが、どうもおかしいですね!
前述のふたつの部門についてもかなりハイレベルでしたが、もうこの第三部門はどこから突っ込んだらいいやらわからなくなる、そんな部門となってます。
あの名作バブルボブルも、Shadertoy という神界に住まうシェーダ職人に掛かれば「Stubble Bobble」として生まれ変わります。
第三部門で 1st をゲットした作品の場合は、あの名作アクションを再現しているだけでなく、ブラウン管風の微妙なエフェクトまで追加しているというこだわりっぷり。
実際にキーの入力を受け付けることで操作することもできるようになっており、完成度云々とか、そういう次元ではなくなってます。
これらの作品の全ては、Shadertoy 内で無制限に閲覧が可能となっていますので、当たり前ですが、コードの全文を漏れ無く見ることが可能です。(理解できるとは言ってない)
シェーダ神界に行ってみたい!
Shadertoy には、日夜、神界のシェーダ職人たちによって新たな作品が投下され続けています。
日本人にも、もちろん彼らと肩を並べられるようなシェーダ職人はいらっしゃいますが、私なんかではとても太刀打ちできそうにありません(笑)
しかし、単純にこういうイベントって、楽しいですよね。やっていることは、一部の人から見たら単なる才能の無駄遣いなのかもしれません。しかしそれでも、こうして GLSL で全力で遊んで、腕を磨いて競って、楽しい気分になれることは、私から見るととても素晴らしいことのように感じられました。
ちょっとテンションが上がりすぎて、いつになく雑な文体でお届けする感じになってしまいました。
この独特なシェーダ界隈の雰囲気は誰にでも馴染むものではないかもしれませんが、非常に天才的な、素晴らしいコードに満ちていることは確かです。
興味のある方は、ぜひともご覧になってみてください。
個人的には、最高に楽しい気持ちになれました。作品を出展されたみなさん、企画を起こした運営の方々に、感謝したいと思います。