見出し画像

パーティクルで文字を描いて徐々に崩す

はじめに

 初級者が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カメラ」向け動画ファイル
 ※再生方法や注意点等は以前の記事に記載しています。



古往今来得ざれば即ち書き得れば即ち飽くは筆の常也。と云うわけで御座います、この浅ましき乞食めに何卒皆々様のご慈悲をお願い致します。