앱에서 3D 모델 맞춤설정

적용 가능한 XR 기기
이 가이드에서는 이러한 유형의 XR 기기를 위한 환경을 빌드하는 방법을 설명합니다.
XR 헤드셋
유선 XR 글래스

앱에 3D 모델을 추가한 후 맞춤설정하여 시각적 환경과 대화형 환경을 개선할 수 있습니다. 예를 들어 삽입된 glTF 애니메이션을 재생하고 제어하며, 기본 색상이나 금속성 거칠기와 같은 맞춤 소재 속성을 정의하고, 3D 모델에 맞춤 텍스처를 적용할 수 있습니다. 이러한 기능을 사용하면 런타임에 객체의 모양과 동작을 동적으로 변경할 수 있습니다.

3D 모델 애니메이션

glTF 사양의 일부로 3D 모델에는 삽입된 애니메이션이 있을 수 있습니다. 스켈레톤 (리그), 고정, 모프 타겟 (블렌드 셰이프) 애니메이션은 모두 Jetpack XR SDK에서 지원됩니다. KHR_animation_pointer glTF 확장 프로그램으로 만든 소재 애니메이션도 지원됩니다.

애니메이션을 재생하려면 목록에서 animations 특정 트랙의 이름을 지정합니다. GltfAnimation.start()를 호출하여 재생을 시작합니다. 선택적으로 속도, 탐색 시간, 애니메이션을 루프해야 하는지 여부를 GltfAnimationStartOptions를 사용하여 지정할 수 있습니다.

val animation = gltfEntity.animations.find { it.name == "Walk" }
animation?.start(GltfAnimationStartOptions(shouldLoop = true))

애니메이션을 pause(), resume(), stop()할 수 있으며 seekTo()를 사용하여 애니메이션 트랙의 특정 시간으로 이동할 수도 있습니다. 애니메이션의 현재 상태를 쿼리하려면 GltfAnimation.AnimationState를 사용합니다.

3D 모델의 소재 속성 맞춤설정

Jetpack XR의 소재 시스템은 glTF™ 2.0 사양을 기반으로 하며 3D 모델은 물리 기반 렌더링 (PBR)을 사용하여 렌더링됩니다. 런타임에 소재 속성을 조정하여 사용자 입력 또는 앱의 현재 상태에 따라 객체의 모양을 동적으로 변경할 수 있습니다.

Material은 객체 표면의 시각적 속성 집합을 정의하고 장면에서 표면이 빛과 상호작용하는 방식을 결정합니다.

Jetpack XR에서 KhronosPbrMaterialKhronosUnlitMaterial 클래스는 이러한 소재를 만들고 조작하는 데 사용됩니다. 이름에서 알 수 있듯이 KhronosUnlitMaterials는 조명이 꺼져 있고 장면 조명의 영향을 받지 않습니다. KhronosPbrMaterial 을 사용하면 광택 색상, 객체의 금속성 또는 거칠기, 빛을 내는지 여부 등 다양한 속성을 맞춤설정할 수 있습니다.

지원되는 각 속성과 Android XR의 맞춤설정 가능한 매개변수 에 관한 자세한 내용은 참고 문서를 참고하세요. 이러한 속성을 더 잘 이해하려면 Khronos 용어집을 참고하세요.

3D 모델의 기본 색상을 변경하는 예

3D 모델의 소재 속성을 맞춤설정하려면 먼저 KhronosPbrMaterial을 사용하여 새 소재를 만듭니다. 원하는 시각적 효과에 맞게 적절한 AlphaMode를 설정해야 합니다.

val pbrMaterial = KhronosPbrMaterial.create(
    session = xrSession,
    alphaMode = AlphaMode.OPAQUE
)

다음으로 수정할 속성을 정의합니다. 이 예에서는 setBaseColorFactor를 사용하여 기본 색상을 변경합니다. 이 메서드에는 Vector4가 필요하며 여기서 x, y, z, w 구성요소는 각각 RGBA(빨간색, 녹색, 파란색, 알파) 값에 해당합니다.

pbrMaterial.setBaseColorFactor(
    Vector4(
        x = 0.5f,
        y = 0.0f,
        z = 0.5f,
        w = 1.0f
    )
)

3D 모델의 맞춤 텍스처 만들기

A Texture는 3D 모델의 표면에 적용하여 색상, 세부정보 또는 기타 표면 정보를 제공할 수 있는 이미지 애셋입니다. Jetpack XR Texture API를 사용하면 앱의 /assets/ 폴더에서 PNG 파일과 같은 이미지 데이터를 비동기적으로 로드할 수 있습니다.

텍스처를 로드할 때 텍스처가 렌더링되는 방식을 제어하는 TextureSampler를 지정할 수 있습니다. 샘플러는 필터링 속성(텍스처가 원래 크기보다 작거나 크게 표시되는 경우)과 래핑 모드(표준 [0, 1] 범위를 벗어난 좌표 처리)를 정의합니다. Texture 객체 자체는 데이터일 뿐이며 3D 모델에 시각적 효과를 적용하려면 Material에 할당해야 합니다.

3D 모델의 텍스처를 변경하는 예

맞춤 텍스처를 만들려면 먼저 이미지 파일을 /assets/ 폴더에 저장해야 합니다. 권장사항으로 해당 폴더에 textures 하위 디렉터리를 만드는 것이 좋습니다.

적절한 디렉터리에 파일을 저장한 후 API를 사용하여 텍스처를 만듭니다.Texture 필요한 경우 선택적 TextureSampler를 적용할 수도 있습니다.

val texture = Texture.create(
    session = xrSession,
    path = Path("textures/texture_file.png")
)

다음으로 텍스처 유형을 정의하고 해당 매개변수를 설정합니다. 이 예에서는 폐색 텍스처를 적용하고 강도를 설정합니다.

pbrMaterial.setOcclusionTexture(
    texture = texture,
    strength = 1.0f
)

3D 객체에 소재 및 텍스처 적용

새 소재나 텍스처를 적용하려면 glTF 노드의 특정 노드에 대한 기존 소재를 재정의하세요. GltfModelNode에서 setMaterialOverride를 호출하면 됩니다.

gltfModelNode.setMaterialOverride(
    material = pbrMaterial
)

새로 만든 소재를 삭제하려면 clearMaterialOverride을(를) 이전에 재정의된 노드에 있는 GltfModelNode에서 호출합니다. 그러면 3D 모델이 기본 상태로 돌아갑니다.

gltfModelNode.clearMaterialOverride()


glTF 및 glTF 로고는 Khronos Group Inc.의 상표입니다.