UDN
Search public documentation:
ShadowingReferenceKR
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
日本語訳
中国翻译
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
섀도잉 참고서
문서 변경내역: 2004/03/01 Chris Sturgill (Demiurge Studios) 원저. James Golding, Andrew Scheidecker?, Daniel Wright 업데이트. 홍성진 번역.
개요
언리얼 엔진 3 는 여러가지 독자적인 섀도잉 솔루션을 사용합니다:
- Whole-scene dynamic shadows 전체-씬 다이내믹 섀도우 - 움직이는 라이트는 전체-씬 다이내믹 섀도우를 사용합니다.
- Per-object dynamic shadows 오브젝트별 다이내믹 섀도우 - 움직이지 못하는 라이트가 움직이거나 다이내믹 오브젝트를 비출 때는 오브젝트별 다이내믹 섀도우를 사용합니다.
- Precomputed shadows 미리계산된 새도우 - 움직이지 못하는 라이트가 스태틱 오브젝트를 비출 때는 미리계산된 섀도우 맵을 사용합니다.
- Precomputed lighting 미리계산된 라이팅 - 스태틱 라이트가 스태틱 오브젝트를 비출 때는 미리계산된 라이트 맵을 사용합니다.
Light 클래스
월드에 놓을 수 있는 각 라이트 유형에 대해, 라이트의 섀도잉 방식을 조절하는 다양한 클래스가 있습니다. 그러한 클래스는 라이트가 런타임에 특정 방식으로 변하는 것을 제한하거나, 라이트를 "도미넌트" 라이트로 지정할 수 있습니다.
- 각 라이트(, PointLight 등)의 베이스 클래스는 그 라이트의 스태틱 버전입니다. 미리계산된 라이팅과 결합된 오브젝트별 다이내믹 섀도우를 사용합니다.
- 라이트의 Movable (무버블, 이동가능) 서브클래스는 런타임에 움직일 수 있는 것입니다. 전체-씬 다이내믹 섀도우를 사용합니다.
- 라이트의 Toggleable (토글러블, 껐다켰다) 서브클래스는 런타임에 움직일 수는 없지만 색과 밝기를 변경할 수 있는 것입니다. 섀도우 맵과 결합된 오브젝트별 다이내믹 섀도우를 사용합니다.
- 라이트의 Dominant (도미넌트, 우세) 서브클래스는 토글러블 라이트와 비슷하지만 디스턴스 필드 섀도우 맵을 사용합니다.
![]() | ![]() | ![]() | ![]() |
스포트라이트 | 무버블 스포트라이트 | 토글러블 스포트라이트 | 도미넌트 스포트라이트 |
---|
추천 사용법
대부분의 라이트에 대해 PointLight, SpotLight, DirectionalLight 등의 베이스 라이트 클래스를 사용할 것입니다. 이 클래스는 모두 미리계산된 라이팅을 사용하므로 런타임 퍼포먼스 비용이 가장 적게 듭니다. 런타임에 움직일 필요는 없지만 색이나 밝기나 켜고 끄는 상태를 바꿔줘야 하는 라이트에는 토글러블 라이트 서브클래스 PointLightToggleable, SpotLightToggleable, DirectionalLightToggleable 를 사용해야 합니다. 이 클래스는 미리계산된 섀도우와 함께 런타임에 픽셀별 라이팅을 사용하므로, 런타임 퍼포먼스 영향은 조금밖에 없습니다. 대부분의 씬에는 미리계산된 라이팅으로 얻을 수 있는 것보다 고품질의 라이팅을 가지고 미리계산된 그림자를 사용하는 라이트를 약간만 두는 것이 좋습니다. 그 목적으로 도미넌트 라이트 서브클래스, 즉 DominantPointLight, DominantSpotLight, DominantDirectionalLight 를 사용합니다. 이 클래스는 토글러블 라이트 서브클래스와 비슷하지만, 각 오브젝트는 하나의 도미넌트 라이트에만 영향받을 수 있도록 제한되어 있다는 점이 다릅니다. 이때문에 도미넌트 라이트가 토글러블 라이트보다 런타임에 약간 더 효율적인 것입니다. 자세한 정보는 Dominant Lights KR 페이지를 참고하십시오. 움직이는 라이트가 필요한 경우에는 무버블 라이트 서브클래스, 즉 PointLightMovable, SpotLightMovable, DirectionalLightMovable 를 사용해야 합니다. 이들 클래스는 런타임시 매 프레임마다 섀도잉과 라이팅을 계산하므로, 런타임 퍼포먼스 영향이 가장 큽니다.섀도우 타입
오브젝트별 다이내믹 섀도우
움직이지 못하는 라이트에 영향받은 다이내믹 오브젝트는 오브젝트별 다이내믹 섀도우를 드리웁니다. 오브젝트별 다이내믹 섀도우는 라이트 시점에서 오브젝트를 봤을 때의 뎁스(깊이) 버퍼를 렌더한 다음 그것을 월드에 비추는(project) 식으로 돌아갑니다. 라이트에서 비추어진 섀도우 뎁스 버퍼의 깊이보다 멀리 있는 픽셀은 섀도잉(그늘지게 )되는 것입니다. 그늘진 부분과 밝은 부분 사이의 에지(선분)을 부드럽게 하기 위해 필터가 사용됩니다. 이 스크린 샷에서 보이는 날틀(Cicada)이 다리 위에 부드러운 다이내믹 섀도우를 드리우고 있습니다.




