シェーダがあるでは無いか!
Maxを使ったインタラクティブアプリケーションの開発は、音や音楽とのインタラクションや、Ableton Liveとの連携、コンパイルしないで変更を加え続けられるリアルタイム性など、他には無い独自なメリットが色々とあると思います。
しかし3Dの描画に関しては、OpenGLの対応バージョンが2.0止まりな事もあり、openFrameworksやUnity等の開発環境と比べると少し見劣りします。とはいえ、プログラマブルシェーダを利用する事ができるので、可能性としては例えばSIGGRAPHの論文を実装して最新のレンダリングもできるのではないかな・・・!?
そこで今回はMaxの3D描画を強化するべく、jitterに関するGLSL周辺の調査とサンプルプログラム試してみました。
Maxにおけるシェーダについて
- JXSファイル:XML形式でMaxとやりとりを行うパラメーター等を記述するファイル。またGLSL等のシェーダをこのファイルに読込むか直接書く事でシェーダを利用する。.jxsファイルで保存したらjit.gl.shaderとjit.gl.slabでreadして使う。
- シェーダの種類:Vertex Shader / Geometry Shader / Fragment Shader が利用可能
- シェーダ言語:GLSL1.2 / CG / ARB
- 豊富なサンプル:Mac版のフォルダパス→ /Applications/Max 6.1/Cycling ’74/jitter-shaders Geometry ShaderやGPGPU、Audio処理用のシェーダも。ジオメトリシェーダを使う際は、プリミティブの種類がシェーダと合ってないと利用できないので注意。
- Cycling74 Forumでは、GLSL1.5(OpenGL3)そうとうのシェーダーが使えるという記述がありましたが、私の環境(Macbook Pro Retina / Mavericks)では利用できませんでした。
- jit.gl.pix:フラグメントシェーダのみに特化したオブジェクト。jit.gl.slabと互換。
jit.gl.pixでは使えないバーテックスとジオメトリが鍵になりそうな気がしますね。今後の記事でサンプルファイルなどを紹介できればと思います。
JXS / GLSLサンプルコード
<jittershader name="mrr-test-simple"> <description> test </description> <language name="glsl" version="1.2"> <program name="vp" type="vertex"> <![CDATA[ #version 120 void main(void) { vec4 clipCoord = gl_ModelViewProjectionMatrix *gl_Vertex; gl_Position = clipCoord; gl_FrontColor = gl_Color; vec3 ndc =clipCoord.xyz / clipCoord.w; gl_FrontSecondaryColor = vec4((ndc *0.5) +0.5,1); //gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; } ]]> </program> <program name="fp" type="fragment"> <![CDATA[ #version 120 void main() { //gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); gl_FragColor =mix(gl_Color,vec4(vec3(gl_SecondaryColor),1.),1); } ]]> </program> </language> </jittershader>
上記画像は、jit.gl.shaderに上記JXSファイルを読み込ませて、jit.gl.gridshapeとjit.gl.multiple で作ったモデルに対してアタッチして生成した画像です。glsl部分は、外部ファイルを読込む事も可能です。
参考サイト
- Your First Shader – サンプルパッチとJXSファイルが配布されており、入門として非常にわかりやすいです。
- OpenGL Shading Language’ – GLSL1.2の仕様書のようです。未読。
- OpenGL de プログラミング – 日本語で要点だけ解説されていてわかりやすい。
- 3Dグラフィックス・マニアックス – DirectXの話が中心ですがOpenGLも共通なレンダリングパイプラリンや、ジオメトリシェーダの使い方など、視覚化されていて理解しやすかった。
- 画像処理とコンピュータービジョンのためのGPU – 論文ですがサンプルコードなどもあります。