UDN
Search public documentation:

LightmassKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 빛과 그림자 > 라이트매스(Lightmass), 스태틱 글로벌 일루미네이션
UE3 홈 > 레벨 디자이너 / 라이팅 아티스트 > 라이트매스(Lightmass), 스태틱 글로벌 일루미네이션

라이트매스(Lightmass), 스태틱 글로벌 일루미네이션


문서 변경내역: Steven Haines 작성, Daniel Wright 주요 내용 재작성, Derek Cornish 업데이트, 홍성진 번역.

개요


라이트매스(Lightmass)는, 에리어 섀도잉(area shadowing, 영역 그림자)과 디퓨즈 인터리플렉션(diffuse interreflection, 확산 상호반사)같은 복잡한 빛 상호작용으로 라이트맵을 만들어 냅니다. 나머지 렌더링 파이프라인(다이내믹 라이팅이나 섀도잉)과는 무관하게(orthogonal), 그저 라이트맵과 스태틱 섀도우맵을 더 고품질의 것으로 대체하는 작업을 합니다.

UE3 에디터와 라이트매스 사이의 통신은 언리얼 스웜(Swarm)이 처리하는데, 로컬 라이팅 빌드를 관리하기도 하고, 원격 기계에 라이팅 빌드를 분산시키기도 합니다.

스웜 에이전트(Swarm Agent)는 라이팅 빌드 진행상황을 기록하여 어떤 기계가 작업중인지, 무슨 작업을 하는지, 각각 스레드는 얼마나 사용하고 있는지 등에 대한 기록을 유지합니다. 아랫 부분의 바를 통해 빌드 완료 상황을 알아볼 수 있습니다.

아래는 라이팅에 스레드를 여덟 개 사용하여 로컬 빌드하는 모습입니다.

SwarmAgent.jpg

자세한 정보는 Swarm KR 페이지를 참고하시기 바랍니다.

버전


라이트매스는 QA_APPROVED_BUILD_JUN_2009 빌드에 처음 도입되었습니다.

구버전 지원


새 맵에 예전 UE3 라이팅 넣기

QA_APPROVED_BUILD_JUNE_2009 이후로 새 맵은 라이트매스와 글로벌 일루미네이션을 디폴트로 사용합니다. 이 기능은 언리얼 에디터의 보기 > 월드 프로퍼티 > Lightmass 아래 bUseGlobalIllumination (글로벌 일루미네이션 사용) 옵션으로 제어할 수 있습니다. 언리얼 에디터의 '라이팅 빌드 옵션' 대화창을 통해 접근할 수도 있습니다. 예전 UE3 라이팅을 넣으려면, 그냥 위 옵션을 끄면 됩니다.

기존 맵이 라이트매스를 사용하도록 변환

라이트매스 통합 이전에 생성된 맵은 bUseGlobalIllumination (글로벌 일루미네이션 사용) 옵션이 false 로 되어 있어, 예전 UE3 스태틱 라이팅 방법을 고수합니다. 기존 레벨 변환에 필요한 절차는 이렇습니다:

  • bUseGlobalIllumination (글로벌 일루미네이션 사용) 옵션을 true 또는 체크 설정합니다.
  • 레벨에서 글로벌 일루미네이션 디테일이 필요한 부분에 LightmassImportanceVolumes 를 하나 이상 두릅니다. 이 볼륨 반경 총합이 빌드 시간을 결정하는 주 요인이므로, 가급적 레벨의 중요 부분에 딱맞도록 두르시기 바랍니다.
  • 레벨의 필(fill) 라이트를 끄거나 지우십시오. 라이트매스는 빛의 튕김(bounce)을 계산하므로, 도미넌트 라이트(우세광)만 유지해 주면 됩니다. 스카이 라이트는 라이트매스와의 궁합이 좋지 않으며, 대비(contrast)값이 감소될 소지마저 있으니, 배경에 사용하는 경우 역시 꺼 주는 것이 좋습니다. 물론 퍼포먼스보다 미적인 것이 더 중요한 부분이라면, 필 라이트를 유지해도 상관 없습니다.

라이트매스 특징


에리어 라이트 및 섀도우

예전 UE3 스태틱 라이팅에는, 라이트에 표면 개념이 없었습니다. 모든 빛이 한 점(이나 디렉셔날 라이트처럼 한 방향)에서 뿜어져 나오는 것처럼 처리되었죠.

에리어 섀도우는 라이트맵 텍스처의 그림자 결과물을 필터링하여 추정되었는데, 무슨 뜻이냐면 그림자 선명도는 라이트맵 해상도에 따라 달라지며, 빛과 그림자가 만나는 부분(penumbra)의 크기는 라이트맵 해상도가 같은 표면이면 전부 같았다는 뜻입니다.

라이트매스에서, 모든 라이트는 디폴트로 에리어 라이트입니다. 포인트/스포트 라이트에 사용되는 모양은 구체형으로, 그 반경은 LightmassSettings 아래 LightSourceRadius (라이트 반경) 옵션으로 설정됩니다. 디렉셔널 라이트는 원반(disk)형을 사용하며, 씬의 가장자리에 위치합니다. 라이트 크기는 그림자의 농도를 결정짓는 두 가지 요인 중 하나인데, 라이트가 클 수록 그림자도 옅어지기 때문입니다. 나머지 요인은 그림자를 드리우는 물체와 그림자가 생기는 곳까지의 거리입니다. 현실에서와 마찬가지로, 에리어 섀도우는 거리가 멀어질 수록 옅어집니다.

