본문 바로가기

씬 구성 요소 - Light, Camera, Mesh

Light·Camera·Mesh의 종류와 상호작용을 비교하고 장면의 시점·조명·형상을 목적에 맞게 구성합니다.

3장까지 만든 캐릭터는 움직이고 시점을 돌릴 수 있지만, 그 캐릭터가 서 있을 세계가 없다면 게임이 되지 않습니다. 게임 화면에 무언가가 보이려면 형태를 가진 물체가 있어야 하고, 그 물체를 비추는 빛이 있어야 하며, 그 장면을 어디서 바라볼지 정하는 카메라가 있어야 합니다. 그래서 장면, 즉 씬(scene)은 주로 메시(mesh), 빛(light), 카메라(camera)라는 세 가지 요소로 이루어집니다.

이 글에서는 세 요소가 각각 어떤 종류로 나뉘고 장면에서 무엇을 맡는지 살펴본 뒤, 세 요소가 어떻게 함께 작용하는지 정리합니다. 마지막으로 화면이 예상과 다를 때 어느 요소부터 확인할지 판단하는 방법을 익힙니다.


빛: 표면이 어떻게 보일지 정하기

빛은 3D 장면에서 가장 큰 영향을 미치는 요소 가운데 하나입니다. 조명을 받는 표면은 빛의 종류와 배치, 강도에 따라 다르게 보입니다. 다만 빛을 받지 않는 언릿(Unlit) 머티리얼이나 스스로 빛을 내는 이미시브(Emissive) 표현처럼 광원 없이도 보이는 표현이 있으므로, 이런 경우는 따로 구분합니다.

언리얼 엔진은 여러 종류의 광원을 제공합니다. 디렉셔널 라이트(Directional Light)는 태양처럼 아주 멀리서 평행하게 들어오는 빛을 흉내 냅니다. 장면 전체에 같은 방향으로 영향을 주므로 낮과 밤 환경의 주광원으로 쓰이며, 그림자의 방향과 진하기를 정하는 데 핵심적인 역할을 합니다.

포인트 라이트(Point Light)는 전구처럼 한 점에서 사방으로 빛을 내는 광원으로, 거리가 멀어질수록 빛이 약해지므로 좁은 영역을 밝히거나 특정 물체를 강조할 때 씁니다. 스포트 라이트(Spot Light)는 손전등이나 자동차 전조등처럼 원뿔 모양의 영역을 비추며, 원뿔의 안쪽과 바깥쪽 각도를 조절해 빛이 퍼지는 모양을 정합니다. 렉트 라이트(Rect Light)는 창문이나 큰 화면처럼 직사각형 면에서 빛을 내는 광원으로, 실내에서 넓은 영역을 부드럽게 밝히거나 사실적인 반사를 만들 때 효과적입니다. 스카이 라이트(Sky Light)는 하늘과 먼 풍경처럼 레벨의 멀리 있는 부분을 담아 장면 전체에 빛으로 입히는 광원으로, 디렉셔널 라이트와 함께 넓은 실외 장면을 밝힐 때 씁니다.

빛은 물체를 보이게 할 뿐 아니라 장면의 분위기를 정합니다. 같은 방이라도 밝고 따뜻한 빛과 어둡고 차가운 빛은 전혀 다른 느낌을 주고, 빛과 그림자가 만나는 모습은 물체의 형태와 깊이를 드러내 입체감을 줍니다. 대신 광원의 개수, 그림자 계산 방식, 반사 여부는 렌더링 성능에 큰 영향을 줍니다. 언리얼은 광원마다 움직이지 않는 정적(Static), 일부만 바뀌는 스테이셔너리(Stationary), 자유롭게 움직이는 무버블(Movable) 같은 모빌리티(Mobility) 설정을 두어 성능과 품질 사이의 균형을 조절하게 합니다.


카메라: 플레이어가 보는 시점

카메라는 플레이어가 게임 월드를 어디서 어떻게 보는지를 정합니다. 3D 장면의 카메라는 촬영 장비와 같아서, 위치와 방향, 시야각(field of view)에 따라 같은 장면도 전혀 다른 화면이 됩니다.

게임에서 쓰는 카메라는 크게 두 가지입니다. 플레이어 카메라는 플레이어가 게임 월드를 보는 주된 시점으로, 보통 APlayerController가 조종하는 APawn이나 ACharacter에 붙은 UCameraComponent로 구현합니다. 시네마틱 카메라(Cinematic Camera)는 게임 속 이벤트나 컷신(cutscene)에서 특정 연출을 위해 쓰는 카메라로, 렌즈와 초점 같은 촬영 속성을 제공하며 시퀀서(Sequencer)나 게임 코드로 움직여 장면을 강조합니다.

