UI 디자이너를 위한 Unity3D (1) - Camera

박창훈 (MERHENNE)·2021년 6월 5일
0

Unity3D.N.Designer

목록 보기
1/4
post-thumbnail

Unity 3D에서 중요한 한가지 - 카메라

Camera란?

카메라는 월드를 캡처하여 플레이어에게 보여주는 장치이다. 카메라에는 '화면 좌표계', '뷰포트 좌표계'등이 적용되며, 특별한 설정이 없다면 화면 해상도(Resolution) 만큼 크기가 결정된다. 기본적으로 하나의 카메라가 월드에 존재하며, 원하는 만큼 추가할 수 있다. 카메라는 디자이너의 결과물을 보여주는 마지막 관문이므로 잘 알고 있으면, 본인이 설정하거나 프로그래머에게 요청할 때 좀 더 쉽다.

화면 좌표계

디바이스의 해상도를 전체 크기로 가지는 2차원 좌표계이다. PC 및 에디터에서는 왼쪽 하단이 (0, 0), 오른쪽 상단이 (resolution width, resolution height)이다. Unity UI 및 NGUI가 이 좌표계 위에서 움직이고 표현된다.

  • 좌표계에 대해서는 이후에 자세히 서술할 예정이다.

유니티에서 카메라는 기본적으로 두 가지 투영 방식 중 하나를 선택하여 사용할 수 있다. 투영이란 어떤 물체에 대한 시각적 정보를 다른 어떤 곳에 비쳐내는 것을 뜻한다. 빔 프로젝트를 떠올리면 쉽다. 대표적인 투영에는 직교 투영(Orthgraphic)과 원근투영(Perspective)이 있다. 각 투영에 대해서는 아래에 자세히 설명한다.

직교 투영 [Orthgraphic Projection]

직교 투영은 X, Y, Z 좌표 값 중에서 Z에 해당하는 값을 무시하고 평행하게 투영하는 방법이다.멀고 가까움에 따른 크기의 변화가 없어, 원근감이 필요 없는 2D 프로젝트에서 자주 사용된다. 2D 게임에서 일반적으로 볼 수 있는 Side View, Top View, Quater View가 이에 해당한다. 원근감이 없기 때문에 Y 축을 따라 물체를 회전할 경우, 물체의 형상이 찌그러지는 현상을 볼 수 있다. 카메라는 직육면체의 모양을 가진다.

원근 투영 [perspective Projection]

원근 투영은 직교 투영과 달리 Z갑에 대한 정보를 살려 멀리 있는 것은 작게, 가까이 있는 것은 크게 보이도록 투영하는 방법이다. 캐릭터의 크기, 거리감이 잘 나타나기 때문에 3D 프로젝트에서 자주 사용된다. 카메라는 절두체의 모양을 가진다.

절두체 [Frustum]

절두체란, 입체(보통 원뿔이나 각뿔)를 절단하는 하나나 두 평행면 사이의 부분이다. 한자를 보면 머리를 그어 잘라낸 물체라는 뜻으로 그림에서 보는 것과 같이 피라미드의 위를 잘라낸 것과 같은 형태이다. 옆에서 보면 각 면이 사다리꼴로 되어 있다. 이를 눕히면 유니티 Scene View에서 볼 수 있는 카메라의 기즈모 모양가 이와 같은 모양이다.

기즈모 [Gizmos]

프로그래머들이 코드를 작성하면서 시각적으로 진행 사항이나 결과를 볼 때 또는, Scene View 상에 있는 오브젝트들의 설정을 돕기 위해 사용되는 Editor UI이다. 회전, 이동, 크기 조절에서 쓰는 화살표, 원, 네모가 달린 화살표 등이 모두 기즈모이다.

일반적으로는 하나의 씬에서 하나의 카메라를 사용하지만, 게임 오브젝트가 UI를 가리는 현상을 방지하고자 Perspective로 설정된 'World' 카메라 1개와 Orthographic으로 설정된 'UI' 카메라 1개를 사용하기도 한다. 2D 프로젝트에서는 Orthogonal로 설정된 카메라 1개 or 2개를 사용한다. 투영 방식은 이후에 설명할 Projection 옵션에서 설정할 수 있다.

Scene View

Scene View가 보여주는 화면 역시 카메라가 캡쳐한 화면이다. 이는 Editor에서 관리하기 때문에 Hierarchy 창에는 Scene View 카메라의 게임 오브젝트가 보이지 않는다. 이 카메라의 설정은 우리가 임의로 변경할 수 없고, 오직 Scene View의 버튼들을 이용해서만 변경할 수 있다. 아래 그림은 옵션 버튼 중에서 가장 많이 사용되는 옵션들의 기능을 명시한 것이다.

  • 주의 사항
    2D프로젝트에서는 디자이너들이 기본적으로 Scene View의 카메라 설정을 2D로 해두고 신경쓰지 않는 경우가 있다. 이는 기즈모가 아닌 인스펙터 창을 이용하여 애니메이션, 파티클, Transform의 위치등을 수정할 때 Z 값을 움직이는 실수를 못 본 체 넘어갈 수 있다.

Camera Component의 Inspector 창

프로그래머들이 대부분의 설정을 미리 조절하기 때문에, 아래에서 설명하는 모든 설정을 외울 필요는 없다. 하지만 알아두면 디자이너의 작업물이 화면에 의도했던 대로 보이는데 도움이 된다.

1. Clear Flags

