UDN
Search public documentation:

HitMaskKR
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 홈 > 파티클과 이펙트 > 데칼 > Hit Mask 컴포넌트

Hit Mask 컴포넌트


문서 변경내역: Lina Halper 작성; 홍성진 번역.

개요


HitMask는 텍스처 하나를 사용하여 캐릭터에 입힐 데칼 이펙트를 만드는 데 쓰입니다.

HitMask는 스켈레탈 메시의 월드 위치에 일치하는 UV 좌표를 포함한 텍스처로 렌더링되며, 나중에 이 마스크를 사용하여 총상이나 기타 이펙트등을 필터링할 수 있겠습니다. 월드 위치에 파라미터를 지정하면, 일치하는 UV 좌표를 찾아서 해당 좌표 주위에 하양 원을 렌더링하게 됩니다.

구현 방법


게임에 이 기능을 구현하는 방법을 단계별로 설명드리겠습니다.

액터에 컴포넌트 추가

SceneCapture2DHitMaskComponent, 얘가 텍스처로의 렌더링을 담당합니다. 이 컴포넌트를 폰이나 스켈레탈 메시 액터에 부착해야 합니다.

      // hit mask를 액터에 추가
      Begin Object Class=SceneCapture2DHitMaskComponent Name=HitMaskComp
      End Object
      HitMaskComponent=HitMaskComp
      Components.Add(HitMaskComp)

액터별 텍스처 생성

모든 캐릭터에 같은 텍스처를 공유하도록 하고 싶지 않은 경우, 텍스처를 만들어다가 그 대상을 Hit Mask Component에 대한 렌더 타겟으로 지정합니다.

    // 64x64 마스크 텍스처 생성
      MaskTexture = class'TextureRenderTarget2D'.static.Create(64, 64, PF_G8, MakeLinearColor(0, 0, 0, 1));

      if ( MaskTexture!=none )
      {
            // 이 텍스처를 포함한 HitMaskComponent 업데이트
            HitMaskComponent.SetCaptureTargetTexture( MaskTexture );
      }

텍스처에다 마스크 추가

노멀 테스트 여부와는 관계없이 Radius(반경) 크기의 원 하나를 MaskWorldLocation 월드 위치에 추가합니다.

HitMaskComponent.SetCaptureParameters(MaskWorldLocation, Radius, MaskStartLocation, FALSE); //캡처 파라미터 전송

쉐이더에서 방향 테스트를 수행하지 않으려면 MaskStartLocation(마스크 시작 위치)는 필요치 않습니다. 예를 들어 캐릭터의 가슴에 상처를 만들고 싶은데, 렌더 마스크를 캐릭터 뒤에 렌더링해 버리면 범위내에서 이루어진 적중도 제대로 처리되지 않을 겁니다. MaskStartLocation(마스크 시작 위치)는 원점을, 마지막 파라미터 TRUE는 노멀 테스트를 수행함을 나타냅니다.

FALSE라면 노멀 테스트를 수행하지 않으며, 그냥 월드 위치 주변에 구체를 생성하게 됩니다.

보통 두 곳에 동일한 물체를 원하는 경우가 드물 것이기에, (V는 미러링시키고) U는 미러링시키지 않은 채로 생성됩니다.

캐릭터에다 설정하는 방법


이제 캐릭터 머티리얼에 요 텍스처를 사용해 봅시다.

텍스처 파라미터

머티리얼에서, 게임내 대체가 가능한 텍스처 파라미터를 만듭니다. 그게 우리가 만들려는 타겟 텍스처가 됩니다.

TextureParameter.jpg

이제 텍스처를 언미러링해야 합니다. 렌더링할 때 U가 언미러링되니, 텍스처 샘플링도 U 언미러링해야 한다는 점, 잊으면 안되겠습니다.

UnmirrorUCheck.jpg

코드에 텍스처 파라미터 대체

파라미터에다 마스크 텍스처를 설정할 차례입니다. 이렇게요:

      // 첫 파라미터 얻기
      MIC = Mesh.CreateAndSetMaterialInstanceConstant(0); // 대체하려는 머티리얼
      if ( MIC != none &&  MaskTexture!=none )
      {
            // 새 택스처를 FilterMask 파라미터로 설정
            MIC.SetTextureParameterValue('FilterMask', MaskTexture); // 이 텍스처가 머티리얼에 사용되도록
      }

파라미터


  • MaterialIndex : (머티리얼 인덱스) 렌더링할 머티리얼 부분.
  • ForceLOD : (LOD 강제) -1이면 현재 LOD 사용.
  • HitMaskCullDistance : (HitMask 선별 거리) 이보다 멀면 테스트하지 않음.

페이딩 관련 변수

잠시후에 페이드아웃되게 할 수 있습니다. 미세조절 파라미터는 이와 같습니다:

  • FadingStartTimeSinceHit : (적중후 페이드 시작 시간) 지난 적중 이후 페이딩을 시작할 시간. -1이면 무한. 연속해서 맞으면 페이딩 정지.
  • FadingPercentage : (페이딩 퍼센트) 0에서 1사이의 적용할 색상 % 값.
  • FadingDurationTime : (페이딩 지속 기간) 초 단위, 페이딩이 시작한 이후의 지속 기간
  • FadingIntervalTime : (페이딩 간격 기간) 초 단위, 페이딩 간격

제한 사항


캐릭터에 입힐 데칼을 싸게 만들 수 있는 방법이지만, 만들려는 모양면에서 한계가 있습니다. 한 점을 중심으로 사라지는 원을 만드는 겁니다. 또한 기본값으로 U만 언미러링 합니다. 그래서 V 미러링된 캐릭터가 있는 경우 양쪽에 중복 마스크를 갖게 됩니다. 고치기야 쉬워도, 전체 섹션을 사용하지 않을 때의 메모리 낭비는 어쩔 수 없습니다.