첫 이미지는 예전 UE3 스태틱 라이팅으로 된 디렉셔널 라이트인데, 빛과 그림자가 만나는 부분의 크기가 어디서나 같습니다. 둘째 이미지는 라이트매스가 계산한 에리어 섀도우인데, 그림자 선명도가 라이트 크기와 오클루더(가리개) 거리 둘 다에 의해 결정됩니다. 기둥 그림자를 보십시오. 땅과 만나는 부분은 훨씬 선명하지 않습니까?

7OldUE3Shadows.jpg 7LightmassShadows.jpg

포인트/스포트 라이트의 라이트 반경은 노랑 와이어프레임으로 그려지는 반면, 영향 반경은 암회색으로 그려집니다. 대부분의 경우 라이트가 그림자를 드리우는 지오메트리에 겹치거나, 빛이 지오메트리의 양쪽 면에서 삐져 나오는 현상은 바람직하지 않을 것입니다.

AreaLight.jpg

디스턴스 필드 섀도우

(Signed Distance Field shadow) 라이트매스는 인코딩 방식을 달리 하여 미리계산된 섀도우맵을 생성할 수 있습니다. 자세한 정보는 Distance Field Shadows KR 페이지를 참고하시기 바랍니다.

디퓨즈 인터리플렉션

디퓨즈 인터리플렉션(diffuse interreflection, 확산 상호반사)은 단연코 시각적으로 가장 중요한 글로벌 일루미네이션 라이팅 효과입니다. 라이트매스에는 기본적으로 튕겨지는 빛이 포함되며, 머티리얼의 Diffuse(확산) 노드를 통해 모든 방향으로 튕겨지는 빛(과 색)의 양을 조절합니다. 이 효과는 컬러 블리딩(color bleeding)이라고도 합니다. 디퓨즈 인터리플렉션은 모든 방향에 똑같이 반사되어 들어오는 빛으로, 보는 방향이나 위치에는 영향받지 않는다는 것을 기억하는 것이 중요합니다.

아래는 디렉셔널 라이트 하나로 라이트매스가 빌드한 씬에서 직사광만 나타낸 모습입니다. 오클루더의 거리에 따라 빛과 그림자가 만나는 부분 크기가 변하는 것에 주목해 봅시다. 라이트에 직접 보이지 않는 부분은 까맣습니다. 글로벌 일루미네이션이 없으면 이렇게 됩니다.

3DirectOnly.jpg

처음 튕긴 디퓨즈 글로벌 일루미네이션 모습입니다. 왼편 의자 뒤의 그림자를 주목해 보십시오. 간접광의 그림자이기 때문에 간접 그림자라고 칭합니다. 튕긴 디퓨즈의 밝기와 색은 들어오는 빛과 그 빛이 상호작용하는 머티리얼의 Diffuse(확산) 노드에 따라 달라집니다. 튕길 때마다 예전보다 어두워지는데, 빛의 일부분은 반사되지 않고 표면에 흡수되기 때문입니다. 기둥 뿌리 부분은 다른 표면보다 간접광을 많이 받는데, 직사광 부분에 더 가깝기 때문이구요.

3FirstBounceOnly.jpg

두 번째 튕긴 디퓨즈 입니다. 빛이 훨씬 더 감쇠되었고 고르게 분포되었습니다.

3SecondBounceOnly.jpg

네 번 튕긴 디퓨즈를 합성한 씬은 이렇습니다. 글로벌 일루미네이션의 시뮬레이션을 통해 필 라이트를 수동으로 채워넣는 것보다 라이팅이 훨씬 자세하고 사실적이 되었습니다. 특히 간접 그림자같은 것은, 필 라이트로는 꿈도 못 꿀 일입니다.

3FourBounces.jpg

아래에서 보듯이, 튕겨진 빛은 그 아래 놓인 머티리얼의 디퓨즈 컬러를 받습니다. 여기서 '컬러 블리딩', 즉 색번짐이란 용어가 등장합니다. 컬러 블리딩은 채도가 매우 높은 색에서 가장 확연히 드러납니다. 프리미티브, 머티리얼, 레벨의 DiffuseBoost 값을 올려 그 효과를 과장시킬 수도 있습니다.

캐릭터 라이팅

라이트매스는 캐릭터의 라이팅을 위해 우선, LightmassImportanceVolume 으로 설정된 공간 안에 듬성듬성 샘플 위치를 설정합니다. 그리고 캐릭터가 다니게 될 가능성이 높은 '위를 바라보는 면'들을 찾아, 그 위쪽은 샘플 위치를 좀 더 촘촘히 설정합니다. 각 라이팅 샘플은 간접광 정보만 가지고 있고, 직사광 정보는 가지고 있지 않습니다. 직사광은 실시간으로 처리하는 쪽이 낫기 때문입니다.

첫 이미지는 바닥 위에 놓은 라이팅 샘플의 디버그를 시각화시킨 것이며, 둘째 이미지는 같은 씬을 라이팅포함(Lit) 모드로 본 것입니다. 빨강 태피스트리 위의 샘플이 빨강 바운스 라이트를 받은 것을 보십시오. 샘플은 단일색으로 시각화되지만, 실제로는 모든 방향에서 빛을 받습니다.

02CharacterLighting.jpg 02CharacterLightingLit.jpg

그리고 라이트 인바이언먼트(Light Environments) 는 이렇게 설치된 라이트 샘플 중 가장 가까운 샘플을 찾고, 그 샘플에 저장된 간접광 정보를 가져다 액터(캐릭터)에 적용합니다. 참고로 이 간접광은 라이트 인바이언먼트의 그림자 색에만 영향을 줄 뿐, 방향에는 영향을 주지 않습니다.

