VRPN 입력 사용

nDisplay 가 VRPN 디바이스 입력을 받도록 구성하는 법을 설명합니다.

Windows
MacOS
Linux

VRPN 네트워크로 데이터를 전송하도록 구성된 모션 트래커, 축 컨트롤러, 버튼 컨트롤러, 키보드의 입력 이벤트를 nDisplay 에 전송할 수 있습니다.

nDisplay 용 VRPN 구성

nDisplay 에 VRPN 입력 디바이스를 사용하는 방법은 다음과 같습니다:

  1. 네트워크에 VRPN 서버를 설치합니다.
    nDisplay 이 버전은 VRPN 버전 7.33 이 필요합니다.

  2. 서버의 실행파일 옆에서 찾을 수 있는 vrpn.cfg 파일에서, 입력 디바이스를 활성화하고 이름을 짓습니다.

  3. nDisplay 구성 파일에 input 항목을 추가하여 VRPN 입력 디바이스를 구성합니다.

설정해야 하는 입력 디바이스의 종류와 해당 디바이스의 입력을 언리얼 엔진 프로젝트에 적용하는 방법에 따라 입력 구성에 다른 세팅을 사용하고 몇 가지 추가 단계를 수행해야 할 수 있습니다. 여러 유형의 입력 디바이스 각각에 적용되는 세부 사항은 다음 섹션을 참고하세요.

nDisplay 구성 파일에서 설정할 수 있는 모든 세팅과 파라미터 관련 자세한 정보는 nDisplay 구성 파일 레퍼런스 문서를 참고하세요.

VRPN 트래커를 nDisplay 카메라 또는 씬 노드에 바인딩

VRPN 트래커 디바이스가 있는 경우, 그 현재 위치를 nDisplay 구성 파일에 셋업한 nDisplay 카메라 또는 씬 노드에 바로 매핑할 수 있습니다. 현실 공간에서 트래커를 움직이면서, 그 카메라 또는 씬 노드의 위치가 가상 공간에서 자동으로 업데이트되어 추적됩니다.

그 방법은 nDisplay 구성 파일에서 inputcamera 섹션을 셋업하면 됩니다.

다음 예는 ART DTrack 트래킹 시스템을 셋업하는 한 가지 방법을 보여줍니다.

  • VRPN 서버 exe 옆의 Vrpn.cfg 에 다음 줄을 추가합니다.

    vrpn_Tracker_DTrack DTrack  5000

    그러면 VRPN 이 5000 포트에서 DTrack 입력을 받아 DTrack 이라는 이름의 VRPN 디바이스에 매핑합니다. (DTrack 이 5000 포트의 데이터를 트래킹하도록 구성했는지 확인하세요.)

  • nDisplay 구성 파일에 다음 줄을 추가합니다.

    [input] id=CaveTracking type=tracker addr=DTrack@127.0.0.1 loc="X=1.32,Y=0,Z=0.93735" rot="P=0,Y=0,R=0" front=Z right=-X up=Y
    [camera] id=camera_dynamic loc="X=0,Y=0,Z=0" tracker_id=CaveTracking tracker_ch=0

    첫 줄은 CaveTracking 라는 이름으로 nDisplay 입력 디바이스를 생성합니다. VRPN 주소 DTrack@127.0.0.1 에서 데이터를 가져 옵니다. 트래킹 시스템과 오프셋에 맞게 좌표계를 조정해야 합니다. 두 번째 줄 카메라 구성은 nDisplay 에게 0 채널의 CaveTracking 입력에서 카메라 위치를 가져오도록 합니다.

키보드 이벤트 반영

VRPN 서버에 대한 키보드 디바이스를 구성해 둔 경우, 그 키보드의 (키 눌림과 뗌과 같은) 이벤트가 언리얼 엔진 프로젝트에 반영되는 방식을 제어할 수 있습니다. 키보드 키가 표준 UE4 키보드 입력 시스템을 트리거하도록 만들거나, 키 트리거를 nDisplay 에 제공된 새 키보드 입력으로 돌리거나, 그 둘 다 하거나, 아무것도 안할 수도 있습니다.

