OpenCLどうも再び@jirohclです。Calender@12日目です!人数が少なく、下手をすればもう一度まわってくるらしいのですが完全にネタも尽きてはたしてどうなる事やら。愚痴はアンドロメダ星雲にでもすっ飛ばしておくとして、今回はこんなものを実装してみましたネタです。Philosophyでも使われていたパーティクルの技法です。主な特徴としては、パーティクル同士の判定を行わないために超高速、剛体との衝突がなんかそれっぽく見える、といった所でしょうか。これをどうOpenCLに持っていくかというと、パーティクルの更新が都合よく並列化に向いていたためupdate関数をカーネル化してやりました。curl_vel(mid,rx,t[0],rt,rti)*0.04f;}ここで特筆する点は乱数テーブル(rt)をホストから渡している所でしょうか。この乱数テーブルは円状に配置された点をswapしてテーブル化してあります。v;}速度の計算です、パーティクルの現在位置から微小距離ずらし、ポテンシャル関数を用いて速度を求めます。base_psi+turb;}そしてこのポテンシャル関数の中で、回転するノイズ関数、剛体や風等の周りからの力の付与を計算することで流体を表現するらしいです。実装に疲れたので説明はおざなりですが中々面白い技術なので皆様試してみてはいかがでしょうか?Windows用の実行ファイルになり、かつ他の環境で動くかどうか怪しいですが一応デモも置いておきます。カールノイズのGPGPUコード。Agniでも使われたらしい。