36
面面面面面面面面 面面面面 Unity 面面面面面面面面面面面面

Unityのポストエフェクトで遊ぶ!

Embed Size (px)

DESCRIPTION

第24回 Unity勉強会 at 2014.8.29 にてお話しさせていただいた際の資料です。 デモ http://calmbooks.com/UnitySamples/GruGruEffect コード https://github.com/calmbooks/UnityGruGruEffect

Citation preview

Page 1: Unityのポストエフェクトで遊ぶ!

面白法人カヤック 本多大和

Unity のポストエフェクトで遊ぶ!

Page 2: Unityのポストエフェクトで遊ぶ!

本多大和ほんだ やまと

面白法人カヤック所属

@calmbooks

http://calmbooks.tumblr.com/

HTML5 / WebGL / Unity

自己紹介

Page 3: Unityのポストエフェクトで遊ぶ!

鎌倉に本社を構え、面白いサービスをつくっているクリエイター集団。ゲーム、 Web 、スマホアプリ、イベント、デバイス、 etc.

http://www.kayac.com/

面白法人?

Page 4: Unityのポストエフェクトで遊ぶ!

最近つくったもの

Page 5: Unityのポストエフェクトで遊ぶ!

2020 ふつうの家展(キッチン)

少し未来の住宅をイメージした展示イベント。キッチンにプロジェクションする Unity コンテンツ部分を担当。

http://www.31sumai.com/parkhomes-expo2014/futsunoie/

Page 6: Unityのポストエフェクトで遊ぶ!

ジャイロ連動 ピラミッドスクリーン

iPad のジャイロセンサーとペッパーズゴーストを組み合わせた立体視表現

http://create.kayac.com/edge/pyramidscreen/

Page 8: Unityのポストエフェクトで遊ぶ!

ポストエフェクト ?

Page 9: Unityのポストエフェクトで遊ぶ!

ポストエフェクト?

レンダリング後のイメージに加えるエフェクト

※ Unity では、 ImageEffect と呼ばれることが多い※ Asset Store では CameraEffect と呼ばれることも

Page 10: Unityのポストエフェクトで遊ぶ!

主な使い方

・フィルター的な処理・質感のクオリティアップ

Page 11: Unityのポストエフェクトで遊ぶ!

その他の使い方

・レンダリング後のイメージを、他のオブ ジェクトのテクスチャにする

・プロジェクションの台形補正、色補正

・ 2D エフェクトをつくって遊ぶ・あまり実用的ではない?

今回の使い方

Page 12: Unityのポストエフェクトで遊ぶ!

ポストエフェクト実装方法

カメラの OnRenderImage 時に、RenderTexture に対して Material を追加。Shader によって実装。

Shader を自作することで、自在に 2D エフェクトをつくれる!

Page 13: Unityのポストエフェクトで遊ぶ!

Shader ?

Page 14: Unityのポストエフェクトで遊ぶ!

Shader とは

3D グラフィックスに使われる、

・ Lighting (光で照らす)・ Shading (陰影をつける)

などの効果をレンダリングするためのプログラム処理

Page 15: Unityのポストエフェクトで遊ぶ!

Shader 言語

GLSL OpenGL 用。 WebGL にも使われる

Cg グラフィックスのための C 言語。 NVIDIA により開発

HLSL DirectX 用。マイクロソフトにより開発

・ Unity はぜんぶ使える( GLSL はテスト用)・すべて C 言語ベース。言語としての違いは少ない・ Unity では、 Cg/HLSL が基本

Page 16: Unityのポストエフェクトで遊ぶ!

2D エフェクトに挑戦!

Page 18: Unityのポストエフェクトで遊ぶ!

1. カメラにスクリプトを追加

いつものフローでスクリプトを追加言語は C# を使いました。

GameObject はカメラだけ!

Page 19: Unityのポストエフェクトで遊ぶ!

2. OnRenderImage 時に Material を追加

OnRenderImage をフックして、レンダリング済みのイメージにマテリアルを追加する処理をかく

Page 20: Unityのポストエフェクトで遊ぶ!

3. Material と Shader のファイル作成

Material ファイルと Shader ファイルを 1 つずつ作成。Material に Shader を指定しておく。

Page 21: Unityのポストエフェクトで遊ぶ!

4. スクリプトに Material を追加

さきほどスクリプトに定義した変数に、インスペクターからMaterial を追加

