UE5 -HLSL- 근육바운싱

 UE5 -HLSL-  근육바운싱





근육바운싱효과 만들기.


목표.

애니메이션과 연동되는 근육 떨림 만들기.

캐릭터BP와 관련없이 독립적으로 구동되어야 함.

애니메이션 시퀀스에서 AnimNotifyState 로 근육떨림을 컨트롤 한다.



Step1.버텍스 칼라




Step2.Material Custom Node





커스텀 노드를 만들어주고 아래와 같은 코드를 작성 해 준다.


float ResetTime = fmod(Time,1);

float Damp = sin((ResetTime*Speed) * Frequency) *exp(-((ResetTime*Speed) - 1.0) * Damping);

float CombineDamp =Damp*((VertexColor.g*Left )+(VertexColor.r*Right))*Wave;

return float3(CombineDamp*X, CombineDamp*Y,CombineDamp*Z);


변수

  • Time:타임 float
  • VertexColor :버텍스 칼라 vector3
  • Frequency :주기/빈도 float
  • Damping : 감쇠 float
  • Left : 왼쪽 다리 0이면 off 1일때 on, 1보다 큰 값이면 움직임이 강해짐.
  • Right : 오른쪽 다리 0이면 off 1일때 on, 1보다 큰 값이면 움직임이 강해짐. 
  • Speed : 떨림속도,값이 크면 빈도와 감쇠 모두 빨라짐
  • X : X축 움직임 강도
  • Y : Y축 움직임 강도
  • Z : Z축 움직임 강도
  • Wave : animnotifystate 길이 삼각파형 값

TransformVector  노드에서 WS 로 변환후 World position offset에 연결해준다.



Step3.AnimNotifyState


Begin



float CombineDamp =Damp*((VertexColor.g*Left )+(VertexColor.r*Right))*Wave;

left,right 둘다 기본값은 0이고 right animnotifystate 에서 시작시 값을 1로 변경해 유효하게 해준다.



Tick


wave = 1.0 - abs((AnimNotifyState Time Ratio - 0.5) * 2.0)

0에서 1로 그리고 다시 0으로 선형이동을 한다.


End


right값을 0으로 그리고 Wave도 다시한번 0으로 바꿔준다.


Left도 똑같이 만들어 준다.


UE5 HLSL Animation



댓글