본문 바로가기

언리얼엔진

용 날개/꼬리 엔진에서 세팅했던 과정 기록

회사에서 r/d를 할 시간이 있어서 진행했고 회사의 보안상 문제가 될만한 내용은 없어서 개인 블로그에도 기록합니다.

 

  • 목표: 애니 외적으로 용의 날개와 꼬리에 자동 움직임을 줘서 움직임을 풍부하게 보이고자 r/d했습니다
  • 기존 애니와 블랜드가 되기 때문에 원래 포즈와 애니는 유지하되, 엔진 내에서 물리적임 움직임을 더해 작업량 대비 퀄리티를 더 올릴 수 있습니다

꼬리는 Anim bp를 이용해 cos값과 sin값을 이용한 랜덤한 움직임을 뿌리본에 주고, 아래 꼬리본에 스프링 노드를 심어 가만히 있어도 랜덤한 꼬리 움직임을 표현했습니다. (예시를 위해 과장된 수치로 작업)

 

꼬리 랜덤움직임 넣기(Transform bone과 kawaii physics 조합)

작업 방법 이미지
플로트 변수 2개가 필요
  • ElapsedTime (경과 시간): 꼬리를 계속 움직이게 만드는 요소로, 게임이 시작된 후 흐른 시간을 계속 쌓아두는 변수입니다.
  • TailRotation (꼬리 회전값): 에너지를 받아 실제 '얼마나 까닥거릴지' 결정하는 숫자로, 꼬리 뿌리 뼈를 흔들어주는 직접적인 명령값입니다.
이벤트 그래프에서의 세팅
  • 에너지 축적: Update Animation 이벤트가 실행될 때마다 Delta Seconds를 ElapsedTime에 더해 시간에 따라 변하는 기초 값을 만듭니다.
  • 랜덤 파동 생성: ElapsedTime을 Perlin Noise 노드에 통과시켜 불규칙한 흐름을 만들고, Multiply로 흔들림의 폭을 결정해 TailRotation에 저장합니다. Multiply가 높을수록 흔들림의 폭이 커짐.


애님 그래프에서의 세팅 (뿌리)
Transform bone의 수정할 본을 최상위 꼬리본(여기서는 Tail02)로 지정한다.

Rotation X에는 sin
Y에는 cos 노드를 넣어서 대각선으로 움직이는것처럼 보이지 않게 오프셋을 줌
애님 그래프에서의 세팅(뿌리 아래 나머지 꼬리본)
카와이 피직 노드를 이용해 뿌리본의 랜덤한 움직임에 맞춰 세컨더리 애니가 재생되게끔 작업했습니다.

날개의 막의 본에 스프링 노드(카와이피직)을 넣어 얇은 천의 느낌을 내려고 했습니다

 

날개막에 출렁임 주기 방법1 (애님 bp)

작업 방법 이미지
본 구조를 파악한다.(날개막 본)

Bp에서 카와이 노드 혹은 스프링 본 노드를 이용해서 각각의 날개막을 연결한다.
노드별로 세팅관리 하면 시간이 오래 걸릴수 있으므로 세팅값을 핀으로 노출하고 공통 세팅 노드를 만들어준다.


테스트할 애니를 input pose 대신 연결해주고 컴파일을 반복하며 수치를 체크한다.
예시는 댐핑, 스티프니스 0.1
Dummy bone length의 수치를 줘서 (예시는 10) 말단 본의 움직이는 반경을 키울 수 있다. 위 이미지랑 비교하면 날개막의 출렁임이 심해짐

 

클로스를 이용한 날개막 출렁임 테스트

 

날개막에 출렁임 주기 방법2 (클로스)

작업 방법
이미지
메시의 채널을 정리한다. 날개의 막쪽에 클로스를 줄거니, 안쪽과 밖 메시가 나눠져 있다면 채널을 합쳐야 한다.

클로스의 본 역할을 할 프록시 메시를 추가로 만들어야한다. 예제는 오리지널 메시를 그대로 사용했지만(스킨시간 단축을 위해)
에픽에서 권장하는 프록시 메시의 모양이 있다.

http://youtube.com/watch?v=BorYbGD8gR8




뼈대 역할을 할 프록시 모델링. 출렁임을 줄 일이 없는 발톱쪽을 지웠다. 스킨랩으로 프록시 모델링에도 스킨작업을 해준다.
빈 메테리얼을 적용해서 오리지날 메시와 구분을 쉽게 하는게 좋다.