모듈레이트 섀도우 (변조 그림자)
오브젝트별 다이내믹 섀도우는 모듈레이트(변조된 것)일 수도, 노멀(일반적인 것)일 수도 있습니다. 노멀 섀도우는 그림자를 받는 것에 대한 그림자를 드리우는 라이트의 공헌을 마스킹(차단)하는 반면, 모듈레이트 섀도우는 그림자를 받는 것의 최종 색을 모듈레이트 섀도우 컬러로 변조시키기만 할 뿐입니다. 스태틱 라이트가 모듈레이트 섀도우에 요하는 작업은, 오브젝트별 다이내믹 섀도우와 그 스태틱 라이트가 사용하는 미리계산된 라이팅을 합치는 것입니다. 이 스크린샷에는 노멀 섀도잉이 적용되었습니다.




전체-씬 다이내믹 섀도우
무버블 라이트에 대해서는 전체-씬 다이내믹 섀도우가 사용됩니다. 전체-씬 섀도우는 오브젝트별 다이내믹 섀도우의 비춰진 섀도우-뎁스 버퍼와 비슷한 방식으로 작동합니다만, 각 오브젝트마다 비춰진 섀도우-뎁스 버퍼를 만드는 대신, 전체 씬에 대해 고정된 수의 섀도우-뎁스 버퍼를 사용합니다. 스포트 라이트는 하나의 섀도우 뎁스 버퍼를, 포인트 라이트는 육면체의 각 면마다 하나씩 여섯 개의 섀도우 뎁스 버퍼를, 디렉셔널 라이트는 뷰어를 중심으로 맞춘 캐스케이드 섀도우 뎁스 버퍼를 하나 이상 사용합니다. 이 스크린샷에서 무버블 포인트 라이트는 전체-씬 섀도우를 드리우고 있습니다.


