icon
6장 : 날씨와 시간 시스템

시간 시스템과 주기 조정


이전 절에서 레벨에 다양한 날씨 효과를 추가하는 방법을 배우셨습니다. 이제 날씨 시스템과 밀접하게 연관된 또 다른 동적인 요소, 바로 시간 시스템(Time of Day System) 을 구현하는 방법을 알아볼 차례입니다. 낮과 밤의 변화는 레벨의 분위기를 극적으로 전환하고, 조명과 그림자의 다이내믹한 변화를 통해 시각적 몰입도를 최고조로 끌어올립니다. '나 혼자 언리얼 기본' 교재를 통해 여러분이 언리얼 엔진에서 낮과 밤의 주기를 구현하고, 이를 통해 더욱 생동감 있고 사실적인 가상 세계를 창조할 수 있도록 안내해 드리겠습니다. 해가 뜨고 지며 달이 뜨는 자연의 순리처럼, 여러분의 레벨도 시간의 흐름에 따라 변화하는 모습을 만들어 봅시다.


시간 시스템의 중요성

시간 시스템은 단순히 배경 효과를 넘어, 게임 플레이와 레벨의 전반적인 경험에 깊은 영향을 미칩니다.

  • 극적인 분위기 변화: 밝고 활기찬 낮, 로맨틱하거나 음산한 저녁노을, 어둡고 긴장감 넘치는 밤 등 시간의 흐름에 따라 레벨의 분위기가 시시각각 변합니다.
  • 조명 및 그림자 변화: 태양의 위치가 변함에 따라 빛의 방향, 그림자의 길이와 선명도가 실시간으로 변화하여 극도의 사실감을 제공합니다.
  • 시야 제한 및 전략적 요소: 밤에는 시야가 제한되어 플레이어에게 새로운 도전 과제를 제시하거나 은신, 잠입 플레이를 유도할 수 있습니다.
  • 게임 플레이 상호작용: 특정 시간에만 활성화되는 이벤트, NPC의 행동 변화, 몬스터의 등장 등 시간과 연동된 게임 플레이 요소를 구현할 수 있습니다.
  • 몰입감 증대: 현실 세계의 자연스러운 흐름을 반영하여 플레이어가 게임 세계에 더욱 깊이 몰입하도록 돕습니다.

시간 시스템 구현의 핵심 요소

언리얼 엔진에서 시간 시스템을 구현하기 위해 주로 사용되는 기본적인 액터들과 개념은 다음과 같습니다.

Directional Light

  • 역할: 태양(낮)과 달(밤)의 역할을 합니다. 시간 시스템의 핵심이며, 이 액터의 회전(Rotation) 이 직접광의 방향과 강도를 결정합니다.
  • 주요 설정 (디테일 패널)
    • Mobility: 낮/밤 주기와 같이 실시간으로 움직여야 하므로 반드시 Movable 로 설정해야 합니다. (Stationary는 간접광은 베이크되지만, 직접광 그림자는 실시간이지만 태양의 움직임에 따라 그림자 방향이 변하는 데는 제한적입니다.)
    • Rotation (회전): 특히 Pitch (Y축 회전) 값이 태양/달의 고도(높이)를 결정하고, Yaw (Z축 회전) 값이 태양/달의 동서남북 위치를 결정합니다.
    • Intensity: 빛의 밝기. 낮에는 높게, 밤에는 낮게 조절해야 합니다.
    • Light Color: 빛의 색상. 낮에는 흰색/노란색 계열, 해질녘에는 주황색/붉은색, 밤에는 푸른색 계열로 조절하여 분위기를 연출합니다.

