Occulusion(오클루젼)은 Ambient Occlusion(엠비언트 오클루젼)이라고도 부르며, 구석진 부분의 추가적인 음영을 표현하는 기능을 가지고 있음.
일반적으로 환경광(Ambient Color)로 가득 차 있는 세상에서 그림자가 드리워진 부분도 사방에서 오는 환경광 정도를 받고 있는 것이 일반적. 하지만, 매우 구석져 있거나 복잡한 물체들로 가려져서 환경광도 닿지 못하는 부분은 더욱 더 어두워지는데 이 부분을 Ambient Occlusion(엠비언트 오클루젼 : 환경 차폐)라고 부름.
이 Occlusion 맵 역시 여러 가지 툴에서 추출해 낼 수 있는 텍스쳐인데, SurfaceOutput에서는 float로 값을 받고 있음
이 맵을 사용하면 구석진 부분의 음영이 강조되며, 결과물의 차이가 생김.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | Shader "Custom/MetallicSmoothness" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _Metallic("Metallic", Range(0,1)) = 0 _Smoothness("Smoothness", Range(0,1)) = 0.5 _BumpMap("NormalMap", 2D) = "bump"{} _Occlusion("Occlusion", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } CGPROGRAM #pragma surface surf Standard sampler2D _MainTex; sampler2D _BumpMap; sampler2D _Occlusion; float _Metallic; float _Smoothness; struct Input { float2 uv_MainTex; float2 uv_BumpMap; }; void surf (Input IN, inout SurfaceOutputStandard o) { fixed4 c = tex2D (_MainTex, IN.uv_MainTex); o.Occlusion = tex2D (_Occlusion, IN.uv_MainTex); o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap)); o.Albedo = c.rgb; o.Metallic = _Metallic; o.Smoothness = _Smoothness; o.Alpha = c.a; } ENDCG } FallBack "Diffuse" } | cs |
일반적인 텍스쳐를 받아 사용하는 방법과 완전히 동일하지만, 특이하게 Occlusion 맵은 독립된 UV를 받으면 에러가 남. 반드시 _MainTex와 같은 uv를 사용해야 정상적으로 작동한다는 것 유념해야 함.
'Unity3D C# > 유니티 쉐이더 공부' 카테고리의 다른 글
유니티에 내장된 라이팅 구조 (0) | 2018.01.17 |
---|---|
버텍스 컬러를 이용한 텍스쳐 블렌딩에 노멀맵 적용하기 (0) | 2018.01.16 |
NormalMap의 함수 적용 (0) | 2018.01.14 |
Normal map(노멀맵) (0) | 2018.01.13 |
Standard Shader - Metallic과 Smoothness (0) | 2018.01.12 |