캐스케이드 섀도우 맵
도미넌트 디렉셔널 라이트는 전체-씬 섀도우에 캐스케이드 섀도우 뎁스 버퍼를 사용할 수 있습니다. 라이트가 움직일 수 없는 것이면 캐스케이드 섀도우 뎁스 버퍼를 미리계산된 섀도우랑 블렌딩할 수 있습니다. 가까운 오브젝트에는 캐스케이드 섀도우 뎁스 버퍼를, 먼 오브젝트에는 미리계산된 섀도우를 사용합니다.
미리계산된 섀도우
토글러블 라이트는 미리계산된 섀도우를 사용합니다. 미리계산된 섀도우는 라이트를 렌더링할 때 적용되는 그레이스케일 마스크, 아니면 도미넌트 라이트에 대해서는 사인드 디스턴스 필드로 저장됩니다.
미리계산된 라이팅
스태틱 라이트는 스태틱 오브젝트에 미리계산된 라이팅을 사용합니다. 미리계산된 라이팅은 모든 스태틱 라이트를 혼합시켜, 라이트가 런타임에 더이상 분리될 수 없도록 합니다. 그때문에 스태틱 라이트는 다이내믹 오브젝트에서 모듈레이트된 오브젝트별 섀도우만 드리울 수 있는 것입니다.
그림자 불투명도
마스크 머티리얼 불투명도는 모든 섀도우 타입이 따릅니다.



섀도우/라이트 맵 해상도
미리계산된 섀도우와 BSP
BSP 표면에 사용된 섀도우 맵과 라이트 맵의 해상도를 바꾸려면, 그 면(들)을 선택한 다음 F5 키를 칩니다. 그러면 Surface 프로퍼티 메뉴가 뜹니다.

미리계산된 섀도우와 스태틱 메시
미리계산된 섀도우는 스태틱 메시 지오메트리에도 드리워집니다. 디폴트로 섀도우 팩터는 버텍스별로 계산됩니다. 더 나은 섀도우 해상도를 위해, 섀도우 맵을 각 스태틱 메시에 대해 생성해야 합니다. 섀도우 맵의 모든 UV 데이터는 고유성을 띄어야 합니다. 미러링이나 타일링은 없어야 하는 것이죠. 스태틱 메시의 UV 에 미러링(접기), 스태킹(쌓기), 타일링(반복)이 있는 경우, 고유한 UV 2차 세트를 새로 만들어 줘야 합니다. UV 세트를 여러개 셋업하는 법에 대한 정보는 버텍스 블렌딩 튜토리얼 (영문 구형 문서) 을 참고하시기 바랍니다. 스태틱 메시 에디터에서 스태틱 메시를 엽니다 (콘텐츠 브라우저 창에서 스태틱 메시를 더블클릭). LightMapResolution 에 바라는 값을 채웁니다. 디폴트 값 0 은 섀도우 맵이 생성되지 않는다는 뜻입니다. 레벨 파일에 있는 메시 각각의 인스턴스에 대해 별개의 섀도우 맵이 생성되기에, 메모리 분기가 엄청나질 수 있다는 점 유념하시기 바랍니다.

