Unreal/TA&Development

[UE4] Engine에 Skeletal Mesh를 넣을 때 주의사항

김성인 2021. 11. 5. 14:59

[UE4] Engine에 Skeletal Mesh를 넣을 때 주의사항

 


개요

 

 1. 문제 인식

 2. 문제 파악

 3. 해결 과정과 방법

 4. 추가 및 개선 사항

  - Reset Script 포함


문제 인식

 

 - 3DS MAX에서 작업한 Character를 UE5에 Import를 했는데, MAX에서 작업한 것과 다르게 늘어지는 부분들이 존재함.

MAX에서 UE5로 넘긴 캐릭터 날개 부분과, 치마 부분이 늘어나 있다.


문제 파악

 

 - MAX에서 작업물 확인을 해보았지만 이상이 없음.

 - UE5에서 넣어서 보니, 날개, 치마, 머리 옆 액세사리가 늘어나 있음.


해결 과정과 방법


 - Unity에 같은 DATA를 넣고, Generic과 Humanoid로 확인함. // 같은 현상이 일어남.

   > UE5와 Unity에 DATA를 넣어 본 결과 같은 결과가 나오는 것으로 보아, Engine의 문제는 아닌 것으로 생각됨.

 - 혹시나 하는 마음에, 3D Viewer에도 넣어서 확인함.


 - 비교 분석 시작함.

  > 먼저 Engine에서 Skeleton tree에서 정상적으로 나오는 부분과, 비정상적으로 나오는 부분을 비교함.

  > 비교해 보니, Bone의 Scale이 다르다는 것을 확인 함.

  > 정상적으로 나오는 부분의 Bone은 Scale 값이 전부 1로 되어 있음.

  > 비정상적으로 나오는 부분의 Bone의 경우 Scale 값이 1이 아닌 값을 하고 있음.

  >> Scale 값이 문제인 것으로 추정하여 3DS MAX에서 Bone의 Scale 값 확인 결과, Engine에서와 같은 현상이었음.

 

- 정상적으로 작동하는 DATA를 UE5와 Unity에 넣어 보고 같은 부분 확인 함.

- 날개 중 한 부분을 Scale 값을 MAX에서는 100, Engine에서는 1로 맞추어 Engine에 넣음.

  > MAX에서 Export 했을 때와 같은 모습을 UE5에서 확인할 수 있었음.

 - MAX에서 나머지 부분 또한 각 Bone의 Scale 값을 100으로 맞춰줌. // UE5에서는 1로 됨.

 - 전부 MAX에서 Export 한 값과 같게 나옴.

- 결과물 검수를 위하여, MAX에서 간단한 Animation을 잡아, Anim 파일로 UE5에 넣음.

 - 정상적으로 나옴을 확인함.

 

 - UE5에서 스켈레톤 트리를 열어서 모든 Scale 값이 1로 되어 있는지 확인.

 

 - 결과적으로 좋은 리소스를 얻기 위해서는 Bone, 조인트의 스케일 값은 수정하지 말고, Bone tool에서 사이즈를 조절해야 함.

 

 - 연출파트에 문제점을 전달하고, Bone Scale Reset 방법 전달 및 스크립트 제작 배포


추가 및 개선 사항

 

- MAX가 아닌 UE5에서 Bone의 Scale 값을 1로 수정 할려고 하니, XYZ축의 Scale값중 하나를 수정 하면, 다른 두 축의 값이 따라 변하기 때문에 수정 할 수 없는 상황이 발생함.

- 결국 MAX에서 작업할 수 밖에 없음.

 

- 3DS MAX에서 Bone Tools를 이용하여 Scale 값을 모두 초기화 시킬 수 있음.

Animation > Bone Properies

 - Reset Stretch와 Reset Scale 버튼을 클릭하면 되는데, 이것저것 한 번에 하려고, 많은 Bone을 선택 시, 버튼들이 활성화가 되지 않을 수 있는데, Bone On 버튼을 한번 해제하면 활성화가 됨.

 - Freeze Length와 Auto-Align 체크 해제 후, Reset 버튼 클릭하는 순서.


 - Bone Scale Reset Script

  > Root Bone이나 원하는 Bone 선택 후, "RescaleBone" 버튼 클릭.

RescaleBone.ms
0.00MB


Script Code

 

 

try( destroydialog RescaleBone_rollout )catch()


rollout RescaleBone_rollout "RescaleBone"
(
fn collectChildrenObjs  &objs  Obj   =
(
if objs.count == 0 do
append objs obj

c = obj.children
if c.count == 0 do return undefined
for i in c do
(
append objs  i
collectChildrenObjs  &objs  i
)
)


pickbutton RootBone_pb "pick RootBone"

on RootBone_pb picked val do
(
objs =#()
RootObj = val
collectChildrenObjs  &objs  RootObj

for i in objs do
i.scale = [1,1,1]
)
)

createdialog RescaleBone_rollout


 

'Unreal > TA&Development' 카테고리의 다른 글

[UE5][BP] Actor Moving, Action Mapping, Timeline  (0) 2024.04.09
[UE5][BP] Change Material  (0) 2024.04.09
[최적화] RenderDoc 활성화  (1) 2024.03.27
[UE4] Near clip plane  (0) 2021.11.29
[UE4] CineCamera에서 Eyelash 문제  (0) 2021.10.28