언어:
페이지 정보
엔진 버전:
언리얼 엔진

트레이스 개요

언리얼 엔진

traceTitle.png

Trace (트레이스)는 레벨을 뻗어나가며 직선상에 무엇이 존재하는지 확인할 수 있는 메서드를 제공합니다. 두 (시작과 끝 위치) 지점을 제공해 주면, 피직스 스시템에서 그 두 점에 직선을 그으며 거기에 (콜리전으로) 걸리는 액터가 있는지 보고해 주는 식으로 사용합니다. 트레이스는 본질적으로 다른 소프트웨어의 Raycast (레이 캐스트) 또는 Raytrace (레이 트레이스)와 같습니다.

액터 가 다른 액터를 "볼" 수 있는지 알고싶다거나, 특정 폴리곤의 노멀을 알아낸다거나, 고속의 무기 시뮬레이션을 한다거나, 액터 가 어떤 공간에 들어섰는지 알고싶다거나 하는 상황에서, 트레이스는 저렴한 비용의 믿을만한 솔루션이 됩니다. 여기서는 언리얼 엔진 4 의 트레이스 에 대한 기본에 대해 다루겠습니다.

채널 또는 오브젝트 유형으로 트레이스

트레이스는 피직스 시스템을 사용하므로, 트레이스 대상 카테고리를 정의할 수 있습니다. 크게 두 가지 범주로 나눌 수 있는데, Channel (채널)과 Object Type (오브젝트 유형)입니다. 채널은 비저빌리티와 카메라같은 것에 사용되며, 거의 트레이스에만 쓰입니다. 오브젝트 유형은 씬에 콜리전이 있는 피직스 액터 유형으로, 폰, 비히클, 디스트럭터블 액터 등입니다.

채널과 오브젝트 유형은 필요에 따라 추가할 수 있습니다. 자세한 방법은 프로젝트에 커스텀 오브젝트 유형 추가 문서를 참고하세요.

싱글 또는 멀티 히트 반환

트레이스를 할 때, 걸린 것 중 범주에 일치하는 첫 번째 것을 반환하도록 할 수도 있고, 모든 것을 반환하도록 할 수도 있습니다.

Multi Trace by Channel (채널로 멀티 트레이스) vs Multi Trace by Object (오브젝트로 멀티 트레이스) 사이에는 특별한 주의가 필요합니다. 채널로 멀티 트레이스 사용시 트레이스는 첫 block (블록) 포함 거기까지의 모든 overlap (오버랩)을 반환합니다. 발사된 총알이 큰 유리를 관통하여 벽에 맞는 것을 생각해 보면 됩니다.

오브젝트로 멀티 트레이스 는 컴포넌트가 트레이스 쿼리를 반환하도록 설정되어있다 가정하고, 트레이스가 찾는 오브젝트 유형에 일치하는 모든 것을 반환합니다. 트레이스 시작 및 끝 지점 사이의 오브젝트 수를 세기에 좋습니다.

singleVSmulti.png

히트 결과

트레이스가 무언가에 걸릴 때, "Hit Result" 구조체를 반환합니다. 블루프린트( 및 C++ 에서도) 사용 가능한 구조체는 이와 같습니다:

BP_HitStruct.png

멤버

정의

Blocking Hit

블로킹 히트 - 히트가 블로킹 히트였는지 여부입니다. 트레이스가 겹치게만 하고 멈추지는 않도록 하는 기능때문에 채널로 멀티 트레이스 시 사용됩니다.

Initial Overlap

초기 겹침 - 일련의 결과 중 첫 번째 오버랩인지 입니다.

Time

시간 - 트레이스 방향 상의 임팩트 시간으로, [0.0 에서 1.0 까지] 범위입니다. 히트가 없는 경우 1.0 을 반환합니다.

Location

위치 - 트레이스 셰이프에 따라 변경된 히트의 월드 스페이스 위치입니다.

Impact Point

임팩트 지점 - 히트 절대 위치입니다. 트레이스 셰이프는 포함하지 않으며, 히트 지점만입니다.

Normal

노멀 - 트레이스 방향입니다.

Impact Normal

임팩트 노멀 - 히트 표면 노멀입니다.

Phys Mat

피지컬 머티리얼 - 히트 표면의 피지컬 머티리얼 입니다.

Hit Actor

