반응형

 

 

 

 

 

GitHub - realnity09/SpriteMeshGen

Contribute to realnity09/SpriteMeshGen development by creating an account on GitHub.

github.com

 

스프라이트의 Custom outline이나 Custom physics shape 정보를 바탕으로 Mesh를 생성하는 커스텀 에디터다.

렌더링 되는 에셋들은 2D지만 3D물리를 사용해야해서 만들게 되었다.

※ Mesh collider에 사용할 메쉬 데이터이기 때문에 uv 설정은 따로 하지 않았다.

 

 

 

에디터 경로

패키지를 임포트한 뒤, CustomMeshMesh generator를 클릭하면 Mesh generator 창이 열리는것을 확인할 수 있다.

 

 

에디터 설명

1. Target save path : Generate한 메쉬가 저장될 디렉토리를 설정한다.

2. Target sprite : 메쉬로 Generate할 스프라이트를 선택한다. (스프라이트를 선택해야 하단 설정이 활성화 된다.)

3. Target vertices

   - Physics shape : Custom physics shape 정점을 바탕으로 메쉬를 Generate한다.

   - Out line : Custom outline 정점을 바탕으로 메쉬를 Generate한다.

4. Thickness : 메쉬의 두께(Z축)의 수치이다.

5. Generate : 메쉬를 생성한다.

※ 스프라이트의 정점 정보를 수정했을 때, 기존 메쉬를 지웠다가 재생성 할 필요 없이 Generate 해주면 메쉬를 변경한 정점 정보 대상으로 업데이트 해준다.

※ 메쉬를 업데이트 했을 시, Scene에 적용되어있는 메쉬가 업데이트 전의 메쉬로 보일텐데 이건 해당 Scene에서 갱신이 안되서 그렇지 업데이트가 되지 않은것이 아니다. (Play 모드를 해주거나 Scene을 다시 열면 업데이트 된 메쉬로 확인이 가능하다.)

 

 

 

스프라이트 에디터

- 스프라이트 에디터에 대해서 잘 모른다면 다음 메뉴얼 참고

 

스프라이트 에디터 - Unity 매뉴얼

스프라이트 텍스처에 단 하나의 그래픽 요소만 있는 경우가 있으나 관련된 여러 그래픽스를 하나의 이미지로 합치는 게 더욱 편리할 때가 많습니다. 예를 들어 바퀴가 차체와는 독립적으로 움

docs.unity3d.com

 

- Physics shape로 메쉬를 생성하려 할 시, 스프라이트 에디터에서 좌측 상단 드롭다운 메뉴를 클릭한 뒤, Custom physics shape을 선택한다.

- Outline으로 메쉬를 생성하려 할 시, 스프라이트 에디터에서 좌측 상단 드롭다운 메뉴를 클릭한 뒤, Custom Oueline을 선택한다.

※ 정점을 배치한 뒤 반드시 우측 상단의 Apply를 눌러서 저장해야 정상적으로 메쉬가 Generate된다.

 

 

 

주의사항

- 스프라이트 에디터에서 Custom physics shape로 정점 생성 후, 메쉬를 Generate하면 메쉬가 비정상적인 모양으로 생성될 때가 있다. (Custom physics shape은 triangle 정보가 없기 때문에...)

※ Outline은 정점 위치 상관 없이 정상적으로 생성된다.

- 렌더링쪽 지식이 조금이라도 있으면 제대로 나오게 정점 위치를 수정할 수 있겠지만, 만약 지식이 없는 사람은 정상적으로 모양이 나올때까지 정점들 위치를 시계방향으로 한칸씩 돌려서 Generate하면 된다.

 

 

 

 

 

 

반응형
반응형

 

 

 

 

URP 프로젝트에서 Unity chan 모델을 사용하여 간단한 조작을 할 수 있는 게임을 만든후 빌드, 앱을 실행해봤는데 실행하자마자 앱 크래시가 발생했다.

 

로그캣을 확인해 보니 다음과 같은 크래시 로그를 확인할 수 있었다.

