パーティクルで文字を描いて徐々に崩す
はじめに
初級者が3DCGプログラミングに挑む記事の第四回です。今回は、パーティクルを使った文字表示についての話です。
以前の記事に書いたように、3DCGのモデルに地理院タイルを利用しています。その利用の際、出典の記載が必要となるのですが、忘れてしまうことがよくあります。そこで、忘れないように、動画の冒頭に出典記載を表示することにしました。
文字の表示には、パーティクルを使用して派手な演出をしたいと思います。
開発環境
開発言語はC言語、CGライブラリはOpenGLです。今回は、OpenGLの機能として、Transform Feedbackと、Compute Shader(およびSSBO)とを使用しました。
Transform Feedbackは、OpenGL(WebGL)に特化した古く面倒くさい技術です。
Compute Shaderは、GPUによる並列処理のための技術です。SSBOは、読み書き可能な記憶領域のための技術です。
Transform Feedback版
Transform Feedbackでは、変数をテクスチャに格納します。そのテクスチャは、読込み用と書込み用で別々に用意しなければなりません。そのため、変数が増えると管理が面倒くさくなります。
これを避けるため、実装では、粒子の位置のテクスチャだけを用意し、その位置情報を基に粒子を動かしています。
Compute Shader+SSBO版
SSBOでは変数の配列を使用することができます。そこで、実装では、位置と速度との配列を用意し、それらを積分して粒子を動かしています。
応用
noteで良さそうな手本を見つけたので真似てみました。
パーティクルの貼付けが甘かったせいか、ポロポロと剥がれ落ちています。
まとめ
Compute ShaderとSSBOの組み合わせは、Transform Feedbackに比べると格段に便利です。
Compute Shaderは、本来、私の古いCPU(Intel Gen.7)には未対応なのですが、Mesaの拡張機能により使用可能になっていました。
単精度の演算が理論値で約100GFLOPSもあるので、色々と夢が広がる技術です。
肝心の文字表示なのですが、パッとしないので、もっと良い方法を模索したいです。
また、今回のParticleを発展させてParticle Systemを構築したいです。
次回
近頃、日中の気温が高くなってきました。これに伴い気温に対する関心も高くなっているでしょう。気温を題材にすればビュー数を稼げる気がします。
そこで、次はアメダスの情報を地図上に表示したいと思います。
おまけ
立体視(赤青メガネ、VRゴーグル、3DS)の動画です。
「ニンテンドー3DSカメラ」向け動画ファイル
※再生方法や注意点等は以前の記事に記載しています。
古往今来得ざれば即ち書き得れば即ち飽くは筆の常也。と云うわけで御座います、この浅ましき乞食めに何卒皆々様のご慈悲をお願い致します。