Surfce Shader Cubemap1

Å¥ºê¸Ê¿¡ ³ë¸Ö¸ÊÀ» Ãß°¡Çغ¸ÀÚ

³ë¸Ö¸ÊÀ» Ãß°¡ÇÑ È­¸éÀº ´ÙÀ½°ú °°´Ù.



»ç¿ëµÈ ³ë¸Ö¸ÊÀº ´ÙÀ½°ú °°´Ù.




Shader "Custom/NormalMappedReflection"
{
    Properties
    {
        _MainTint ("Diffuse Tint", Color) = (1,1,1,1)
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _NormalMap ("Normal Map", 2D) = "bump" {}
        _Cubemap ("Cubemap", CUBE) = ""{}
        _ReflAmount ("Reflection Amount", Range(0,1)) = 0.5
    }
    
    SubShader
     {
        Tags { "RenderType"="Opaque" }
        LOD 200
        
        CGPROGRAM
        #pragma surface surf Lambert

        samplerCUBE _Cubemap;
        sampler2D _MainTex;
        sampler2D _NormalMap;
        float4 _MainTint;
        float _ReflAmount;

        struct Input
        {
            float2 uv_MainTex;
            float2 uv_NormalMap;
            float3 worldRefl;
            INTERNAL_DATA
        };

        void surf (Input IN, inout SurfaceOutput o)
        {
            half4 c = tex2D (_MainTex, IN.uv_MainTex);
            
            float3 normals = UnpackNormal(tex2D(_NormalMap, IN.uv_NormalMap)).rgb;
            o.Normal = normals;
            
            o.Emission = texCUBE (_Cubemap, WorldReflectionVector (IN, o.Normal)).rgb * _ReflAmount;
            o.Albedo = c.rgb * _MainTint;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

Input¿¡¼­ worldRefl; INTERNAL_DATAÀ» o.Normal¿¡ »ç¿ëÇÏ¸é ¿ùµå ¹Ý»ç º¤Å͸¦ Æ÷ÇÔÇÑ´Ù. Çȼ¿ ´ç ¹ý¼± ¸Ê¿¡ ±âÃÊÇÏ¿©, ¹Ý»ç º¤Å͸¦ ¾òÀ¸·Á¸é WorldReflectionVector(IN, o.Normal)¸¦ »ç¿ëÇÑ´Ù.

texCUBE (_Cubemap, WorldReflectionVector (IN, o.Normal))

WorldReflectionVector ÇÔ¼ö¸¦ ¹ý¼± Ãâ·Â ÀÛ¼º ÈÄ¿¡ Çȼ¿ ´ç ¹Ý»ç º¤Å͸¦ °è»êÇÏ´Â µ¥ »ç¿ëÇÑ´Ù.

ÂüÁ¶)
http://docs.unity3d.com/kr/current/Manual/SL-SurfaceShaderExamples.html
http://docs.unity3d.com/kr/current/Manual/SL-SurfaceShaders.html

¼­Çǽº ½¦ÀÌ´õ ÀÎDz ±¸Á¶

ÀÔ·Â ±¸Á¶Ã¼ Input¿¡´Â ÀϹÝÀûÀ¸·Î ½¦ÀÌ´õ¿¡ ÀÇÇØ ¿ä±¸µÇ´Â ÅؽºÃ³ ÁÂÇ¥°¡ ÀÖ½À´Ï´Ù. ÅؽºÃ³ ÁÂÇ¥ÀÇ À̸§Àº uv µÚ¿¡ ÅؽºÃ³ À̸§ÀÌ ¿À´Â ÇüÅ·ΠÇØ¾ß ÇÕ´Ï´Ù(µÎ¹ø° ÅؽºÃ³ ÁÂÇ¥ ¼¼Æ®¸¦ »ç¿ëÇÏ·Á¸é uv2·Î ½ÃÀÛ)

´ÙÀ½ °ªÀ» ÀÔ·Â ±¸Á¶¿¡ ÀÔ·ÂÇÒ ¼ö ÀÖ½À´Ï´Ù.

float3 viewDir - ºä ¹æÇâÀ» Æ÷ÇÔÇÕ´Ï´Ù. ½ÃÂ÷ È¿°ú, ¸² ¶óÀÌÆà µîÀÇ °è»ê¿¡ »ç¿ëµË´Ï´Ù. *float4 withCOLOR ÀÇ¹Ì - º¸°£µÈ Á¤Á¡ ´ç »ö»óÀ» Æ÷ÇÔÇÕ´Ï´Ù.

float4 screenPos - ¹Ý»ç È¿°úÀÇ ½ºÅ©¸°½ºÆäÀ̽º À§Ä¡ ¶Ç´Â ½ºÅ©¸°½ºÆäÀ̽º È¿°ú¸¦ Æ÷ÇÔÇÕ´Ï´Ù.

float3 worldPos - ¿ùµå °ø°£»óÀÇ À§Ä¡¸¦ ​​Æ÷ÇÔÇÕ´Ï´Ù.

float3 worldRefl - Surface ShadersÀÌ o.Normal¿¡ ±âÀÔÇÏÁö ¾Ê´Â °æ¿ì ¿ùµå ¹Ý»ç º¤Å͸¦ Æ÷ÇÔÇÕ´Ï´Ù. ¹Ý»ç - µðÇ»Áî ½¦ÀÌ´õ¸¦ ÂüÁ¶ÇϽʽÿÀ.

float3 worldNormal - Surface ShadersÀÌ o.Normal¿¡ ±âÀÔÇÏÁö ¾Ê´Â °æ¿ì ¿ùµå ¹ý¼± º¤Å͸¦ Æ÷ÇÔÇÕ´Ï´Ù.

float3 worldRefl; INTERNAL_DATA - Surface ShadersÀÌ o.Normal¿¡ ¾µ °æ¿ì ¿ùµå ¹Ý»ç º¤Å͸¦ Æ÷ÇÔÇÕ´Ï´Ù. Çȼ¿ ´ç ¹ý¼± ¸Ê¿¡ ±âÃÊÇÏ¿©, ¹Ý»ç º¤Å͸¦ ¾òÀ¸·Á¸é WorldReflectionVector(IN, o.Normal)¸¦ »ç¿ëÇÕ´Ï´Ù. ¹Ý»ç-¹üÇÁ Çü ½¦ÀÌ´õ(Reflect-Bumped shader)¸¦ ÂüÁ¶ÇϽʽÿÀ.

float3 worldNormal; INTERNAL_DATA - _Surface Shaders°¡ o.Normal¿¡ ¾²´Â °æ¿ì _ ¿ùµå ¹Ý»ç º¤Å͸¦ Æ÷ÇÔÇÕ´Ï´Ù. Çȼ¿ ´ç ¹ý¼±¸Ê¿¡ ±âÃÊÇϸç, ¹ý¼± º¤Å͸¦ ¾òÀ¸·Á¸é WorldNormalVector (IN, o.Normal)¸¦ »ç¿ëÇÕ´Ï´Ù.