아래 캐릭터는 밑의 계단에서 한 번 튕긴 글로벌 일루미네이션 라이팅 모습입니다.

01CharacterLighting.jpg

한계

  • 현재 라이트 샘플은 메모리 사용량이 많을 수 있기에, 캐릭터에 자세한 간접광이 필요한 곳(플레이 영역)이 어디인지 자세히 알면 좀 더 최적화된 배치가 가능합니다.
  • 라이트 인바이언먼트를 사용하지 않아 동적으로 라이팅된 오브젝트는 직사광에만 영향받습니다.
  • LightmassImportanceVolume 밖 라이트 인바이언먼트의 간접광 색은 까맣습니다.

이미시브에서의 메시 에리어 라이트

스태틱 오브젝트에 적용한 머티리얼의 이미시브(Emissive) 입력은 메시 에리어 라이트를 만드는 데 사용 가능합니다. 메시 에리어 라이트는 포인트 라이트와 유사하나, 라이트 표면의 모양과 강도를 임의로 조정할 수 있습니다. 각각의 양성 이미시브 텍셀은 해당 텍셀의 강도에 따라 텍셀 노멀을 중심으로 한 반구 방향으로 빛을 내뿜습니다. 이미시브 텍셀에 인접한 각 그룹은 한 가지 색을 내뿜는 메시 에리어 라이트로 간주됩니다.

첫 이미지는 아래 놓인 머티리얼의 이미시브만을 나타내며, 둘째 이미지는 그 이미시브 텍셀에서 생성된 메시 에리어 라이트 넷의 결과를 나타냅니다. (라이트가 넷인 이유는 양성 이미시브 텍셀에 인접한 패치가 넷이기 때문입니다.)

SmallMeshAreaLightsEmissiveOnly.jpg SmallMeshAreaLights.jpg

디폴트로 메시 에리어 라이트는 이미시브 영역에서는 생성되지 않습니다. 생성되게 하려면, 아무 프리미티브 컴포넌트의 LightmassSettings 그룹 아래 있는 bUseEmissiveForStaticLighting (스태틱 라이팅에 이미시브 사용) 옵션을 켜십시오. BSP 표면의 경우 이 옵션은 Surface 프로퍼티 아래에 있습니다.

emissivetexture_T.JPG

EmissiveLightFalloffExponent (이미시브 라이트 감쇠 지수) 세팅으로 방출되는 빛의 감쇠를 조절할 수 있습니다. 포인트 라이트의 감쇠 지수같은 식으로 작동하는데, 지수가 클 수록 빛의 영향 반경쪽으로 향하기에 빛 감쇠도 빨라지게 됩니다. 메시 에리어 라이트의 영향 반경은 라이트의 이미시브 표면 영역 크기와 함께 라이트의 밝기에 따라 자동으로 결정됩니다. EmissiveBoost (이미시브 증폭)은 모든 이미시브 텍셀의 강도를 스케일 조절하며, 영향 반경에도 영향을 끼칩니다.

참고할 점은, 메시 에리어 라이트는 포인트 라이트와 비슷한 정도의 빌드 시간이 추가된다는 점입니다. 메시 에리어 라이트는 영향 반경이 작을 수록 라이팅 계산이 빨라집니다.

한계

  • 메시 에리어 라이트가 있는 메시의 트라이앵글 수가 많을 수록 빌드 시간도 늘어납니다. 트라이앵글 수가 3000 이상인 메시에는 경고가 발령되며, 5000 이상인 메시는 bUseEmissiveForStaticLighting (스태틱 라이팅에 이미시브 사용) 옵션에 관계없이 메시 에리어 라이트로 사용되지 않습니다.

반투명 그림자

정적 그림자를 드리우는 메시에 적용된 반투명 머티리얼을 통과하는 빛은 에너지를 약간 잃어, 반투명 그림자를 드리우게 됩니다.

반투명 그림자 색

머티리얼을 통과하는 빛의 양은 Transmission (투과)라 하며 (머티리얼 에디터에서 불투명 머티리얼에 작용하는 TransmissionColorTransmissionMask 와는 다릅니다.), 각 컬러 채널에 대해 0 과 1 사이 값을 갖습니다. 0 은 완전히 불투명함을, 1 은 통과된 입사 광선이 영향받지 않음을 뜻합니다. Transmission(투과)에 대한 머티리얼 입력은 없기에 현재 다른 머티리얼 입력에서 파생되는데, 다음과 같습니다:

  • 라이팅된 머티리얼
    • BLEND_Translucent 및 BLEND_Additive: Transmission = Lerp(White, Diffuse, Opacity)
    • BLEND_Modulate: Transmission = Diffuse
  • 라이팅되지 않은 머티리얼
    • BLEND_Translucent 및 BLEND_Additive: Transmission = Lerp(White, Emissive, Opacity)
    • BLEND_Modulate: Transmission = Emissive

즉 불투명도 0 에서 머티리얼은 입사 광선을 필터링하지 않기에 반투명 그림자가 없다는 뜻입니다. 불투명도 1 에서 입사 광선은 머티리얼의 (라이팅 여부에 따라) 이미시브나 디퓨즈에 필터링된다는 뜻입니다. 간접광은 가끔 반투명 그림자를 씻어내어 반투명 머티리얼의 이미시브나 디퓨즈보다 채도가 낮아질 수 있다는 점 참고하십시오.

반투명 그림자 선명도

반투명 그림자 선명도를 제어하는 요인은 여럿 있습니다.

