애니메이터

Unity5.x 에서 Unity4.x 라이트맵 쓰기 2탄 본문

Game Engine/Unity3D

Unity5.x 에서 Unity4.x 라이트맵 쓰기 2탄

욤마핫 2018. 6. 26. 14:04

회사 프로젝트의 요구 사항으로

Unity 엔진의 버전업이 필요한 상황으로

Unity 4.x의 라이트맵을 Unity5.x로 적용, Vertex Color, Cutout 적용이 필요하였습니다.

셰이더를 보면 아시겠지만 Shader Forge 와 Unity의 빌트인 셰이더를 짬뽕 하여 만들었습니다. (아직 스스로 셰이더를 만들 역량은 안됩니다 ㅠㅠ)

 

Unity5.x 에서 Built in 된 Legacy shader중에 Unity 4.x의 Lightmap을 사용 가능하게 만들어준 Shader가 이미 있지만

(http://xysterxx.tistory.com/169?category=435193)

Unity4.x 에서 Rendering된 화면과 비슷하게 만들려면 Lightmap를 포토샵에서 Editting을 해줄 필요가 있어 바로 사용 가능할 수 있을 정도로 만들어 봤습니다.

 

 

// Shader created with Shader Forge v1.38 
// Shader Forge (c) Freya Holmer - http://www.acegikmo.com/shaderforge/
// Note: Manually altering this data may prevent you from opening it in Shader Forge
/*SF_DATA;ver:1.38;sub:START;pass:START;ps:flbk:,iptp:0,cusa:False,bamd:0,cgin:,lico:1,lgpr:1,limd:0,spmd:1,trmd:0,grmd:0,uamb:True,mssp:True,bkdf:False,hqlp:False,rprd:False,enco:False,rmgx:True,imps:True,rpth:0,vtps:0,hqsc:True,nrmq:1,nrsp:0,vomd:0,spxs:False,tesm:0,olmd:1,culm:0,bsrc:3,bdst:7,dpts:2,wrdp:False,dith:0,atcv:False,rfrpo:True,rfrpn:Refraction,coma:15,ufog:False,aust:True,igpj:True,qofs:0,qpre:3,rntp:2,fgom:False,fgoc:False,fgod:False,fgor:False,fgmd:0,fgcr:0.5,fgcg:0.5,fgcb:0.5,fgca:1,fgde:0.01,fgrn:0,fgrf:300,stcl:True,atwp:False,stva:128,stmr:255,stmw:255,stcp:6,stps:0,stfa:0,stfz:0,ofsf:0,ofsu:0,f2p0:False,fnsp:False,fnfb:False,fsmp:False;n:type:ShaderForge.SFN_Final,id:3138,x:32360,y:32577,varname:node_3138,prsc:2|emission-1564-OUT,alpha-1723-A;n:type:ShaderForge.SFN_Tex2d,id:1723,x:31757,y:32654,ptovrint:False,ptlb:Main,ptin:_Main,varname:node_1723,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,ntxv:0,isnm:False|UVIN-8223-UVOUT;n:type:ShaderForge.SFN_TexCoord,id:8223,x:31561,y:32642,varname:node_8223,prsc:2,uv:0,uaff:False;n:type:ShaderForge.SFN_Multiply,id:6410,x:32005,y:32735,varname:node_6410,prsc:2|A-1723-RGB,B-7826-OUT;n:type:ShaderForge.SFN_Tex2d,id:6668,x:31746,y:32997,ptovrint:False,ptlb:Lightmap,ptin:_Lightmap,varname:node_6668,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,ntxv:0,isnm:False|UVIN-6441-UVOUT;n:type:ShaderForge.SFN_TexCoord,id:6441,x:31565,y:32983,varname:node_6441,prsc:2,uv:1,uaff:False;n:type:ShaderForge.SFN_Multiply,id:7826,x:31855,y:32833,varname:node_7826,prsc:2|A-6668-RGB,B-6668-RGB;n:type:ShaderForge.SFN_Color,id:9218,x:32005,y:32575,ptovrint:False,ptlb:Tint,ptin:_Tint,varname:node_9218,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,c1:0.5,c2:0.5,c3:0.5,c4:1;n:type:ShaderForge.SFN_Multiply,id:1564,x:32167,y:32655,varname:node_1564,prsc:2|A-9218-RGB,B-6410-OUT;proporder:9218-1723-6668;pass:END;sub:END;*/

Shader "Shader Forge/Unlit_Lightmapped4_vertexColor_Cutout" {
    Properties {
        _Tint ("Tint"Color) = (0.5,0.5,0.5,1)
        _Main ("Main"2D) = "white" {}
        _Lightmap ("Lightmap"2D) = "white" {}
        _Cutoff ("Alpha cutoff"Range(0,1)) = 0.5
    }
    SubShader {
        Tags {"IgnoreProjector"="True"  "Queue"="AlphaTest" "RenderType"="TransparentCutout"}
        LOD 100
        Lighting off
        Pass {
            //Name "FORWARD"
            //Tags {"LightMode"="ForwardBase"}
            //Blend SrcAlpha OneMinusSrcAlpha
            //ZWrite Off
            

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
            #pragma multi_compile_fwdbase
            #pragma only_renderers d3d9 d3d11 glcore gles metal 
            #pragma target 3.0

           

            struct VertexInput {
                float4 vertex : POSITION;
                float2 texcoord0 : TEXCOORD0;
                float2 texcoord1 : TEXCOORD1;
                float4 color : COLOR;
            };
            struct VertexOutput {
                float4 pos : SV_POSITION;
                float2 uv0 : TEXCOORD0;
                float2 uv1 : TEXCOORD1;
                float4 vertexColor : COLOR;
            };

            uniform sampler2D _Main; uniform float4 _Main_ST;
            uniform sampler2D _Lightmap; uniform float4 _Lightmap_ST;
            uniform float4 _Tint;
            fixed _Cutoff;


            VertexOutput vert (VertexInput v) {
                VertexOutput o = (VertexOutput)0;
                o.uv0 = v.texcoord0;
                o.uv1 = v.texcoord1;
                o.pos = UnityObjectToClipPos( v.vertex );
                o.vertexColor = v.color;
                return o;
            }


            float4 frag(VertexOutput i) : COLOR {

                float4 _Main_var = tex2D(_Main,TRANSFORM_TEX(i.uv0, _Main));
                float4 _Lightmap_var = tex2D(_Lightmap,TRANSFORM_TEX(i.uv1, _Lightmap));
                float3 emissive = (_Tint.rgb*(_Main_var.rgb*(_Lightmap_var.rgb*_Lightmap_var.rgb)));
                float3 finalColor = emissive * i.vertexColor;
                clip (_Main_var.a - _Cutoff);
                return float4(finalColor, _Main_var.a);
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
    //CustomEditor "ShaderForgeMaterialInspector"
}