커스텀 데이터프렙 블록 생성

블루프린트에서 데이터프렙 시스템용 커스텀 필터 및 연산자를 생성하는 방법을 살펴봅니다.

비주얼 데이터프렙(Visual Dataprep) 시스템에는 리얼타임 시각화를 위해 3D 데이터를 준비하는 데 가장 일반적으로 필요한 기본 필터 및 연산이 다양하게 제공됩니다. 하지만 사전 설정된 필터와 연산만으로는 필요한 연산을 모두 완벽하게 지원하지 못합니다. 언리얼 에디터의 스크립팅 시스템에서 가능한 작업을 수행하기 위해 데이터프렙 그래프가 필요하지만 마땅한 기본 데이터프렙 블록이 없는 경우, 사용자 요구에 정확히 부합하는 커스텀 필터 또는 연산자를 직접 생성할 수 있습니다.

이 페이지에서는 데이터프렙 그래프에 사용할 새로운 타입의 필터 및 연산자를 생성하는 방법에 대해 설명합니다.

커스텀 데이터프렙 블록 생성 방법

어떤 데이터프렙 블록 타입이든 전반적인 프로세스는 동일합니다.

  1. 새 블루프린트 클래스를 생성합니다. 자세한 내용은 블루프린트 클래스 만들기를 참고하세요.

  2. 부모 클래스 선택(Pick Parent Class) 대화창에서 하단의 모든 클래스(All Classes) 목록을 펼칩니다. 생성하려는 블록 타입에 해당하는 베이스 클래스를 고르고 선택(Select) 을 클릭합니다.

    선택할 수 있는 데이터프렙 부모 클래스 목록은 하단의 베이스 클래스 목록을 참고하세요.

  3. 원하는 경우 콘텐츠 브라우저(Content Browser) 에서 새 클래스의 이름을 변경할 수 있습니다.

  4. 새 클래스를 더블클릭하여 편집을 위해 블루프린트 에디터(Blueprint Editor)에서 엽니다.

  5. 사용자 클래스가 부모 클래스에서 상속한 함수를 오버라이드합니다. 오버라이드하는 함수에 따라 새 블록이 데이터프렙 에디터(Dataprep Editor)에 표시되는 방식을 제어할 수 있으며, 데이터프렙 그래프 실행 중 블록이 실행되는 경우 작동하는 방법을 커스터마이징할 수 있습니다.

    함수를 오버라이드하려면 내 블루프린트(My Blueprint) 패널의 함수(Functions) 카테고리 위에 커서를 올렸을 때 표시되는 오버라이드(Override) 드롭다운을 클릭하고 오버라이드할 함수를 선택합니다.

    블루프린트에서 함수 오버라이드

  6. 블루프린트 클래스를 컴파일 하고 저장 합니다.

다음에 데이터프렙 에셋을 열 때 그래프 에디터 왼쪽 팔레트에 새 노드가 추가되어 있는 것을 확인할 수 있습니다.

베이스 클래스

다음 베이스 클래스 중 하나를 커스텀 데이터프렙 블록의 부모 클래스로 사용합니다.

클래스

설명

DataprepBoolFetcher

특정 조건이 true라고 판단되는 경우 오브젝트를 선택하는 필터를 구현하려면 이 클래스를 사용합니다.

DataprepFloatFetcher

부동 소수점 숫자 프로퍼티를 바탕으로 오브젝트를 선택하는 필터를 구현하려면 이 클래스를 사용합니다. 여기서 부동 소수점 숫자는 소수 자리 컴포넌트를 가질 수 있는 숫자를 가리킵니다.

DataprepIntegerFetcher

정수 프로퍼티를 바탕으로 오브젝트를 선택하는 필터를 구현하려면 이 클래스를 사용합니다. 여기서 정수는 소수 자리 컴포넌트가 없는 정수를 가리킵니다.

DataprepStringFetcher

스트링 프로퍼티를 바탕으로 오브젝트를 선택하는 필터를 구현하려면 이 클래스를 사용합니다.

DataprepOperation

액터 또는 에셋을 수정하는 연산자를 구현하려면 이 클래스를 사용합니다.

DataprepEditingOperation

액터 또는 에셋을 수정하는 연산자나 액터와 에셋을 추가 또는 제거할 수 있는 연산자를 구현하려면 이 클래스를 사용합니다.

변수 및 세팅