첫 이미지에는 거대한 라이트(LightSourceAngle 값이 5 인 디렉셔널 라이트)가 사용되었고, 둘째에는 작은 라이트(LightSourceAngle 값 0)가 사용되었습니다.

5LargeLightSource.jpg 5SmallLightSource.jpg

첫 이미지에는 작은 라이트가 사용되었으나, 라이트맵 해상도가 너무 낮아 반투명 그림자가 선명하지 않습니다. 둘째 이미지에는 머티리얼 익스포트시 (머티리얼 에디터에서 ExportResolutionScale (익스포트 해상도 스케일)로 조절하는) 해상도가 너무 낮게 설정되어 그림자가 선명하지 않습니다.

5LowLightmapResolution.jpg 5LowExportResolutionScale.jpg

간접광 역시 반투명 머티리얼에 영향을 받습니다. 이 이미지의 창문은 그 Transmission(투과)에 따라 들어오는 빛을 걸러내며, 그 빛을 머금은 채 (변경된 색으로) 주변에 튕겨집니다.

TranslucentShadowIndirectLight.jpg

한계

  • 반투명 머티리얼은 현재 빛을 산란(scatter)시키지 않으므로, 색이 주변 오브젝트에 번지지 않습니다.
  • 현재 처음 튕기는 디퓨즈는 반투명 그림자에 영향받지 않습니다. 즉 한 번 튕긴 간접광은 반투명 머티리얼을 통과해도 머티리얼의 Transmission(투과)에 필터링되지 않는다는 뜻입니다.
  • 투과된 모양의 굴절(refraction, caustics)은 현재 지원되지 않습니다.

마스킹된 그림자

라이트매스는 그림자를 계산할 때 BLEND_Masked 머티리얼의 불투명 마스크를 계산에 넣습니다. 에디터 뷰포트에서 잘려(clip) 보이는 머티리얼(, 즉 마스크) 부분은 그림자도 생기지 않아, 나무나 잎사귀의 그림자 디테일을 훨씬 많이 살릴 수 있습니다.

앰비언트 오클루전

(Ambient Occlusion) 라이트매스는 간접 그림자 디테일을 자동으로 계산하지만, 심미적인 이유로나 씬에 무언가 임박했다는 느낌을 강조하기 위해 간접 그림자를 과장시키면 좋을 때가 있을 수 있습니다.

앰비언트 오클루전이란 마치 구름낀 하늘처럼, 밝기가 균등한 상반구에서 얻을 수 있는 간접 그림자를 말합니다. 라이트매스는 앰비언트 오클루전 계산을 지원하는데, 직/간접 조명을 적용한 다음 라이트맵에 구워내는 것입니다. 앰비언트 오클루전은 디폴트로 꺼져 있는데, 언리얼 에디터에서 보기 > 월드 프로퍼티 > Lightmass 아래 bUseAmbientOcclusion (앰비언트 오클루전 사용) 옵션을 체크하여 켤 수 있습니다.

첫 이미지는 앰비언트 오클루전이 없는 간접광 씬입니다. 둘째 이미지는 같은 씬의 직/간접광 둘 다에 앰비언트 오클루전을 적용한 것으로, 오브젝트가 맞닿는 곳의 어두운 부분을 주목해 보시기 바랍니다.

9NoAO.jpg 9WithAO.jpg

앰비언트 오클루전 세팅:

  • bVisualizeAmbientOcclusion (앰비언트 오클루전 시각화) - 라이팅을 빌드할 때 오클루전 팩터로만 라이트맵을 덮어씁니다. 정확한 오클루전 팩터를 확인하고자 할 때, 다른 세팅의 효과와 비교하고자 할 때 좋습니다.
  • MaxOcclusionDistance (최대 오클루전 거리) - 한 오브젝트가 다른 오브젝트를 가릴 수 있는 최대 거리입니다.
  • FullyOccludedSamplesFraction (완전히 가려지는 샘플 비율) - 풀 오클루전이 되려면 얼마만큼의 샘플 비율이 가려져야 하는가 입니다. 프리미티브별로도 FullyOccludedSamplesFraction 옵션이 있는데, 한 오브젝트가 다른 오브젝트를 얼마나 가릴 것인지를 조절할 수 있습니다.
  • OcclusionExponent (오클루전 지수) - 높을 수록 대비가 높아집니다.

이미지

  • 첫째: 디폴트 앰오 세팅 (MaxOcclusionDistance (최대 오클루전 거리) 200, FullyOccludedSamplesFraction (완전히 가려지는 샘플 비율) 1.0, OcclusionExponent (오클루전 지수) 1.0)
  • 둘째: MaxOcclusionDistance (최대 오클루전 거리) 5. 저빈도 오클루전 제거, 구석의 오클루전만 남았습니다.
  • 셋째: FullyOccludedSamplesFraction (완전히 가려지는 샘플 비율) 0.8. 전반적으로 오클루전이 어두워 졌으며, 80% 이상이 가려진 영역은 검정으로 채워졌습니다.
  • 넷째: OcclusionExponent (오클루전 지수) 2. 중간범위에서 어둡게 채워진 부분으로의 오클루전 변환이 훨씬 빠르게 일어나며, 오클루전은 구석으로 밀려났습니다.

92Defaults.jpg 92MaxDist5.jpg 92MaxPct80.jpg 92Exponent2.jpg

앰비언트 오클루전은 NumIndirectLightingBounces (간접광 바운스 횟수)가 0 보다 클 때, 라이팅 빌드 타임에 있어서라면 거의 무료에 가깝습니다.

