LoginSignup
0
0

More than 5 years have passed since last update.

ImageEffect用のスクリプトをCameraにアタッチする

Last updated at Posted at 2017-02-15

この記事の目的

  • UnityのEditor上でImageEffectの効果を見れるようにする。

PostEffectとは

レンダリング後の画像にかかるエフェクトの事をPostEffectと言う。
(UnityではImageEffectと呼ばれる。

下の画像みたいに、ゲーム画面に描画された画像をPostEffectによってモザイクをかけたりする事が出来る。

Before:
FxNone.png

After:
FxBlurNoise.png

スクリプト上でレンダリングされた画像を受け取る

MyImageEffect.cs
using UnityEngine;

[RequireComponent(typeof(Camera)) ExecuteInEditMode]
public class GrayScaleEffect : MonoBehaviour {

    private Material material;

    void Awake()
    {
        material = new Material (Shader.Find ("Custom/redScale"));
    }

    void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        Graphics.Blit (source, destination, material);
    }

}
redScale.shrder
Shader "Custom/redScale"
{
    SubShader
    {
        // No culling or depth
        Cull Off ZWrite Off ZTest Always

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            fixed4 _Color;

            float4 vert(float4 v:POSITION) : SV_POSITION {
                return mul (UNITY_MATRIX_MVP, v);
            }

            fixed4 frag () : COLOR
            {
                return fixed4(1, 0, 0, 1);
            }
            ENDCG
        }
    }
}

Cameraコンポーネントを持つGameObjectのスクリプト上で
void OnRenderImage(RenderTexture source, RenderTexture destination)
を実装すると、毎フレームカメラで描画されたRenderTexture(source)とレンダリングされる移動先(destination)を引数から渡されます。

Graphics.Blitを使って、カメラで描画されたsourceにShader(material)でレンダリングしてその結果をdestinationに書き込みする事で画面にImageEffectの効果を表しています。

スクリプトをカメラにアタッチ

Shaderとスクリプトを作成。

スクリーンショット 2017-02-15 23.21.43.png

スクリーンショット 2017-02-15 23.20.03.png

そうすると、以下のように画面が赤くなった事が分かったと思います。

Before:
スクリーンショット 2017-02-15 22.39.35.png

After:
スクリーンショット 2017-02-15 23.20.18.png

あとはShaderの中身を書き換えることで様々なImageEffectを試すことが出来ます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0