アドビの新しいオープンソースプロジェクトが公開されました。WebGL のシェーダを JavaScript で記述できるよう開発されたフレームワーク ShaderDSL.js です。
WebGL の場合は、シェーダーの記述に使用される言語は GLSL が一般的です。そのため、一般的な Web 開発者にとっては、WebGL を使うには、機能だけでなく、新しい言語を学ぶという手間も発生します。
また、複数のの言語を使って Web ページを記述するのは、メンテ等も大変そうです。そこで、JavaScript で WebGL のシェーダーが記述できたたらよいね!と思ったアドビが新しいフレームワークの開発に着手したというお話です。
(なぜアドビがこんなフレームワークを開発しているのか妄想してみると楽しいかもです)
ShaderDSL.js は、内部的に Gladder と RiverTrail を利用しています。Gladder は CoffeeScript で記述された WebGL フレームワークで、つまり、JavaScript が使いたいだけだったらわざわざ新しいフレームワークを用意する必要は無かったはずなのですが、お気に召さない点が在ったようです。
比べてみると、ShaderDSL.js では、関数呼び出しの記述が、より普通の JavaScript っぽくなっています。下はその例です。
var gla = new Gladder({canvas: "jscanvas"}); var program = new gla.Program({ vertexShader: function(attributes, uniforms) { var z = 0.1 * Math.sin(5.0 * attributes.position[0] - 5.0 * attributes.position[1] - 0.005 * uniforms.time); var v = vec4.createFrom(attributes.position[0], attributes.position[1], z, 1.0); var r = mat4.multiply(uniforms.transform, v, gl_Position); return { tc: attributes.texCoord }; }, fragmentShader: function(uniforms, varyings) { gl_FragColor = texture2D.create(uniforms.sampler, varyings.tc); }, uniforms: {transform: "mat4", time: "float", sampler: "sampler2D"}, attributes: {position: "vec2", texCoord: "vec2"}, }); continuation(gla, program);
また、RiverTrail が使われているので、GPU の活用も意識されていることがわかります。環境によっては、通常の JavaScript よりもずっと早く実行できるように設計されているようです。
コメントする