icon안동민 개발노트

글로벌 일루미네이션과 파티클


 언리얼 엔진의 글로벌 일루미네이션(GI) 시스템과 나이아가라 파티클의 상호작용은 더욱 사실적이고 몰입감 있는 시각 효과를 만드는 데 중요한 역할을 합니다.

 이 절에서는 GI와 파티클의 통합, 설정 방법, 그리고 최적화 전략에 대해 알아보겠습니다.

파티클의 글로벌 일루미네이션 기여

 파티클은 씬의 전반적인 조명에 영향을 줄 수 있으며, 이는 더욱 풍부하고 동적인 시각 효과를 만들어냅니다.

 구현 방법

  1. 파티클 머티리얼의 'Used with Global Illumination' 옵션 활성화
  2. 'Emissive' 속성 설정으로 간접 조명 기여
float3 EmissiveColor = BaseColor * EmissiveIntensity;

 적용 예시

  • 불꽃 파티클이 주변 환경을 은은하게 밝히는 효과
  • 마법 파티클이 벽이나 바닥에 색상을 반사

간접 조명이 파티클에 미치는 영향

 글로벌 일루미네이션은 파티클의 외관에도 영향을 줄 수 있어, 환경과 더욱 자연스럽게 어우러지게 만듭니다.

 구현 방법

  1. 파티클 머티리얼의 'Receives Decals' 옵션 활성화
  2. 'Indirect Lighting Intensity' 파라미터 조정
float3 IndirectLighting = SampleIndirectLighting(WorldPosition);
FinalColor += IndirectLighting * IndirectLightingIntensity;

 적용 예시

  • 연기 파티클이 주변 컬러를 반영하여 자연스럽게 블렌딩
  • 물 파티클이 환경 조명을 반사하여 더욱 사실적으로 표현

라이트매스와의 상호작용

 라이트매스는 정적 조명을 사전 계산하여 성능을 최적화하는 데 사용됩니다. 파티클과 라이트매스의 적절한 상호작용은 성능과 시각적 품질의 균형을 유지하는 데 중요합니다.

 설정 방법

  1. 정적 파티클의 경우 'Mobility'를 'Static'으로 설정
  2. 'Affect Distance Field Lighting' 옵션 활성화
void SetupStaticParticleForLightmass(UNiagaraComponent* NiagaraComp)
{
    NiagaraComp->SetMobility(EComponentMobility::Static);
    NiagaraComp->bAffectsDistanceFieldLighting = true;
}

리플렉션 캡처 활용

 리플렉션 캡처는 환경의 반사를 시뮬레이션하는 데 사용되며, 파티클에 적용하면 더욱 사실적인 효과를 만들 수 있습니다.

 구현 방법

  1. 파티클 머티리얼의 'Reflection' 섹션에서 설정 조정
  2. 'Spherical Reflection Capture' 액터를 씬에 배치
float3 ReflectionColor = SampleReflectionCapture(WorldPosition, WorldNormal);
FinalColor = lerp(FinalColor, ReflectionColor, ReflectionIntensity);

실시간 글로벌 일루미네이션 설정

 언리얼 엔진의 실시간 GI 기능을 활용하면 동적인 파티클 효과에도 고품질의 간접 조명을 적용할 수 있습니다.

 설정 방법

  1. 프로젝트 설정에서 'Real-time Global Illumination' 활성화
  2. 파티클 시스템의 'Lighting' 섹션에서 관련 옵션 조정
void SetupRealTimeGI(UNiagaraComponent* NiagaraComp)
{
    NiagaraComp->bUseRealTimeGIForShadowing = true;
    NiagaraComp->IndirectLightingIntensity = 1.0f;
}

글로벌 일루미네이션을 고려한 파티클 시스템 설계

  1. 씬 컨텍스트 고려 : 파티클의 조명 속성을 주변 환경과 조화롭게 설정
  2. 동적 조명 변화 반영 : 시간에 따른 GI 변화를 파티클 속성에 반영
  3. 다층 구조 활용 : 직접 조명용 레이어와 간접 조명용 레이어를 분리하여 제어
