Unity/기능

[Unity] Camera

turbulence93 2025. 4. 30. 02:32

1. Camera란?

  • 유니티에서 카메라는 게임 화면을 렌더링하는 데 사용
  • 실제로 플레이어가 보는 "화면"은 카메라를 통해 렌더링

2. Camera 주요 속성

옵션 설명
Clear Flags 카메라가 어떤 배경으로 화면을 초기화할지 설정 (Skybox, Solid Color, Depth Only 등)
Background Clear Flags가 Solid Color일 때 사용할 배경 색상
Culling Mask 카메라가 렌더링할 레이어 선택
Projection 카메라 투영 방식 (Perspective: 원근감 / Orthographic: 평면)
Clipping Planes 카메라가 렌더링하는 거리 범위 (Near, Far)
Viewport Rect 화면 내에서 카메라가 차지하는 영역
Depth 카메라의 렌더링 순서
Rendring Path 렌더링 처리 방법
Target Texture 카메라가 렌더링할 대상 설정
Occlusion Culling 카메라가 보지 않는 영역을 관리하여 최적화
HDR HDR 효과 지원
MSAA 계단 현상 완화
Allow Dynamic Resolution 성능에 따라 해상도 자동 조절
Target DisPlay 여러 디스플레이가 있을 경우, 어느 디스플레이에 카메라를 출력할지 설정
Target Eye VR 환경에서 어느 눈을 대상으로 할지 설정

 

3.상세 설명

1. Clear Flag

  • 카메라가 화면을 그리기 전에 '기존 화면'을 어떤 방식으로 초기화할지 결정하는 속성
  • 선택된 Clear Flags에 따라 화면 초기화 방식이 달라지며, 렌더링 최적화에 영향을 줄 수 있음

지원 옵션

Skybox 씬에 설정된 Skybox를 화면 배경으로 렌더링
Solid Color 지정한 단일 색상으로 화면을 채움
Depth Only 깊이 정보만 초기화하고, 색상은 유지 (주로 다중 카메라 구성 시 사용)
Don't Clear (Nothing) 아무것도 초기화 X (드물게 사용하며, 직접 관리할 때 활용)

 

  1. Skybox 는 씬 전체를 둘러싸는 거대한 배경 텍스처
    • Clear Flag에서 Skybox 선택시 사용자가 지정한 텍스처를 배경으로 렌더링
  2. Solid Color 선택시 Background 속성을 사용 가능하며 선택한 색을 배경으로 렌더링

  3. Depth Only 설명에 색상을 유지하고 깊이 정보만을 초기화 한다는 설명이 있다. 
    간단한 예시로 포토샵에 투명 배경을 활용한 이미지를 들 수 있다.
    투명 배경의 이미지는 어떤 배경 위에 올려도 색상을 덮어쓰지 않고 자연스럽게 겹쳐지는 것처럼,
    Depth Only를 사용하면 기존 화면(배경 색상)은 유지한 채, 새로운 오브젝트를 추가로 렌더링할 수 있다.

    그럼 Canvas옵션에 있는 Screen Space와는 어떤 차이가 있을까?
    Screen Space - Overlay도 카메라를 무시하고 항상 화면 최상단에 그려진다는 점에서 기능은 비슷해 보인다.
    하지만 두 방식의 가장 큰 차이는 거리에 따른 연출 가능 여부가 있다.

    Sreen Space는 카메라 자체를 무시하기 때문에 거리가 변해도 별 다른 연출을 줄 수 없지만,
    Depth Only를 사용하여 랜더링 하면 거리에 따라 UI 색을 바뀌게 하거나 없애거나 하는 연출을 줄 수 있다.

    그렇다면 거리에 따라 크기가 달라지는 World Space 옵션과는 또 어떤 차이가 있을까?
    World Space를 통해 씬 내 오브젝트에 UI를 부착하면 거리에 따라 크기가 달라지는 효과를 얻을 수 있다.
    이 또한 거리에 따른 연출로 볼 수 있지만 롤이나 스타크래프트 처럼 거리가 달라져도 유닛의 HP UI가 고정되어야 하는 상황에서는 사용할 수 없다.
    Depth Only는 거리에 따라 UI크기를 고정할 수도 있기 때문에 위 게임에서 사용하기 적합하고, 거리나 시야에 따라 UI를 지운다거나 하는 연출도 가능해지는 것이다.

  4. Don't Clear는 색과 깊이를 모두 초기화 하지 않고, 이전 프레임의 화면 데이터를 그대로 남긴 채 렌더링을 시작하는 옵션이다.
    그럼 안좋은거 아닌가요? 그렇다. 실제로 자주 쓰이지도 않고 특별한 상황에서 가끔씩 사용하는데,
    대표적으로 잔상효과를 만들대 사용할 수 있다. 아니면 자신만의 특수한 효과를 만들어서 커스텀 렌더링 파이프라인을 구축할 때 정도 사용할 수 있을것이다.
    화면이 엉키거나 잔상이 이상하게 남을 수 있기 때문에 일반적인 게임 카메라에서는 절대 권장되지 않는 방식이다.