그 셋업 방법은 둘 중 하나입니다.

  • nDisplay 구성 파일에서 키보드 디바이스를 정의하는 input 섹션에 reflect 옵션을 설정하면 됩니다.

    [input] id=ControlKeyboard type=keyboard addr=Keyboard0@192.168.0.1 reflect=ue4
  • 또는 프로젝트의 블루프린트 코드에서 Set VRPN Keyboard Reflection 함수를 호출해도 됩니다.
    Keyboard reflection in Blueprint

반영 세팅이 받는 값은 다음 중 하나입니다.

[input] 세팅

블루프린트 옵션

설명

nDisplay

nDisplay 버튼 전용

키보드 이벤트가 nDisplay 에 생성된 새로운 키보드 입력 이벤트로 라우팅됩니다. 블루프린트 스크립트에서 이 이벤트에 대한 반응은 Input > N Display Keyboard Events 카테고리의 노드를 사용하면 됩니다.

ue4

네이티브 UE4 키보드 이벤트

키보드 이벤트가 언리얼 엔진 내장 입력 시스템을 통해 라우팅됩니다. 이 이벤트에 대한 반응은 애플리케이션에서 사용하는 InputController 클래스에서, 또는 블루프린트 스크립트의 Input > Keyboard Events 카테고리 노드에서 할 수도 있습니다.

both

nDisplay 및 UE4 네이티브 둘 다

키보드 이벤트가 nDisplay 키보드 처리 시스템과 언리얼 엔진 내장 입력 시스템 둘 다에 라우팅됩니다. 앞서 설명한 메서드 중 하나를 사용해서 각자의 이벤트에 반응하도록 할 수 있습니다.

none

반영 없음

키보드 이벤트가 nDisplay 키보드 처리 시스템 또는 내장 입력 시스템 어디로도 라우팅되지 않습니다.
이 옵션을 사용하면, 다음 중 한 가지 작업을 해야 합니다:

  • nDisplay 블루프린트 API 에서 블루프린트 노드를 사용하여 특정 이벤트에 대한 쿼리를 해야 합니다. 예: Display Cluster > Input > Was VRPN Button Pressed 또는 Display Cluster > Input > Was VRPN Button Released. 디바이스 입력 쿼리 부분을 참고하세요.

  • 개별 키를 UE4 의 다른 입력 이벤트로 바인딩합니다. 자세한 내용은 디바이스 채널을 UE4 입력에 바인딩 부분을 참고하세요.

키보드 디바이스에 대한 반영을 셋업할 때, 그 세팅은 해당 디바이스의 모든 키에 적용됩니다. 그러나 여전히 UE4 의 다른 입력 이벤트에 개별 키를 다시 바인딩할 수도 있습니다. 자세한 내용은 디바이스 채널을 UE4 입력에 바인딩 부분을 참고하세요.

디바이스 채널을 UE4 입력에 바인딩

VRPN 디바이스의 특정 채널을 언리얼 엔진 이벤트와 모션 소스에 바인딩하면 프로젝트가 VRPN 입력에 반응하도록 만들 수 있습니다. 이러한 바인딩을 만드는 방법은 다음 둘 중 하나입니다.

  • nDisplay 구성 파일의 input_setup 섹션을 모션 소스 또는 이벤트를 바인딩하려는 채널 각각에 대해 셋업합니다.

  • nDisplay 입력 모듈 API 에 사용할 수 있는 함수를 사용합니다.
    Bind VRPN device channel

예: 트래킹 디바이스를 모션 소스에 바인딩

VRPN 모션 트래킹 디바이스는 언리얼 엔진의 기존 모션 소스에 바인딩할 수 있습니다. 그런 다음 그 모션 소스를 사용하여 레벨의 액터에 할당한 MotionControllerComponent 를 구동합니다.

