UDN
Search public documentation:

VolumetricLightbeamTutorialKR
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 홈 > 빛과 그림자 > 볼류메트릭 라이트빔 튜토리얼
UE3 홈 > 파티클과 이펙트 > 포그 이펙트 > 볼류메트릭 라이트빔 튜토리얼

볼류메트릭 라이트빔 튜토리얼


문서 변경내역: Ryan Brucks 작성.

개요


본 가이드는 그럴싸한 볼류메트릭 라이트빔 제작을 위한 머티리얼 기법에 대한 소개서 역할을 했으면 합니다. 원뿔형 스태틱 메시에 적용된 라이팅되지 않은 반투명(unlit translucent) 머티리얼을 사용하고, 에지(선분)를 감추기 위해 감쇠(falloff)를 사용할 것입니다.

게임 엔진은 벌써 수 년 동안 비슷한 기술을 사용하여 볼류메트릭 라이트빔 모습을 흉내내고자 했으나, 일반적인 기법 대부분은 아직 부족한 점이 많습니다. 어떻게 하면 모든 각도에서 가짜 라이트빔이 올바르게 보이도록 할 수 있을까요? 플레이어가 라이트빔 속으로 걸어가게 하면 어떨까요? 빔이 월드 지오메트리를 교차하도록 하면 어떨까요? 강력한 몇 가지 머티리얼식을 사용하여 언리얼 엔진 3는 이러한 문제점을 모두 손쉽게 해결할 수 있습니다. 약간의 트윅은 덤이죠.

본 튜토리얼에서 기대할 사항


본 튜토리얼은 EngineVolumetrics 패키지에서 찾을 수 있는 Master Lightbeam 머티리얼을 재생성합니다.

완성된 머티리얼의 전체 이름은 다음과 같습니다. \\Build\UnrealEngine3-Build\Engine\Content\EngineVolumetrics.LightBeam.Materials.M_EV_Lightbeam_Master_01

라이트빔의 내부를 볼 필요가 없을 때는 \\Build\UnrealEngine3-Build\Engine\Content\EngineVolumetrics.LightBeam.Materials.M_EV_Lightbeam_Master_01_1sided_01 이 사용되어야 한다는 점을 주목하십시오. 저희는 성능상의 이유에서 단면 버전을 훨씬 자주 사용하고 있습니다.

EngineVolumetrics는 FalloffSpheres, FogEnvironments, Fogsheets, Lightbeams의 4가지 유형의 볼류메트릭을 포함하기 위한 4가지 그룹을 포함하는 패키지입니다. 모든 볼류메트릭 기본 유형중에 lightbeam이 튜토리얼 머티리얼로 선택되었는데 그 이유는 모든 유형에서 나타나는 기술을 이 한 머티리얼에 집중되어 합쳐져 있기 때문입니다. 볼류메트릭 라이팅 가이드 페이지에서 다양햔 유형의 볼류메트릭 기본형에 대한 설명과 그 사용법에 대해 찾아볼 수 있습니다.

이 머티리얼이 다수 인스턴스의 부모 머티리얼로 사용되기 때문에 본 튜토리얼은 인스턴와 관련하여 머티리얼의 파라미터를 어떻게 설정해야 하는지에 대해서도 또한 보여줍니다. 머티리얼 인스턴스화에 대한 전체 설명은 인스턴스화 된 소재 페이지를 참조해 주십시오.

LightBeams


무한 가능하게 생성할 수 있지만 여기에서는 간단한 원뿔꼴의 폴오프 유형 빔으로 시작해 보겠습니다. 이것은 많은 다른 방법으로 사용될 수 있습니다. 광원에서 나오는 작고 미세한 빛이 될 수 있거나 스케일을 높여 구름 속을 뚫고 나오는 신의 밫과 같은 강렬한 광선일 수 있습니다. LightBeams(라이트빔)는 레벨의 현 주변 환경과 어울려야 합니다. 짙은 먼거리 안개의 레벨은 맑은 환경의 레벨 보다는 좀 더 짙은 라이트빔을 사용해야 합니다. 물론 이것은 전적으로 아티스트가 어떻게 하냐에 달려있습니다.