Page 22: Unityのポストエフェクトで遊ぶ!

5. Shader をプログラミング!

Unity にはシェーダーが 3 種類ある。

1. サーフェイスシェーダー2. 頂点・フラグメントシェーダー3. 固定関数シェーダー

今回はカスタマイズ性の一番高い、頂点・フラグメントシェーダーを使う。(言語は Cg/HLSL )

くわしく → http://docs-jp.unity3d.com/Documentation/Manual/Shaders.html

Page 23: Unityのポストエフェクトで遊ぶ!

5. Shader をプログラミング!

Shader "Custom/HogeShader" {Properties {}SubShader {} FallBack "Diffuse"

}

くわしく → http://tips.hecomi.com/entry/2014/03/16/233943

Unity の Shader の形式。今回は、 Properties と FallBack は省略。

省略可能

省略可能

Page 24: Unityのポストエフェクトで遊ぶ!

5. Shader をプログラミング!

完成コード( 31 行)

Page 25: Unityのポストエフェクトで遊ぶ!

5. Shader をプログラミング!

Shader "Custom/GruGruEffect" {

SubShader { Pass { CGPROGRAM

ENDCG } }}

Pass タグ → http://docs-jp.unity3d.com/Documentation/Components/SL-PassTags.html

“Custom/GruGruEffect” みたいに指定することで、Material から選択する際にグループ分けされる。

ここにプログラムをかく

Page 26: Unityのポストエフェクトで遊ぶ!

5. Shader をプログラミング!

(略) #include "UnityCG.cginc"

#pragma vertex vert_img #pragma fragment frag

#define PI 3.14159(略)

vert_img から、フラグメントシェーダーにv2f_img が渡される。

定義済みのヘルパー関数をインクルード

↑ で定義されている頂点シェーダー関数

フラグメントシェーダー関数の指定

定数の定義

Page 27: Unityのポストエフェクトで遊ぶ!

5. Shader をプログラミング!

(略)float4 frag( v2f_img i ) : COLOR {

float2 vec = i.uv.xy - float2(0.5);

float l = length(vec); float r = atan2(vec.y, vec.x) + PI; float t = _Time.y*10; float c = 1-sin(l*70+r+t);

float3 rgb = float3(c); return float4(rgb,1.0);}(略)

すべてのピクセルに実行される

中心から、計算座標へのベクトル

ベクトルの長さ( 0 〜 1.0 )

ベクトルの角度( 0 〜 2π )

いい感じにアニメーションするための時間

色。ベクトルの長さと角度を使って求める

組み込み変数→ http://docs.unity3d.com/Manual/SL-BuiltinValues.html

白〜黒

Page 29: Unityのポストエフェクトで遊ぶ!

ちなみに

Page 30: Unityのポストエフェクトで遊ぶ!

GLSL Sandbox

※ GLSL のまま Unity で使う方法もあるけど、テスト用らしい

くわしく → http://tips.hecomi.com/entry/20130324/1364136769

http://glsl.heroku.com/

大量の 2D エフェクト Shaderが公開されている Web サイト。GLSL を移植しながら勉強するのがオススメ。

Page 31: Unityのポストエフェクトで遊ぶ!

Unity 以外の 2D エフェクト作成手法

・ HTML5 Canvas・ WebGL・ Flash・ Processing・ openFrameworks・ QuartzComposer

etc.

Page 32: Unityのポストエフェクトで遊ぶ!

まとめ

Page 33: Unityのポストエフェクトで遊ぶ!

Unity でジェネラティブアート

メリットUnity の強力な 3D 機能と組み合わせることで、表現の可能性が広がる!!

デメリットShader はそもそも 2D エフェクトをつくるためのものじゃないので、ゴリゴリ書くには慣れが必要。Web での公開が苦手(プラグイン必要)有料( Pro のみ)

Page 34: Unityのポストエフェクトで遊ぶ!

今回お世話になった方々(サイト)

凹み Tipshttp://tips.hecomi.com/

demoscene.jphttp://www.demoscene.jp/

sugi.cho creationshttp://sugi.cc/

ありがとうございました!

Page 35: Unityのポストエフェクトで遊ぶ!

面白法人カヤック主催の交流会10/11@ 横浜 BUKATSUDO

https://www.facebook.com/events/592749480837491/

or

http://peatix.com/event/49002

宣伝!

Page 36: Unityのポストエフェクトで遊ぶ!

Thank you !!