UDN
Search public documentation:
LightFunctionsKR
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
라이트 함수
문서 변경내역: James Tan 작성. 홍성진 번역.
개요
라이트 함수는 언리얼 엔진 3 에서 라이트가 씬을 어떻게 밝힐 것인가를 수학적으로 나타내는 것입니다. 라이트는 디폴트로 라이트 컴포넌트가 정의하는 여러가지 인풋, 이를테면 밝기나 색 같은 것에 따른 상수 값을 사용합니다. 라이트 함수를 통해 깜빡이는 빛이나 마스킹을 적용한 빛, 스트로브 라이트(나이트클럽의 번쩍이는 빛), 텍스처를 입힌 빛과 같은 재미난 효과를 낼 수 있습니다. 라이트 함수는 언리얼 엔진 3 의 머티리얼 시스템을 사용하므로, 아티스트와 레벨 디자이너도 쉽게 만들고 수정할 수 있습니다. 또한 머티리얼 시스템을 사용하기에 이러한 라이트 함수를 인스턴싱하여 변종(variation)을 만들 수도 있습니다.

데칼 vs 라이트 함수
알아둬야 할 중요한 점 한 가지는, 라이트 함수도 여전히 라이트이기에, 오브젝트 위에 빛과 함께 텍스처도 비춰(project) 주고 싶다면 라이트 함수가 훨씬 낫다는 점입니다. 라이트 함수는 데칼이 할 수 없는 텍스처 큐브도 비출 수 있습니다. 그렇기에 뭔가가 빛을 비출 것인가 말 것인가는 결정적 요인이 되지 않습니다.사용할 수 있는 머티리얼 표현식
라이트 함수와 모든 머티리얼 표현식을 사용할 수 있는 것은 아닙니다. 그 이유는 일부 표현식은 라이트 함수와 잘 어울리지 않기 때문입니다만, 대부분의 표현식을 사용할 수는 있습니다. 수학적이거나 텍스처 샘플러 표현식은 모두 돌아가지만, 다른 렌더 타겟이나 메시 프로퍼티 의존적인 것들은 무시됩니다. 어떠한 표현식이 있고, 그 작동방식은 어떠한지 Materials Compendium KR 페이지에서 참고해 보시기 바랍니다.
Texture 2D
2차원 텍스처를 사용할 수는 있지만, 디렉셔널 라이트나 스포트 라이트처럼 일정한 방향으로 뻗어가는 라이트에 적합합니다. 스포트 라이트에도 사용할 수는 있지만, 텍스처 띠 현상(banding)이 일어납니다. 디렉셔널 라이트도 수직 표면 근처에서는 텍스처 밴딩 현상이 일어납니다. 텍스처 입힌 라이트 함수와 포인트 라이트입니다. 천정과 바닥에 텍스처 띠 현상이 보입니다.


텍스처 큐브
큐브 매핑에 텍스처 큐브가 사용됩니다. 큐브 매핑은 배경 매핑의 한 방법으로, 각각의 텍스처가 큐브의 한 면을 정의하는 식입니다. 이 경우 큐브 매핑은 라이트 함수에서 사용될 때 비출 수 있는 텍스처 매핑을 만들어 냅니다. 텍스처 큐브를 입힌 라이트 함수와 포인트 라이트입니다. 티나는 텍스처 띠 현상은 없습니다.


텍스처 큐브 입힌 라이트 함수 로테이트 방법
가장 쉬운 방법은 그냥 라이트 액터를 로테이트 하는 것입니다. 머티리얼에 사용된 라이트 벡터도 라이트 액터의 로테이션 값에 맞게 조절됩니다.
참고
라이트 함수는 라이트 컴포넌트로 설정되는 라이트의 최대 밝기를 지정할 수 없습니다. 라이트 함수는 라이트의 최종 밝기를 조절하는 스케일에 더 가깝습니다. 라이트 함수가 색을 출력할 수는 있지만, 라이트 컴포넌트 자체가 하얀색을 사용하지 않는 이상 라이트 함수 색을 구하지는(evaluate) 않습니다. 컬러 텍스처를 사용하는 라이트 함수를 조절하려면 Desaturate 머티리얼 표현식을 사용하면 됩니다.사용할 수 있는 라이트 타입
스카이 라이트가 지원되지 않기는 하지만, 스카이 라이트야 단지 도처의 배경 빛을 나타낼 뿐이니 문제는 없습니다. 라이트는 도미넌트, 무버블, 토글러블 등이 가능하며, 필요에 따라 다이내믹 섀도우를 드리워도 됩니다. 스태틱 라이트에 대해서는 더이상 라이트 함수를 만들 수 없습니다. 부적절한 라이트가 선택된 경우 언리얼 에디터가 라이트 함수를 만들지 못합니다.
언리얼 에디터 라이트 함수 튜토리얼
라이트 함수 만들기
라이트 함수를 새로 만들려면 우선 콘텐츠 브라우저에서 머티리얼을 새로 만듭니다. 머티리얼을 저장할 패키지와 그룹을 (, 라이트 함수가 레벨 전용이라면 레벨로) 정해 주고, 이 라이트 함수를 뭐라 부를 것인지 정해 줍니다.


