메쉬 저장 내부
이 문서를 읽으면 메쉬 저장(Bake)이 어떤 순서로 무엇을 하는지, 언제 정점을 정리하고 언제 건너뛰는지, 4개를 넘는 본 영향을 가진 메쉬가 어떻게 보존되는지 알 수 있습니다.
순서
- 열려 있는 표정 키 편집이 있으면 저장을 멈추고 편집을 먼저 마치라고 안내합니다.
- 자동 정규화가 꺼진 채 작업했다면 웨이트를 한 번 정규화합니다.
- Work Mesh의 사본을 만듭니다. 라이브 메쉬는 건드리지 않습니다.
- 사본에서 사용되지 않는 정점을 정리합니다.
- 데이터를 검증합니다. NaN, Infinity, 토폴로지, 배열 길이를 봅니다.
- 출처 표식(provenance)으로 출력 경로를 정하고 에셋을 씁니다.
- 렌더러가 새 에셋을 쓰게 하고 세션을 끝냅니다.
메쉬가 크면 진행 표시가 뜹니다.
사용되지 않는 정점 정리
선택·이동에서 X로 면을 지우면 삼각형만 지우고 정점 버퍼는 그대로 둡니다. 편집 중에 정점을 재배치하면 선택, 마스크, 되돌리기 스냅샷의 인덱스가 전부 어긋나기 때문입니다.
그래서 정리는 메쉬 저장 할 때 사본에서 한 번 합니다. 어떤 서브메쉬 삼각형도 참조하지 않는 정점을 제거하고 나머지를 다시 번호 매깁니다.
보존되는 것: 노멀, 탄젠트, UV0~UV7, 컬러, 본 웨이트(가변 영향 포함), bindpose, 블렌드쉐이프 전 프레임.
정리는 사본에서 전 과정을 수행하고, 완전히 성공했을 때만 대상에 복사합니다. 절반만 다시 쓰인 메쉬는 남지 않습니다.
건너뛰는 경우
| 조건 | 결과 |
|---|---|
| 삼각형이 아닌 서브메쉬(Quad, Line, Point)가 있음 | 정리를 건너뜁니다. 화면에는 나타나지 않고, 진단 스위치(EditorPrefs StudioRaming.EasyMeshEditor.Diag)를 켰을 때만 콘솔에 남습니다 |
| 이름이 같은 블렌드쉐이프가 있음 | 블렌드쉐이프 채널을 그대로 옮기며 정리합니다. 그렇게도 옮길 수 없을 때만 건너뛰며, 이때는 진단 로그에만 남습니다 |
| 정리 자체가 실패 | 메쉬를 그대로 두고 알립니다 |
건너뛰어도 메쉬 저장은 진행됩니다. 정점이 줄지 않을 뿐입니다.
노멀
메쉬 저장은 노멀을 임의로 다시 계산하지 않습니다. 편집 중에 명시적으로 만든 노멀만 반영됩니다.
노멀 재계산: 선택 정점의 노멀을 다시 계산합니다.노멀 뒤집기: 선택 페이스의 winding을 뒤집고, 블렌드쉐이프의 노멀·탄젠트 델타와 정점 탄젠트도 함께 뒤집습니다.- 표정 키를 만들거나 고칠 때는 그 키의 노멀 델타를 면적 가중으로 다시 계산합니다. 키 편집 저장, 새 키 저장,
새 키로 저장모두 같습니다.
가변 본 웨이트
메쉬는 정점당 4개를 넘는 본 영향을 가질 수 있습니다. 레거시 BoneWeight API는 4개까지만 다루므로, 그것만 쓰면 칠하지 않은 정점까지 메쉬 전체가 4슬롯으로 잘립니다.
그래서 세션은 불러오기 시점에 원본의 가변 웨이트 데이터를 따로 보관합니다.
- 웨이트를 칠하면 건드린 웰드 그룹만 4슬롯으로 바꾸고,
- 나머지는 보관해 둔 원본 그대로 두고,
- 저장할 때 둘을 합쳐 한 번에 다시 씁니다.
결과적으로 팔 하나에 웨이트를 칠해도 다리의 5개 영향 정점은 그대로 남습니다.
되돌리기 스냅샷, 삭제와 분리, 최종 동기화까지 모두 이 경로를 지납니다.
선택·이동에서 떼어낸 _Part 조각은 원본의 본 영향 개수를 그대로 옮깁니다(4슬롯으로 줄이지 않습니다). → 현재 제한
이름 맞추기
Unity는 에셋 파일 안의 메인 오브젝트 이름이 파일 이름과 다르면 경고를 냅니다. 메쉬 저장은 저장 직전에 메쉬 오브젝트의 이름을 파일 이름과 같게 맞춥니다.
실패했을 때
메쉬 저장이 실패하면 세션이 닫히지 않습니다. 원인을 고친 뒤 다시 시도할 수 있습니다.
여러 메쉬를 함께 저장했다면 성공한 것만 에셋으로 나가고, 실패한 세션은 열린 채로 남습니다. 결과는 대상별 결과표로 정리됩니다. → 창 사용법
컬러 버퍼
메쉬의 컬러 채널이 8비트(UNorm8)로 임포트되어 있으면 float 컬러를 그대로 쓸 수 없습니다. 스냅샷, 정리, 분리, 세션 동기화는 모두 같은 읽기와 쓰기 경로를 지나며, 원본 메쉬의 포맷을 그대로 따릅니다.