카메라는 1인칭(FPS), 3인칭(TPS), 탑다운, 쿼터뷰처럼 게임의 핵심 플레이 방식을 정합니다. 플레이어가 알아야 할 정보를 화면에 어떻게 담을지도 카메라가 정하고, 알맞은 연출은 몰입감을 높입니다. 플레이 중에는 APlayerController를 통해 카메라의 회전(Yaw, Pitch)과 위치를 조절해 플레이어가 월드를 둘러보게 하며, 컴포넌트 시스템 이해와 활용에서 쓴 USpringArmComponent처럼 캐릭터와 카메라 사이의 거리를 유지하고 장애물에 부딪히면 카메라를 당겨 오는 컴포넌트도 있습니다.


메시: 장면을 이루는 형태

메시는 3D 장면을 이루는 가장 기본적인 형태입니다. 삼각형(triangle)으로 된 면의 집합으로, 캐릭터, 건물, 나무, 바위, 무기처럼 게임 월드의 많은 물체를 표현합니다. 파티클이나 볼륨처럼 메시가 아닌 다른 표현 방식도 있습니다.

메시는 크게 두 종류입니다. 스태틱 메시(Static Mesh)는 골격 애니메이션을 쓰지 않는 메시로, 건물, 지형, 가구, 소품 같은 대부분의 환경 물체에 쓰입니다. 이름에 Static이 붙었지만 월드에서 움직일 수 없다는 뜻은 아닙니다. 컴포넌트를 이동하거나 회전할 수 있고, 머티리얼의 월드 포지션 오프셋(World Position Offset)으로 정점을 변형할 수도 있습니다. 보통 외부 3D 모델링 도구에서 만들어 .FBX 같은 형식으로 가져옵니다.

스켈레탈 메시(Skeletal Mesh)는 골격(skeleton)을 가지고 애니메이션할 수 있는 메시입니다. 캐릭터, 몬스터, 팔다리가 있는 동물처럼 움직임과 애니메이션이 필요한 물체에 쓰이며, 골격의 각 뼈(bone)를 움직여 메시의 형태를 바꾸고 애니메이션을 만듭니다.

메시는 형태와 표면을 만들 뿐 아니라 충돌 판정에도 영향을 줍니다. UStaticMeshComponent나 USkeletalMeshComponent에 직접 충돌 설정을 적용할 수 있습니다. 또 메시의 삼각형 수와 머티리얼의 복잡도는 렌더링 성능에 직접 영향을 주므로, 거리에 따라 단순한 모델로 바꾸는 LOD(Level of Detail)나 최적화된 메시를 쓰는 것이 성능 관리에 꼭 필요합니다.

표면이 어떻게 보일지는 머티리얼(Material)이 정합니다. 머티리얼은 표면이 빛과 어떻게 상호작용할지를 정의하고, 텍스처(Texture), 상수, 정점 색 같은 데이터를 입력으로 쓸 수 있습니다. 텍스처는 머티리얼에 세부적인 색이나 무늬를 더하지만, 모든 머티리얼에 텍스처가 꼭 있어야 하는 것은 아닙니다.


세 요소가 함께 만드는 화면

세 요소는 따로 존재하지 않고 서로 맞물려 작용합니다. 빛은 메시의 표면에 닿아 색과 형태를 드러내고 그림자를 드리우며, 메시는 장면의 시각적 바탕이 되어 빛을 받아 사실적인 모습을 갖춥니다. 카메라는 이 빛과 메시가 만든 결과를 담아 플레이어에게 보여 줍니다.

언리얼 에디터의 뷰포트는 이 세 요소의 조합을 실시간으로 보여 주는 창입니다. 뷰포트에서 액터를 배치하고, 액터에 붙은 메시 컴포넌트의 형태를 확인하고, 광원 액터로 분위기를 만들고, 카메라의 위치와 시야각을 바꾸며 플레이어가 볼 화면을 설계합니다.

