앱에서 3D 모델 맞춤설정

해당 XR 기기
이 안내는 이러한 유형의 XR 기기용 환경을 구축하는 데 도움이 됩니다.
XR 헤드셋
유선 XR 안경

앱에 3D 모델을 추가한 후 맞춤 소재 속성을 정의하고 텍스처를 객체에 적용하여 시각적 환경을 개선할 수 있습니다. Jetpack XR의 재질 시스템은 glTF™ 2.0 사양을 기반으로 하며 3D 모델은 물리 기반 렌더링 (PBR)을 사용하여 렌더링됩니다. 이러한 표준은 Khronos Group에서 유지 관리하는 개방형 표준입니다.

런타임 중에 재질 속성을 조정하여 사용자 입력 또는 앱의 현재 상태에 따라 객체의 모양을 동적으로 변경할 수 있습니다.

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

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

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

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

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 = 0.0f
    )
)

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

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

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

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

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

적절한 디렉터리에 파일을 저장한 후 Texture API를 사용하여 텍스처를 만듭니다. 필요한 경우 선택사항인 TextureSampler를 적용하는 곳이기도 합니다.

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

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

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

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

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

gltfModelEntity.setMaterialOverride(
    material = pbrMaterial,
    nodeName = "Node Name"
)

새로 생성된 자료를 삭제하려면 GltfModelEntity에서 이전에 재정의된 노드에서 clearMaterialOverride를 호출합니다. 이렇게 하면 3D 모델이 기본 상태로 돌아갑니다.

gltfModelEntity.clearMaterialOverride(
    nodeName = "Node Name"
)


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