2015년 8월 26일

언리얼 엔진 4로 시뮬레이션 하는 Area Light

저자: Alan Noon

현실 세계에서, 광원은 여러 모양과 크기를 갖고 있습니다. 형광등, 전구 둘 다 흔하며 유선형이고, 차량의 전조등, 캠프 파이어, 하늘에서 들어오는 산란광 기타 등등이 있죠.

전문가가 찍은 사진에서, 빛은 여러 방법으로 통제됩니다. 색이 들어간 빛을 만들기 위해 겔을 사용하기도 합니다. Gobos 또는 "cookies" 라고 불리는 것은 빛의 투사 형태를 바꿔줍니다. 저희는 특히 산란광에 관심이 있는데 방향 변경과 빛 세기 약화에 사용되는 소프트 박스나 사진 찍을 때 쓰는 우산 등에서 쓰입니다.

현대 오프라인 랜더링 솔루션에서 흔하면서도 강력한 기능은 area light 입니다. area light는 현실에서 사진작가가 사용하는 soft box의 산란 기능을 갖습니다. 이 기능은 거대한 외부 공간으로부터 조사되는 빛의 부피를  diffuse lighting으로 공간을 채우면서 사용 가능하게 해 줍니다. 이 방법은 일반적으로 표면을 좀 더 만족스러운 방법으로 랜더링하여 씬 내의 빛과 그림자가 눈에 덜 거슬리게 합니다.

이 글을 적는 현재, 언리얼 엔진 4는 area light를 지원하지 않습니다. 하지만 몇 가지 기본적인 지오메트리, 간단한 머티리얼과 표준 언리얼 스포트라이트를 이용해서 area light를 그럴싸하고 쉬우며 통제 가능한 방법으로 실시간 diffuser를 만들 수 있습니다. 여기서는 반사판이라고 부르겠습니다.

단계 1: 씬 설정

단순한 씬에 창문 몇 개를 포함한 집 같은 구조에 스카이 라이트를 추가 해 줍니다. 태양과 같은 역할을 하는 directional light도 있습니다. 또한 몇몇 특별한 기능을 하는 액터도 있습니다. 3개의 sphere reflection capture 액터를 이용해서 반사되는 표면을 정확히 랜더할 수 있도록 돕고*, lightmass importance volume으로 라이트를 구울 때 집중하여 구울 부분을 지정하고 post process volume으로 여러 시각 효과를 통해 최종 랜더 효과를 내는 데 사용합니다.**

에디터에서 플레이시:

SimLight_0

명확하게, 구조물의 내부가 너무 어둡습니다. 저희는 광자를 빌딩 내부로 진입시켜 창과 외부에서 빛이 쏟아져 들어오는 것을 시뮬레이션 하려는 것입니다. 이 광자들은 주변 환경을 반사하여 돌아다니며 표면에서 빛이 나도록 하고 좀 더 그럴싸한 결과물을 내 놓을 것입니다.

단계 2: 라이트 추가하기

첫 번째 단계는 각 입사구의 대략 중간위치를 잡아서 광원을 추가하는 것입니다. inner cone angle과 outer cone angle은 각 스포트 라이트의 빛 확산을 최대로 하기 위해 열렸습니다.

  • Inner Cone Angle    80.0
  • Outer Cone Angle    85.0

라이트 빌드 후에 에디터에서 플레이시 결과물: 

SimLight_1

내부가 보일 정도로 좋아지긴 했습니다만, 빛과 그림자가 너무 거칩니다. 반사판을 이용해서 건축시각화와 연관된 고품질의 area lighting 을 얻어낼 수 있습니다.

단계 3: 라이트 확산 시키기

스케일을 조정해 맞춘 단순 평판과 반사판이 입사구 바깥, 각 스포트라이트 너머에 놓였습니다. 각 평판은 흰색 머티리얼이 설정되었고, 빌딩의 실내를 향하도록 방향이 지정되었습니다.

반사판에 입사될 수 있을 정도로만 라이트 소스 자체의 감쇠 반지름을 설정 해 줍니다. 각 씬마다 다른 값이 필요할 수 있습니다. 라이트들은 빌딩의 실내에서 바깥쪽을 향하도록 놓였고 방금 놓은 평판을 직접 바라보도록 되어 있습니다.

  • Attenuation Radius = 200.0

반사판 설정: 

SimLight_3

씬 설정: 

SimLight_4

라이트 빌드 후, 에디터에서 플레이시 결과:

SimLight_6

고급 팁: 외부로부터의 입사광 효과가 필요 없는 경우엔는 모든 반사판을 선택하고 디테일 패널에서 Actor Hidden In Game을 선택합니다.

SimLight_5

주석:

"라이트매스 설정*

라이트매스는 라이트 굽는 프로세스를 실행하고 결과물을 각 오브젝트의 라이트맵에 굽습니다. 중요 파라미터를 늘림으로써 최종 씬의 스태틱 라이트의 품질은 증가됩니다. 이 프로젝트에 사용된 파라미터 값은 다음과 같습니다.

  • Static Mesh Lightmap resolution = 512
  • Num Indirect Lighting Bounces = 25
  • Indirect Lighting Quality = 8.0
  • Use Ambient Occlusion = True
  • Compress Lightmaps = False

이 값들을 증가시키면 컴퓨터 성능에 따라 최종 라이트 굽는 시간이 길어집니다. 낮은 값으로 대략적인 그림을 잡고 최종 결과물을 낼 때 한 번만 적용하는 것이 권장됩니다.

**Post Processing

Post Processing Effects는 드라마틱하게 랜더러의 최종 결과물에 영향을 끼치는 막강한 기능입니다. post processing을 약간만 사용해도 많이 바뀝니다. 블룸이나 기타 컬러 보정, 대비 조정만 해도 씬에 많은 변화를 줄 수 있습니다. post processing volume에는 다양한 파라미터를 설정할 수 있습니다. 이 프로젝트에는 아래와 같은 설정이 사용되었습니다.

  • Scene Color
    • Fringe Intensity = 0.575221
    • Grain Intensity = 0.150442
  • AutoExposure
    • Min Brightness = 1.0
    • Max Brightness = 1.0
  • Lens Flares
    • Intensity = 0.0
  • Unbound = True

Fringe 와 Grain 설정은 실사같은 인공적 효과를 추가시켜 줍니다.

여기에, Auto Exposure와 Lens Flare 설정은 효과적으로 이러한 효과들을 줄여 줍니다. 

Unbound를 설정하면 씬 전체에서 post process가 사용됩니다.

*** 반사판 머티리얼

주 반사판의 머티리얼은 단순합니다. Base Color에 Vector3 파라미터를 사용하고, Emissive Channel에 그 컬러값을 증폭시켜 넣어줍니다. 머티리얼 인스턴스에서 밝기를 13배 증가시켰습니다.

  • Brightness = 13.0

SimLight_7
Master Material                |                Material Instance

emissive로 들어오는 값은 씬으로 빛을 방출하여 lightmass 계산에 영향을 주지 않습니다. 그냥 미적인 선택입니다.