2023. 4. 11. 03:39ㆍ카테고리 없음
glTF(Graphics Language Transmission Format)는 3D 모델과 장면을 표현하는 데 사용되는 JSON 기반의 파일 포맷입니다.
웹 상에서 3D 그래픽을 구현하기 위해 만들어졌으며, 다양한 3D 툴과 게임 엔진에서 지원되고 있습니다.
대용량의 3D 모델과 관련된 모든 데이터를 하나의 파일에 포함시킬 수 있기 때문에, 3D 모델과 장면의 전송과 로딩을 간소화할 수 있습니다.
렌더링에 필요한 최소한의 데이터만을 포함하기 때문에, 높은 효율성과 이식성을 제공합니다. 이러한 이유로 glTF는 현대적인 웹 기술에서 3D 그래픽을 구현하기 위한 주요 포맷 중 하나입니다.
glTF가 JSON 표준에 기반하는 이유는
JSON 파일은 키-값 쌍으로 이루어져 있으며, 읽기 쉽게 읽을 수 있고, 다른 언어간 데이터 교환이 용이하기 때문에 다양한 엔진과 애필리케이션에서 사용가능하기 때문에 glTF는 3D 장면과 모델 파일 포멧으로 JSON을 사용한다.
glTF에서는 장면 그래프를 정의하는 노드 계층의 자체에 대한 설명으로 구성됩니다.
이 노드 계층은 객체의 위치, 회전, 크기 등의 변환 행렬을 포함합니다.
즉, 장면을 구성하는 모든 객체는 이 노드 계층 안에 포함되어 있으며, 그들의 위치와 방향은 이 노드 계층 안에서 정의됩니다.
노드 계층은 장면 그래프의 루트 노드로부터 시작하며, 각 노드는 하위 노드를 가질 수 있습니다.
이렇게 노드 계층을 통해 모든 객체의 위치와 방향을 정의함으로써, 장면을 구성하는 모든 객체의 상대적인 위치와 방향을 쉽게 파악할 수 있습니다. 장면에 나타나는 3D 객체는 노드에 연결된 메시(Mesh)를 사용하여 나타납니다.
메시는 정점(Vertex)과 삼각형(Triangle)을 포함하며, 이를 통해 객체의 모양을 결정합니다. 마지막으로 재질(Material)은 객체의 모양을 나타내는 데 사용됩니다.
재질(Materials)
재질(Materials)은 객체의 모양을 나타냅니다.
Materials는 표면의 물리적인 특성을 정의하며, 객체의 모양을 결정합니다. 이를 통해 색상, 반사율, 반사도, 투명도, 금속성 등을 지정할 수 있습니다. Materials는 일련의 텍스처, 셰이더, 파라미터 등으로 구성되며, 각각의 속성에 대한 세부적인 값을 설정할 수 있습니다.
Material에는 다양한 물리적인 속성이 정의되어 있고, 각 속성은 텍스처 또는 상수값을 가질 수 있으며, 셰이더를 통해 속성을 결합하여 다양한 물리적 속성을 나타낼 수 있습니다.
또한 glTF 2.0에서는 더욱 다양한 Materials를 지원하며, Material의 상태에 따라 다양한 셰이더를 사용할 수 있습니다.
![]() |
![]() |
glTF 파일은 3D 오브젝트에 대한 다양한 정보들을 JSON 파일로 기술합니다. 이 중에서도 애니메이션(Animations), 스킨(Skins), 카메라(Cameras)는 3D 모델의 변형, 모양, 시점 등을 정의하는데 중요한 역할을 합니다.
애니메이션(Animations)
애니메이션(Animations)은 시간이 지남에 따라 3D 오브젝트가 어떻게 변형되는지를 기술 합니다.
애니메이션(Animations)은 3D 오브젝트가 시간에 따라 변형하는 것을 기술합니다. 예를 들어 회전 변환을 하는 것과 같은 변형을 포함합니다. 이때, 애니메이션 정보는 다음 두 가지로 구성됩니다. 첫째는 samplers로서, 변형이 어떻게 일어나는지에 대한 세부 정보를 담고 있습니다. 둘째는 channels로서, 변형을 수행할 노드와 samplers를 연결해 줍니다.
위 예제는 JSON으로 정의된 파일에서 애니메이션을 정의하는 부분을 들고 왔는데요,, 애니메이션은 앞에서 설명했듯이 “samplers”와 “channels”라는 두 개의 객체로 구성되고, “samplers”객체는 입력(input)과 출력(output) 값의 쌍을 정의합니다. 입력 값은 시간(time)을 나타내며, 출력 값은 애니메이션이 적용될 노드의 속성 값(rotation, translation, scale)을 나타냅니다.
channels" 객체는 애니메이션의 "sampler"와 속성값의 "target" 정보를 포함합니다. 이 정보는 애니메이션이 적용될 노드의 인덱스와 속성 값의 이름(path)을 나타냅니다.
위 코드에서는, "samplers" 객체에서 입력 값이 2, 출력 값이 3인 LINEAR 방식의 애니메이션을 정의하고 있습니다. "channels" 객체에서는 이 애니메이션을 노드 0의 rotation 속성 값에 적용하도록 설정하고 있습니다. 이 코드는 노드 0의 rotation 속성 값이 시간이 지남에 따라 선형적으로 변화하는 애니메이션을 정의하는 예시입니다.
스킨(skins)
스킨(skins) 스켈레톤 포즈를 기반으로 오브젝트의 기하 정보가 어떻게 변형되는지 나타 냅니다.
glTF에서 스킨(skins)은 스켈레톤 포즈를 기반으로 모델의 기하 정보가 어떻게 변형되는지를 나타냅니다. 스킨은 메쉬에서 스켈레톤과 연결되며, 각각의 조인트에 대한 변환 정보를 가지고 있습니다.
카메라(camreas)
카메라(camreas)는 렌더러의 뷰(시점)의 구성을 기술합니다..
camera : 원근 카메라와 직교 카메라의 공통 속성을 나타냅니다.
JSON 구조
glTF에서 JSON 구조는 전체 3D 장면(scene)의 내용을 표현합니다. JSON 파일은 각 객체의 구성을 노드(node) 계층 구조로 정의하며, 노드에는 위치, 회전, 스케일 정보, 메쉬, 스킨 및 카메라 등의 속성을 포함할 수 있습니다. 또한 JSON 파일에는 재질(Materials) 정보, 애니메이션(Animations) 정보 및 기타 전역 정보 등이 포함될 수 있습니다. glTF에서 JSON 구조는 모든 3D 객체와 관련된 데이터를 표현하며, 이를 통해 외부 애플리케이션에서 이를 로드하고 렌더링할 수 있습니다.