안선생의 개발 블로그

[UE5] 머티리얼 동적으로 바꾸는 법 SetCustomPrimitiveDataFloat 본문

언리얼

[UE5] 머티리얼 동적으로 바꾸는 법 SetCustomPrimitiveDataFloat

안선생 2025. 2. 12. 23:19

언리얼 엔진에서 동적으로 머티리얼을 변경하는 방법

게임 내에서 캐릭터의 외형을 동적으로 변경할 수 있는 기능은 몰입감을 높이고 플레이어의 경험을 향상시키는 중요한 요소입니다. 예를 들어, 피로도에 따른 외형 변화, 기분에 따른 표정 변화, 날씨나 환경에 따른 의상 변화 등을 통해 게임의 현실감을 더할 수 있습니다. 이러한 동적인 외형 변화는 언리얼 엔진에서 머티리얼을 동적으로 조작하여 쉽게 구현할 수 있습니다.

 

오늘은 SetCustomPrimitiveDataFloat 함수를 활용하여 머티리얼을 동적으로 변경하는 방법과, 또 다른 방법인 다이나믹 머티리얼을 활용하는 방법에 대해 설명하겠습니다.

 

1. SetCustomPrimitiveDataFloat 함수 사용하기

CustomPrimitiveData란?

CustomPrimitiveData는 GPU에서 사용하는 데이터로, 주로 머티리얼에서 시각적인 변화를 일으키는 데 사용됩니다. SetCustomPrimitiveDataFloat 함수는 이러한 데이터를 동적으로 변경하여, 머티리얼에 실시간으로 반영할 수 있게 합니다. 예를 들어, 캐릭터의 피부색, 의상 색상, 표정 등을 실시간으로 바꿀 수 있습니다.

이 함수의 장점

  • 동적으로 값을 변경할 수 있기 때문에 게임 내 이벤트(피로도, 기분, 날씨 등)에 따라 실시간으로 외형을 바꿀 수 있습니다.
  • 머티리얼에서 이 값을 참조하여 다양한 시각적 효과를 쉽게 구현할 수 있습니다.

사용 방법

SetCustomPrimitiveDataFloat는 UPrimitiveComponent를 상속받는 클래스에서 사용할 수 있습니다. 주로 SkeletalMesh와 같은 컴포넌트에서 활용됩니다.

1. 머티리얼에서 ScalarParameter 만들기

 

 

먼저 머티리얼에서 사용할 **ScalarParameter**를 만들어야 합니다. 예를 들어, 피부색이나 의상 색상 등을 변경할 때 사용할 수 있는 파라미터입니다.

  • 머티리얼 에디터에서 ScalarParameter를 추가하고, 그 파라미터를 이용해 색상 변화를 적용합니다.
  • ScalarParameter의 이름을 지정한 뒤, 머티리얼에서 참조할 수 있도록 설정합니다.

 

2. CustomPrimitiveData 사용 활성화하기

 

머티리얼을 사용하기 전에 디테일 창에서 'Custom Primitive Data' 사용 체크를 활성화해야 합니다. 이를 통해 SetCustomPrimitiveDataFloat가 머티리얼에서 값을 참조할 수 있게 됩니다.

 

3. 코드에서 동적으로 값 변경하기

이제 SetCustomPrimitiveDataFloat를 이용해 동적으로 값을 설정할 수 있습니다. 예를 들어, 아래와 같이 랜덤한 값을 설정할 수 있습니다:

SkeletalMesh->SetCustomPrimitiveDataFloat(0,FMath::FRand());

위 코드에서는 CustomPrimitiveData[0]과 CustomPrimitiveData[1]에 랜덤 값을 할당하고 있습니다. 이 값은 **머티리얼에서 설정한 ScalarParameter**에 실시간으로 반영됩니다.

 

4. 블루프린트에서 사용하기

블루프린트에서도 동일한 방식으로 **SetCustomPrimitiveDataFloat**를 사용할 수 있습니다. 블루프린트에서 값을 동적으로 설정하고, 해당 값이 머티리얼에 적용되도록 할 수 있습니다.

 

 

 

아래는 언리얼 샘플인데 저값을 이제 동적으로 바꿔서 해당 텍스처를 조절할 수 있다.



 

코드에서는 위와 같이 사용할 수 있고.

블프도 마찬가지로 위와같이 사용 가능하다.

 

저렇게 간단하게 설정만 해주면 머티리얼을 동적으로 관리가 가능. 

또 다른 방법으로는 대체로 많이쓰는 다이나믹 머티리얼을 만들어서 바꾸는 방법도 있다.

 

이 방법이 있는건 처음 알아서 한번 정리해보았다.

'언리얼' 카테고리의 다른 글

[UE5] Common UI 마우스 인풋 안먹을 때  (0) 2025.02.09
[UE5] 언리얼 커스텀 로그 만들기  (1) 2024.11.14
[UE5] 모듈과 플러그인  (1) 2024.11.12
언리얼 포인터 및 참조  (0) 2024.01.01
[UE5] 애니메이션 리타겟팅  (0) 2023.12.22