[Unity]初computeShaderやってみた。

 

今日はcreativeCodingもくもく会という名のもくもく一人でcreativecodingする感じの勉強会に行ってきたのですが

そこで初computeShaderやってみました。

参考にしまくったサイト

http://notargs.com/blog/blog/2015/01/27/unity%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%83%88%E3%82%B7%E3%82%A7%E3%83%BC%E3%83%80%E3%81%A8%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B7%E3%83%B3%E3%82%B0%E3%81%A71%E4%B8%87/

notaさんのサイトです。いつもお世話なっててほんと感謝。

 

やったことは、まず、webcameraからとったテクスチャを、対象のパーティクルのテクスチャとしてくっつけて、

上記のサイトでいうC#スクリプトにいろんな形のなるようにスクリプトを作っていった感じ

 

ローレンツアトラクタの部分でいうとこんな感じ。

void lorenz attractor()
{
bulletsBuffer = new ComputeBuffer(100000, Marshal.SizeOf(typeof(Bullet)));

Bullet[] bullets = new Bullet[bulletsBuffer.count];

mainCamera.transform.position = new Vector3(-57, 4.7f, 5.8f);
mainCamera.transform.rotation = Quaternion.Euler(357, 78, 324);
for (int i = 0; i < bulletsBuffer.count; i++)
{

float xAnswer = x + 0.0001f * 10 * (-x + y);
float yAnswer = y + 0.0001f * (28 * x – y – x * z);
float zAnswer = z + 0.0001f * (-8.0f/3.0f * z + x * y);

bullets[i] =

new Bullet(
new Vector3(xAnswer, yAnswer, zAnswer),
new Vector3(Random.Range(-1.0f, 1.0f)*0.3f, Random.Range(-1.0f, 1.0f)*0.3f, Random.Range(-1.0f, 1.0f)) * 0.3f,
new Color(Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f)));

x = xAnswer;
y = yAnswer;
z = zAnswer;

}
bulletsBuffer.SetData(bullets);
}

 

ローレンツアトラクタ部分の式は

float xAnswer = x + 0.0001f * 10 * (-x + y);
float yAnswer = y + 0.0001f * (28 * x – y – x * z);
float zAnswer = z + 0.0001f * (-8.0f/3.0f * z + x * y);

この部分

 

いろいろ変数いじってみればおもしろそーかも

 

 

 

 

 

 

 

 

 

 

 

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中