[Unity3D] Shadow - 그림자 생성.


그림자를 만드는 방법은 크게 3가지 방법이 있다.


1. Directional Light를 이용한 실시간 그림자.

2. Projector를 이용한 그림자.

3. Plane Mesh를 이용한 그림자.



1. 

유니티 5부터는 실시간 그림자가 기본적으로 적용돼 있다.


실시간 그림자는 Directional Light의 속성 중 Shadow Type 옵션으로 설정한다.


Shadow Type속성으로는 3가지가 있다.

- No Shadow : 실시간 그림자를 적용하지 않는다.

- Hard Shadow : 실시간 그림자를 표현하나 외곽선을 부드럽게 처리하지 못한다.

- Soft Shadow : 부드러운 실시간 그림자를 표현해준다. (가장 많은 부하를 준다.)





Hard Shadow




Soft Shadow



이렇듯 효과는 매우 탁월하지만 엔진에 많은 부하를 준다.

그렇기 때문에 그림자 효과가 필요없는 3D 모델은 실시간 그림자 영향에서 제외하는 설정을 빠뜨리면 안됀다.


3D 모델은 Mesh Renderer 또는 Skinned Mesh Renderer중 한 컴포넌트는 반드시 가지고 있다.

이 두 컴포넌트에는 실시간 그림자와 관련된 Cast Shadows와 Receive Shadowns속성이 있다.


Cast Shadows에는 4가지 속성이 있다.

 - off : 그림자를 만들지 않는다.

 - On : 그림자를 만든다.

 - Two Sided : 백페이스 컬링을 무시하고 그림자를 양면으로 만든다.

 - Shadows Only : 그림자를 만들지만 자신은 렌더링하지 않는다. 즉, 화면에 보이지 않는 특성이 있어 그림자 처리만을 위한 3D모델에 활용할 수 있다.


※ Two Sided

Quad같은 단면만 렌더링 하는 모델의 경우 Cast Shadows속성을 On으로 해도 그림자가 만들어지지 않는다.

그렇기 때문에 Two Sided로 설정하면 그림자를 생성할수 있게 된다.




2.


Projector기능은 빔 프로젝터가 스크린에 이미지를 투사하는 것을 생각하면 된다.

Projector는 주로 데칼을 구현할 때 유용하게 활용되며, 그림자, 총탄 흔적, 혈흔 등의 표현에 응용할 수 있다.


Projector는 유니티패키지로 기본적으로 제공하고 있다.

Assets -> Import Package -> Effect를 선택하면 된다.



모두 다 임포트 할 필요는 없고 Projectors폴더만 선택하여 임포트 하면 된다.


임포트가 완료되면 프리팹 Blob Shadow Projector를 꺼내 플래이어의 자식으로 넣는다.

그리고 사진과 같이 위치해놓고 수치도 사진과 같이 설정하면 된다.




Projector의

- Near Clip Plane

- Far Clip Plane

는 범위를 설정해주는 속성이다.


Near Clip Plane에 가까울수록 그림자가 진하게 표현되고,

Far Clip Plane로 갈수록 페이드 아웃 효과를 제공한다.


플레이어가 점프할 경우 바닥의 그림자의 농도는 자연스럽게 연해지게 된다.



Blob Shadow Projector 프리팹을 그냥 플레이어의 머리위에 올려놓으면

그림자가 바닥에만 보이는게 아니라 플레이어의 몸에도 그림자가 적용되어

하늘에 뭔가 떠 있어 플레이어를 가리고 있는것으로 보인다.


이러한 그림자를 플레이어만 적용되지 않게 하기 위해


Igore Layers속성을 설정하면 되는데.

Igore Layers속성은 우측 상단에 Layer에 있는 속성을 그대로 가져와 사용하게 된다.


PLAYER라는 레이어를 하나 추가해서

플레이어의 Layer를 PLAYER로 바꿔주고 모든 자식들도 적용해준다.

그리고 다시 Projector컴포넌트로 돌아와 Igore Layers속성을 PLAYER로 지정해주면

플레이어에게 그림자가 적용되자 않게 되고, 바닥에만 그림자가 보이게 된다.



3.


다음은 Plane Mesh을 이용한 그림자다.

위의 소개된 2개의 그림자보다 가장 부하가 적은 방법이다.


Quad를 이용해서 하는 방법인데,


GameObject -> 3D Object -> Quad를 통해 생성이 가능하다.

Quad를 생성하여 크기 및 위치를 조정하여 플레이어의 발 밑에 깐다.


마테리얼을 하나 생성한 뒤 마테리얼의 Rendering Mode을 Fade로 전환한다.

그리고 Albedo에 그림자 텍스쳐를 집어넣으면 그림자는 완성된다.



- 발 밑에 깔아넣는다.



- 마테리얼 하나 생성 후 렌더링 모드를 Fade로 변경 후 알베도에 그림자 텍스처 추가.


이 방법이 가장 부하가 적다는 장점이 있긴 하지만, 단점도 존재한다.

경사진 곳에 이동하게 된다면 그림자가 모델을 파고 들어가게 된다.


위의 소개된 그림자들을 각 상황에 맞게 이용하길 바란다.