본문 바로가기
공허의 유산/표현의 자유

Unity GLTF Utility를 이용한 모델 데이터 로딩

by 바른생활머시마 2023. 7. 19.
728x90
반응형

Unity에서 뭐 좀 해보려면 이쁜 데이터들이 많이 필요하고, 또 데이터를 입맛에 맞게 수정 할 수 있게 하려다보면 Runtime에 파일을 로딩하는 방법도 필요합니다. 그런 여러가지 길고 복잡한 업무들 속에서 공통적으로 GLTF를 읽을 수 있는 기술의 필요성이 커지고 있는 바, 검색은 여러번 해보았지만 실제로 어떤 것이 가장 좋은 방법일까 고민만 하기 일쑤...

 

일단 뭐라도 한번 해보자는 마음으로 고고씽!!!

 

 

샘플 GLTF

 

크로노스 그룹의 GLTF 저장소에서 많은 샘플을 제공하고 있네요.

https://github.com/KhronosGroup/glTF-Sample-Models/tree/master

 

GitHub - KhronosGroup/glTF-Sample-Models: glTF Sample Models

glTF Sample Models. Contribute to KhronosGroup/glTF-Sample-Models development by creating an account on GitHub.

github.com

저는 러버덕을 한번 해보도록 하겠습니다.

샘플 데이터를 보면 여러가지 GLTF의 Feature들을 검토 해 볼 수 있는데, 저의 경우, Runtime에 모델을 로딩하거나 혹은 그 텍스쳐를 변경해 볼 필요가 있어 Single texture 샘플을 고른 것입니다. 유형들 중, 바이너리 포멧을 받았습니다.

그런데, 아래쪽 라이센스 문구가 조금 무섭게 적혀 있네요. 별 뜻은 없겠지만..

혹시나 해서 살펴보니 이걸로 저한테 특별한 권리가 있다고 주장하는 짓만 하지 않으면 되겠네요.

 

3. No Right to File for Patent.

In exchange for the rights that are granted to You free of charge under this License, You agree that You will not file for any patent application, seek copyright protection or take any other action that might otherwise impair the ownership rights in and to the Software that may belong to SCEA or any of the other contributors/authors of the Software.

 

요건 받아서 Unity 프로젝트와 관계가 별로 없는 엄한 곳에 둡니다.(파일 로딩 테스트니까 경로만 주면 되는지 확인하기 위해서...)

 

GLTFUtility 설치

GLTFUtility를 사용 할 것인데, 이 코드의 github 저장소는 아래와 같습니다.

https://github.com/Siccity/GLTFUtility

 

GitHub - Siccity/GLTFUtility: Simple GLTF importer for Unity

Simple GLTF importer for Unity. Contribute to Siccity/GLTFUtility development by creating an account on GitHub.

github.com

 

다음으로 Unity Project/ Scene을 하나 만들고, 패키지 매니져를 실행하여 GLTFUtility를 설치하는데, 저 git 저장소 URL을 등록하여 Package Manager에서 바로 설치 할 수 있습니다. 유틸리티의 Readme 중 Installation에 내용이 있습니다만, URL도 여기서 확인 가능합니다. URL을 넣으면 자동으로 프로젝트에 설치가 됩니다.

 

 

Unity Sample 구성

초간단하게 한번 구성 해 봅니다.

카메라 위치나 배율 등을 확인하기 위한 Cube 하나를 설치하고, 원점에 GLTF 관련 처리를 할 GLTF_Sample이라는 GameObject를 만든 후, 여기에 파일을 읽는 스크립트를 추가 합니다. 

 그리고, 실행을 위해 UI를 만드록 버튼도 하나 추가한 후, 이 버튼에 GLTF_Sample에 설정한 스크립트의 함수 중, GLTF를 로딩하는 함수를 연결 해 둡니다

이 스크립트는 지금은 별로 할 일이 없고, 버튼을 누르면 호출되어 로딩을 한 후, 그 결과물인 GameObject를 this의 자녀로 설정합니다.

 

프로젝트에 대해서 좀 더 자세히 알아보자면,,다 완성 된 상태의 프로젝트는 대충 이렇습니다.

 

추가 된 코드는 다음과 같습니다.(데이터가 큰 경우를 대비하여 동기식/비동기식 로딩 코드를 GLTFUtility의 Readme에 적어뒀네요. 저는 데이터가 작으니 동기식으로)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// Single thread
using Siccity.GLTFUtility;

public class GLTFImporter : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    public void LoadGLTF()
    {
        string file_path = "C:\\Study\\GLTF_Samples\\Duck.glb";
        GameObject result = Importer.LoadFromFile(file_path);

        result.transform.SetParent(this.transform);
    }

}

 

결과는 아래와 같이 간단하지만 깔끔하게 딱!!!

 

 

728x90
반응형

댓글