안동민 개발노트

본문 시작

날씨 시스템 설정

비·눈·안개·구름과 조명·오디오 요소를 묶어 날씨 상태를 만들고 블루프린트로 자연스럽게 전환합니다.

조명과 그림자 기반을 갖췄다면, 이제 월드를 움직이게 만드는 날씨 시스템을 다룰 차례입니다.

날씨 시스템은 배경 연출을 넘어 플레이 리듬과 감정선에 직접 영향을 줍니다.

같은 맵이라도 비, 안개, 맑음 전환에 따라 체감 난이도와 몰입감이 크게 달라집니다.

이번 절에서는 언리얼에서 날씨 효과를 구조적으로 구성하는 기준을 정리합니다.


날씨 시스템의 중요성

날씨 시스템은 레벨의 시각적 다양성을 제공하는 것 외에도 다음과 같은 중요한 역할을 합니다.

  • 몰입감 증대: 비, 눈, 안개, 천둥 등 사실적인 날씨 효과는 플레이어가 게임 세계에 더욱 깊이 몰입하도록 돕습니다.
  • 분위기 및 감성 변화: 맑은 날은 평화로움을, 비 오는 날은 우울함이나 긴장감을, 눈 오는 날은 고요함이나 신비로움을 연출할 수 있습니다.
  • 게임 플레이 영향
    • 시야 제한: 안개, 폭우, 눈보라 등은 플레이어의 시야를 제한하여 게임 난이도를 높이거나 특정 경로로 유도할 수 있습니다.
    • 이동 변화: 비나 눈으로 인해 지면이 미끄러워지거나, 이동 속도에 제약이 생길 수 있습니다.
    • 환경 상호작용: 물이 차오르거나 얼음이 어는 등의 환경 상호작용을 유발할 수 있습니다.
  • 재플레이 가치: 동일한 레벨이라도 다른 날씨 조건에서 플레이하며 새로운 경험을 제공할 수 있습니다.

기본적인 날씨 효과 구현 요소

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

Exponential Height Fog

  • 역할: 레벨에 전반적인 안개 효과를 추가합니다. 안개 밀도, 높이, 색상 등을 조절하여 다양한 종류의 안개(옅은 안개, 짙은 안개, 땅에 깔리는 안개 등)를 연출할 수 있습니다.
  • 날씨 연출: 흐린 날, 안개 낀 날, 미세먼지 가득한 날 등을 표현하는 데 필수적입니다.
  • 주요 설정 (디테일 패널)
    • Fog Density: 안개 밀도
    • Fog Height Falloff: 안개 높이에 따른 밀도 변화
    • Fog Inscattering Color: 안개 색상 (빛 산란 색상)
    • Start Distance: 안개가 시작되는 거리

Volumetric Cloud로 날씨 밀도 구성

  • 역할: 사실적인 3D 구름을 구현합니다. 구름의 밀도, 높이, 형태 등을 조절하여 맑은 하늘의 솜털 구름부터 폭풍 전야의 먹구름까지 다양한 하늘을 연출할 수 있습니다.
  • 날씨 연출: 날씨의 시각적 배경을 담당하며, 특히 흐린 날씨나 폭풍우를 표현할 때 중요합니다. 조명과 상호작용하여 구름 그림자를 드리우고 빛을 가리는 역할을 합니다.
  • 주요 설정 (디테일 패널)
    • Material: 구름의 형태와 밀도를 결정하는 재질.
    • 구름 재질이 노출한 밀도·커버리지 파라미터: 이름과 범위는 선택한 재질에 따라 다릅니다.
    • Layer Height, Layer Bottom Altitude: 구름 층의 두께와 시작 높이.
    • 구름 그림자는 Directional Light의 Cast Cloud Shadows, Cloud Shadow Strength 같은 광원 설정과 함께 조절합니다.

강수량(Precipitation) 파티클 시스템

  • 역할: 비, 눈, 우박 등 공기 중에 떨어지는 물방울이나 입자를 시각적으로 표현합니다.
  • 날씨 연출: 비, 눈, 우박 등의 날씨 효과를 직접적으로 구현하는 핵심 요소입니다.
  • 구현 방법

    Niagara 시스템 생성: 콘텐츠 브라우저에서 마우스 오른쪽 버튼 클릭 FX > Niagara System을 선택합니다.

    템플릿 선택: 빈 시스템 또는 설치된 버전에 제공되는 이미터 템플릿에서 시작합니다. Simple Rain·Simple Snow라는 완성 템플릿이 기본 설치에 있다고 전제하지 않습니다.

    파티클 설정: Niagara Editor에서 스폰 속도, 크기, 색상, 물리 시뮬레이션(충돌), 재질 등을 조절하여 원하는 비나 눈의 형태를 만듭니다.

    액터 배치: 완성된 Niagara 시스템을 레벨에 드래그 앤 드롭하여 배치합니다. 일반적으로 플레이어 캐릭터 주변에 배치하고 플레이어를 따라 움직이도록 설정합니다. (블루프린트 활용)


날씨 변화의 구현 (블루프린트 활용)

여기서는 날씨 전환을 블루프린트로 구현합니다. C++ 등으로도 같은 제어 구조를 만들 수 있습니다.

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

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

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

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

날씨 파라미터 제어

BP_WeatherSystem 블루프린트 내에서 날씨 효과 액터들의 속성을 제어합니다.

액터 참조 변수 생성
  • 클래스 블루프린트에 ExponentialHeightFog 타입의 Object Reference 변수를 만들고 Instance Editable을 켭니다. 레벨에 배치한 BP_WeatherSystem 인스턴스의 디테일 패널에서 실제 액터를 할당합니다. 아웃라이너에서 바로 참조를 만드는 Level Blueprint 절차와 구분합니다.
  • VolumetricCloud 액터와 강수량 Niagara 시스템도 동일하게 참조 변수를 만듭니다.
타임라인(Timeline) 또는 타이머(Timer) 활용
  • 날씨를 점진적으로 변화시키기 위해 타임라인 노드를 사용합니다. (예: 맑음에서 비로 바뀔 때 안개 밀도, 구름 범위, 강수량 파티클의 스폰 속도를 서서히 조절)
  • 타이머 노드를 사용하여 특정 시간 간격으로 날씨 상태를 전환할 수도 있습니다.
파라미터 설정 노드
  • Fog 액터에서 Exponential Height Fog 컴포넌트를 얻어 Set Fog Density를 호출합니다.
  • 구름은 런타임용 동적 머티리얼 인스턴스나 MPC에 노출한 파라미터를 바꿉니다. 범용 Set Coverage 노드가 있는 것은 아닙니다.
  • Niagara는 User.RainRate 같은 사용자 파라미터를 Spawn Rate 입력에 연결한 뒤 Niagara 컴포넌트의 변수 설정 노드로 값을 전달합니다. 파라미터를 연결하지 않은 채 이름만 설정하면 스폰 속도가 바뀌지 않습니다.

날씨 상태 (Weather States) 구현

열거형(Enum)을 사용하여 날씨 상태를 정의하고, Switch on Enum 노드를 통해 각 상태에 맞는 날씨 효과를 적용할 수 있습니다.

열거형 생성: 콘텐츠 브라우저에서 마우스 오른쪽 버튼 클릭 블루프린트(Blueprint) > 열거형(Enumeration)을 선택하고 E_WeatherState와 같이 이름을 지정합니다.

상태 추가: 열거형 에디터에서 Clear, Rainy, Foggy, Snowy 등 원하는 날씨 상태를 추가합니다.

블루프린트 로직
  • BP_WeatherSystem 블루프린트에 CurrentWeatherState라는 E_WeatherState 타입의 변수를 생성합니다.
  • 전환 이벤트의 실행 핀을 Switch on E_WeatherState에 연결하고 현재 상태를 선택 값으로 전달합니다. 각 분기에서 안개·구름·강수량의 목표 값을 정합니다. Enum 변수를 대입하는 것만으로 Switch가 자동 실행되지는 않습니다.
  • 날씨를 전환하는 이벤트(예: 특정 시간 도달, 플레이어 상호작용)가 발생하면 CurrentWeatherState 변수 값을 변경하고, 해당 변경에 따라 날씨 효과들이 업데이트되도록 만듭니다.

날씨 효과의 시각적 강화 및 최적화

포스트 프로세스 볼륨과의 연동

  • 날씨 변화에 따라 레벨의 색감(Color Grading), 노출(Exposure), 블룸(Bloom) 등을 동적으로 조절하여 날씨의 분위기를 더욱 강화합니다.
  • 예: 비 오는 날에는 채도를 낮추고 노출을 어둡게, 안개 낀 날에는 블룸을 강조하는 등.
  • Set Members in Post Process Settings로 필요한 override 필드를 켜고 값을 수정한 뒤, 변경한 구조체를 대상 볼륨의 Settings에 적용합니다.

사운드 효과 추가

  • 비 소리, 천둥소리, 바람 소리 등 날씨에 맞는 사운드 큐(Sound Cue)를 배치하고, 블루프린트에서 날씨 상태에 따라 사운드의 볼륨을 조절하거나 재생/정지시킵니다.
  • 앰비언트 사운드(Ambient Sound) 액터를 활용하여 배경 소음을 추가합니다.

최적화 고려 사항

  • 파티클 시스템 최적화: Spawn Rate와 수명으로 유지되는 입자 수를 제한합니다. Niagara Effect Type·Scalability 설정의 거리/가시성 컬링과 플랫폼별 스폰 배율을 사용합니다.
  • 볼류메트릭 클라우드 품질: Volumetric Cloud의 품질 설정을 목표 플랫폼에 맞게 조절합니다. (고품질은 성능 소모가 큽니다.)
  • 지수형 높이 안개: 볼류메트릭 안개 대신 지수형 높이 안개를 사용하면 훨씬 성능 효율적입니다.

시야와 프레임 비용을 대표 날씨마다 확인합니다. 비 파티클을 켠 것만으로 지면 마찰이나 AI 감지 규칙까지 바뀌지는 않으므로 게임플레이 반응은 별도로 연결해야 합니다.

다음 절에서는 날씨 시스템과 밀접하게 연관된 시간 시스템(낮/밤 주기)을 구현하는 방법에 대해 알아보겠습니다.