05-13 10:35:14.027 26023 26045 E CRASH   : #00 pc 000000000046afa8  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #01 pc 0000000000abbdec  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #02 pc 0000000000abbfec  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #03 pc 0000000000abbf6c  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #04 pc 00000000005cd30c  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #05 pc 00000000005cfd5c  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #06 pc 00000000004a6330  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #07 pc 00000000004a7138  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #08 pc 00000000004a7d4c  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #09 pc 00000000004a8934  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #10 pc 0000000000601904  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #11 pc 0000000000615cd4  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #12 pc 000000000000430c  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/oat/arm64/base.odex

뭔지는 자세히 모르겠지만 libunity.so가 눈에 띄고, 유니티짱 모델의 툰 쉐이더가 Experimental이라 너무 의심이 가서 1차로 유니티짱의 모델을 빼고 실행해보니 정상적으로 실행이 된다.

그리고 libunity.so 관련 크래시에 대해서 찾아보니 Vulkan 그래픽스 API 때문에 발생하는 에러라고 한다.

(다른 사람들은 Admob과 Firebase하고 그래픽스 API가 충돌된다고 하는데 쉐이더는 둘째치고 이런 서드파티 SDK가 충돌나는건 왜그런지 모르겠다..)

 

 

 

해결방법

1. EditProject SettingsPlayerOther SettingsRendering 카테고리에서 Auto Graphics API를 해제한다.

2. 해제를 하게되면 Graphics APIs를 설정할 수 있게 되는데, Default로 Vulkan, OpenGLES3 순서로 설정되어 있을 것이다.

3. 이 순서를 OpenGLES3, Vulkan 순서로 변경하거나 Vulkan을 삭제한다.

 

이렇게 변경한 뒤, 빌드해서 실행하면 안드로이드에서 문제없이 실행이 가능하다.

 

 

 

 

 

반응형
반응형

 

 

 

 

언리얼에서 VRM 아바타의 Spring bone을 애니메이션 블루프린트에서 사용할 수 있는데, 방법은 아래와 같다.

VrmSpringBone이라는 노드를 연결해서 Ouput Pose 노드에 연결하면 헤어라던지, 옷이라던지 Spring bone에 적용되어있는 본이 움직이는것을 확인할 수 있다.

 

하지만, 위와 같이 노드를 적용했음에도 움직이지 않으면 Spring bone 데이터가 없는것이다.

 

언리얼에서 VRM을 임포트하면 같이 생성되는 에셋 중, meta 파일이 존재할 것이다.

meta 파일을 열어보면 Rendering 카테고리에 VRMSpring Meta가 있는데 Array element를 확인해보면 0으로 표시된 것을 확인할 수 있을것이다.

VRM 아바타에 Spring bone을 사용하고 싶으면 여기에 데이터가 들어가 있어야 정상적으로 작동한다.

 

언리얼에서 Array element로 추가해줄 수도 있는거 같긴 하지만(직접 해보지는 않음), 필자는 유니티에서 작업하는게 더 수월하다고 판단하여 유니티에서의 해결방법을 서술한다.

 

 

 

해결방법

1. 유니티에서 익스포트한 VRM 에셋을 유니티로 임포트

VRM 에셋을 임포트한 뒤, 아바타의 프리팹을 씬에 로드한다.

여기서 아바타의 하이어라키를 확인해보면 Secondary게임오브젝트를 확인할 수 있다.

 

2. VRM Spring Bone 컴포넌트 설정

Secondary를 클릭한 뒤, 인스펙터창을 확인해보면 VRM Spring Bone컴포넌트를 확인할 수 있다.

해당 컴포넌트에서 Root Bones에 Spring Bone을 적용할 본의 루트를 넣어주면 된다.

※ 헤어가 움직이면서 몸통을 뚫는 현상은 Collider 카테고리를 설정해주면 된다.

 

3. 설정한 아바타를 다시 Export해준 뒤, 언리얼로 Import한다.

언리얼로 임포트한 뒤, meta 파일을 열어서 VRMSpring Meta의 데이터를 확인해준다.

위와 같이 VRMSpring Meta 항목에 Array elements에 데이터가 들어가있는 것을 확인할 수 있다.

 

+) 위와 같이 했는데도 Spring bone이 작동하지 않는 경우

애니메이션 블루프린트 파일을 열어서 VrmSpringBone노드를 클릭해서 Detail을 확인하면 Vrm Meta Object가 비어있을 수 있기 때문에 확인 후, Meta 파일을 설정해준다.

 

 

 

 

결과

 

 

 

 

 