한계

  • 앰비언트 오클루전은 구석에서의 변화가 급격하므로, 꽤나 고해상도의 라이트맵을 요합니다. 버텍스 라이트맵의 결과는 이상하게 나오는데, 버텍스는 주로 앰비언트 오클루전의 빈도가 가장 높은 구석에 있어 메시 대부분이 어둡게 나오기 때문입니다.
  • Preview 품질 빌드는 앰비언트 오클루전 미리보기에 그다지 적합하지 않습니다. (간접 그림자와 마찬가지로) 앰오는 꽤 고밀도의 라이팅 샘플을 필요로 하기 때문입니다.

라이트매스로 최적의 품질 얻기


라이팅을 눈에 띄게 만들기

디퓨즈 텍스처

렌더링 도중, 라이팅된 픽셀 컬러는 Diffuse * Lighting 으로 결정되므로, 디퓨즈 컬러는 라이팅이 어때 보이는지에 직접적으로 영향을 끼칩니다. 높은 대비나 어두운 디퓨즈 텍스처는 라이팅을 알아보기 힘들게 만드는 반면, 낮은 대비나 중간범위 디퓨즈 텍스처는 라이팅 디테일을 드러나 보이게 해 줍니다.

중간-범위 디퓨즈 텍스처로 빌드한 첫 이미지 씬과, 마찬가지로 라이트매스를 이용하긴 했으나 노이지하고 어두운 디퓨즈 텍스처로 빌드한 두 번째 이미지 씬의 라이팅 명괘함을 비교해 보십시오. 둘째 이미지의 씬에서는 그림자 전환처럼 빈도가 가장 높은 변경만이 눈에 띕니다.

94MidToneDiffuse.jpg 94DarkDiffuse.jpg

라이팅제외 뷰 모드는 Diffuse(확산) 부분을 확인하기에 좋습니다. 첫 이미지의 씬을 라이팅제외 뷰 모드로 보면 평이한 모노톤에 가까워 보이는데, 즉 이 모든게 다 라이팅 덕이며 최종 픽셀 컬러의 다변화가 대부분 라이팅 차이에 의한 것이라는 뜻입니다.

자세한 정보는 View Modes KR 페이지를 참고해 보시기 바랍니다.

94MidToneDiffuseUnlit.jpg 94DarkDiffuseUnlit.jpg

라이팅제외 이미지의 여러 부분에 에디터의 색 선택기를 사용해 보면, 첫 이미지의 씬의 디퓨즈 값은 0.5 정도인 반면, 둘째 이미지의 씬에는 디퓨즈 값이 0.08 정도임을 알 수 있습니다. 포토샵에서 이 라이팅제외 이미지의 막대그래프를 보면 디퓨즈 텍스처의 분포 정도를 잘 알아볼 수 있습니다. 주: 포토샵은 감마 공간의 색 값으로 나타나기에, 검정과 하양의 중간값은 127 (.5) 가 아닌 186 (.73) 입니다. 눈에 띄는 라이팅의 막대그래프는 어떤 모습인지, 첫 이미지의 막대그래프가 잘 나타내 주고 있습니다.

hist_Spo.jpg hist_UT.jpg

라이팅 셋업

  • 스카이라이트는 피하세요! 스카이라이트는 레벨에 고정적인 배경 요소가 추가되어, 간접광을 받는 영역의 대비를 감소시킵니다.
  • 직사광 영역과 간접광 영역을 받는 부분의 대비차가 크도록 라이트를 셋업하십시오. 대비야 말로 그림자 전환이 일어나는 곳이 어디인지를 쉽게 찍어주어 레벨의 입체감을 더욱 살려줄 것입니다.
  • 밝은 영역은 너무 밝지 않게, 어두운 영역은 완전히 까맣지 않게, 그러면서도 디테일은 눈에 띄도록 라이트를 셋업하십시오. 최종 디스플레이로 삼을 곳에서 어두운 부분이 어떻게 보이는 지를 확인하는 것이 중요합니다.

라이팅 품질 개선하기

라이트맵 해상도

고해상도 텍스처 라이트맵을 사용하는 것이 디테일한 품질의 라이팅을 얻기에 가장 좋은 방법입니다. 버텍스 라이트맵은 테셀레이션 의존적이라 에리어 섀도우같은 라이팅 디테일을 표현해 내는 데는 무리가 있으며, 그저 메시가 있는 영역의 일반적인 색을 나타내 줄 뿐입니다. 고해상도 라이트맵을 사용하면 텍스처 풀 메모리를 더 잡아먹고 빌드 시간이 늘어난다는 단점이 있는 상충 관계입니다. 시각적 임팩트가 강한 곳이나 고빈도 그림자가 있는 곳 주변으로 라이트맵 해상도를 집중시키는 것이 이상적입니다.

라이트매스 솔버 품질

라이트매스 솔버(Solver) 세팅은 '라이팅 빌드 옵션' 대화창에 선택된 빌드 품질에 따라 자동으로 알맞게 설정됩니다. Production 으로는 디퓨즈 텍스처가 적용된 상태로 부작용이 눈에 딱 띄지 않는 수준의 품질이 나올 것입니다. 그러나 품질에 큰 영향을 끼치는 세팅이 하나 있는데, 바로 StaticLightingLevelScale (스태틱 라이팅 레벨 스케일)입니다. 스케일을 낮추면 훨씬 많은 간접 라이팅 샘플을 생성하여, 빌드 시간을 댓가로 간접 라이팅과 새도잉 품질을 향상시킬 수 있습니다. 대부분의 경우 큰 레벨에 대한 라이팅 스케일을 올리는 데만 유용합니다.