라이트 함수를 라이트로 추가하기
먼저 적합한 종류의 라이트인지 확인해야 합니다. 라이트 액터에 우클릭하고 맥락 메뉴를 통해 종류를 전환할 수 있습니다. 라이트 함수에 쓸 수 있는 종류는 Dominant, Movable, Toggle-able 입니다.



라이트 함수 프로퍼티
- Source Material 소스 머티리얼 - 라이트 함수에 사용할 머티리얼입니다.
- Scale 스케일 -
- X - X 축의 프로젝션 스케일을 조절합니다.
- Y - Y 축의 프로젝션 스케일을 조절합니다.
- Z - Z 축의 프로젝션 스케일을 조절합니다.
- Disabled Brightness 꺼진 밝기 - 라이트 함수를 지정했으나 꺼졌을 때 라이트에 적용할 밝기 인수입니다. 예를 들면 SceneCapView_LitNoShadows 를 사용하는 씬 캡처에서 입니다. 라이트 함수의 이미시브 인풋 평균 밝기로, 0.f 에서 1.f 범위로 설정해야 합니다.
언리얼스크립트 라이트 함수 튜토리얼
임베디드 라이트 함수
라이트 함수는 언리얼스크립트의 default properties 섹션에서 만들 수 있습니다. 언리얼스크립트로 라이트 함수를 만들면 생성된 라이트 함수를 붙인 라이트 컴포넌트에 끼워넣을(embed) 수 있습니다. 실행시간에 라이트를 스폰하고 자동으로 라이트 함수를 갖도록 만들려는 경우에 좋습니다. 언리얼 에디터에서 라이트 함수로 구성된 라이트 아키타입을 만드는 식으로도 가능합니다.class EmbeddedLightFunctionLight extends PointLightMovable; defaultproperties { // 스크립트로 라이트 함수를 만듭니다. Begin Object Class=LightFunction Name=MyLightFunction SourceMaterial=Material'LightFunctionAssets.SimpleFlickeringLightFunction' End Object // 라이트 컴포넌트에 라이트 함수를 붙입니다. Begin Object Name=PointLightComponent0 Function=MyLightFunction End Object bNoDelete=false }

동적으로 생성되는 라이트에 라이트 함수 추가하기
라이트 함수는 이미 레벨에 있으면서 동적인 라이트, 또는 게임에서 스폰된 라이트에 추가할 수도 있습니다. 유일하게 안좋은 점이라면, 라이트 함수는 그 머티리얼 리퍼런스를 상수로 선언한다는 점인데, 현재 언리얼스크립트로는 이것을 어찌 할 수 있는 방법이 없습니다. 그때문에 언리얼 에디터 안에서 라이트 함수를 아키타입으로 만드는 것이 좋습니다. 그런 다음 아키타입을 기반으로 하여 새로운 라이트 함수를 스폰하고서, 실행시간에 그것을 라이트 컴포넌트에 할당하는 것입니다.class RunTimeLightFunctionLight extends PointLightMovable; var(Light) const archetype LightFunction LightFunctionArchetype; function PostBeginPlay() { local PointLightComponent PointLightComponent; local LightFunction LightFunction; Super.PostBeginPlay(); PointLightComponent = PointLightComponent(LightComponent); if (PointLightComponent != None) { if (LightFunctionArchetype != None && LightComponent.Function == None) { LightFunction = new () LightFunctionArchetype.Class(LightFunctionArchetype); if (LightFunction != None) { LightComponent.SetLightProperties(,, LightFunction); } } PointLightComponent.UpdateColorAndBrightness(); } } defaultproperties { bNoDelete=false }




관련 토픽
- DevelopmentKitGems Using Light Functions KR 라이트 함수 사용하기 - 여러가지 라이트 함수를 만드는 법을 보여주는 UDK 젬입니다.
다운로드
- 언리얼스크립트 라이트 함수 튜토리얼에서 사용된 콘텐츠 LightFunctionExample.zip 내려받기.