이런 라이트 빔을 생성하는데에는 3가지 절차가 있습니다. 1) 빔의 모양을 정의하는 Static Mesh를 만듭니다. 2) 폴오프 텍스처를 만듭니다. 3) Material(머티리얼)을 만들고 모든 아티팩트가 없어질때까지 값을 조절합니다.

lightbeams.jpg

스태틱 메시 만들기

EngineVolumetrics는 각기 다른 각도의 3가지 원뿔 변형을 이미 가지고 있지만 3가지 모두 동일한 UV를 가집니다. 본 섹션은 이런 머티리얼과 작업하기 위해 원뿔 메시를 좀 더 맞춤형으로 만드는데 무엇을 해야 하는지에 대해 알려줍니다.

가장자리가 차츰 가늘어지는 원통을 생성하고 이를 풀어 UV에 단 하나의 겹친 자리만 있게 합니다. 머티리얼 계산은 탄젠트 공간에서 수행되고 UV가 조잡하면 나중에 시각적 왜곡이 발생할 수 있으므로 UV를 명확히 하는 것이 중요합니다. 메시의 모자이크 정도가 클수록 최종 결과에서의 폴오프가 더 부드럽습니다(수직 슬라이스가 4개인 16면 원통이 적합).

EngineVolumetrics에 이미 존재하는 3가지 원뿔 변형이면 대부분의 경우 충분할 것입니다.

UDNLightmaps_Mesh01.jpg

머티리얼 만들기

머티리얼의 생성은 가장 많은 관련 부분을 가진 과정입니다. 첫 째로 가장 기본 레벨의 라이트 빔 기능을 가져 보겠고 그런 다음 각 아티팩트를 한 번에 한 개씩 해결해 보겠습니다.

FalloffTexture(폴오프 텍스처)

첫째 폴오프 텍스처를 만들어야 합니다. 폴오프 텍스처의 모양은 최종 결과의 모양을 크게 좌우합니다. 폴오프 텍스처는 전적으로 Photoshop의 Render->Light Effects 필터로 만들어집니다. 하나의 흐릿한 검정색 라인이 맨위에 그려집니다.

\\Build\UnrealEngine3-Build\Engine\Content\EngineVolumetrics.LightBeam.Materials. T_EV_LightBeam_Falloff_01

T_LT_Light_UDNLightbeams_Materials_Falloff01.jpg

알아두어야 할 품질과 관련된 중요한 사항은 텍스처의 에지를 주위는 전부 완전히 검정색이고 텍스처의 맨위는 흐린 검정이라는 것입니다. 이것은 Static Mesh(스태틱 메시)의 맨위 가장자리의 위치를 감추는데 도움이 됩니다. 텍스처의 속성이 Clamp으로 설정되어 있는지를 확인하십시오. 여러분 라이트빔에 다양한 폴오프 효과를 사용할 수 있게 이것에 대한 머티리얼의 텍스처 샘플은 TextureSample2DParameter입니다.

머티리얼 설정하기

이제 머티리얼을 만들 준비가 되었습니다. 새로운 머티리얼을 만들고 머티리얼 설정을 다음의 옵션으로 설정합니다.

BlendMode: BLEND_Translucent LightModel: MLM_Unlit TwoSided: True

UDNLightmaps_Material_start.jpg

머티리얼 입력 필드 중 Emissive(방사)와 Opacity(불투명)의 두 필드만 사용하겠습니다. 방사 필드는 빔의 색상 정보만 포함합니다. 당분간 방사에는 간단한 VectorParameter (1, 1, 1, 1)이 사용됩니다. VectorParameter의 Alpha 채널은 RGB에 의해 증가됩니다. 이것은 Alpha를 사용하여 Brightness를 변경할 수 있게 하여 컬러픽커를 사용하여 RGB 값(1 이하의 값만 지원)을 선택할 수 있게 하여주고 만약 원하면 라이트빔을 아주 대단히 방사적으로 만들수도 있습니다. 색상 별개로 독립적으로 명도를 변경할 수 있는 것은 종종 매유 유용합니다.