float3 DirectLighting = CalculateDirectLighting();
float3 IndirectLighting = SampleIndirectLighting(WorldPosition);
FinalColor = DirectLighting + IndirectLighting * IndirectIntensity;

성능 최적화 전략

  1. LOD (Level of Detail) 시스템 구현
  • 거리에 따라 GI 상호작용 복잡도 조절
float LODFactor = saturate(1 - (Distance / MaxDistance));
IndirectLighting *= LODFactor;
  1. 파티클 수 관리
  • GI에 기여하는 파티클 수를 제한하여 성능 유지
  • 중요도에 따라 선별적으로 GI 적용
  1. 캐싱 활용
  • 정적 환경의 GI 정보를 텍스처에 베이킹하여 재사용
  1. GPU 인스턴싱 최적화
  • 유사한 GI 특성을 가진 파티클 그룹화하여 처리

현실적인 조명 환경에서의 파티클 통합 팁

  1. 물리 기반 파라미터 사용
  • 실제 물질의 반사율, 방사율 등을 참고하여 설정
  1. 시간과 날씨 변화 반영
  • 낮/밤 주기, 날씨 변화에 따른 GI 속성 조정
  1. 다중 바운스 조명 시뮬레이션
  • 고급 GI 기법을 활용하여 복잡한 조명 상호작용 구현
  1. 환경 오클루전 고려
  • 파티클이 위치한 공간의 특성에 따라 GI 영향 조절

실제 적용 예시 : 마법 포션 제작소 효과

 다음은 글로벌 일루미네이션을 고려한 마법 포션 제작소 파티클 효과의 구현 예시입니다.

float4 PS_MagicPotionLab(float2 UV, float3 WorldPosition, float3 WorldNormal, float3 CameraPosition)
{
    // 기본 파티클 색상
    float4 BaseColor = Texture2DSample(PotionTexture, UV);
    
    // 글로벌 일루미네이션 샘플링
    float3 IndirectLighting = SampleIndirectLighting(WorldPosition);
    
    // 파티클 자체 발광
    float3 EmissiveColor = BaseColor.rgb * EmissiveIntensity;
    
    // 리플렉션 캡처 샘플링
    float3 ReflectionColor = SampleReflectionCapture(WorldPosition, WorldNormal);
    
    // 주변 환경과의 상호작용
    float3 EnvironmentColor = lerp(IndirectLighting, ReflectionColor, BaseColor.a);
    
    // 시간에 따른 색상 변화
    float TimeFactor = sin(Time * 0.5) * 0.5 + 0.5;
    float3 TimeVaryingColor = lerp(BaseColor.rgb, EmissiveColor, TimeFactor);
    
    // 거리 기반 LOD
    float Distance = length(CameraPosition - WorldPosition);
    float LODFactor = saturate(1 - (Distance / MaxDistance));
    
    // 최종 색상 조합
    float3 FinalColor = TimeVaryingColor * (1 + IndirectLighting * IndirectIntensity) + EmissiveColor;
    FinalColor = lerp(FinalColor, EnvironmentColor, LODFactor * EnvironmentInfluence);
    
    return float4(FinalColor, BaseColor.a);
}

 이 예시에서는 기본 파티클 텍스처, 글로벌 일루미네이션, 자체 발광, 리플렉션, 시간에 따른 변화, 그리고 거리 기반 LOD를 조합하여 복잡하고 역동적인 마법 포션 제작소 효과를 만들어냅니다. 이 효과는 주변 환경과 자연스럽게 상호작용하면서도 독특하고 매력적인 시각적 경험을 제공합니다.

 글로벌 일루미네이션을 고려한 파티클 시스템 설계는 더욱 사실적이고 몰입감 있는 게임 환경을 만드는 데 큰 도움이 됩니다. 성능과 시각적 품질 사이의 균형을 유지하면서, 창의적인 접근 방식으로 인상적인 효과를 만들어보세요. 지속적인 실험과 최적화를 통해 프로젝트에 가장 적합한 GI-파티클 상호작용 기법을 개발할 수 있습니다.