세 요소가 맞물려 있기 때문에, 화면이 예상과 다를 때는 원인을 한 요소씩 나눠 봐야 합니다. 통로에 놓인 의자가 스태틱 메시 에셋을 쓴다고 해 봅시다. 플레이 도중 이 의자를 옮기려면 배치된 컴포넌트의 모빌리티 설정을 확인해야 합니다. 에셋 이름의 Static은 골격 애니메이션을 쓰지 않는다는 뜻이고, 컴포넌트의 Static 모빌리티와는 다른 이야기입니다.

의자가 화면에는 보이는데 캐릭터가 그냥 통과한다면 메시 종류를 바꿀 것이 아니라 충돌 설정을 확인합니다. 반대로 충돌은 제대로 되는데 의자가 화면에 보이지 않는다면, 지금 플레이에 쓰이는 카메라의 위치, 방향, 시야각부터 살펴봅니다.


플레이 화면에서 확인할 기준

장면을 꾸민 뒤에는 에디터의 자유 시점이 아니라 실제 플레이 화면에서 다음 네 가지를 확인합니다.

  • 형태: 메시의 스케일, 피벗, 충돌이 플레이 공간과 맞는지 봅니다.
  • 가시성: 목표와 이동 경로가 실제 카메라 시점에서 잘 보이는지 봅니다.
  • 시점: 구도와 거리, 장애물 처리 때문에 필요한 정보가 가려지지 않는지 봅니다.
  • 비용: 대상 기기에서 조명, 그림자, 메시, 머티리얼의 비용을 함께 측정합니다. 모빌리티를 고르는 것만으로 성능이나 품질이 정해지지는 않습니다.

정리

  • 장면은 형태를 만드는 메시, 표면을 비추는 빛, 시점을 정하는 카메라로 이루어지며, 세 요소는 서로 맞물려 화면을 만듭니다.
  • 광원에는 디렉셔널, 스카이, 포인트, 스포트, 렉트 라이트가 있고, 모빌리티 설정으로 성능과 품질의 균형을 조절합니다. 언릿과 이미시브 표현은 광원 없이도 보입니다.
  • 플레이어 카메라는 보통 조종하는 폰의 UCameraComponent이고, 시네마틱 카메라는 시퀀서 등으로 연출에 씁니다.
  • 스태틱 메시는 골격 애니메이션이 없는 메시일 뿐 움직일 수 없다는 뜻이 아니며, 스켈레탈 메시는 골격으로 애니메이션합니다.
  • 머티리얼은 표면이 빛과 상호작용하는 방식을 정하며, 텍스처는 머티리얼의 입력 가운데 하나입니다.
  • 화면이 예상과 다르면 형태와 충돌, 카메라 시점, 머티리얼과 조명을 한 가지씩 바꿔 원인을 좁힙니다.

연습 문제

1. 에디터에서는 보이는데

에디터의 자유 시점에서는 길이 잘 보이는데, 플레이 화면에서는 그 길이 벽 뒤에 가려집니다. 메시와 조명은 같습니다. 무엇부터 확인해야 할까요?

해설 보기

실제 플레이에 쓰이는 카메라의 시점과 그 앞을 가리는 장애물부터 확인합니다. 에디터의 자유 시점은 플레이어의 카메라와 다른 위치에서 장면을 보므로, 에디터에서 잘 보였다는 사실이 플레이어의 시점에서도 보인다는 뜻은 아닙니다. 메시와 조명이 같다는 조건이 있으므로 카메라의 위치, 방향, 시야각과 스프링 암의 길이를 먼저 봅니다.

2. 빛을 바꿔도 그대로인 표지판

언릿 머티리얼을 쓴 표지판이 조명의 강도를 아무리 바꿔도 같은 색으로 보입니다. 광원이 고장 났다고 판단해도 될까요?

해설 보기

그렇게 판단하면 안 됩니다. 언릿 머티리얼은 빛을 받지 않고 머티리얼 입력으로 정한 색을 그대로 보여 주므로, 조명을 바꿔도 색이 변하지 않는 것이 정상입니다. 먼저 머티리얼이 언릿인지와 머티리얼의 입력을 확인합니다.

광원을 바꿀 때마다 메시, 카메라, 머티리얼까지 함께 바꾸면 어느 조건 때문에 결과가 달라졌는지 알 수 없습니다. 한 번에 한 조건만 바꿔 비교합니다.

광원의 종류와 모빌리티는 Epic의 Light Types and Their Mobility 문서에서 더 자세히 확인할 수 있습니다.

다음 글 Level Blueprint vs C++ 스크립트에서는 레벨 블루프린트와 C++ 액터 가운데 어디에 레벨의 로직을 둘지 비교합니다.