Sky Light

  • 역할: 하늘 전체에서 들어오는 주변광(Ambient Light)을 시뮬레이션합니다. 낮/밤 주기 변화에 따라 하늘의 색상 정보를 캡처하여 간접광을 업데이트해야 합니다.
  • 주요 설정 (디테일 패널)
    • Mobility: Movable로 설정하여 실시간으로 하늘의 변화를 캡처하고 반영해야 합니다.
    • Real Time Capture (실시간 캡처): 이 옵션을 활성화해야 Directional Light의 회전이나 Sky Atmosphere의 변화에 따라 Sky Light의 간접광이 실시간으로 업데이트됩니다.
    • Intensity Scale: 스카이 라이트의 밝기. 밤에는 낮게, 낮에는 높게 조절합니다.

Sky Atmosphere

  • 역할: 사실적인 대기 산란 효과를 구현합니다. 태양/달의 고도에 따라 하늘의 푸른색, 노을의 붉은색, 새벽의 푸르스름한 색상 등을 자동으로 표현합니다.
  • 주요 설정 (디테일 패널)
    • Directional Light Actor: 이 스카이 어트모스피어가 참조할 Directional Light 액터를 지정해야 합니다. 지정된 광원의 회전에 따라 대기 효과가 자동으로 변화합니다.
    • Rayleigh Scattering: 하늘의 푸른색 정도.
    • Mie Scattering: 노을, 스모그 등 뿌연 효과.

Volumetric Cloud

  • 역할: 3D 구름을 구현하여 하늘에 입체감을 더합니다. Directional Light의 위치에 따라 구름에 그림자를 드리우고 빛을 가려 사실감을 높입니다.
  • 주요 설정 (디테일 패널)
    • Directional Light Actor: 이 클라우드가 참조할 Directional Light 액터를 지정해야 구름에 드리우는 그림자가 정확하게 반영됩니다.
    • 구름의 Coverage, Layer Height, Layer Bottom Altitude 등을 조절하여 날씨와 시간에 따른 구름 변화를 연출할 수 있습니다.

Post Process Volume

  • 역할: 최종 렌더링 화면에 노출(Exposure), 색상 보정(Color Grading), 블룸(Bloom) 등 시각 효과를 적용하여 시간대별 분위기를 강화합니다.
  • 주요 설정 (디테일 패널)
    • Exposure (노출): Min BrightnessMax Brightness를 조절하여 카메라의 자동 노출 범위를 설정합니다. 밤에는 Max Brightness를 낮추거나 Manual Exposure를 사용하여 어둡게 만듭니다.
    • Color Grading: 색상, 채도, 대비 등을 조절하여 낮, 저녁, 밤에 맞는 색감을 연출합니다.
    • Bloom: 낮/밤에 따라 빛 번짐 효과를 조절합니다.

시간 시스템 구현 (블루프린트 활용)

시간 시스템은 보통 단일 마스터 블루프린트를 통해 위의 모든 액터들을 제어하는 방식으로 구현됩니다.

시간 시스템 마스터 블루프린트 생성

새로운 블루프린트 클래스 생성: 콘텐츠 브라우저에서 마우스 오른쪽 버튼 클릭 블루프린트 클래스(Blueprint Class)를 선택합니다.

부모 클래스 선택: Actor를 부모 클래스로 선택하고 BP_TimeOfDaySystem과 같이 이름을 지정합니다.

액터 배치: BP_TimeOfDaySystem 블루프린트 액터를 레벨에 배치합니다.

액터 참조 변수 생성

BP_TimeOfDaySystem 블루프린트 내에서 시간 시스템에 관련된 모든 액터들(Directional Light, Sky Light, Sky Atmosphere, Volumetric Cloud, Post Process Volume)에 대한 참조 변수를 생성하고, 레벨에 있는 해당 액터들을 이 변수에 할당합니다.

  • Directional Light Actor (타입: Directional Light)
  • Sky Light Actor (타입: Sky Light)
  • Sky Atmosphere Actor (타입: Sky Atmosphere)
  • Volumetric Cloud Actor (타입: Volumetric Cloud)
  • Post Process Volume Actor (타입: Post Process Volume)

낮/밤 주기 로직 구현

현재 시간 변수: CurrentTimeInHours (Float 타입)와 같은 변수를 만들어 현재 시간을 0.0 (자정)부터 24.0 (다음 자정)까지 표현합니다.