카메라가 보여주는 기본 배경을 설정한다. 'Skybox', 'Depth only', 'Solid Color', 'Don't Clear'의 옵션이 있다. 실제 프로젝트에서는 디자이너가 작업한 배경 화면이 보이기 때문에 설정을 변경하지 않고 사용해도 문제는 없다. UI 카메라 와 World 카메라를 나누어 사용하는 경우에는 UI 카메라에 Depth only를 적용한다.

Skybox

하늘 배경을 카메라의 기본 배경으로 사용할 수 있다. 기본적으로 맑은 하늘이 적용되어 있으며, Cubemap이라는 기능을 사용하면 다른 그림들을 적용할 수 있다.

Depth only

카메라의 배경을 투명하게 처리한다. 여러개의 카메라를 겹쳐서 사용할 때, 이 옵션을 사용한다. 이후 설명한 Depth를 조절하여 카메라 간의 출력 순서를 결정할 수 있다. 다른 카메라 없이 Detph Only를 적용하면 투명한 공간을 덧칠할 데이터가 없기 때문에 오브젝트가 지나간 자리에 흔적이 남는다.

Solid Color

단색으로 배경을 채우는 옵션, 선택 시 생성되는 Background 옵션을 이용하여 색상을 선택할 수 있다.

Don't Clear

화면을 새롭게 갱신하지 않고, 이전에 그렸던 화면 위에 다시 캡쳐한 World를 그린다.

2. Culling Mask

카메라의 출력할 Layer를 설정하는 옵션, GameObject에 Layer를 설정하여 특정 오브젝트 그룹을 선별적으로 카메라에 출력하도록 할 수 있다.

Layer 생성 및 설정 방법
  1. Inspector 창에서 Layer 드롭다운 메뉴를 연다.

  2. Add Layer를 선택하여 설정 창을 연다.


  3. 빈 Layer 번호에 생성하고 싶은 Layer 이름을 추가한다.

  • 주의 사항
    Builtin Layer 7개를 제외하고 31개까지만 등록할 수 있으므로 클라이언트와 상의가 필요하다.

3. Projection

카메라의 투영 방식을 변경할 수 있다. 위에서 설명한 것과 같이 직교투영과 원근투영 두 가지 중에서 선택할 수 있다. 투영 방식을 설정하면 하위의 부가적인 옵션들이 변경 된다.

Perspective의 하위 옵션으로는 FOV Axis, Field of View, Physical Camera 설정 옵션이 등장하고, Orthographic의 하위 옵션으로는 Size가 등장한다.

Perspective의 하위 옵션
  • Field Of View

    시야각을 이르는 말이다. 카메라의 시야 각으로 Unity 카메라가 캡쳐할 Frustum의 절두체 각도를 의미한다.
  • FOV Axis

    Field Of View 적용을 위한 축으로 Horizontal(가로) / Vertical(세로) 두 가지가 존재한다.
  • Physical Camera

    실제 카메라 속성을 시뮬레이션하는 프로퍼티를 사용하여 Field of View를 계산하는 옵션을 추가한다.
Orthographic의 하위 옵션
  • Size

    카메라 Viewport의 크기
  • 해상도를 이용한 Orthographic Size 계산 방법

    Size == ([Resolution Height]) / (2 * ([Pixels Per Unit])

4. Clipping Planes

Clipping 단계에서 사용되는 절두체의 Near Plane(이하, Near)와 Far Plane(이하, Far)의 거리를 조절하는 옵션이다. Near는 Far보다 클 수 없으며, Far는 Near보다 작을 수 없다. 때문에 Near 와 Far가 반전되는 예외상황이 입력되면, Unity Editor에서 자동으로 Far Plane의 값을 Near Plane보다 0.01 큰 값으로 조절한다.

렌더링 파이프라인의 Clipping 단계

3D 렌더링 파이프라인 중 레스터화 단계에서 이루어지는 작업으로, 카메라가 렌더링하는 화면 중 절두체 밖으로 나간 부분을 지우는 작업이다. 완전히 화면 밖으로 나간 도형만 지우는 것이 아니라 부분이 나간 오브젝트를 절단하여 다른 도형으로 변환한다.

카메라의 Far Plane의 거리와 Near Plane의 거리를 조절할 수 있다. 카메라는 Near Plane과 Far Plane 사이의 오브젝트만 렌더링한다.

두번째 그림은 Near Plane 앞으로 나온 면을 그리지 않는 현상을 캡쳐한 것이다.

5. Viewport Rect

Device Viewport 좌표계 위에 카메라가 캡쳐한 이미지를 출력하는 범위를 조절할 수 있는 옵션이다. X는 X축 좌표, Y는 Y축 좌표, W는 Width, H는 Height를 나타낸다. 일반적으로는 (X: 0, Y: 0, W: 1, H: 1) 값으로 변경하지 않고 사용한다.

Viewport

화면에 표시되는 영역이다. Viewport 좌표계는 사람 중심의 좌표계가 아니라 디바이스 기준의 좌표계이므로 화면의 중앙이 (0, 0)이다. X축의 +방향은 오른쪽, Y축의 +방향은 위쪽이다. 또한, 디바이스가 기준이므로 (Width, Height) == (1, 1), (0, 0) = (-1, -1)이 된다.

아래 그림은 화면 좌표계와 Viewport 좌표계 사이의 관계를 (400, 600)의 화면을 기준으로 표현한 것이다.

6. Depth

카메라 간의 렌더링 순서를 조절할 수 있는 옵션이다. 기본은 -1이며, 값이 높을 수록 더 위에 그려진다.

참고

  1. 02_유니티 개발 기초(그림 1 출처)
  2. 카메라 컴포넌트 설명
  3. 유니티 카메라 매뉴얼
  4. Rendering Pipeline
  5. Calculate Orthographic Size

0개의 댓글