히트 액터 - 히트 액터 입니다.

Hit Component

히트 컴포넌트 - 특정 히트 컴포넌트 입니다.

Hit Bone Name

히트 본 이름 - 스켈레탈 메시 에 대해 트레이스를 한 경우 히트한 본 이름입니다.

Hit Item

히트 아이템 - 프리미티브의 어느 아이템에 히트했는지 기록하는 프리미티브 전용 데이터입니다.

Face Index

면 인덱스 - 트라이메시 또는 랜드스케이프와 충돌하는 경우, 히트한 면 인덱스입니다.

Trace Start

트레이스 시작 - 트레이스 시작 위치입니다.

Trace End

트레이스 끝 - 트레이스 끝 위치입니다.

셰이프 트레이스 사용

shapeTracesEX.png

Line Trace (라인 트레이스)가 충분치 않은 경우, Shape Trace (셰이프 트레이스)를 사용하면 원하는 결과를 얻을 수도 있습니다. 예를 들어 적의 플레이어 감지를 위한 "시야 원뿔"을 만든다 칩시다. 라인 트레이스의 경우 웅크린 플레이어를 감지해내지 못할 수가 있기에 충분치 않을 수가 있습니다.

이런 상황에서 Box Trace (박스 트레이스), Capsule Trace (캡슐 트레이스), Sphere Trace (구체 트레이스)같은 것을 사용할 수 있습니다.

TracesOverview_ShapeTraces.png

각 셰이프 트레이스 함수는 시작 지점에서 끝 지점까지 스윕 및 검사를 할 때는 라인 트레이스처럼 작동하나, 셰이프 트레이스는 레이캐스트에서 어떤 부피를 갖는 모양을 사용하여 한 번 더 검사를 한다는 점이 다릅니다. 셰이프 트레이스는 싱글 트레이스 또는 멀티 트레이스로도 사용할 수 있으며, 그 각각은 라인 트레이스와 같은 방식으로 구성할 수 있지만, 사용하는 셰이프의 크기나 방향 관련해서 추가적인 정보를 제공해 줘야 합니다.

트레이스에서 UV 좌표 구하기

복합 트레이스(trace complex)를 사용했다는 가정 하에, 트레이스에 걸린 액터의 UV 좌표를 반환할 수 있습니다. 4.14 버전 부로 이 기능은 Static Mesh Component, Procedural Mesh Component, BSP 에서만 작동합니다. Skeletal Mesh Component 에서는 작동하지 않습니다. (복합 트레이스를 선택한다 해도) UV 좌표가 없는 피직스 애셋 을 대상으로 트레이스를 하는 것이기 때문입니다.

이 기능을 사용하면 CPU 메모리 사용량이 늘어나는데, 언리얼 엔진 4 에서는 메모리에 버텍스 위치와 UV 좌표 사본을 추가로 유지하기 때문입니다.

트레이스에서 UV 좌표 켜기

이 기능을 켜는 방법은 다음과 같습니다:

  1. 편집 메뉴의 프로젝트 세팅 창을 엽니다.

    accessProj.png

  2. 프로젝트 세팅피직스 섹션에서 Support UV From Hit Results (히트 결과에서 UV 지원) 기능을 켭니다.

    ProjectSettings.png

  3. 에디터를 재시작합니다.

    에디터를 재시작하기 전에도 이 기능을 사용하는 블루프린트 Find Collision UV 노드를 조사해 볼 수는 있지만, 조사해도 [0.0, 0.0] 값만 반환합니다. 노드가 올바른 UV 데이터를 반환하도록 하려면, 에디터를 재시작해야 합니다.

기타 기능

트레이스에는 디버깅 편의를 위해 반환되는 값을 제한시킬 수 있는 자잘한 기능이 여럿 있습니다. 스태틱 메시나 프로시저럴 메시에 Complex Collision (복합 콜리전) 옵션이 켜져있는 경우, 그를 대상으로 트레이스를 하는 기능이 있습니다. 액터 에서 호출된 경우 액터 스스로를 통해 트레이스하도록 하는 기능을 켜면 붙어있는 컴포넌트 전부를 무시하도록 할 수 있습니다. 마지막으로 트레이스를 빨강 및 초록색 선으로, 히트는 커다란 박스로 나타내는 옵션이 있습니다.

관련 토픽