유니티에서 동영상 배경을 투명하게 처리하는 방법은 Shader를 이용해서 합니다.

Shader란 정의를 찾아보았으나 없었고,

제가 생각하기에 Shader란 자바스크립트 계열의 일종으로 보입니다.(제 생각)

우선 Shader를 알고 있다는 상황으로 알고 설명 드립니다.


1. Create -> Plane 추가


2. Project 탭에서 마우스 우클릭 ->  Create       


가. Movie Play C# 파일 생성

using UnityEngine;

using System.Collections;

public class ChromakeyMovie : MonoBehaviour {

    public MovieTexture movie;

    void Start () {

        renderer.material.mainTexture = movie as MovieTexture;

        movie.Play ();

        movie.loop = true;

    }

    void Update () {   

    }

}


나. Shader 파일 생성 (배경이 검정색 일때 가정하에 구현되어 있음, 검정색이 아닐경우 "Chroma"의 Color RGB 값을 변경하면 됩니다.) 

Shader "Transparent/Cutout/ChromakeyShader" {
    Properties {
         _MainTex ("Base (RGB)"2D) = "white" {}
         _Sens ("Sensibilidad"Range (0,0.1)) = 0.3
         _Cutoff("Cutoff"Range(00.05)) = 0.1
         _Color ("Chroma"Color) = (000)
    }
    
    SubShader {
        Tags { "Queue"="Transparent" "RenderType"="Transparent" }
        LOD 200
        
        CGPROGRAM
        #pragma surface surf Lambert alpha

        sampler2D _MainTex;
        float _Cutoff;
        float _Sens;
        half3 _Color;


        struct Input {
            float2 uv_MainTex;
        };

        void surf (Input INinout SurfaceOutput o) {
            half4 c = tex2D (_MainTexIN.uv_MainTex);
            o.Albedo = c.rgb;
            
            float aR = abs(c.r - _Color.r) < _Sens ? abs(c.r - _Color.r) : 1;
            float aG = abs(c.g - _Color.g) < _Sens ? abs(c.g - _Color.g) : 1;
            float aB = abs(c.b - _Color.b) < _Sens ? abs(c.b - _Color.b) : 1

            float a = (aR + aG + aB) / 3

            if (a < _Cutoff) {
                o.Alpha = 0;
            } else {
                o.Alpha = 1;
            }
        }
        ENDCG
    }
    FallBack "Diffuse"
}


3. 1번에서 추가한 Plane을 클릭하여 우리가 생성한 C#파일을 "Add Component"에 Drag하여 추가, Shader도 설정하면 Shader 설정 완료  



# 추가적인 내용

모바일로 재생하고 하고자 하면, 유니티에서 제공 해주는 "MovieTexture"로 재생이 불가합니다. 폰트도 필요하면 Bitmap Font를 다운 받야아 합니다.

유료로 AssetStore에서 다운을 받아야 하는데, 동영상을 10초 가량만 하고 싶으시면 Asset Store에서  "SPlugins MovieTexture for Mobile Free"를 다운 받아서 import하여 C#으로 만든 파일을 대치하면 됩니다.

(다운 링크 : https://www.assetstore.unity3d.com/kr/#!/content/32877 )

단, Shader에 동영상을 Drag 한 것은 삭제 Play가 됩니다. 


이상 


+ Recent posts