최적의 라이팅 빌드 시간 구하기


라이트매스 빌드 시간을 향상시키는 방법은 여럿 있습니다:

  • 고-빈도 (급격히 바뀌는) 라이팅이 있는 영역에만 고해상도 라이트맵을 쓰십시오. 직사광을 받지 않거나 선명한 간접 그림자에 영향받지 않는 곳의 BSP나 스태틱 메시에는 라이트맵 해상도를 낮추십시오. 그러면 가장 눈에 띄는 영역에 고해상도 그림자를 얻을 수 있습니다.
  • 플레이어가 절대 볼 수 없는 표면은 제일 낮은 라이트맵 해상도로 설정해야 할 것입니다.
  • LightmassImportanceVolume 으로 가장 중요한 (플레이가능 부분에 딱 맞는) 영역을 정하십시오.
  • 메시에 대한 빌드 시간이 고를 수 있도록 맵 전반에 걸쳐 라이트맵 해상도를 최적화시키십시오. LightmassToolsKR#LightingTimings 대화창으로 가장 느린 오브젝트를 찾을 수 있습니다. 몇 대의 기계가 분산 빌드를 활용하든 말든 관계 없이, 라이팅 빌드 시간은 곧 딱 하나라도 가장 느린 오브젝트를 빌드하는 데 걸리는 시간입니다.

라이트매스 세팅


LightmassImportanceVolume

많은 맵에 에디터의 그리드 가장자리 밖으로 삐져나가는 메시가 있으나, 고품질 라이팅을 필요로 하는 실제 플레이가능 영역은 훨씬 작습니다. 라이트매스는 레벨의 크기에 따라 포톤을 방출하기에, 그러한 배경 메시는 방출해야 하는 포톤의 수를 크게 늘리게 되어 라이팅 빌드 시간도 늘어날 것입니다. LightmassImportanceVolume 은 라이트매스가 포톤을 방출하는 영역을 제한시켜, 디테일한 간접광이 필요한 지역에 집중시킬 수 있습니다. 임포턴스 볼륨 밖 영역은 저품질 간접광이 딱 한 번 바운스됩니다.

첫 이미지는 MP_Jacinto 의 내려보기 와이어프레임 뷰입니다. 고품질 라이팅을 필요로 하는 실제 플레이가능 영역은 중앙의 녹색 덩어리입니다.

둘째 이미지는 MP_Jacinto 의 플레이가능 영역을 확대한 것인데, 올바르게 셋업된 LightmassImportanceVolume 가 선택된 상태입니다. LightmassImportanceVolume 이 라이팅할 반경을 8만 유닛에서 1만 유닛으로 줄였으니, 넓이로 따지면 64배 줄어든 것입니다.

JacintoImportanceFar.jpg JacintoImportanceNear.jpg

LightmassImportanceVolume 은 다른 볼륨과 같은 식으로 만드는데, 빌더 브러시를 맞춘 다음 아래와 같이 우클릭 > Add Volume > LightmassImportanceVolume 을 선택하면 됩니다.

VolumeMenu.jpg

여기서 여러 개의 LightmassImportanceVolume 으로 여러 지역에 딱 맞춰 봐야 좋을 것이 없는데, 임포턴스 볼륨 전체를 아우르는 경계 박스를 사용하여 라이팅을 빌드하기 때문입니다.

라이팅 빌드 옵션 대화창

LightingBuildOptions.jpg

  • Build Quality (빌드 품질) - 라이팅 빌드에 얼마나 시간을 소비할지, 어떤 품질로 라이팅을 계산할지 조절합니다. Preview 가 가장 빠르면서 저품질이(나 알아볼만은 하)며, Production 은 출하 단계에서 쓸만한 가장 느린 고품질입니다. 각 품질 세팅은 그 윗 단계보다 약 3 배 느립니다. Preview / Medium 에는 색에 오차가 있을 수 있으나, High / Production 은 그렇지 않습니다.
  • Use Lightmass (라이트매스 사용) - 딱 이 라이팅 빌드에 대해서는 레벨의 bUseGlobalIllumination (글로벌 일루미네이션 사용) 옵션을 덮어씁니다. 주: 레벨의 bUseGlobalIllumination (글로벌 일루미네이션 사용) 옵션은 영구적으로 바뀌지 않습니다!

월드 세팅