셋업 방법은 다음과 같습니다.

  1. nDisplay 구성 파일에 트래커를 정의하는 input 섹션이 있어야 합니다. 예:

    [input] id=TestTrack type=tracker addr=Tracker0@127.0.0.1 loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" front=X right=Y up=Z
  2. 또한 트래킹하려는 디바이스와 채널을 입력을 받고자 하는 모션 소스에 바인딩해야 합니다.
    그 방법은 구성 파일에 input_source 섹션을 추가하면 됩니다.

    [input_setup] id=TestTrack ch=0 bind="Special_1"

    프로젝트의 블루프린트 코드에서 Bind VRPN Tracker 함수를 호출하고 같은 값을 설정해도 됩니다.
    Bind VRPN Tracker

예: 아날로그 디바이스에 바인딩

아날로그 VRPN 디바이스는 0-1 범위 입력 값이 나오며, 언리얼 엔진의 마우스 또는 섬스틱 입력과 비슷합니다.

nDisplay 에는 아날로그 VRPN 디바이스를 바인딩할 수 있는 20 개의 범용 아날로그 입력 세트가 포함되어 있습니다. 찾을 수 있는 위치는 Input > N Display Events and Input > N Display Values 카테고리입니다.

nDisplay generic analog events and values

이 nDisplay 아날로그 입력을 사용할 필요 없이, VRPN 디바이스를 다른 UE4 입력에 바인딩해도 됩니다. 다음 예제에서 둘 다 확인할 수 있습니다.

셋업 방법은 다음과 같습니다.

  1. nDisplay 구성 파일의 input 섹션에 다음과 같이 아날로그 디바이스를 정의해야 합니다:

    [input] id=TestAxes type=analog addr=Mouse0@127.0.0.1
  2. 입력을 받으려는 아날로그 입력을 트래킹할 디바이스와 채널도 바인딩해야 합니다. 흔히 아날로그 디바이스에는 X 축 입력에 하나, Y 축에 하나, 두 개의 채널이 있습니다. 이 경우 일반적으로 두 축을 다른 nDisplay 아날로그 입력에 개별적으로 바인딩해야 합니다.
    구성 파일에 input_source 섹션을 둘 추가하면 됩니다.

    [input_setup] id=TestAxes ch=0 bind="nDisplay Analog 0"
    [input_setup] id=TestAxes ch=1 bind="Gamepad Left Thumbstick Y-Axis".

    또는 프로젝트의 블루프린트 코드에서 Bind VRPN Channel 함수를 호출하고 값을 똑같이 설정해도 됩니다.
    Bind VRPN Channel for analog device

  3. 입력 이벤트가 발생했는지 감지하거나, 입력 축의 실제 값을 가져와야 할 때, VRPN 축 채널을 바인딩한 입력 이벤트를 사용하세요.
    예를 들어 이 경우 다음을 사용합니다.

    • 첫 번째 축에 대해, Input > N Display Events > nDisplay Analog 0 으로 입력 이벤트에 응답하고, Input > N Display Values > nDisplay Analog 0 으로 현재 축 값을 얻습니다.

    • 두 번째 축에 대해, Input > Gamepad Events > Gamepad Left Thumbstick Y-Axis 로 입력 이벤트에 응답하고, Input > Gamepad Values > Gamepad Left Thumbstick Y-Axis 로 현재 축 값을 얻습니다.

예: 버튼 디바이스 바인딩

버튼 VRPN 디바이스는 버튼을 누르고 뗄 때마다 주어진 채널에 이벤트를 발동시킵니다.

nDisplay 에는 버튼 디바이스를 바인딩할 수 있는 20 개의 일반 버튼 이벤트 입력 세트가 포함되어 있습니다. 찾을 수 있는 위치는 Input > N Display Events 카테고리입니다.

nDisplay generic button events

이 nDisplay 버튼 입력을 사용할 필요는 없으며, VRPN 디바이스를 다른 UE4 입력에 바인딩할 수도 있습니다. 다음 예제에서는 이 두 가지를 보여줍니다.