불투명 필드는 가장 많은 효과를 줄 수 있는 곳입니다. 빔의 폴오프도 처리하고 더스트나 스크롤링 스모크를 추가하기 위한 텍스처 정보를 담고 있을 수 있습니다.

위에서 보여진 폴오프 텍스처를 불투명으로 사용하겠습니다. 폴오프 텍스처의 텍스처 좌표로 Reflection Vector를 사용하여 X 구성 요소를 생성하는데 사용하겠고 동시에 Y 구성 요소는 Static Mesh의 UV 값에 의해 제공되겠습니다. 이렇게 하면 텍스처가 상대적으로 스태틱 메시의 회전에 비해 X 축을 따라 카메라를 직면하게 합니다. X 구성 요소를 생성하는 것은 어느 정도의 작업을 필요로 합니다.

Reflection 벡터는 -1 에서 1의 범위의 숫자를 출력합니다. 결과 값을 텍스처 좌표로 사용하기때문에 0에서 1의 범위의 숫자가 바람직 하겠습니다. Reflection 벡터의 범위가 0에서 1이 되게 0.5로 곱한 다음에 0.5를 더하겠습니다.

일단 범위가 올바르면 AppendVector 식은 생성된 X 좌표와 Static Mesh의 UV로 부터의 Y 좌표를 합칩니다. 이 AppendVector의 산출값은 이제 여러분의 FalloffTexture에 UV 값을 제공합니다.

UDNLightmaps_material01KR.jpg

이제 여러분 라이트 빔이 아래와 같이 보이겠습니다.

UDNLightmaps_Lightbeam01.jpg

지금까지는 단지 좋은 출발점으로서 아직 라이트빔 머티리얼은 완성되지 않았습니다. 장면에 사용될 수 있는 다음 아래의 아티팩트를 살펴보십시오.

UDNLightmaps_artifacting01KR.jpg

본 가이드의 개요에서 말했듯이 각각의 문제점은 적절한 머티리얼식을 사용하여 해결할 수 있습니다.

아티팩트 수정하기

아래서 보면 나쁘게 보임

현재 사용하고 있는 방법은(엄격하게 X 채널 폴오프만) 빔이 옆에서 보여질때 멋지게 하나 아래 각도에서 보여졌을때에는 별 도움을 주지 못합니다. 빔이 아래에서 보여질때의 모습을 정정하기 위해 두 번째 폴오프 텍스처를 사용하고 그것을 기존의 폴오프 텍스처와 멀티플라이 하겠습니다. 두 번째 폴오프 텍스처로써는 블러리 도트를 사용하였습니다.

T_LT_Light_UDNLightbeams_Materials_Falloff02.jpg

텍스처의 속성이 Clamp으로 설정되어 있는지를 확인하십시오.

이전과 같이 두 번째 폴오프 텍스처의 텍스처 좌표를 위해 반사 벡터를 사용하겠습니다. 이 텍스처의 텍스처 좌표로 반사 벡터의 X와 Y 구성 요소를 사용하겠습니다. 가장자리를 더 잘 숨기기 위한 약간의 조절을 위해 ReflectionVector(X,Y)에 상수를 곱합니다. 0.3을 사용하였지만 다른 값도 괜찮습니다.

UDNLightmaps_material02KR.jpg

이제 아래서 보여졌을때의 라이트 빔의 모습은 아래와 같이 보여지겠습니다.

UDNLightmaps_artifacting_fixed01KR.jpg

더 이상 강한 가장자리가 눈에 띄지 않습니다. 만약 아직도 가장자리가 강하게 보여진다면 폴오프 텍스처를 조절하거나 ReflectionVector(X,Y)의 멀티플을 간단하게 사용하면 됩니다.

카메라 교차