worldsettings.JPG

  • bUseGlobalIllumination (글로벌 일루미네이션 사용) - 레벨이 라이트매스를 사용할지, 예전 UE3 디렉트 라이팅을 사용할지 입니다. QA_APPROVED_BUILD_JUNE_2009 이후 새 맵 디폴트는 true, 예전 맵은 false 입니다.
  • StaticLightingLevelScale (스태틱 라이팅 레벨 스케일) - 게임 스케일에 상대적인 레벨 스케일입니다. 라이팅 계산시의 디테일 양을 조절하는 데 사용되며, 스케일 값이 작을수록 빌드 시간이 크게 향상됩니다. 디폴트는 1.0 으로, 이 레벨은 게임의 나머지 부분과 같은 라이팅 스케일이 필요하다는 뜻입니다. 값이 2 가 되면 현재 레벨은 디폴트보다 2배 큰 간접광 상호작용만 계산해 주면 되므로, 라이팅 빌드가 훨씬 빨라진다는 뜻입니다. Gears of War 2 의 SP_Assault 가 StaticLightingLevelScale 옵션 사용시의 좋은 예입니다. 이 레벨은 (에디터 그리드의 3/4 를 차지할 만큼) 거대하며, 대부분 걸어서가 아닌 탑승한 채로 지나가게 되므로, 라이팅 디테일이 별로 눈에 띄지 않습니다. 이런 레벨에는 StaticLightingLevelScale 4.0 정도가 적당하며, 빌드 시간이 크게 단축됩니다.
  • NumIndirectLightingBounces (간접광 바운스 횟수) - 라이트에서 시작해서 빛이 표면을 튕겨나갈 수 있는 횟수입니다. 0 은 직사광만이며, 1 은 한 번 바운스 등입니다. 1 번 바운스 계산에 가장 시간이 오래 걸리며, 2 번째가 뒤를 잇습니다. 그 이후의 바운스는 거의 무료이긴 하지만, 각 바운스마다 빛이 감쇠되기에 추가되는 라이트도 거의 없습니다.
  • EnvironmentColor (환경 색) - 씬을 벗어나는 광선이 취하는 색입니다. 환경은 레벨을 둘러싸는 구체로 시각화시킬 수 있는데, 각 방향으로 이 색의 빛을 내뿜습니다.
  • EnvironmentIntensity (환경 강도) - EnvironmentColor 스케일을 조절하여 HDR 환경 색을 가능케 합니다.
  • EmissiveBoost (이미시브 증폭) - 씬 내 모든 머티리얼의 이미시브 공헌도 스케일입니다.
  • DiffuseBoost (디퓨즈 증폭) - 씬 내 모든 머티리얼의 디퓨즈 공헌도 스케일입니다. DiffuseBoost 를 올리면 씬의 간접광 강도를 효율적으로 올릴 수 있습니다. DiffuseBoost 가 적용된 이후 Diffuse(확산)의 밝기는 1.0으로 제한됩니다. 머티리얼 에너지 보존 법칙을 유지하기(, 즉 바운스될 때마다 빛이 세 지는게 아니라 약해지게 하기) 위해서입니다. DiffuseBoost 를 올려도 간접광이 밝아지지 않는다면 Diffuse(확산)이 제한되었기 때문으로, 간접광을 증폭시키려면 Light 의 IndirectLightingScale (간접광 스케일)을 대신 사용해야 합니다.
  • SpecularBoost (스페큘러 증폭) - 씬 내 모든 머티리얼의 스페큘러 공헌도 스케일입니다. 현재 미사용.
  • IndirectNormalInfluenceBoost (간접 노멀 영향력 증폭) - 간접광의 디렉셔널 라이트맵을 가지고 노멀맵 영향력을 제어하는 Lerp(선형보간) 팩터입니다. 값이 0 이면 물리적으로 올바르게 빛이 분배되어 간접광으로 라이팅된 영역에만 극소량의 노멀 영향력을 끼치게 되나, 라이트맵 압축 부작용은 줄어듭니다. 값이 .8 이면 80% 의 빛이 우세(dominant) 입사 광선 방향으로 재분배되어, 픽셀별 노멀의 영향력이 확실히 증대되나 라이트맵 압축 부작용은 심해집니다.
  • bUseAmbientOcclusion (앰비언트 오클루전 사용) - 라이트매스에 의한 스태틱 앰비언트 오클루전 계산을 활성화시켜 라이트맵 속으로 빌드하도록 합니다.
  • DirectIlluminationOcclusionFraction (직접 조명 오클루전 비율) - 직사광에 적용할 앰오 비율입니다.
  • IndirectIlluminationOcclusionFraction (간접 조명 오클루전 비율) - 간접광에 적용할 앰오 비율입니다.
  • MaxOcclusionDistance (최대 오클루전 거리) - 한 오브젝트가 다른 오브젝트를 가릴 수 있는 최대 거리입니다.
  • FullyOccludedSamplesFraction (완전히 가려지는 샘플 비율) - 풀 오클루전이 되려면 얼마만큼의 샘플 비율이 가려져야 하는가 입니다.
  • OcclusionExponent (오클루전 지수) - 높을 수록 대비가 높아집니다.
  • bVisualizeMaterialDiffuse (머티리얼 디퓨즈 시각화?) - 노멀 직사/간접광을 라이트매스로 익스포트된 머티리얼 Diffuse(확산)으로만 덮어씁니다. 익스포트된 머티리얼 디퓨즈가 실제 디퓨즈와 일치하는지 확인할 때 좋습니다.
  • bVisualizeAmbientOcclusion (앰비언트 오클루전 시각화) - 노멀 직사/간접광을 앰오로만 덮어씁니다. 오클루전 부분을 고립시켜 내므로 앰비언트 오클루전 세팅을 미세조정할 때 좋습니다.

라이트 세팅

UE3 내 라이팅 셋업 관련 상세 정보는 Lighting Reference KR, Shadowing Reference KR 페이지를 참고하시기 바랍니다.

