연말이 되니 여기 저기서 저마다 성과를 자랑(?)하기 위해 난리입니다. 기업들은 특히 더 그렇죠.
재작년에 메타버스 바람이 불었고, 그 덕분에 우후죽순 시작했던 메타버스들은 아마도 지금 추운 겨울을 맞이하고 있을 것입니다. 메타버스가 그다지 붐이 불 상황이 아닌데 막 붐이 일었죠. 포털에서 '메타버스 출시'라는 키워드로 검색 해 보면 그 상황을 잘 볼 수 있습니다.
외국의 사정은 조금 다른 것 같아요. 메타버스를 서비스로써 막 시도하는 것이 아니라 표준화 작업을 하고 있는 것 같아요.
특히, Metaverse Standrard Forum에 특별한 관심이 가는데, OpenGL을 이끌었던 Khronos Group이 주도하고 있다는 점 때문에 개인적인 애정(?)도 많이 가고, 실제로 다른 표준 단체들보다 실질적인 활동과 산업적인 활용 측면에서 실질적인 사례 중심으로 접근을 한다는 점도 매력적인 것 같습니다.
https://metaverse-standards.org/
이런 표준들을 살펴보다 보면, 메타버스가 무엇인가에 대해서 좀 더 통찰(?) 같은 것이 생기는 것 같습니다. 우리가 GMarket이나 Youtube 같은 웹 기반으로 서비스 하는 사이트를 웹 서비스라고 하지 웹이라고 하지 않듯, 메타버스와 메타버스 기반(혹은 메타버스 스타일) 서비스를 구별해야 되겠습니다. 그래야, 메타버스가 억울한 오명을 쓰지 않을테니까요.
아래 그림은 MSF에서 관심있게 다루는 주제 중 하나인 교환 포멧에 대한 내용입니다.
여러 포메들 중, USB와 glTF를 표준에서 사용 할 포멧으로 검토 진행 중에 있습니다 USD는 Scene을 표현하는 쪽에, glTF는 오브젝트를 표현하는 쪽에 비중을 두고 있고, 공통적인 속성을 통일하기 위한 논의를 해 나가고 있는 것 같습니다.
glTF는 OpenGL 관련 된 일을 하면서 이전부터 그 존재를 잘 알았지만, USD는 개인적으로 매우 생소한 포멧이었습니다. PIxal에서 만들었다고 하고... 이 포멧도 범용적인 목적으로 쓰게 되면서 오픈소스 프로젝트로 진행이 되고 있습니다.
https://openusd.org/release/index.html
전에 glTF를 Unity에서 로딩하는 포스트를 한 번 쓴 적이 있으니, 겸사 겸사 USD 로딩도 한번 해보겠습니다.
https://learn-and-give.tistory.com/124
샘플 파일
OpenUSD의 아래 페이지의 아래쪽에 있는 부엌 데이터를 받겠습니다.
https://openusd.org/release/dl_downloads.html
사용 조건에 동의를 한 후 다운로드 받게 됩니다.
Unity 쪽 준비
Unity Project를 하나 만들겠습니다.
USD는 Experimental package를 이용하여 다룰 수 있습니다.
https://docs.unity3d.com/Packages/com.unity.formats.usd@3.0/manual/index.html
일단 프로젝트가 만들어지면 프로젝트 셋팅에서 두 가지 설정을 변경 해 줍니다.
패키지 설명 된 페이지 내용을 찬찬히 읽어보면서 하면 됩니다.
그 아래 나오는 내용처럼, Package Manager에서 Package 배포처를 설정하는데, 저는 git URL을 입력해서 설치하겠습니다.
https://github.com/Unity-Technologies/usd-unity-sdk.git?path=package/com.unity.formats.usd
아래와 같이 설치가 되었습니다.
Project 폴더의 Package에도 USD 폴더가 보이고,
메뉴에도 USD가 보입니다.
메뉴에서 USD를 눌러보면 GameObject, Prefab, Timeline Clip 으로 가져 올 수 있습니다.
GameObject로 한번 가져와 보겠습니다.
다운로드 받은 파일에서 instanced 말고 다른 것을 한번 가져와 보겠습니다.
음...아무것도 보이지 않네요. ㅋ
instance도 마찬가지고...
Package 내부에 포함 되어 있던 샘플을 한번 로딩 해 보니 잘 보이네요.
\Library\PackageCache\cohttp://m.unity.formats.usd@fc4f7b10a7\Samples\ImportMesh
로딩이 된 GameObject를 선택하면 Inspector에 다양한 속성이 보입니다.
일단 GameObject가 되고 나면 그 다음엔 UnityPackage 등으로 Export도 할 수 있으니, Unity 기반의 사용에는 별 문제가 없을 것입니다.
Runtime에 임의 위치에 있는 USD를 로딩하는 것은, 저 메뉴에 연결 된 코드를 따라서 해보면 되는데...
대충 아래와 같은 형태로 코드를 짜면 런타임에도 로딩을 할 수 있었습니다.
매뉴의 코드를 보면 using...요런게 있는데 적당한 것을 추가해야 하고, 자동으로 안되면 같은걸로 해주면 됩니다.
public void LoadUSDFile()
{
if (Application.isPlaying)
{
var path = (USD 파일 경로);
var loadSet = pxr.UsdStage.InitialLoadSet.LoadAll;
InitUsd.Initialize();
var stage = pxr.UsdStage.Open(path, loadSet);
var scene = Scene.Open(stage);
if (scene == null)
{
Debug.Log("No Scene");
return;
}
ImportHelpers.ImportSceneAsGameObject(scene, Selection.activeGameObject);
scene.Close();
}
else
Debug.Log("Not Playing");
}
아래와 같이 UI에 버튼을 달아서 버튼을 누르면 파일을 로딩 할 수도 있습니다.
매뉴에 사용하는 코드를 다른 목적으로 전용했기 때문에, 속성 설정 관련 코드는 없기 때문에 요런 부분은 에디터에서 설정을 변경 해 보면서 로딩 할 때 조건을 바꿔 볼 수 있을 것 같습니다.
USD package에 샘플 프로젝트나 파일들이 있으니, 그것을 살펴보면서 공부를 해보면 좋을 것 같네요.
일단 퀵~ 하게 되는지는 요렇게 알아보았습니다.
'공허의 유산 > 표현의 자유' 카테고리의 다른 글
UNITY APAC INDUSTRY SUMMIT 2023 참관 후기 (1) | 2023.10.13 |
---|---|
Easy Diffusion 간보기 - 2. 이미지 변환 (0) | 2023.09.21 |
Easy Diffusion 간보기 - 1. 설치 (0) | 2023.09.21 |
Unity GLTF Utility를 이용한 모델 데이터 로딩 (0) | 2023.07.19 |
[심심풀이] 하늘의 왕자 스카웃!(2) (0) | 2023.07.17 |
댓글