섀도잉 옵션
클래스 | 그룹 | 프로퍼티 | 디폴트 | 설명 |
---|---|---|---|---|
DirectionalLightComponent | Cascaded Shadow Maps | Whole Scene Dynamic Shadow Radius | 0 이나 2000 | 뷰어를 중심에 둔 상태에서의 전체 씬 다이내믹 섀도우 반경으로, 카메라에서의 거리에 따라 미리계산된 섀도우를 대체합니다. 반경이 0 이면 다이내믹 섀도우를 끕니다. 이 기능은 현재 도미넌트 디렉셔널 라이트에만 지원됩니다. |
DirectionalLightComponent | Cascaded Shadow Maps | Num Whole Scene Dynamic Shadow Cascades | 1 | 뷰어를 중심에 둔 상태에서의 전체 씬 다이내믹 섀도우 반경으로, 카메라와의 거리에 따라 미리계산된 섀도우를 대체합니다. 반경이 0 이면 다이내믹 섀도우를 끕니다. 이 기능은 현재 도미넌트 디렉셔널 라이트에만 지원됩니다. |
DirectionalLightComponent | Cascaded Shadow Maps | Cascade Distribution Exponent | 4 | WholeSceneDynamicShadowRadius 의 분수로 캐스케이드 전환 거리에 적용된 지수입니다. 지수가 1 이면 그 해상도에 비례하는 거리에서 캐스케이드 전환이 일어난다는 뜻입니다. 지수가 1 보다 크면 전환이 카메라 쪽 가까이서 일어납니다. |
PointLightComponent | Lightmass | Shadow Exponent | 2 | 라이트의 영향력이 아닌, 라이트가 빛을 발하는 표면의 반경입니다. |
LightComponent | Light Component | Cast Shadows | True | 라이트가 그림자를 드리울지 입니다. |
LightComponent | Light Component | Cast Static Shadows | True | 라이트가 스태틱 오브젝트에서 그림자를 드리울지 입니다. Cast Shadows 도 True 로 설정되어 있어야 합니다. |
LightComponent | Light Component | Cast Dynamic Shadows | 다양 | 라이트가 다이내믹 오브젝트에서 그림자를 드리울지 입니다. Cast Shadows 도 True 로 설정되어 있어야 합니다. |
LightComponent | Light Component | Cast Composite Shadows | True | 라이트가 컴포짓 라이팅(, 즉 라이트 인바이언먼트를 켠 상태의 합성 라이팅)으로 오브젝트에서 그림자를 드리울지 입니다. |
LightComponent | Light Component | Affect Composite Shadow Direction | True | bCastCompositeShadow=TRUE 일 때, 라이트가 컴포짓 섀도우의 방향에 영향을 끼치게 할 것인지 입니다. |
LightComponent | Light Component | Non Modulated Self Shadowing | False | 켜고서 라이트가 모듈레이트 섀도우를 드리우는 경우, 이 라이트에서 렌더되는 섀도우의 셀프-섀도잉이 노멀 섀도우 블렌딩을 사용하도록 합니다. 섀도우는 라이트매핑된 인바이언먼트에 두고서도 셀프-섀도잉 품질을 높이고자 할 때 좋습니다. 켜면 두 가지 방법을 거의 합친 렌더링 부하가 발생합니다. |
LightComponent | Light Component | Self Shadow Only | False | 라이트가 다이내믹 오브젝트에서의 그림자를 자기 위로만 드리우도록 합니다. |
LightComponent | Light Component | Force Dynamic Light | False | 라이트의 클래스와는 무관하게 무버블인 것처럼 섀도우를 드리우도록 합니다. |
LightComponent | Light Component | Light Shadow Mode | 다양 | 라이트에 적용할 섀도잉 타입입니다. |
LightComponent | Light Component | Shadow Filter Quality | SFQ_Low | 라이트에 의해 드리워지는 다이내믹 섀도우에 사용할 필터링 품질입니다. |
LightComponent | Light Component | Mod Shadow Color | 검정 | 이 라이트(가 모듈레이트 섀도우를 드리운다면, 거기)에서 다이내믹 섀도우를 받는 픽셀에 변조시켜줄 색입니다. |
LightComponent | Light Component | Min Shadow Resolution | 0 | 그림자 피사체 깊이 렌더링에 허용되는 (텍셀 단위) 최소 치수에 대한 덮어쓰기입니다. 섀도우 페이딩 역시 조절하는데, 섀도우 해상도가 MinShadowResolution (최소 섀도우 해상도)에 도달하면 완전히 페이드 아웃 됩니다. 값이 0 이면 SystemSettings 의 MinShadowResolution 을 디폴트로 삼습니다. |
LightComponent | Light Component | Max Shadow Resolution | 0 | 그림자 피사체 깊이 렌더링에 허용되는 (텍셀 단위) 최대 정사각 치수에 대한 덮어쓰기입니다. 값이 0 이면 SystemSettings 의 MaxShadowResolution 을 디폴트로 삼습니다. |
LightComponent | Light Component | Shadow Fade Resolution | 0 | 섀도우보다 텍셀 해상도가 떨어지면 페이드 아웃이 시작됩니다. 섀도우 해상도가 MinShadowResolution 에 도달하면 완전 페이드 아웃 됩니다. 값이 0 이면 디폴트는 SystemSettings 의 ShadowFadeResolution 이 됩니다. |
LightComponent | Light Component | Use Direct Light Map | True | 스태틱 라이트에 거짓으로 설정되면, 미리계산된 라이팅 대신 미리계산된 섀도잉을 강제로 사용하도록 합니다. |
Material | Translucency | Cast Lit Translucency Shadow As Masked | False | 머티리얼의 오패시티 채널을 다이내믹 섀도우의 반투명 백분율이 아닌 마스크로 다루게 할 것인지 입니다. |
PrimitiveComponent | Lighting | Cast Shadow | True | 프리미티브 컴포넌트가 그림자를 드리울 것인지 조절합니다. 현재 다이내믹 프리미티브는 이 옵션과 bCastDynamicShadow 옵션이 둘 다 켜져있지 않으면 스태틱 오브젝트에서 그림자를 받지 않습니다. |
PrimitiveComponent | Lighting | Cast Dynamic Shadow | True | 프리미티브가 라이트와 다이내믹 오브젝트 사이에 있는 것처럼 미리계산된 섀도잉이 아닌 상황에서 프리미티브가 그림자를 드리우게 할 것인지 조절합니다. 이 옵션은 CastShadow 가 참일 때만 사용됩니다. 현재 다이내믹 프리미티브는 이 옵션과 CastShadow 옵션이 둘 다 켜져있지 않으면 스태틱 오브젝트에서의 그림자를 받지 않습니다. |
PrimitiveComponent | Lighting | Cast Static Shadow | True | 프리미티브가 움직이지 않는 그림자를 드리우는 라이트에서 그림자를 드리울 것인지 조절합니다. Cast Shadow 역시 참으로 설정되어 있어야 합니다. |
PrimitiveComponent | Lighting | Force Direct Light Map | False | 라이트가 라이트맵을 사용하도록 설정되어 있지 않은 경우에도, 이 프리미티브에 영향을 끼치는 모든 스태틱 라이트에 대해 강제로 라이트맵을 사용하도록 합니다. 즉 스태틱 라이트를 가리는 다이내믹 오브젝트에서는 프리미티브에 어떠한 그림자도 드리워지지 않는다는 뜻입니다. 다이내믹 라이트의 경우 그림자가 올바르게 드리워집니다. |
PrimitiveComponent | Lighting | Self Shadow Only | False | 참이면 프리미티브는 자기 그림자만 드리우며, 다른 프리미티브에 그림자를 드리우지 않습니다. 다른 프리미티브의 그림자를 잘 알아볼 수 없는 상황에서 최적화로 쓸 수 있습니다. |
PrimitiveComponent | Lighting | No Mod Self Shadow | False | 모바일 플랫폼 전용! 참이면 프리미티브는 자신은 물론 다른 모듈레이트 섀도우 캐스터에서 투영되는 모듈레이트 섀도우를 받지 않습니다. 셀프 섀도잉 부작용을 해결하기 위해 사용합니다. |
PrimitiveComponent | Lighting | Accepts Dynamic Dominant Light Shadows | True | 도미넌트 라이트 섀도우를 받을 필요가 없는 오브젝트에 대한 최적화입니다. GPU 시간을 많이 잡아먹는데다 심하게 텍스처 의존적이면서도 절대로 도미넌트 라이트에서 확연한 그림자를 받지 않는 오브젝트, 이를테면 나무같은 것에 좋습니다. |
PrimitiveComponent | Lighting | Cast Hidden Shadow | False | 참이면 프리미티브는 bHidden 이 참이라도 그림자를 드리웁니다. 프리미티브가 안보이는 데도 그림자를 드리우게 할 지를 정합니다. 이 옵션은 CastShadow 가 참일 때만 사용됩니다. |
PrimitiveComponent | Lighting | Cast Shadow As Two Sided | False | 이 프리미티브가 양면 머리티렁인양 그림자를 드리우게 할 지 입니다. |
PrimitiveComponent | Lighting | Use Precomputed Shadows | 다양 | 프리미티브가 미리계산된 섀도우나 라이팅을 사용할 수 있도록 할지 입니다. |