셋업 방법은 다음과 같습니다.

  1. nDisplay 구성 파일에 버튼 디바이스를 정의하는 input 섹션이 있어야 합니다. 예:

    [input] id=TestBtn type=buttons addr=Mouse0@127.0.0.1
  2. 입력을 받으려는 버튼 입력을 트래킹할 디바이스와 채널도 바인딩해야 합니다.
    그 방법은 구성 파일에 input_source 섹션을 추가하면 됩니다.

    [input_source] id=TestBtn ch=0 bind="nDisplay Button 0"
    [input_source] id=TestBtn ch=2 bind="Gamepad Face Button Top"

    또는 프로젝트의 블루프린트 코드에서 Bind VRPN Channel 함수를 호출하고 값을 똑같이 설정하면 됩니다.
    Bind VRPN Channel for button device

  3. 입력 이벤트가 발생했는지 감지하려면, VRPN 버튼 채널을 바인딩한 입력 이벤트를 사용하세요.
    예를 들어, 이 경우 Events > N Display Events > nDisplay Button 0Events > Gamepad Events > Gamepad Face Button Top 노드를 사용합니다.

예: 키보드 디바이스 바인딩

위의 키보드 이벤트 반영 부분의 설명대로, VRPN 키보드를 내장 언리얼 엔진 키보드 입력에 바인딩할 수도, 새로운 nDisplay 키보드 입력에 바인딩할 수도, 둘 다 할 수도, 아무 것도 안할 수도 있습니다. 어떤 유형 반영이든 상관없이, 키보드의 개별 키를 다른 언리얼 엔진 또는 nDisplay 입력 이벤트에 바인딩할 수도 있습니다.

셋업 방법은 다음과 같습니다.

  1. nDisplay 구성 파일에 키보드 디바이스를 정의하는 input 섹션이 있어야 합니다. 예:

    [input] id=TestKb type=keyboard addr=Keyboard0@127.0.0.1
  2. 그 키가 트리거할 언리얼 엔진 입력 이벤트로 트래킹하려는 디바이스와 키도 바인딩해야 합니다.
    그 방법은 구성 파일에 input_source 섹션을 추가하면 됩니다.

    [input_source] id=TestBtn key="Space Bar" bind="Gamepad Left Trigger"

    프로젝트의 블루프린트 코드에서 Bind VRPN Keyboard 함수를 호출하고 같은 값을 설정해도 됩니다.
    Bind VRPN Keyboard

  3. 입력 이벤트가 발생했는지 감지하려면, VRPN 버튼 채널을 바인딩한 입력 이벤트를 사용하세요.
    예를 들어, 이 경우 Event > Gamepad Events > Gamepad Left Trigger 노드를 사용합니다.

디바이스 입력 쿼리

입력 이벤트 바인딩에 의존하는 대신 VRPN 디바이스를 직접 쿼리하여 현재 상태를 확인할 수 있습니다.

  • C++ 에서 IDisplayClusterInputManager 클래스를 사용합니다.

  • 블루프린트에서, nDisplay API 의 DisplayCluster > Input 아래 함수를 사용합니다. 그 노드의 Device IdDevice Channel 에 제공한 입력 값이 nDisplay 구성 파일의 input 섹션에 설정한 디바이스 값에 일치하는지 확인해야 합니다.
    예:

키보드 버튼 및 디바이스 채널

VRPN 키보드 입력은 기본적으로 특수한 유형의 버튼 디바이스입니다. 지정한 키보드 버튼이 눌렸는지 알아야 하면, Was VRPN Button Pressed 함수를 사용하세요.

Detecting whether a VRPN button was pressed

이 기능을 사용하려면 VRPN 이 할당한 숫자 ID 로의 Device Channel 입력을 테스트하려는 버튼으로 설정해야 합니다.

키보드에서 테스트하려는 버튼에 해당하는 Device Channel 숫자 ID 를 알아내려면, VRPN 배포에 제공된 vrpn_print_devices.exe 애플리케이션을 실행하면 됩니다. 이 툴이 실행되는 동안, 누른 키보드 버튼의 숫자 ID 를 콘솔에 출력합니다.

예를 들어, 스페이스 바는 57 번 키입니다.

Find the numeric ID of a keyboard button

Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