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

케이블 컴포넌트

언리얼 엔진

CC_InGame.png

바람에 앞뒤로 흔들리는 듯한 케이블, 밧줄, 체인을 저렴한 비용으로 추가할 수 있다면 언리얼 엔진 4 (UE4) 프로젝트에 멋지게 생동감을 불어넣을 수 있을 것입니다. 여기서는 Cable Component (케이블 컴포넌트) 플러그인을 사용하여 레벨의 오브젝트에 반응하고 심지어 충돌도 하는 케이블을 만들고 구성하여 제어하는 법을 알아보겠습니다.

시뮬레이션 및 렌더링

실제 케이블 시뮬레이션을 위해 게임 개발에는 아주 잘 알려진 Verlet Integration 이라는 기법이 사용됩니다. 케이블을 distance constraints (거리 제약)을 사이에 둔 파티클 시리즈로 표현한다는 개념입니다. 끝부분의 파티클은 fixed (고정)되어 붙은 것과 함께 움직입니다. 중간의 것들은 free (자유)롭게 중력의 영향을 받습니다. 각 단계마다, 각 파티클의 속도와 위치를 업데이트한 뒤, 제약에 만족하도록 이동시킵니다. 케이블 stiffness (강성)은 각 단계마다 제약 강화를 위한 반복처리 횟수로 제어합니다.

클릭하면 원본 이미지를 확인합니다.

이리저리 튕기는 멋진 연결 파티클 체인이 생겼으니, 이제 렌더링을 해 줘야 합니다. 케이블 렌더링을 위해 FCableSceneProxy 라는 클래스를 새로 만들어 케이블 렌더링을 표현합니다. 그 후 (TickComponent 내 메인 스레드에서 이루어지는) 시뮬레이션을 통한 새 파티클 각각의 위치가 SendRenderDynamicData_Concurrent 함수를 통해 이 프록시로 전달됩니다. 다음 렌더 스레드에서 업데이트를 잠근 뒤 인덱스 및 버텍스 버퍼를 업데이트하여 튜브 메시를 만듭니다. 이 튜브 메시의 각 버텍스에 대해 위치, 텍스처 UV, 세 개의 탄젠트 기저 벡터를 계산해 줘야 합니다. 이 작업을 할 때 X 는 케이블 방향을 가리키고, Z 는 케이블에서 반대로 나가는(노멀) 방향을 가리키며, YXZ 에 수직 방향을 나타냅니다. 이 프로퍼티는 컴포넌트에 노출되어 있어 면의 수, 튜브인 경우 반경, UV 가 케이블을 몇 번이나 휘감을지 등을 제어할 수 있습니다.

클릭하면 원본 이미지를 확인합니다.

플러그인 활성화

케이블 컴포넌트 플러그인은 기본적으로 활성화됩니다. 하지만 활성화되어 있지 않은 경우, 먼저 메인 툴바의 편집 > 플러그인 으로 갑니다. 플러그인 목록에서 Rendering 으로 간 뒤 Cable Component 부분의 Enabled 여페 박스가 체크되어 있는지 확인합니다.

클릭하면 원본 이미지를 확인합니다.

케이블 컴포넌트 사용

프로젝트의 레벨에 케이블 컴포넌트를 추가하는 방법은 두 가지인데, 여기서는 그에 대해 알아보겠습니다.

모드 패널에서 케이블 컴포넌트 사용

모드 패널에서 Cable 컴포넌트를 사용하는 방법은 다음과 같습니다:

  1. 먼저 모드 패널이 보이는지 확인한 뒤, 클래스 검색 창에 Cable 이라 입력합니다.

    CC_Find_In_Modes.png

  2. 월드에 Cable 액터를 추가하려면, 모드 패널에서 Cable 액터를 클릭한 뒤 레벨에 끌어놓으면 됩니다.

    클릭하면 원본 이미지를 확인합니다.

  3. 이제 Cable 액터가 레벨에 맞게끔 이동, 회전, 스케일을 조절하면 됩니다.