2. Culling Mask

  • Unity에서는 오브젝트마다 layer 설정이 가능하다. (예: Default, UI, Background, Enemy, Player 등등)
  • 카메라에 Culling Mask 에서 선택한 layer 오브젝트만 렌더링 할때 사용한다.
  • Culling Mask를 통해 화면에 보여줄 오브젝트를 세밀하게 제어할 수 있지만, 다중 카메라를 사용해야 하기 때문에
    최적화에 신경을 써줘야 한다.

3. Projection

  • Projection은 Unity World의 원근감을 표현하는 방식을 설정한다.
Projection 종류 노출되는 주요 프로퍼티 설명
Perspective Fov Axis 수직 또는 수평 기준으로 시야각을 계산할지 설정
  Field of View 카메라의 시야각을 ° 단위로 설정
Orthographic Orthographic Size 카메라 중심으로 보이는 거리의 반절을 설정
  1. Fov Axis 내부에 Vertical(기본값)과 Horizontal 이 있다.
    해상도에 대응하는 기능으로 Vertical은 세로 시야각이 고정되어 가로 시야가 화면 비율에 따라 변화한다.
    Horizontal은 Verical과 반대로 가로 시야각이 고정되어 세로 시야가 화면 비율에 따라 변화하는 기능이다

  2. Field of View 는 시야각으로 숫자가 커질수록 더 넓은 영역을 렌더링한다.

  3. Orthographic은 시야각이 아닌 절대적인 월드 유닛 단위로 화면 범위를 조정한다.

Orthographic Size 5

     카메라 중심을 기준으로 size 만큼 렌더링 범위가 확장된다. 크기는 거리와 무관하게 고정된다.

 

4. Clipping Planes

  • 카메라가 렌더링할 수 있는 거리의 시작과 끝을 설정하는 설정
    1. Near : 카메라로부터 얼마만큼 가까운 거리부터 보일지
    2. Far : 카메라로부터 얼마만큼 먼 거리까지 보일지 결정

Near와 Far값을 조절하여 렌더링할 거리를 조절하여 불필요한 영역을 렌더링하지 않게 하여 성능을 최적화 할 수 있다.

다만 사용에 주의할 점은 Near와 Far의 차이가 너무 클 경우에는 깊이 버퍼의 정밀도가 떨어져 깜빡임 현상이 발생할 수 있다고 하니 적절한 거리를 유지해주는 것이 좋다고 한다.

 

5. Viewport Rect

  • 카메라가 화면 내에서 차지할 영역을 설정한다.
  • 값은 x,y, w(width),h(height) 형태로 입력하며 0~1 사이 비율로 동작한다. 
  • 여러 카메라를 동시에 출력하거나 분활 화면 등을 구현할 때 효과적이다.

예를 들어 전체 화면을 100%라고 할때 x가 0.1이라면 왼쪽 10%는 렌더링 되지않고 10%이후로 렌더링이 된다.

10%부분부터 렌더링하여 화면이 짤린 모습

w,h 값은 카메라에 렌더링 되는 비율을 뜻한다. w가 0.5라면 가로 렌더링을 50%만 해주는것이다.
x가 0.2이고 w가 0.5라면 0.2부분부터 0.5만큼 렌더링하여 화면에는 0.2~0.7부분만 렌더링이 되는것이다.

x 0.2 w 0.5

6. Depth

  • Depth는 여러 카메라가 있을 때 어떤 순서로 화면을 렌더링할지를 결정한다.
  • 숫자가 낮을수록 먼저 렌더링되며, 숫자가 높을 수록 나중에 렌더링되어 덧칠되듯 출력된다.
  • UI나 미니맵 등 특수 효과를 주는 카메라를 따로 만들때 Depth를 조절하여 원하는 렌더링 순서를 결정해 보자.

7. Rendering Path

  • Unity의 렌더링 처리 방법을 선택할 수 있다.
Forward (기본값) 각 오브젝트가 라이트마다 한 번씩 렌더링됨 간단하고 가볍다 라이트 수가 많아지면 성능 저하
Deferred 모든 오브젝트를 한 번에 렌더링 후 조명 따로 계산 조명 개수가 많아도 효율적 일부 기능 제한 (투명도, MSAA 미지원 등)
Legacy Vertex Lit 예전 방식, 버텍스 단위 조명 처리 매우 빠름 품질 매우 낮음 (거의 사용 안 함)

 

  1. Forward
    • 오브젝트마다 조명 계산을 개별적으로 수행하기 때문에 기본적으로 가볍고 빠르지만, 조명이 많아지면 성능 저하가 발생한다.
    • 가벼운 게임, 2D게임에 적합
  2. Deferred
    • 화면 전체를 먼저 렌더링한 뒤 조명을 따로 계산하기 때문에,조명 개수가 많을수록 성능 면에서 유리
    • 기본적으로는 Forward보다 처리 과정이 복잡하고 무거운 편
    • 고품질, 복잡한 조명 및 그림자, 다이나믹 씬에 적합

 