블루프린트 클래스에서 표시 타입을 퍼블릭으로 설정한 모든 변수는 해당 타입의 블록마다 데이터프렙 에디터에서 커스터마이징 가능한 세팅으로 노출됩니다. 이 메커니즘을 사용하면 데이터프렙 그래프 디자이너가 함수 작동 방식을 커스터마이징할 수 있습니다.

예를 들어 이 연산자 클래스는 뜬 눈 모양의 아이콘으로 표시되는 퍼블릭 변수를 일부 포함하고 있습니다.

블루프린트 클래스에서 퍼블릭 변수

이 블록 타입이 데이터프렙 그래프에서 사용된 경우 퍼블릭 변수는 커스터마이징 가능한 세팅으로 노출됩니다.

데이터프렙 블록에서 세팅으로 노출된 퍼블릭 변수

위 이미지에서는 HiddenStringVariable 이 데이터프렙 블록의 세팅으로 노출되어 있지 않은데, 이는 블루프린트 클래스에서 해당 변수가 퍼블릭으로 표시되어 있지 않기 때문입니다. 또한 블록의 세팅은 블루프린트 클래스 변수에 설정한 디폴트 세팅을 따릅니다. 예를 들어 마지막 변수인 StringWithDefaultSet 는 디폴트 값 세트를 갖습니다. 이는 블록 세팅에서 해당하는 텍스트 박스를 미리 채웁니다.

커스텀 필터 생성

커스텀 필터를 생성하는 경우 다음 함수를 모두 오버라이드할 수 있습니다.

함수

설명

Fetch

데이터프렙 그래프를 실행하면 해당 타입의 필터 블록을 처리하며 현재 컨텍스트의 오브젝트마다 이 함수를 호출합니다.

이 함수는 Fetch 함수로 전달된 오브젝트를 평가하여 부울 값, 인티저, 플로트 또는 스트링 등 특정 타입의 정보 항목을 생성합니다. 필터 노드는 반환되는 정보 항목이 그래프 세팅에 표현된 논리 조건을 충족하는지 확인하는 로직을 수행합니다. 예를 들어 반환된 인티저가 블록에서 사용자가 설정한 값보다 크거나 작은지, 반환된 스트링이 블록에서 사용자가 설정한 스트링과 일치하거나 이 스트링에 포함되어 있는지 확인합니다.

이 함수는 현재 오브젝트의 출력 값을 성공적으로 계산했는지 나타내는 부울 값도 반환합니다. false 부울 값이 반환되면 필터는 현재 오브젝트를 제외합니다.

Get Additional Keyword

데이터프렙 에디터는 이 함수를 호출하여 해당 블록의 키워드 목록을 구합니다. 사용자가 함수에서 반환한 키워드 중 하나를 팔레트 상단의 검색 필터에 입력하면 에디터는 사용자의 키워드가 블록 이름에 나타나지 않더라도 일치하는 항목의 목록에 해당 블록을 포함합니다.

Get Display Fetcher Name

데이터프렙 에디터는 이 함수를 호출하여 해당 블록의 팔레트에 나타낼 표시명을 구합니다.

Get Node Display Fetcher Name

데이터프렙 에디터는 이 함수를 호출하여 해당 타입의 블록마다 실제 데이터프렙 그래프에 나타낼 표시명을 구합니다.

Get Tooltip Text

데이터프렙 에디터는 이 함수를 호출하여 사용자가 팔레트에서 이 블록의 이름 또는 데이터프렙 그래프에서 해당 타입의 블록에 마우스를 올렸을 때 툴팁에 표시할 텍스트를 구합니다.

어떤 필터든 Fetch 함수를 오버라이드해야 효과가 발생합니다. 다른 함수는 선택 사항이지만 데이터프렙 에디터 팔레트에 블록이 나타나는 방식을 제어하려면 사용하는 것이 좋습니다.

필터 예시

다음 예시는 메시에 포함된 섹션 수에 따라 사용자가 스태틱 메시 에셋을 필터링할 수 있게 해주는 Select By 블록을 Fetch 함수 구현을 통해 생성하는 방법을 보여줍니다.

Copy Node Graph

Fetch 함수 구현

커스텀 연산 생성

커스텀 연산을 생성하는 경우 다음 함수를 모두 오버라이드할 수 있습니다.

함수

설명

Get Additional Keyword

