CGメソッド

CG制作に関してのヒント

MENU

【Unity】デプス(Depth of Field)素材の作り方

f:id:min0124:20160828115925p:plain

思いつきで調べて、デプス素材(Depth of Field・被写界深度用の素材)を作ってみました。

※そこまで調べてないので、もっと良い物があるかもしれません。

デプス素材の作成

デプスシェーダーの作成

シェーダーを作成。

マテリアルを作成してCustom/DepthGrayscaleを選択して、オブジェクトにアサイン

o.scrPos.y = 1 - o.scrPos.y;は画面が反転したのでコメントアウト

DepthGrayscale.shader

Shader "Custom/DepthGrayscale" {
SubShader {
Tags { "RenderType"="Opaque" }

Pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"

sampler2D _CameraDepthTexture;

struct v2f {
   float4 pos : SV_POSITION;
   float4 scrPos:TEXCOORD1;
};

//Vertex Shader
v2f vert (appdata_base v){
   v2f o;
   o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
   o.scrPos=ComputeScreenPos(o.pos);
   //for some reason, the y position of the depth texture comes out inverted
   //o.scrPos.y = 1 - o.scrPos.y;
   return o;
}

//Fragment Shader
half4 frag (v2f i) : COLOR{
   float depthValue = Linear01Depth (tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.scrPos)).r);
   half4 depth;

   depth.r = depthValue;
   depth.g = depthValue;
   depth.b = depthValue;

   depth.a = 1;
   return depth;
}
ENDCG
}
}
FallBack "Diffuse"
}

カメラに下記のスクリプトをつける。

Add Componentした後はデプス用のマテリアルを登録

PostProcessDepthGrayscale.cs

using UnityEngine;
using System.Collections;

[ExecuteInEditMode]
public class PostProcessDepthGrayscale : MonoBehaviour {

   public Material mat;

   void Start () {
      camera.depthTextureMode = DepthTextureMode.Depth;
   }

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

   }
}

ニアファーを調整

カメラのニアファーを調整して、白黒のグラデーションを調整

f:id:min0124:20160927083405j:plain

※ちなみにAEで合成する時は白黒を反転した素材を使うことになると思います。

参考

http://willychyr.com/2013/11/unity-shaders-depth-and-normal-textures/