블루프린트에서 케이블 컴포넌트 사용

블루프린트에서 케이블 컴포넌트를 사용하는 방법은 다음과 같습니다:

  1. 먼저 BP_Cable 이라는 블루프린트를 새로 만들고 Actor 를 부모 클래스로 사용하는지 확인합니다.

    CC_MakeNewBP.png

  2. BP_Cable 블루프린트의 컴포넌트 섹션에서 컴포넌트 추가 버튼을 누르고 목록에서 Cable 컴포넌트를 찾습니다. 클릭하여 컴포넌트 목록에 추가합니다.

    CC_Add_CC.png

  3. 케이블 컴포넌트를 추가한 뒤 컴포넌트 목록에서 Cable 컴포넌트를 선택하면 디테일 패널에서 프로퍼티를 조정할 수 있습니다. 현재로서는, 모두 기본값으로 놔두고 블루프린트를 컴파일 및 저장합니다.

    CC_Cable_Options.png

    케이블 한 쪽 끝이 떨어지도록 하려면, 케이블 컴포넌트의 디테일 패널에서 Attach Start 또는 Attach End 옵션 체크를 해제하면 됩니다. 이펙트와 어울리도록 게임 실행 도중 토글시킬 수도 있습니다.

  4. 콘텐츠 브라우저 에서 케이블 블루프린트를 찾은 뒤, 레벨에 끌어 놓습니다. 배치했으면, 이동 및 회전 툴로 위치를 잡습니다.

    클릭하면 원본 이미지를 확인합니다.

케이블 끝에 오브젝트 붙이기

케이블 한 쪽 끝에 오브젝트를 붙여 케이블과 같이 흔들리도록 할 수도 있습니다. UE4 프로젝트에서 그러한 효과를 내는 방법은 다음과 같습니다:

  1. 먼저 레벨에 Cable 액터와 스태틱 메시 를 추가해 줘야 합니다.

    클릭하면 원본 이미지를 확인합니다.

    끝에 붙이려는 스태틱 메시의 모빌리티무버블 로 되어있는지 확인합니다.

  2. 월드 아웃라이너에서 케이블 액터 끝에 붙이고자 하는 스태틱 메시를 찾은 뒤, 케이블 액터 위에 끌어 놓습니다. 그렇게 하고나면 다음과 같은 입력 창이 뜹니다.

    클릭하면 원본 이미지를 확인합니다.

  3. Cable End 옵션을 선택하고, 뷰포트에 보면 스태틱 메시가 케이블 액터 끝에 붙어있는 것이 보일 것입니다.

    Before

    After

  4. 이제 레벨의 케이블 액터를 선택합니다. 그리고 디테일 패널에서 Cable 섹션 아래 Attach End 박스 체크를 해제합니다.

    클릭하면 원본 이미지를 확인합니다.

    참고로 Attach StartAttach End 옵션으로만 케이블을 액터에 붙일 수 있는 것은 아닙니다. 소켓을 지정하여 붙이는 지점으로 사용할 수도 있습니다.

  5. 그러면 뷰포트에 케이블이 자유롭게 흔들릴 것입니다.

    Attach StartAttach End 부울은 런타임에 동적으로 토글시켜 재미난 효과를 만들 수 있습니다.

콜리전 및 강성

Collision (콜리전) 및 Stiffness (강성) 옵션을 켜면 케이블 액터 비용이 크게 상승합니다. 케이블이 월드의 무언가와 충돌해야 하는 경우, 또는 케이블에 강성을 줘서 이펙트를 개선시킬 필요가 있는 경우에만 켜주시기 바랍니다. 그럴 필요가 없으면 이 옵션은 꺼 두는 것이 퍼포먼스에 좋습니다.

