안동민 개발노트

본문 시작

날씨 및 시간 효과 적용

날씨와 시간 상태에 맞춰 시각 효과·오디오·게임플레이 반응을 함께 전환하는 통합 환경 규칙을 구성합니다.

날씨 시스템과 시간 시스템을 각각 구현해도, 서로 따로 움직이면 화면은 좋아 보여도 체감은 쉽게 어색해집니다.

예를 들어 비가 내리는데 소리는 맑은 낮 상태로 유지되거나, 밤인데 노출 값이 낮처럼 밝으면 플레이어는 즉시 이질감을 느끼게 됩니다.

이번 절에서는 시각 효과, 오디오, 게임플레이 반응을 한 규칙으로 묶는 방법을 다룹니다.

상태 전환 시 어떤 값을 함께 바꿔야 일관성이 유지되는지, 블루프린트에서 어떻게 통합 관리하면 운영 부담이 줄어드는지까지 정리하겠습니다.

이 과정을 마치면 레벨의 분위기 변화가 단순 연출이 아니라 재사용 가능한 시스템으로 동작하게 됩니다.


날씨 및 시간 시스템 통합의 중요성

개별적으로 날씨와 시간 시스템을 구축하는 것도 중요하지만, 이 둘을 유기적으로 통합하고 게임 플레이와 연동시키는 것이 레벨의 완성도를 높이는 핵심입니다.

  • 시각적 일관성: 날씨(예: 비)와 시간(예: 밤)이 함께 작용할 때, 조명, 안개, 구름, 그리고 강수량 효과 등이 서로 조화롭게 변화해야 합니다. 예를 들어, 비 오는 밤은 낮의 비와는 다른 어둡고 축축한 분위기를 연출해야 합니다.
  • 청각적 피드백: 시각적 변화에 맞춰 빗소리, 천둥소리, 밤벌레 소리 같은 환경 사운드를 추가합니다.
  • 게임 플레이 영향: 날씨와 시간의 변화가 단순히 시각적인 것에 그치지 않고, 플레이어 캐릭터의 이동 속도, 시야, NPC의 행동 등 게임 플레이에 실질적인 영향을 미치도록 설계합니다.
  • 최적화 관리: 복잡한 동적 시스템은 성능에 큰 영향을 미치므로, 통합된 관리 시스템을 통해 효율적인 최적화 전략을 적용해야 합니다.

시각적 효과 적용 및 미세 조정

날씨와 시간 효과는 조명, 하늘, 머티리얼, 후처리가 함께 움직일 때 자연스럽게 보입니다.

앞 절에서 만든 BP_WeatherSystem과 BP_TimeOfDaySystem을 기반으로, 시간/날씨 상태별 액터 속성 조정을 일관된 규칙으로 묶어 관리해야 합니다.

조명 (Lighting)

  • Directional Light
    • Intensity: 낮에는 높게, 밤에는 낮게. 흐린 날에는 낮의 강도를 약간 낮춥니다.
    • Light Color: 해 뜨고 질 때 주황/붉은색, 낮에는 백색광, 밤에는 푸른색으로 변화시킵니다. 비/눈 올 때는 회색조를 추가하여 흐린 분위기를 냅니다.
  • Sky Light
    • Intensity Scale: Directional Light와 유사하게 낮/밤에 따라 조절합니다.
    • 하늘 갱신: Real Time Capture 또는 필요한 시점의 Recapture를 선택합니다. 실시간 캡처를 항상 켜야 하는 것은 아닙니다.
  • Ambient Cubemap: 지원되는 후처리 경로에서 큐브맵 기반 환경 조명을 보강할 수 있습니다. 하늘 조명에는 로컬 차폐를 지원하는 Sky Light를 우선 검토하고, 후처리 항목을 Lumen의 GI 전체와 같은 기능으로 취급하지 않습니다.

안개 (Fog)

  • Exponential Height Fog
    • Fog Density: 안개 낀 날이나 밤에 밀도를 높여 시야를 제한하고 분위기를 어둡게 합니다.
    • Fog Height Falloff: 높이에 따른 밀도 감소율을 조절합니다. 작은 값은 수직 전환을 더 넓게, 큰 값은 더 좁게 만듭니다. 기준 높이는 액터의 Z 위치와 함께 확인합니다.
    • Fog Inscattering Color: 안개에 색상을 부여하여 분위기를 연출합니다 (예: 푸른 새벽 안개, 오렌지색 스모그).
  • Volumetric Fog (활성화 시): 밤이나 짙은 안개 시 Extinction Scale (소멸 배율)을 높여 밀도를 높이고, Albedo (반사율)와 Emissive (방출) 색상을 조절하여 빛과의 상호작용을 강화합니다 (God Rays 등).

구름 (Clouds)

  • Volumetric Cloud
    • 구름 양: 재질이 노출한 커버리지·밀도 파라미터를 조절합니다. 이름과 증가 방향은 재질 구현에 맞춰 확인합니다.
    • Layer Height / Bottom Altitude: 구름 층의 높이와 두께를 조절하여 다양한 종류의 구름을 표현합니다.
    • Cloud Shadow Strength: Directional Light의 구름 그림자 옵션에서 조절합니다.
    • Material Parameters: 구름 재질의 파라미터(예: Cloud Density, Phase Function)를 블루프린트에서 조절하여 구름의 형태와 밀도를 동적으로 변화시킵니다.

후처리 (Post Processing)

  • Post Process Volume
    • Exposure (노출): 낮에는 밝게, 밤에는 어둡게 자동 노출 범위를 조절하거나 수동 노출로 설정합니다. 비 오는 날이나 흐린 날에는 전반적인 노출을 약간 낮춥니다.
    • Color Grading (색상 보정):
      • Global Gain / Gamma / Offset: 레벨 전체의 밝기, 대비, 색조를 조절하여 시간/날씨에 맞는 색감을 만듭니다. (예: 일몰 시 붉은색, 밤에는 푸른색)
      • Saturation / Contrast: 날씨에 따라 채도와 대비를 조절합니다. (예: 비 오는 날 채도 낮춤)
    • Bloom (블룸): 밝은 광원이 있는 장면에서 빛이 번지는 효과를 조절합니다. 밤이나 안개 낀 날에 약간 높여 빛의 확산 효과를 강조할 수 있습니다.
    • Vignette (비네트): 화면 가장자리를 어둡게 하여 시선을 중앙으로 집중시킵니다. 특정 날씨나 시간대에 연출적 요소로 활용할 수 있습니다.
    • 반사: 젖은 노면은 재질의 Roughness와 사용 중인 반사 방식을 함께 확인합니다. SSR을 쓰는 경로에서만 SSR 설정의 영향을 비교합니다.

청각적 효과 적용 (Audio System)

시각적 변화만큼이나 중요한 것이 오디오(Audio)입니다.

사운드는 날씨 상태와 시간대 변화를 플레이어가 인지하는 데 도움을 줍니다.

앰비언트 사운드 액터 활용

사운드 큐 생성: 빗소리, 천둥소리, 바람 소리, 밤벌레 소리 등 각 날씨/시간대에 맞는 오디오 파일을 가져와 사운드 큐(Sound Cue)를 만듭니다.

사운드 큐 내에서 무작위성, 볼륨 조절 등을 설정할 수 있습니다.

앰비언트 사운드 액터 배치: 추가(Add) > 오디오(Audio) > 앰비언트 사운드(Ambient Sound) 액터를 레벨에 배치합니다.

사운드 큐 할당: 앰비언트 사운드 액터의 디테일 패널에서 생성된 사운드 큐를 할당합니다.

블루프린트에서 제어: BP_WeatherSystem 및 BP_TimeOfDaySystem 블루프린트에서 각 앰비언트 사운드 액터에 대한 참조를 만들고, 해당 액터의 Audio 컴포넌트에서 Set Volume Multiplier 또는 Play / Stop을 사용하여 날씨/시간 상태에 따라 사운드의 볼륨을 조절하거나 재생/정지시킵니다.

  • 예: 비 오는 날 상태일 때 빗소리 사운드 큐 볼륨을 높이고, 맑은 날에는 볼륨을 0으로 만듭니다. 천둥소리는 특정 비 오는 날씨 상태에서 랜덤하게 재생되도록 합니다.

지면 타입별 사운드 (선택 사항)

  • 비 오는 날에는 플레이어 캐릭터가 걷는 발자국 소리가 젖은 지면(웅덩이 등)에서 나는 소리로 바뀌도록 구현할 수 있습니다. (물리 재질과 서피스 타입(Surface Type) 설정 활용)

게임 플레이 효과 연동

다음은 별도로 구현할 게임플레이 규칙입니다. 렌더링 안개나 어두운 노출만으로 AI Perception의 감지 거리, 캐릭터 마찰, 발자국 소리 판정이 자동 변경되지는 않습니다.

플레이어 캐릭터 영향

  • 이동 속도: 비나 눈이 올 때 Character Movement Component의 Max Walk Speed를 낮춰 플레이어의 이동 속도를 감소시킵니다.
  • 시야 감소: 안개나 밤에는 Post Process Volume의 노출을 낮추고, 짙은 안개 효과를 적용하여 플레이어의 시야를 제한합니다.
  • HUD/UI 변화: 시야가 좋지 않은 날씨에서는 HUD에 습기 찬 화면 효과를 추가하거나, 특정 경고 UI를 표시할 수 있습니다.

NPC 및 AI 행동 변화

  • NPC 스폰/제거: 밤에만 등장하는 적, 특정 날씨에만 활동하는 동물 등을 구현합니다.
  • AI 행동 패턴 변화: 비나 눈이 올 때 NPC가 우산을 쓰거나, 실내로 대피하거나, 순찰 경로를 변경하는 등의 행동을 추가합니다.
  • 시야/청각 영향: 밤이나 안개 낀 날에는 AI의 시야 범위가 줄어들고, 빗소리로 인해 플레이어의 발자국 소리가 묻히는 등의 효과를 적용하여 잠입 플레이에 영향을 줍니다.

환경 상호작용

  • 물리적 변화: 비가 올 때 지면에 웅덩이가 생기거나(머티리얼 변화), 눈이 쌓이는(스태틱 메시 추가) 등의 효과를 구현합니다.
  • 아이템/자원: 특정 날씨(예: 비 온 후)에만 얻을 수 있는 자원이나 아이템을 배치합니다.

통합 관리 및 최적화

복잡한 날씨 및 시간 시스템은 효율적인 통합 관리와 최적화가 필수적입니다.

여러 시스템이 같은 광원이나 노출에 직접 쓰지 않도록 최종 값을 적용할 관리 지점을 정합니다. 다음 관계는 제안하는 구현 구조이며 엔진이 자동으로 연결해 주는 기능은 아닙니다.

날씨와 시간의 최종 적용 책임

날씨와 시간 입력을 한 관리 지점에서 합성한 뒤 시각·소리와 게임 규칙에 각각 적용한다.

환경 상태의 입력과 적용 대상날씨 상태와 게임 시각이 관리 블루프린트에 들어간다. 관리 지점은 목표 값과 전환 시작을 정해 시각·소리 파라미터 및 게임 규칙·UI에 전달한다. 시각 변화가 게임 규칙을 자동으로 변경하는 연결은 없다.날씨 상태맑음 · 비 · 눈게임 시각0 ≤ h < 24관리 블루프린트목표 값 · 전환 시작최종 적용 책임시각 · 소리설정값 적용게임 규칙 · UI별도 로직 적용
환경 상태의 입력과 적용 대상날씨 상태와 게임 시각이 관리 블루프린트에 들어간다. 관리 지점은 목표 값과 전환 시작을 정해 시각·소리 파라미터 및 게임 규칙·UI에 전달한다. 시각 변화가 게임 규칙을 자동으로 변경하는 연결은 없다.날씨 상태맑음 · 비 · 눈게임 시각0 ≤ h < 24관리 블루프린트목표 값 · 전환 시작최종 적용 책임시각 · 소리설정값 적용게임 규칙 · UI별도 로직 적용
  • 단일 마스터 블루프린트: 모든 날씨 및 시간 관련 액터의 참조와 로직을 하나의 마스터 블루프린트(BP_WeatherTimeSystem 등)에서 관리합니다.
  • 데이터 테이블 / 커브 에셋: 시간이나 날씨 상태에 따른 조명 강도, 색상, 안개 밀도 등의 변화 값을 데이터 테이블(Data Table)이나 커브 에셋(Curve Asset)에 저장하여 관리하면 블루프린트 로직을 간소화하고 수정이 용이합니다.
  • 표현별 품질: Niagara는 Effect Type/Scalability로 스폰과 컬링을 조절합니다. 구름은 샘플 수·추적 범위 등 구름 전용 품질 설정을 사용하며 일반 메시 LOD와 구분합니다.
  • 모바일/저사양 플랫폼 고려: Volumetric Fog나 Volumetric Cloud 대신 Exponential Height Fog와 간단한 2D 구름 텍스처를 활용하거나, 실시간 그림자를 줄이는 등 최적화된 대안을 고려합니다.
  • 성능 프로파일링: 주기적으로 Stat FPS, Stat Unit, ProfileGPU 등의 콘솔 명령어를 사용하여 성능 병목 현상을 파악하고 개선합니다.

Data Table은 목표 값을 보관하며 그 자체가 시간 보간을 수행하지는 않습니다. 커브나 보간 로직으로 현재 값에서 목표 값으로 이동시키고, 게임 규칙이 바뀌는 시점은 UI 알림과 함께 정합니다.

실내 진입·컷신 같은 예외는 우선순위를 정해 적용합니다. 시각·소리·규칙이 항상 같은 길이로 보간되어야 하는 것은 아니지만, 기준 상태와 전환 시작 시점은 공유해야 합니다.