PixelDepth 노드를 사용하여 반투명 머티리얼내의 모든 픽셀의 깊이를 샘플로 만들 수 있습니다. 이것을 사용하여 카메라 바로 앞에 있는 픽셀을 페이드 아웃되게 하겠습니다. 깊이에 상수를 곱해 페이드가 시작되는 거리를 조절할 수 있습니다. 상수에는 ‘Distance’라는 스칼라 파라미터를 사용하여 인스턴스당 변경할 수 있게 하겠습니다. 일반적으로 위치하게 되는 라이트빔의 크기에 기초하여 이 값을 변경합니다. 아주 큰 빔은 더 먼 거리에서 부터 페이드 아웃해야 하고 작은 빔은 페이드 아웃이 시작되기 전에 카메라가 적당이 근접할 수 있도록 되어져야 하겠습니다. 적당한 기본값은 0.005입니다.

이 결과를 어떤 하나의 최대치에 고정시키는 것이 중요합니다. 간단히 이전 폴오프 텍스처 결과를 곱해줍니다.

UDNLightmaps_material03KR.jpg

페이드가 적용되기 전과 후는 아래와 같습니다.

UDNLightmaps_artifacting_fixed02KR.jpg

라이트 빔을 교차하는 월드 객체

월드 지오메트리의 교차를 따라 라이트빔을 페이드하게 하는데 DepthBiasedAlpha를 사용할 수 있습니다.

DepthBiasedBlendAlpha 노드를 추가하고 BiasScale을 약 500정도로 설정합니다. ‘Density’라 명명된 스칼라 파라미터가 이 노드의 Bias 입력에 사용되어 깊이 편향 대 머티리얼 인스턴스를 더욱 더 조절할 수 있게 하여줍니다.

이 머티리얼이 인스턴스의 부모 머티리얼로 의도 되었기 때문에 depthbiasedalpha는 상당히 경제적이 아닌 식이기 때문에 StaticSwitchParameter를 주어 토글 온 및 오프되어 질 수 있게 합니다. 기본적으로 OFF로 설정됩니다.

UDNLightmaps_material04KR.jpg

여전히 DepthBiasedAlpha 기법은 완벽하지 않지만도(라이트빔이 볼류메트릭적으로 그림자지게 하지 않음) 장면에서 확연한 아티팩트 제거를 훌륭하게 수행합니다.

UDNLightmaps_artifacting_fixed03KR.jpg

마지막 손질 추가

패닝 스모크

빔에서 패닝 스모크 텍스처를 사용할 수 있는 선택을 가질 수 있게 StaticSwitchParameter를 사용하겠습니다. 추가 빔 메시를 만들면 UV는 말끔하게 0에서 1로 원통형으로 풀어지게 되어 스모크 텍스처가 겹친 자리없이 회전하게 되는 한 이유이기도 합니다.

텍스처 파라미터가 추가됩니다. 어떻게 보여지는 가를 조절하는 다른 여러 파라미터를 가지고 있습니다. 라이트빔은 흔히 길이로 확장되어지기 때문에 텍스처는 X와 Y 스케일에 대한 별도의 파라미터를 가집니다. 또한 패닝 속도 및 대비에 대한 파라미터를 가집니다.

가지게 되는 파라미터에는 다음이 있습니다. TextureContrast: Linear interpolates the texture with constant 1. TextureScaleX: scales along X TextureScaleY: scales along Y PanningSpeed: multiplies time to control panning speed

아래는 스크린 샷입니다.

UDNLightmaps_material05KR.jpg

추가 파라미터

마지막으로 추가 멀티플라이와 “Opacity”라 명명된 Scalar Parameter를 추가하여 머티리얼 인스턴스에 대한 빔의 불투명을 조절하겠습니다.

UDNLightmaps_material05KR.jpg

최종 정리


최종 머티리얼은 다음과 같겠습니다. 21가지 명령에도 라이트 빔은 대부분의 리트 머티리얼보다 훨씬 경제적입니다. UseDepthBiasedAlpha와 UseTextureOverlay를 활성화 하면 명령이 39가지까지 되니 StaticSwitchParameters를 현명하게 사용하여야 합니다.

다음 세대 엔진의 라이팅 기능을 촛점을 맞추고 동시에 언릿 머티리얼의 파워또한 간과하지 말아야 하겠습니다.

UDNLightmaps_mat_completeKR.jpg