본문 바로가기
개발/Unity

유니티 쉐이더 - 카메라가 바라보는 방향으로 밝아지는 큐브

by 피로물든딸기 2022. 6. 14.
반응형

Unity 전체 링크

 

두 개의 블럭이 있다. 

블럭 하나는 조명에 대해 밝기가 일정하지만, 다른 하나는 바라보는 방향에 따라 밝기가 변하고 있다.

 

쉐이더를 이용해 카메라가 바라보는 방향이 밝아지는 큐브를 만들어보자. 

 

먼저 큐브하나에는 빨간색 Material을 추가하자. RGB는 (255, 100, 100)이다.

 

이제 두 번째 블럭에 입힐 쉐이더를 만들자. Standard Surface Shader를 추가한다.

 

BlockLight.shader는 아래와 같다.

Shader "MyShader/BlockLight"
{
    Properties
    {
        _BlockColor("blockColor", Color) = (.0, .0, .0, 1)
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }

        CGPROGRAM
        #pragma surface surf Lambert noambient noshadow

        float4 _BlockColor;

        struct Input
        {
            float3 viewDir;
        };

        void surf(Input IN, inout SurfaceOutput o)
        {
            //o.Albedo = _BlockColor.rgb;
            o.Alpha = _BlockColor.a;

            float rim = dot(o.Normal, IN.viewDir);
            o.Emission = rim * _BlockColor.rgb;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

 

Input의 viewDir로 현재 바라보는 방향의 벡터를 얻을 수 있다.

이것을 Normal 벡터와 내적 연산(dot)을 하여 Emission에 넣어준다.

즉, viewDir와 Normal이 일치할 때 가장 밝은 값이 나오게 된다.

        struct Input
        {
            float3 viewDir;
        };

        void surf(Input IN, inout SurfaceOutput o)
        {
            //o.Albedo = _BlockColor.rgb;
            o.Alpha = _BlockColor.a;

            float blockColor = dot(o.Normal, IN.viewDir);
            o.Emission = blockColor * _BlockColor.rgb;
        }

 

Material을 추가한 후, 위에서 만든 쉐이더를 입힌다.

그리고 다른 큐브에 추가한다.

 

이 Material의 색상도 RGB가 (255, 100, 100)이 되도록 변경한다.

 

좀 더 효과를 제대로 보기 위해 [Mesh Renderer] → [Lighting] → [Cast Shadows]Off로 설정하여

조명에 의해 그림자가 생기지 않도록 한다.

 

카메라를 변경해가면서 블럭의 색상/밝기가 어떻게 변하는지 비교해보자.

 

Unity Plus:

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Unity Pro:

 

Unity Pro

The complete solutions for professionals to create and operate.

unity.com

 

Unity 프리미엄 학습:

 

Unity Learn

Advance your Unity skills with live sessions and over 750 hours of on-demand learning content designed for creators at every skill level.

unity.com

반응형

댓글