Å¥ºê¸Ê¿¡ ³ë¸Ö¸ÊÀ» Ãß°¡Çغ¸ÀÚ ³ë¸Ö¸ÊÀ» Ãß°¡ÇÑ È¸éÀº ´ÙÀ½°ú °°´Ù. »ç¿ëµÈ ³ë¸Ö¸ÊÀº ´ÙÀ½°ú °°´Ù. 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)¸¦ »ç¿ëÇÕ´Ï´Ù. |