본문 바로가기

블렌더/에러 리포트

[Blender] Automatic Weights 리깅 실패 해결 방법 (Bone Heat Weighting: failed to find solution for one or more bones)

반응형

에러 증상 및 원인

블렌더에서 Armature Deform - Automatic Weights를 통한 자동 리깅을 할 때 가끔 실패하는 경우가 있다.

이때 다음과 같은 에러 로그를 내뱉으며 리깅이 되지 않는다.

 

에러 로그

 

이는 자동 리깅을 하는 과정에서 가중치 계산 알고리즘이 적절한 솔루션을 찾지 못하여 발생하는 이유다.

이러한 원인은 여러가지가 있을 수 있다.

하지만 대부분의 경우 버텍스가 지나치게 밀집되어 있는 경우 발생한다.


해결 방법

버텍스 개수 감소

첫 번째로 해볼 수 있는 것은 밀집된 버텍스의 개수를 줄이는 것이다.

 

가능하다면 리토폴로지를 진행해도 되지만, 간단하게 아래와 같은 방법으로 우선 해결을 시도해 볼 수도 있다.

필자가 사용하는 방법은 크게 두 가지가 있다.

 

1. Edit Mode - Edge - UnSubdivide

선분(Edge)의 개수를 줄여주는 작업을 진행한다.

이 경우 버텍스의 갯수를 크게 줄일 수 있다. (다만 Shade Smooth를 통해 노멀을 유지하는지 확인할 필요는 있다.)

 

Edit Mode / Edge / Un-Subdivide

 

아래는 실행 전과 후의 차이이다.

 

Un Subdivide 실행 (우)

 

2. Edit Mode - Mesh - Clean Up - Merge by Distance

이 과정을 통해 겹쳐져 있는 점들을 모두 제거할 수 있다.

형태를 크게 변경하지 않고 진행되기 때문에 가급적이면 해주는 것이 좋다.

거리를 너무 크게 지정하면 노멀이 변경될 수 있기 때문에 적절한 거리조절이 필요하다.

 

Edit Mode / Mesh / Clean Up / Merge by Distance

 

이러한 과정을 거쳐 버텍스의 개수가 줄었다면 다시 한번 Ctrl + P를 눌러 자동 리깅을 시도해 보자!

만약 여전히 실행되지 않는다면 이어서 다음 방법을 실행해 볼 수 있다.

 

오브젝트 스케일 변경

현재 메쉬와 본의 사이즈가 너무 작은 경우 Automatic Weights가 실행되지 않을 수 있다.

이 경우 전체 사이즈를 키워서 다시 한번 실행해 본다.

 

Bone과 모델 Mesh를 함께 선택하고 크기를 크게 키워준다.

 

스케일 변경

 

단순히 스케일을 변경하는 것만으로도 정확도를 높일 수 있다.


해결이 되지 않을 경우

대부분의 경우 위의 두 가지 방법으로 해결될 것이라 생각한다.

하지만 여전히 해결되지 않는다면 다음과 같은 방법을 사용해 볼 수 있다.

 

  1. Weight Painting으로 수동으로 가중치 지정
  2. 메쉬의 Object Mode에서 Ctrl + A를 눌러 크기와 회전 초기화
  3. Clean Up에서 Decimate Geometry 사용
  4. Auto Weights 관련 애드온 사용
반응형