데이터프렙 에디터는 이 함수를 호출하여 해당 블록의 키워드 목록을 구합니다. 사용자가 함수에서 반환한 키워드 중 하나를 팔레트 상단의 검색 필터에 입력하면 에디터는 사용자의 키워드가 블록 이름에 나타나지 않더라도 일치하는 항목의 목록에 해당 블록을 포함합니다.

Get Category

데이터프렙 에디터는 이 함수를 호출하여 해당 블록이 팔레트의 연산(Operations) 목록에서 어떤 서브카테고리에 속할지 결정합니다.

이 함수를 오버라이드하지 않으면 연산 블록은 사용자 정의(User-defined) 카테고리에 나열됩니다.

Get Display Operation Name

데이터프렙 에디터는 이 함수를 호출하여 이 블록의 팔레트에 나타낼 표시명과 해당 타입의 블록마다 실제 데이터프렙 그래프에 나타낼 표시명을 구합니다.

Get Tooltip

데이터프렙 에디터는 이 함수를 호출하여 사용자가 팔레트에서 이 블록의 이름 또는 데이터프렙 그래프에서 해당 타입의 블록에 마우스를 올렸을 때 툴팁에 표시할 텍스트를 구합니다.

On Execution

데이터프렙 그래프를 실행하면 해당 타입의 연산 블록을 처리하며 이 함수를 호출하여 임포트된 에셋 및 액터를 수정합니다. 이 이벤트에서 블루프린트 노드 다운스트림의 그래프를 생성하면 해당 액션의 이전 블록에서 전달된 에셋 및 액터 목록에 대한 연산을 제어할 수 있습니다.

그래프 구현 방법에 대한 자세한 내용은 다음 섹션을 참고하세요.

어떤 연산이든 Event On Execution 이벤트를 오버라이드해야 효과가 발생합니다. 함수는 모두 선택 사항이지만 데이터프렙 에디터 팔레트에 블록이 나타나는 방식을 제어하려면 사용하는 것이 좋습니다.

데이터프렙 컨텍스트

데이터프렙 시스템이 데이터프렙 그래프가 실행되는 동안 연산 블록에 On Execution 이벤트를 트리거하면 블루프린트 그래프에서 사용할 컨텍스트 오브젝트가 전달됩니다. 이는 본질적으로 연산자가 수정할 수 있는 모든 액터 및 에셋의 목록입니다. 연산 블록이 데이터프렙 액션에서 필터 블록 위에 있는 경우 이 컨텍스트 오브젝트는 데이터프렙 월드로 임포트한 모든 에셋 및 액터를 포함합니다. 그렇지 않은 경우 이 컨텍스트 오브젝트는 현재 데이터프렙 액션에서 연산 블록 위에 있는 필터에 의해 선택된 모든 액터 및 에셋을 포함합니다.

Break DataprepContext 노드를 사용하여 컨텍스트에서 오브젝트 배열을 구할 수 있습니다. 그런 다음 컨텍스트의 모든 오브젝트를 수정하거나 특정 타입으로 오브젝트 범위를 좁힐 수 있습니다.

데이터프렙 컨텍스트에서 오브젝트 구하기

예를 들어 위 연산은 데이터프렙 컨텍스트(액터, 텍스처 에셋 또는 머티리얼 에셋 등)에 포함될 수 있는 다른 오브젝트에는 없고 스태틱 메시 에셋에만 있는 세팅을 수정합니다. 따라서 컨텍스트의 오브젝트 배열 전체를 루프하며 각 오브젝트를 스태틱 메시에 캐스트합니다. 그런 다음 캐스트에 성공한 경우에만 수정합니다.

연산 및 편집 연산

연산자 블록에는 DataprepOperationDataprepEditingOperation 이라는 두 개의 부모 클래스가 있습니다. 사용자가 수행할 편집 연산에 따라 둘 중 어떤 것을 사용할지 결정됩니다. 데이터프렙 컨텍스트에 이미 포함되어 있는 오브젝트만 수정하는 경우에는 DataprepOperation 을 부모 클래스로 사용할 수 있습니다. 하지만 새 오브젝트를 생성해야 하는 경우에는 DataprepEditingOperation 을 베이스 클래스로 사용해야 합니다. 예를 들어 '콘텐츠 브라우저'에서 에셋을 생성하거나, 레벨에서 새 액터를 스폰하거나, 데이터프렙 컨텍스트의 오브젝트 목록을 수정해야 하는 경우가 여기에 해당합니다.

DataprepEditingOperation 에서 클래스를 파생시키면 블루프린트 에디터의 데이터프렙(Dataprep) > 편집 연산(Editing Operations) 카테고리에 속한 추가 특수 함수에 액세스할 수 있게 됩니다.

데이터프렙 편집 연산

예를 들어 에셋 추가(Add Asset) 를 사용하여 데이터프렙 컨텍스트에 에셋을 추가할 수 있습니다. 이렇게 하면 동일한 데이터프렙 액션의 다른 블록으로 전달되는 데이터프렙 컨텍스트에 에셋이 포함됩니다.

언제나 가능한 경우에는 정상적인 상황에서 유사한 용도로 사용할 수 있는 다른 노드가 아닌, 데이터프렙 > 편집 연산 카테고리의 함수를 사용하여 작업을 수행하세요. 데이터프렙 시스템이 임포트된 데이터를 모두 유지하기 위해 사용하는 임시 월드는 고유합니다. 따라서 이러한 함수를 통해서만 임시 월드를 수정할 수 있습니다.

예를 들어 새 액터를 스폰하는 경우에는 일반적으로 사용되는 에디터 스크립팅(Editor Scripting) > 레벨 유틸리티(Level Utility) > 클래스에서 액터 스폰(Spawn Actor from Class) 또는 오브젝트에서 액터 스폰(Spawn Actor from Object) 이 아닌, 데이터프렙 > 편집 연산 > 액터 생성(Create Actor) 노드를 항상 사용해야 합니다.

연산 예시

UV 채널 제거

다음과 같은 On Execution 이벤트 구현에서는 컨텍스트의 모든 스태틱 메시 에셋을 찾아 각각 UV 채널을 제거합니다. 여기에서 제거되는 UV 채널의 인덱스는 Index 변수에서 온 것입니다. 이 경우 Index 변수는 퍼블릭 편집가능으로 표시되어 있으므로 데이터프렙 그래프의 블록에서 세팅으로 표시됩니다.

UV 채널을 제거하는 커스텀 블록

Copy Node Graph

On Execution 함수 구현

위에서 살펴본 간단한 예시에서는 스태틱 메시를 현재 컨텍스트에서 고립시키는 방법과 블루프린트에서 노출된 연산을 사용하여 이러한 메시를 변경하는 방법을 보여줍니다. 하지만 단일 상수 인덱스를 사용하여 제거할 채널을 확인하는 것은 경우에 따라 실용적인 방법이 아닐 수 있습니다. 예를 들어 스태틱 메시가 지정된 인덱스보다 UV 채널이 적은 경우 또는 생성된 라이트맵을 저장하기 위해 스태틱 메시가 사용하는 인덱스와 지정된 인덱스가 일치하는 경우를 처리하지 못합니다. UV 채널을 조작하기 위해 보다 실용적인 데이터프렙 블록을 구현하는 것은 스태틱 메시를 작성할 때 사용하는 규칙에 따라 달라지는 경우가 많습니다.

스태틱 메시 액터 배포

다음과 같은 On Execution 이벤트 구현에서는 컨텍스트의 모든 스태틱 메시 액터를 찾아 공간 내 그리드에 재배포합니다. 그리드의 최솟값과 최댓값은 각각 MinMax 변수에서 가져옵니다. 이러한 변수는 퍼블릭 편집가능으로 표시되어 있으므로 데이터프렙 그래프의 블록에서 세팅으로 표시됩니다. 하지만 씬의 스태틱 메시 액터 배열을 저장하는 데 사용되는 Actors 변수의 경우 편집가능으로 표시되어 있지 않습니다. 따라서 이 변수는 데이터프렙 그래프의 블록에 표시되지 않습니다.

스태틱 메시 에셋을 재배포하는 커스텀 블록

Copy Node Graph

On Execution 함수 구현

레이어에 오브젝트 추가

다음과 같은 On Execution 이벤트 구현에서는 컨텍스트의 액터를 찾아 에디터에서 지정된 레이어에 추가합니다.

레이어에 액터를 추가하는 커스텀 블록

Copy Node Graph

On Execution 함수 구현

언리얼 엔진의 이전 버전을 위해 작성된 페이지입니다. 현재 언리얼 엔진 5 버전을 위해 업데이트되지 않았습니다.