틱(Tick) 이벤트: Event Tick 노드를 사용하여 매 프레임마다 CurrentTimeInHours 값을 증가시킵니다.

  • Delta Seconds를 사용하여 프레임 속도에 독립적으로 시간이 흐르도록 합니다.
  • TimeScale (Float 변수)을 만들어 시간의 흐름 속도를 조절할 수 있게 합니다. (예: 1.0은 실제 시간, 60.0은 60배 빠르게)
  • CurrentTimeInHours = FMOD(CurrentTimeInHours + DeltaSeconds * TimeScale, 24.0) 와 같이 24시간 주기로 반복되도록 합니다.

조명 회전: CurrentTimeInHours 값에 따라 Directional Light Actor회전 값(Rotation) 을 계산하여 적용합니다.

  • 태양의 고도는 주로 Pitch (Y축 회전)에 영향을 받습니다. 0시에는 낮고, 12시(정오)에는 가장 높고, 24시에는 다시 낮아지도록 계산합니다.
  • Map Range Clamped 노드 등을 사용하여 시간(024)을 원하는 각도 범위(예: -9090)로 매핑할 수 있습니다.
  • Set Actor Relative Rotation 노드를 사용하여 Directional Light Actor의 회전을 업데이트합니다.

조명 강도 및 색상 변경: CurrentTimeInHours에 따라 Directional Light ActorSky Light ActorIntensityLight ColorTimeline 또는 Curve 에셋을 사용하여 점진적으로 변화시킵니다.

  • Timeline 노드를 생성하고, Float Track이나 Vector Track을 추가하여 시간(0~24)에 따른 강도나 색상 값을 그래프로 편집합니다.
  • 예: 낮에는 강도 높게, 밤에는 강도 낮게. 해질녘에는 주황색/붉은색으로.

후처리 볼륨 설정 변경: CurrentTimeInHours에 따라 Post Process Volume ActorExposure, Color Grading 등을 Timeline이나 Set Members in Post Process Settings 노드를 사용하여 조절합니다.


고급 조절 및 최적화

다양한 시간대 프리셋

  • 특정 시간대에 대한 Preset (예: Sunrise, Noon, Sunset, Midnight)을 만들고, Set Time Of Day와 같은 커스텀 이벤트(Custom Event)를 호출하여 해당 시간대로 즉시 전환하거나 부드럽게 보간(Lerp)하도록 구현할 수 있습니다.

날씨 시스템과의 연동

  • BP_TimeOfDaySystemBP_WeatherSystem을 서로 참조하게 하여, 날씨 상태에 따라 시간 시스템의 변화에 영향을 주도록 만들 수 있습니다. (예: 비 오는 날에는 하늘이 더 어둡고 노출을 낮추는 등)

성능 고려 사항

  • 모든 조명 액터 (Directional Light, Sky Light)는 Movable 로 설정해야 하므로, 실시간 렌더링 부하가 큽니다. 불필요하게 많은 Movable 조명을 사용하지 않도록 주의해야 합니다.
  • Real Time Capture가 활성화된 Sky Light는 매 프레임 캡처를 수행하므로 성능에 영향을 줄 수 있습니다.
  • Volumetric Cloud의 품질과 Post Process Volume의 복잡한 효과들도 성능에 영향을 주므로, 목표 플랫폼의 사양에 맞춰 적절히 조절해야 합니다.

시간 시스템 설정은 레벨에 역동적인 생명력을 불어넣는 창의적인 과정입니다. 이 절에서 배운 Directional Light, Sky Light, Sky Atmosphere, Volumetric Cloud 등의 핵심 액터들을 블루프린트 내에서 Timeline 노드를 활용하여 동적으로 제어하고, Post Process Volume으로 최종적인 분위기를 완성하는 연습을 충분히 해보세요. 이는 여러분의 레벨을 단순한 배경이 아닌, 시간의 흐름에 따라 변화하는 살아있는 세계로 만드는 데 큰 도움이 될 것입니다.