반응형
반응형

 

 

 

 

애니메이션 리타게팅 시, 기존 애니메이션에 없었던 루트 모션이 적용되어 캐릭터가 애니메이션에 의해 움직이는 현상이 있을 수 있다.

 

 

 

원인

리타게터 파일의 Root 체인의 옵션이 제대로 설정되어 있지 않을 때, 이런 현상이 일어난다.

 

 

 

 

해결 방법

리타게터 파일을 열어서 Root 체인을 눌러서 디테일 창을 확인한다.

디테일 창에서 Translation ModeNone으로 되어있을건데, Globally Scaled로 설정해준다.

 

 

 

 

결과

위의 캐릭터가 Translation Mode가 None인 상태로 리타게팅 했을 경우, 아래 캐릭터가 Translation Mode가 Globally Scaled 상태로 리타게팅 했을 경우의 애니메이션 시퀀스이다.

 

 

 

 

 

반응형
반응형

 

 

 

 

※ 리타게터 수정 방법은 다음 포스팅 참고

 

[언리얼] VRM 리타게터 수정하기

VRM을 언리얼로 Import하면 리타게터가 자동으로 생성되지만 데이터가 일부 손실된다. 그렇기 때문에 언리얼 Third person template의 애니메이션이 정상적으로 리타게팅 되지 않는다. 위와 같이 리타게

srdeveloper.tistory.com


※ 해당 포스팅에 사용하는 Foot IK 관련 Control Rig는 기존 Third person template에 존재하는 Mannequin Control Rig를 복사해서 사용했으므로 VRM 대상으로 하는 Foot IK는 Mannequin Control Rig를 복사해서 사용하기 바람.

 

 

 

 

애니메이션을 리타게팅하여 적용했을 때, Foot IK가 적용이 되지 않아 다리가 바닥에 붙어버리는 문제가 있다.

이 문제는 리타게터에 IK 관련 체인이 설정되어 있지 않기 때문이다. Mannequin 기준으로 IK 본을 가져와 Control Rig에서 IK 조절을 하는데, 해당 본이 정상적으로 리타게팅이 되지 않았으니 바닥에 다리가 붙어버리게 된다.

 

 

 

원인

위에서 언급했다시피, 애니메이션 시퀀스파일이나 리타게터 파일을 열어서 IK 본을 한번 확인해볼 수 있다.

애니메이션 시퀀스나 리타게터 파일을 열어서 애니메이션을 실행시킨 다음, 스켈레톤 트리에서 IK_foot 관련 본을 눌러보면 위와같이 본의 실시간 위치를 확인할 수 있는데, 제자리에 고정되어 있는것을 확인할 수 있다.

이제 저 본을 체인으로 설정하여 리타게팅 시, 애니메이션에 정상적으로 적용될 수 있게 해야한다.

 

 

 

 

해결방법

1. IK Rig 파일에 체인 생성 및 리타게터 소스체인 설정

체인 생성 및 리타게터 소스체인 설정은 해당 포스팅 제일 위에 걸어놓은 링크를 확인하여 수정하면 된다.

 

2. Translation Mode 설정

리타게터에서 소스체인 설정 후, 해당 타겟 체인을 클릭해서 디테일 창을 확인해보면 Translation Mode라는 항목이 존재하는데 해당 항목으로 Absolute로 설정해 준다.

 

위와 같이 설정을 한 뒤, 리타게터에서 IK_foot 본을 확인해보면 정상적으로 본의 위치가 변경되는 것을 눈으로 확인할 수있다.

 

 

 

 

결과

 

 

 


※ 혹시나 다리의 애니메이션이 어색해보일 경우(다리를 크게 찢어서 달린다던지..), 위에서 설정했던 리타게터 창의 디테일 창에서 Translation Alpha 옵션을 조절하여 적당한 위치를 잡아주면 된다.

※ 리타게터를 수정할 수 없는 경우, 애니메이션 시퀀스의 키값을 변경하는 방법이 있는거 같은데 장기적으로 봤을 때 이런 방법은 좀 무식해보이는것 같다. 근본적 원인은 리타게터에 있으니 어지간하면 리타게터를 수정하는게 좋을것 같다.

 

애니메이션 시퀀스 키값 변경 방법은 아래 영상 참고

 

 

 

 

 

 

반응형

+ Recent posts