8. Target Texture

  • 카메라가 촬영한 화면을 직접 렌더링하지 않고, Target으로 지정한 오브젝트에서 렌더링 한다.
  • 예를 들어 cctv를 구현한다고 했을때, cctv 오브젝트를 만들고 Target Texture로 설정해 놓으면
    해당 카메라가 렌더링한 결과를 Target Texture로 설정한 오브젝트에 실시간으로 표시한다.

9. Occlusion Culling

  • 카메라에 보이지 않는 오브젝트를 렌더링 대상에서 제외하는 설정
  • 예를 들어 벽 뒤에 가려진 오브젝트처럼, 카메라가 볼 수 없는 오브젝트는 렌더링하지 않도록 처리
  • 그렇기 때문에 static으로 설정된 고정 오브젝트에 사용하는것이 효과적이며, 구조물이 많은 씬에서 성능 향상에 도움이 된다.
  • 다만, 빠르게 이동하는 카메라나 움직이는 오브젝트에 적용되면, 렌더링이 늦어져 오브젝트가 갑자기 튀어나오는 듯한 현상이 발생할 수 있다.
  • 상황게 맞게 적절한 오브젝트에 사용한다면 성능 향상에 많은 도움이 된다.

10.HDR

  • 카메라의 HDR 옵션을 Use Graphics Settings로 설정하면 사용 가능
  • 다만 프로젝트 전역 그래픽 설정(URP/HDRP 에셋)에서 HDR이 비활성화되어 있다면 적용되지 않는다.
  • LDR 대비 밝기와 색상의 표현 범위가 훨씬 넓어져 화면을 더욱 생생하게 만들어 준다.
  • 화면을 시작적으로 풍부하게 만들어주지만 GPU와 메모리에 주는 부하도 늘어나니 플랫폼 성능을 고려하여 선택적으로 사용하도록 하자.

11. MSAA

  • Muti Sample Anti Aliasing의 줄임말로 오브젝트 외각선에서 생기는 계단 현상을 부드럽게 처리해주는 기술
  • MSAA를 사용하면 화면을 렌더링 할 때 픽셀을 여러 번 샘플링하여 가장자리를 부드럽게 표현
  • Rendering Path - Forward 설정일 때만 사용이 가능하고, 성능에 부하가 있다.

12. Allow Dynamic Resolution

  • Unity가 GPU 성능이 부족할 때 자동으로 렌더링 해상도를 낮춰 프레임을 유지하는것을 허용하는 기능
  • 해상도를 낮춰 프레임을 유지하여 성능 최적화에는 효과적이지만, 해상도 저하로 인한 화질 손상이 발생할 수 있다.
  • 옵션을 항상 켜는 것 보다는 사용자가 선택할 수 있도록 옵션으로 제공하는 것이 유리
  • PC와 같은 해상도에 민감한 플랫폼에서는 주의가 필요하다.

13. Target Display

  • Unity 프로젝트에서 카메라가 어느 Display(화면)에 출력될지를 설정하는 기능
  • Unity는 기본적으로 최대 8개의 Display를 지원하며, Diplay1은 항상 기본 모니터이다.
  • 디바이스에 실제로 여러 모니터나 Display가 연결되어 있어야 한다.

예를 들어 오버워치 같은 FPS 게임에서 사망하면 아군 플레이어의 화면을 보여주는 기능을 구현할 때 주로 사용 가능하다.

드론이나 CCTV 등 별도 화면을 출력하는 등 다양하게 연출이 가능하며 게임뿐 아니라 데모, 시뮬레이터 등에서도 유용하게 사용가능 하다.

 

14. Target Eye

  • VR환경에서 사용되는 옵션으로 Unity 카메라가 어느 눈에 화면을 렌더링할지를 설정
  • VR은 좌우 두 눈 시점이 따로 있기 때문에 한쪽 눈에만 출력하거나, 양쪽 눈에 똑같이 출력할지 선택할 수 있어야 함
Both 기본값. 양쪽 눈(Left + Right) 모두에 화면을 출력
Left 왼쪽 눈에만 출력
Right 오른쪽 눈에만 출력
None (disabled) VR 출력 대상에서 제외됨

'Unity > 기능' 카테고리의 다른 글

[Unity] const, readlony, static readonly  (1) 2025.05.01
[Unity] 2D - Mathf.Atan2를 이용한 Rotate 계산  (0) 2025.05.01
[Unity] Pixel per Unit(PPU)  (1) 2025.04.29
[Unity] 알고리즘 - 동적 계획법  (0) 2025.04.21
[Unity] Class와 Struct  (0) 2025.04.16