케이블 컴포넌트에 케이블이 월드와 충돌하도록 하는 옵션과 케이블 강성을 조절하는 옵션이 있습니다. 이 기능을 켜는 방법은 다음과 같습니다:

  1. 먼저 케이블 컴포넌트의 디테일 패널에서 Cable 섹션 아래 작은 흰색 삼각형을 눌러 고급 옵션을 펼칩니다.

    CC_Advanced_Options.png

  2. Enable StiffnessEnable Collision 옵션 둘 다 체크하여 이 기능을 켭니다.

    클릭하면 원본 이미지를 확인합니다.

  3. 이제 케이블 액터를 움직이거나 오브젝트와 충돌할 때, 케이블 액터가 접촉한 오브젝트와 충돌할 것입니다.

프로퍼티 분석

케이블 컴포넌트에 있는 각 프로퍼티에 대한 분석 표입니다:

Cable

CC_Cable_Properties.png

프로퍼티 이름

설명

Attach Start

붙이기 시작 - 시작 부분을 무언가에 고정시킬지 자유롭게 놔둘지 입니다. false 면, 초기 케이블 시작 위치는 그냥 컴포넌트 트랜스폼을 사용합니다.

Attach End

붙이기 끝 - 끝 부분을 (AttachEndTo 와 EndLocation 을 사용하여) 무언가에 고정시킬지 자유롭게 놔둘지 입니다. false 면 초기 케이블 끝 위치는 그냥 AttachEndTo 와 EndLocation 을 사용합니다.

Attach End To

끝 붙이기 - 케이블 끝 위치를 정의하는 액터 또는 컴포넌트입니다.

Component Property

컴포넌트 프로퍼티 - 케이블을 붙일 컴포넌트 프로퍼티 이름입니다.

Attach End To Socket Name

끝을 소켓 이름에 붙이기 - 붙일 AttachEndTo 컴포넌트 상의 소켓 이름입니다.

End Location

끝 위치 - 케이블 끝 위치로, 지정된 경우 AttachEndTo (또는 AttachEndToSocketName) 기준이며, 지정되지 않은 경우 케이블 컴포넌트 기준입니다.

Cable Length

케이블 길이 - 케이블 나머지 길이입니다.

Num Segments

선분 수 - 케이블의 선분 갯수입니다.

Solver Iterations

솔버 반복처리 수 - 케이블 강성을 나타내는 솔버 반복처리 횟수입니다.

Substep Time

서브스텝 시간 - 케이블의 시뮬레이션 서브스텝 시간을 제어합니다.

Enable Stiffness

강성 활성화 - 케이블에 강성 제약을 추가합니다.

Enable Collision

콜리전 활성화 - 각 케이블 파티클, 각 서브스텝 마다 스윕 검사를 실시하여 월드와의 충돌을 피합니다. 컴포넌트에 콜리전 프리셋을 사용하여 콜리전 대상을 결정합니다. 케이블 시뮬레이션 비용이 크게 늘어납니다.

현재 실험단계 기능입니다.

Cable Forces

CC_CableForces_Properties.png

프로퍼티 이름

설명

Cable Forces

케이블 포스 - 케이블의 모든 파티클게 적용되는 (월드 스페이스) 포스 벡터입니다.

Cable Gravity Scale

케이블 중력 스케일 - 이 케이블에 영향을 끼치는 월드 중력에 적용되는 스케일입니다.

Cable Rendering

CC_CableRendering_Options.png

프로퍼티 이름

설명

Cable Width

케이블 폭 - 케이블 지오메트리 폭입니다.

Num Sides

면 수 - 케이블 지오메트리 면 수입니다.

Tile Material

타일 머티리얼 - 케이블 길이상에서 머티리얼을 몇 번이나 반복시킬지 입니다.

추가 자료

케이블 컴포넌트 내부적인 작동방식 관련해서 보다 자세히 알아보실 수 있는 외부 참고자료입니다. **Verlet Integration**관련 자세히 알아보려면, Thomas Jakobsen 의 다음 논문을 확인하세요: