디포머 그래프(Deformer Graph)는 언리얼 엔진에서 사용자가 디포머 그래프 에셋을 생성 및 편집하여 모든 스키닝된 메시에 대해 메시 디포메이션을 수행 및 커스터마이징할 수 있게 해주는 플러그인입니다. 디포머 그래프를 사용하면 메시의 지오메트리를 조정하는 로직을 생성 및 수정하여 디포메이션 행동을 미세조정하거나 언리얼 엔진 내에서 완전히 새로운 디포메이션을 생성할 수 있습니다. 디포머 그래프는 스킨, 패브릭 및 캐릭터 모션의 그룸 행동을 미세조정하거나 수작업을 통한 애니메이션보다 디포메이션 로직을 사용하여 더 쉽게 생성할 수 있는 일회성 애니메이션에 자주 사용됩니다.
다음은 각 커브를 '정돈'하는 디포머를 갖춘 그룸(왼쪽)과 없는 그룸의 예시입니다.
![]() |
![]() |
|---|---|
| 디포머를 갖춘 그룸 | 각 커브를 '정돈'하는 디포머가 없는 그룸 |
그룸 디포머 그래프
디포머 그래프는 적용된 디포메이션을 그래프로 표현하며, 여기에서 Custom Compute Kernel 노드에는 디포메이션을 처리하는 코드가 포함되어 있습니다. 디포메이션 입력은 씬 데이터, 그룸, 가이드 등 다양한 소스에서 나올 수 있습니다. 그래프 출력은 위치 또는 어트리뷰트 등 그룸의 값을 씁니다.
디포머 그래프를 사용하는 방법에 대한 자세한 내용과 해당 에디터에 익숙해지려면 디포머 그래프를 참고하세요.
디포머 그래프에서는 다음과 같은 핵심 영역을 알아두어야 합니다.
- '소스(Source)' 및 '파라미터(Parameters)' 패널
- 디포머 그래프
- '디테일(Details)' 패널
- '셰이더 텍스트 에디터(Shader Text Editor)' 패널
디포머 그래프를 구성하는 핵심 요소는 다음과 같습니다.
-
Primary 노드는 제공하는 데이터 타입에 대한 바인딩을 제공합니다. 그룸 컴포넌트(Groom Component) 로 설정되어야 합니다.
-
Groom 및 Guides 입력 노드. 두 노드는 각각 그룸과 가이드 데이터에 대한 액세스를 제공합니다.
-
커스텀 계산 커널 노드인 MyKernel 노드는 그룸 및 가이드에 적용되는 디포메이션을 정의합니다.
-
Write Groom 출력 노드는 수정된 그룸 데이터를 씁니다.
- 이 노드에는 몇 가지 제한이 있습니다.
- 그룸의 위치와 반경을 쓰려면 위치(Position) 또는 반경(Radius) 출력을 사용합니다. 그룸의 위치와 반경을 모두 쓰려면 위치 및 반경(Position and Radius) 출력을 사용합니다.
- 그룸 내 기존 어트리뷰트만 쓸 수 있습니다. 예를 들어 그룸 에셋에 '러프니스(Roughness)' 어트리뷰트만 있고 '컬러(Color)' 어트리뷰트는 없는 경우에는 러프니스만 쓸 수 있고 컬러는 쓸 수 없습니다.
- 셰이더 텍스트 에디터(Shader Text Editor) 를 선택하면 Custom Compute Kernel 노드에서 선언(읽기 전용)을 확인하고 커스텀 HLSL 코드를 추가하여 그룸의 디포메이션을 정의할 수 있습니다.
그룸 디포머 그래프 구성
이 기능을 사용하려면 우선 플러그인(Plugins) 브라우저에서 디포머 그래프 플러그인을 활성화한 다음 엔진을 재실행하여 변경사항을 적용해야 합니다.
디포머 그래프를 사용하여 그룸을 구성하려면 다음 단계를 따릅니다.
- 콘텐츠 브라우저 에서 디포머 그래프 에셋을 생성합니다.
- 소스 패널에서 Primary 노드 드롭다운을 그룸 컴포넌트 로 설정한 다음 이 노드를 그래프로 드래그합니다.
-
그래프에서 우클릭하고 다음 노드를 추가합니다.
- 프라이머리 그룸의 모든 프로퍼티에 대한 액세스를 제공하는 Groom 데이터 인터페이스 노드
- 프라이머리 그룸의 모든 쓰기 가능 프로퍼티에 대한 액세스를 제공하는 Write Groom 출력 데이터 인터페이스 노드
- 이 그룸의 디포메이션 로직을 정의하는 Custom Compute Kernel 노드
-
다음과 같이 노드를 그래프에 연결합니다.
- Custom Compute Kernel 노드의 새 입력(New Input) 핀에 출력 와이어를 드래그 앤 드롭하면 타입 및 빈도를 사용하여 노드의 유저 인터페이스가 자동으로 환경설정됩니다. 이 노드의 '디테일' 패널에서 수동으로 구성할 수도 있습니다.
-
Custom Compute Kernel 노드를 선택합니다. 세팅(Settings) > 디테일 패널에서 실행 도메인(Execution Domain) 을 다음 중 하나와 같이 설정합니다.
- 커브(Curve) 는 커브당 GPU 스레드를 하나 사용합니다.
- 컨트롤 포인트(Control Points) 는 컨트롤 포인트당 GPU 스레드를 하나 사용합니다.
-
셰이더 텍스트 에디터 를 사용하여 이 그룸의 디포메이션 로직에 커스텀 HLSL 코드를 입력합니다.
- 디포머 그래프를 컴파일(Compile) 하고 저장(Save) 합니다.
디포머 그래프가 구성되면 스켈레탈 메시에 추가된 그룸 컴포넌트에 그룸 디포머를 적용할 수 있습니다. 생성한 그룸 디포머를 적용하려면 메시 디포머(Mesh Deformers) 선택 박스를 사용합니다.
그룸 디포머를 구성할 때는 몇 가지 추가적인 사항을 고려해야 합니다.
- 블루프린트 로직을 사용하면 씬 데이터 또는 입력 파라미터와 같은 추가 데이터에 액세스할 수 있습니다.
- Custom Compute Kernel은 디포메이션 로직을 정의하며 입력을 소모하고 출력을 계산합니다. 각 입력에는 특정 타입(플로트, 인티저, float3 등)과 빈도(컨트롤 포인트 또는 커브)가 있습니다. 그룸 인터페이스에서 Custom Compute Kernel로 입력 와이어를 드래그하여 연결함으로써 유저 인터페이스가 타입과 빈도를 자동으로 환경설정하게 하거나 '디테일' 패널에서 수동으로 환경설정할 수 있습니다.
- 그룸에 대한 모든 시간 및 게임 종속 이펙트는 에디터가 재생 중 또는 시뮬레이션 중 일 때만 표시됩니다.
그룸 디포머 그래프 셰이더 코드 샘플
다음 샘플은 수직 스트랜드 4개가 포함된 그룸에 적용된 그룸 디포머를 보여줍니다. 디포머는 시간 경과에 따라 그룸의 위치만 변경하여 '물결' 이펙트를 생성합니다. 왼쪽 그룸에는 디포머가 없고, 오른쪽에는 있습니다.
왼쪽 그룸은 디포메이션이 적용되어 있지 않습니다. 오른쪽 그룸에는 디포머가 있습니다.
디포머 그래프로 이와 같은 타입의 이펙트를 얻으려면, 각 스트랜드에 따른 그룸의 안정 위치(Rest Position) 및 U 좌표(U Coordinate) 를 읽어 시간에 따른 동적 오프셋을 계산해야 합니다.
이러한 디포메이션을 구현하는 커널 코드는 다음과 같습니다.
if (Index < ReadControlPointCount())
{
const float3 P = ReadInPosition(Index);
const float U = ReadInCoordU(Index);
const float T = abs(sin( U * ReadTime()));
WriteOutPosition(Index, P + T * float3(5,0,0));
}
커널에는 글로벌 GPU 스레드 인덱스를 정의하는 묵시적 Index 변수가 있습니다. 이것은 입력 읽기 함수를 사용하여 올바른 컨트롤 포인트를 읽는 데 사용됩니다.
ReadInPosition(Index)
ReadInCoordU(Index)
커널은 x개의 스레드(디폴트는 64개 스레드) 그룹으로 디스패치되기 때문에 유효하지 않은 데이터에 액세스되지 않도록 확인해야 합니다. 이를 위해 다음 조건이 추가됩니다.
if (Index < ReadControlPOintCount())
출력은 WriteOutPosition 출력 인터페이스 함수를 사용하여 다음과 같이 작성됩니다.
WriteOutPosition(Index, MyTransformedPosition)
셰이더 텍스트 에디터
셰이더 텍스트 에디터 에서는 하이레벨 셰이딩 언어(High-Level Shader Language, HLSL)를 사용하여 Custom Compute Kernel 노드 프로그래밍을 수정하여 특정 메시 디포메이션 행동을 제어합니다.
이 패널은 디포머 그래프 오른쪽 하단에 있습니다. '셰이더 텍스트 에디터'는 선언(Declarations) 과 셰이더 텍스트(Shader Text) 라는 두 부분으로 구성됩니다. '선언' 섹션에는 커널 입력과 출력 함수가 표시되며, 읽기 전용입니다. '셰이더 텍스트' 섹션에는 커스텀 HLSL 코드를 입력하게 됩니다.
'셰이더 텍스트 에디터' 패널에는 선언과 일부 커스텀 디포메이션 코드가 표시됩니다.
디포머 그래프를 컴파일하는 경우 그래프 하단의 컴파일러 출력(Compiler Output) 패널에서 오류를 확인할 수 있습니다. 컴파일하는 동안 발견된 오류는 모두 여기에 표시됩니다.
디포머 그래프의 '셰이더 텍스트 에디터'에 대한 자세한 내용 및 샘플은 다음을 참고하세요.