lightsettings.JPG

  • IndirectLightingSaturation (간접광 채도) - 0 은 간접광의 채도를 완전히 뺀 상태, 1 은 변경되지 않은 상태가 됩니다.
  • IndirectLightScale (간접광 스케일) - 이 라이트에서의 간접광 밝기 스케일입니다. 바운스되는 빛의 양을 변경한ㄷ아는 점에서 DiffuseBoost 과 비슷하나, 바운스될 때마다 감쇠되는 빛의 양이 아닌 방출되는 빛의 양만을 변경한다는 점이 다릅니다. 또한 DiffuseBoost 는 간접광을 일정 수준까지만 증폭시킬 수 있는데, Diffuse(확산)의 밝기는 1.0 이하로 제한되기 때문입니다. 간접광 강도를 아무렇게나 증폭시킬 수 있는 옵션은 IndirectLightScale 입니다.
  • LightSourceRadius (라이트 반경) - (포인트/스포트 라이트 전용) 라이트가 빛을 뿜는 구체의 반경으로, Radius 로 조절하는 라이트의 영향력과는 다릅니다. LightSourceRadius 가 클수록 빛과 그림자가 만나는 부분도 커집니다.
  • LightSourceAngle (라이트 앵글) - (디렉셔널 라이트 전용) 받는 곳에서 디렉셔널 라이트가 빛을 뿜는 원반형의 앵글로, 도 단위입니다. 앵글이 클 수록 빛과 그림자가 만나는 부분도 커 집니다. 디렉셔널 라이트의 원반 중심에서부터 원반 가장자리까지의 앵글이며, 한 쪽 가장자리에서 다른 쪽 가장자리까지가 아닙니다. 참고로 태양의 앵글은 약 .25 도입니다.
  • ShadowExponent (그림자 지수) - 빛과 그림자가 만나는 부분의 감쇠, 즉 완전한 빛에서 완전한 그늘로 얼마나 빨리 바뀌나를 조절합니다.

프리미티브 컴포넌트 세팅

primitivesettings.JPG

  • DiffuseBoost (디퓨즈 증폭) - 이 오브젝트에 적용된 모든 머티리얼의 디퓨즈 공헌도 스케일입니다.
  • EmissiveBoost (이미시브 증폭) - 이 오브젝트에 적용된 모든 머티리얼의 이미시브 공헌도 스케일입니다.
  • EmissiveLightExplicitInfluenceRadius (이미시브 라이트 명시적 영향력 반경) - 직사광 영향력 반경입니다. 디폴트는 0 인데, 이미시브 라이트 밝기에 따라 영향력이 자동으로 생성된다는 뜻입니다. 값이 0 보다 크면 자동 방법을 덮어씁니다.
  • EmissiveLightFalloffExponent (이미비스 라이트 감쇠 지수) - 이 프리미티브 위의 이미시브 영역에서 생성된 메시 에리어 라이트에 대한 직사광 감쇠 지수입니다.
  • FullyOccludedSamplesFraction (완전히 가려지는 샘플 비율) - 이 오브젝트에서 채취한 앰오 샘플이 이 비율만큼 가려지면 다른 오브젝트를 완전히 가리는 오클루전이 됩니다. 한 오브젝트가 다른 오브젝트를 얼마만큼 가리나 조절할 수 있습니다.
  • bShadowIndirectOnly (간접에만 섀도잉?) - 체크되면 이 오브젝트는 간접광에만 그림자를 드리웁니다. 풀 같은 것에 좋은데, 렌더링되는 지오메트리는 실제 지오메트리의 표상일 뿐, 그림자를 정확한 모양으로 드리울 필요는 없기 때문입니다. 풀에 좋은 또 한가지 이유는, 미리계산된 라이트맵에 저장하기에는 그림자 빈도가 너무 높을 것이기 때문입니다.
  • SpecularBoost (스페큘러 증폭) - 이 오브젝트에 적용된 모든 머티리얼의 스페큘러 공헌도 스케일입니다. 현재 미사용.
  • bUseEmissiveForStaticLighting (스태틱 라이팅에 이미시브 사용) - 메시의 머티리얼의 이미시브를 사용하여 메시 에리어 라이트를 만들 수 있도록 합니다.
  • bUseTwoSidedLighting (양면 라이팅 사용?) - 체크하면 이 오브젝트는 폴리곤 양쪽 면에 빛을 받는 것처럼 라이팅됩니다.

베이스 머티리얼 세팅

머티리얼 에디터 관련 상세 정보는 Material Editor User Guide KR 페이지를 참고해 주시기 바랍니다.

materialsettings.JPG

  • EmissiveBoost (이미시브 증폭) - 이 머티리얼의 이미시브 공헌도를 스태틱 라이팅으로 스케일 조절합니다.
  • DiffuseBoost (디퓨즈 증폭) - 이 머티리얼의 디퓨즈 공헌도를 스태틱 라이팅으로 스케일 조절합니다.
  • SpecularBoost (스페큘러 증폭) - 이 머티리얼의 스페큘러 공헌도를 스태틱 라이팅으로 스케일 조절합니다.
  • ExportResolutionScale (익스포트 해상도 스케일) - 이 머티리얼의 특성이 익스포트되는 해상도를 스케일 조절합니다. 디테일이 필요할 때 머티리얼 해상도를 늘리기에 좋습니다.

머티리얼 인스턴스 불변 세팅

머티리얼 인스턴스 에디터 관련 상세 정보는 Material Instance Editor User Guide KR 페이지를 참고해 보시기 바랍니다.

materialinstance.JPG

  • EmissiveBoost (이미시브 증폭) - 체크하면 부모의 EmisiveBoost 를 덮어씁니다.
  • DiffuseBoost (디퓨즈 증폭) - 체크하면 부모의 DiffuseBoost 를 덮어씁니다.
  • SpecularBoost (스페큘러 증폭) - 체크하면 부모의 SpecularBoost 를 덮어씁니다.
  • ExportResolutionScale (익스포트 해상도 스케일) - 체크하면 부모의 ExportResolutionScale 을 덮어씁니다.

유용한 툴


여러가지 라이트매스용 툴은 물론 디버깅 전략이나 문제해결 팁 등에 대한 정보는, Lightmass Tools KR 페이지를 참고해 보시기 바랍니다.

프로그래머용


라이트매스 프로그래밍 및 디버깅 관련 정보는 Lightmass Technical Guide KR 페이지를 참고해 주시기 바랍니다.