엔진에 올리기 위해 본 모델과 프록시 모델을 같이 선택해서 익스포트 한다. 클로스 작업이 완료된 이후엔 프록시 메시를 다시 임포트할 필요 없다.(프록시 모델이 수정되면 다시 리임포트 해줘야한다)
엔진에 올리면 프록시와 본 메시가 같이 보이는데, 클로스를 적용하면 프록시는 숨길 수 있어서 상관없음.
프록시 메시를 선택한 상태로 우클릭-섹션에서 클로딩 데이터 생성(메시명은 알아보기 편하게, 피직스 에셋은 필요하면 추후 추가하면 됨. 날개쪽이라 충돌할 일이 없을거같아 일단은 추가하지 않음)
메시에서 제거를 선택해서 프록시 메시가 더이상 노출이 되지 않는 상태로 만들어준다.(지금 단계에서 숨기지 않아도 에셋 디테일에서 숨기기 가능)
적용할 부분(채널을 잘 나눠야 하는 이유)우클릭 후 클로딩 데이터 적용-방금 만든 클로딩 데이터를 적용시킨다.
클로스 페인트 활성화-클로딩 테이터 리스트에서 날개 데이터 선택후
브러시를 이용해서 클로스 수치를 먹여준다.
페인트값이 100이면 움직임 100퍼센트인것. 반경과 강도를 조절해서 페인트칠을 해준다.
흰색이 100퍼센트의 움직임, 검은색은 0에 가까운 수치, 마젠타는 0
페인트와 그라데이션 채우기툴 등을 이용해 클로딩을 원하는 부분을 디테일하게 잡아준다.
클로스 환경설정에서 세부 설정을 조절할 수 있다.
너무 많은 설정값이 있어서 프로젝트 예제를 하나 참고해서 수치를 입력하는게 좋다..(예: 언리얼에서 제공하는 파라곤 영웅 등을 참고하는게 좋다)


1. 질량 프로퍼티 (Mass Properties) - "무게 중심"

  • 질량 모드: 옷의 무게를 계산하는 방식(밀도 기준 혹은 전체 질량 기준)을 정합니다.
  • 균등 질량: 옷의 모든 면적에 무게를 똑같이 배분합니다.
  • 총 질량: 옷 전체의 무게를 수치로 직접 정합니다.
  • 밀도: 값이 높을수록 천이 무거워져 중력에 묵직하게 반응합니다.

2. 머티리얼 프로퍼티 (Material Properties) - "천의 성질"

  • 에지 강성: 천의 테두리가 늘어나지 않게 버티는 힘으로, 높을수록 가죽처럼 튼튼해집니다.
  • 벤딩 강성: 천이 굽혀질 때 저항하는 힘이며, 높을수록 종이처럼 빳빳해집니다.
  • 벤딩 엘리먼트 사용: 더 정밀하게 천의 굽힘을 계산할지 결정합니다.
  • 좌굴 비율/강성: 천이 갑자기 꺾이거나 접힐 때 저항하는 정도로, 옷주름 모양을 결정합니다.
  • 평탄도 비율: 천이 원래의 평평한 상태로 돌아가려는 성질입니다.
  • 영역 강성: 천의 면적 자체가 늘어나는 것을 막아 옷의 형태를 유지합니다.

3. 원거리 어태치먼트 (Long Range Attachment) - "늘어남 방지"

  • 테더 강성: 고정된 곳에서 옷이 너무 멀리 떨어지지 않게 끈으로 붙잡아두는 힘입니다.
  • 테더 스케일: 그 "가상의 끈"의 길이를 조절하여 옷이 늘어날 범위를 정합니다.
  • 측지 거리 사용: 천의 표면을 따라 실제 거리를 계산해 더 정확하게 고정합니다.

4. 콜리전 프로퍼티 (Collision Properties) - "충돌 제어"

  • 콜리전 두께: 몸과 옷 사이의 최소 간격으로, 높을수록 몸을 뚫고 들어가는 현상을 막습니다.
  • 마찰 계수: 옷이 피부에 닿았을 때 미끄러지는 정도로, 높을수록 착 달라붙습니다.
  • CCD 사용: 아주 빠르게 움직일 때도 충돌을 놓치지 않도록 정밀하게 계산합니다.
  • 셀프 콜리전 (사용/두께/마찰): 옷끼리 서로 부딪히게 하여 옷감이 겹치거나 뚫리는 것을 방지합니다.

5. 환경 프로퍼티 (Environmental Properties) - "외부의 힘"

  • 댐핑 계수: 공기 저항처럼 전체적인 움직임을 서서히 멈추게 하는 끈적함입니다.
  • 로컬 댐핑 계수: 캐릭터의 이동과 상관없이 옷 자체의 출렁임만 억제합니다.
  • 드래그 / 리프트: 공기 저항 때문에 천이 뒤로 밀리거나(드래그) 위로 떠오르는(리프트) 효과입니다.
  • 중력 스케일 / 중력: 월드의 중력을 얼마나 받을지, 어느 방향으로 떨어질지 정합니다.
  • 압력: 풍선처럼 옷 안쪽에서 바깥으로 미는 압력을 설정합니다.

6. 애니메이션 프로퍼티 (Animation Properties) - "원래 동작 따라가기"

  • 애님 드라이브 강성: 물리 효과를 무시하고 원래 애니메이션 모양을 얼마나 강하게 유지할지 정합니다.
  • 애님 드라이브 댐핑: 애니메이션 모양으로 돌아갈 때 발생하는 진동을 억제합니다.
  • 선형/각 속도 스케일: 캐릭터가 이동하거나 회전할 때 그 속도가 옷에 전달되는 정도를 조절합니다.
  • 최대 선형 속도/가속도: 옷에 전달되는 이동 에너지가 너무 과하지 않게 한계치를 정합니다.

7. 시뮬레이션 설정 (SharedSimConfig) - "계산 정밀도"

  • 반복작업 횟수: 물리 계산을 한 프레임에 몇 번 반복할지 정하며, 높을수록 정확하지만 무거워집니다.
  • 서브디비전 수: 시뮬레이션을 더 잘게 쪼개서 계산하여 퀄리티를 높입니다.