Unity/Unity Industrial

[Pixyz] Pixyz Python Scripting GLTF Vertex color 및 format 관련 정리

pnltoen 2024. 9. 17.
반응형

서론

이전에 작성한 [Pixyz] Pixyz SDK 소개 및 Python을 통한 AI 기능 활용하기 (TripoSR) 글을 작성하던 중 잘못 이해한 부분을 다음과 같이 남깁니다. 

 

[Pixyz] Pixyz SDK 소개 및 Python을 통한 AI 기능 활용하기 (TripoSR)

Pixyz SDKUnity Technologies서론지난 포스팅 [Pixyz] Pixyz SDK 소개 및 설치 방법에서 Pixyz SDK가 무엇인지 그리고 어떻게 설치 및 set up 하는지에 대해 알아보았습니다. 블로그에 Pixyz 기능 사용과 관련하여

pnltoen.tistory.com

 

UV (Pixyz Studio 2022) BakeUV  (Pixyz Studio 2024) Transfer UV

유니티는 기본적으로 Vertex Color를 이용한 방식을 지원하지 않습니다.

따라서 Material 대신 vertex color가 들어간 오브젝트를 표현하기 위해서는 gltFast를 사용해야 합니다.

 

Unity glTFast Documentation | Unity glTFast | 5.2.0

Unity glTFast Documentation Unity glTFast enables use of glTF™ (GL Transmission Format) asset files in Unity. It focuses on speed, memory efficiency and a small build footprint while also providing: 100% glTF 2.0 specification compliance Ease of use Robu

docs.unity3d.com

 

이 부분을 자세하게 확인해보면 아래와 같이 색상은 표현되지만 할당된 메테리얼은 없는 것을 확인할 수 있습니다.

 

 

따라서 바로 유니티에서 불러오게 되면 Vertex Color가 표현되지 않습니다.

 

 

TripoSR의 경우 bake texture 기능을 지원합니다.

parser.add_argument(
    "--bake-texture",
    action="store_true",
    help="Bake a texture atlas for the extracted mesh, instead of vertex colors",
)

 

 

이 기능을 사용하면 다음과 같이 표면의 polygone이 비정상적으로 생성되는 것을 확인할 수 있습니다.

 

 

이전 포스팅에서는 repair 기능을 사용하였지만 당시에는 repair가 작동하지 않아서 retopology 기능을 사용해보았습니다.

root = [scene.getRoot()]
a = scene.getPolygonCount(root, False, False, False)
print(a)
algo.retopologize(root, a, True, False, -1)

 

retopology를 하면 하이어리키가 분리되서 최상단에 나오게됩니다. 하이어리키 정리를 하려고 아래 함수를 찾았었는데 해당 부분은 retopology를 한다면 필요가 없는 것으로 생각됩니다.

 

root = scene.getRoot()
default = scene.findOccurrencesByProperty('Name', 'default')
scene.moveOccurrences(default, root)
scene.deleteEmptyOccurrences(root)

 

이 후 원래 오브젝트가 갖고 있는 UV 맵을 복사 및 붙여넣기 해야 합니다.Pixyz Studio 2022의 경우 bakeUV를 현재 베타인 Pixyz Studio 2024의 경우 transferUV API를 사용할 수 있습니다. 받는 인자는 같습니다.

 

결과적으로 Pixyz Studio 2022에서는 UV 맵이 정상적이지 않게 복사 되었습니다. 이는 같은 polygon 수로 retopology를 해도 똑같이 작동하지 않았습니다 (좌) 원본 UV, (우) BakeUV

 

Pixyz Studio 2024의 경우 다음과 같이 transferUV를 사용하면 Should not happen이 발생하였습니다.

 

결과적으로 다음과 같이 UV가 꼬인 상태가 됩니다. Pixyz Studio에서 UV를 생성하여도 해당 문제는 해결되지 않았습니다.

이 부분은 자동화와 무색하게 별도의 UV를 만들어야 하는 것으로 생각됨으로 넘기고 진행하도록 하겠습니다.

 

마찬가지로 Vertex Color를 사용하는 gltf 포맷과는 달리 --bake-texture시 decimated로 꼬이는 UV도 고려해야 하기 때문에 decimate에 제약이 생기게 됩니다.

 

 

결론

눈으로 볼 때는 같은 모델이지만 usd, gltf, fbx, step 등 포맷에 따라 실제 오브젝트의 작동 방식 또는 다루는 방법은 다를 수 있습니다. 따라서 작업 전 사용하고 계신 포맷 그리고 같은 gltf여도 메테리얼로 렌더링이 되는지 메테리얼이 할당되어 있는지 확인해보는 습관이 필요합니다.

반응형

댓글