3D 애셋 가져오기 및 미리보기

3D 모델을 가져오고, 장면 형식으로 변환하고, Android 스튜디오에서 미리 보는 방법을 알아봅니다.

새 3D 애셋 가져오기

장면 양식은 3D 애셋을 다음 형식으로 지원합니다.

  • OBJ
  • glTF (애니메이션 지원되지 않음)
  • EMM을 사용하거나 사용하지 않을 수 있습니다.

새 3D 애셋을 가져오려면 다음 단계를 따르세요.

  1. 프로젝트의 app 폴더에 sampledata 폴더가 포함되어 있는지 확인합니다.

    폴더를 만들려면 Project 창의 app 폴더를 마우스 오른쪽 버튼으로 클릭한 후 New > Sample Data Directory를 선택합니다.

    sampledata 폴더는 Android 스튜디오 프로젝트의 일부이지만, 해당 콘텐츠는 APK에 포함되지 않습니다.

  2. 3D 모델 소스 애셋 파일(*.obj, *.fbx 또는 *.gltf)과 모든 종속 항목(*.mtl, *.bin, *.png, *.jpg 등)을 sampledata 폴더에 복사합니다.

    이러한 소스 파일을 프로젝트의 assets 또는 res 폴더에 복사하지 마세요. APK에 불필요하게 포함될 수 있습니다.

  3. 3D 모델 소스 애셋을 마우스 오른쪽 버튼으로 클릭하고 장면 애셋 가져오기를 선택하여 가져오기 프로세스를 시작합니다.

    이 값은 build.gradlesceneform.asset() 항목에서 사용하고 프로젝트에서 *.sfa*.sfb 파일이 생성되는 위치를 결정합니다.

    모델을 처음으로 가져오는 경우 기본값을 사용합니다.

    필드 설명
    소스 애셋 경로 가져올 OBJ, AOSP 또는 glTF 3D 모델 애셋의 파일 이름입니다.
    머티리얼 경로 default는 기본 제공 기본 머티리얼 또는 맞춤 머티리얼 *.mat 파일의 경로를 사용하도록 장면에 지시합니다.
    .sfa 출력 경로 기본값을 사용하거나 sampledata 폴더 아래에 다른 경로를 지정합니다.

    누락된 경우 .sfa 파일이 생성됩니다. 가져오기 프로세스의 일부 측면을 제어하도록 수정할 수 있습니다.

    이렇게 하면 *.sfa이 APK에 불필요하게 포함되지 않습니다.

    .sfb 출력 경로 기본적으로 src/main/assets/ 폴더를 사용하여 임의의 애셋 파일 이름을 사용할 수 있습니다.

    파일 확장자가 없는 파일 이름이 유효한 리소스 식별자(예: R.raw.filename)라면 대신 src/main/res/raw/ 폴더를 사용할 수 있습니다.

    앱에서 assets/ 폴더와 res/ 폴더를 사용하는 방법에 관한 자세한 내용은 Android의 앱 리소스 개요를 참고하세요.

    애니메이션 파일

    *.fbx 애니메이션 파일을 가져오는 경우 더하기 기호 (+)를 클릭하고 나머지 파일을 개별적으로 추가합니다.

  4. 마침을 클릭하여 가져오기 프로세스를 시작합니다.

애셋을 가져오기 위해 플러그인은 다음 작업을 실행합니다.

  1. Lifecycleform Gradle 플러그인이 project build.gradle에 아직 없다면 이를 추가합니다.

    dependencies {
        …
        classpath 'com.google.ar.sceneform:plugin:1.15.0'
    }
    
  2. appbuild.gradle 파일을 새로 가져온 애셋에 대한 apply plugin 줄과 sceneform.asset() 항목을 포함하도록 업데이트합니다.

    apply plugin: 'com.google.ar.sceneform.plugin'
    
    sceneform.asset('sampledata/models/andy.obj', // 'Source Asset Path' specified during import.
            'default',                            // 'Material Path' specified during import.
            'sampledata/models/andy.sfa',         // '.sfa Output Path' specified during import.
            'src/main/res/raw/andy')              // '.sfb Output Path' specified during import.
    

    app build.gradle에 다음과 같은 새 항목이 있으면 두 개의 Gradle 작업이 생성됩니다.

    • createAsset-<asset-name>는 장면 애셋 정의(*.sfa) 파일이 아직 없으면 만듭니다.

      이 작업은 기존 *.sfa 파일을 덮어쓰지 않습니다. 즉, 가져오기 후에 수정한 내용을 덮어쓰지 않습니다.

      *.sfa 파일은 사람이 읽을 수 있는 완전한 애셋 가져오기 설정에 대한 설명이 포함된 텍스트 파일입니다. 이는 소스 애셋의 모델과 질감을 참조하며, 장면의 물리적 기반 머티리얼에 머티리얼 매개변수를 제공하여 머티리얼을 정의합니다.

    • compileAsset-<asset-name>*.sfa 파일을 장면 바이너리 바이너리(*.sfb) 파일로 컴파일합니다.

      *.sfb 파일은 앱의 APK에 빌드되며 런타임에 로드되어 렌더러를 생성합니다.

    자세한 내용은 장면 Gradle 플러그인 참조를 확인하세요.

  3. 텍스트 창에서 *.sfa을, 뷰어 창에서 *.sfb을 엽니다.

이전에 가져온 3D 애셋 업데이트

이전에 가져온 OBJ, AOSP 또는 glTF 모델 소스 애셋 파일(*.obj, *.fbx 또는 *.gltf)을 업데이트하면, build.gradle*.sfb build.gradle의 상응하는 sceneform.asset() 항목으로 인해 플러그인이 현재 *.sfa 매개변수에 따라 업데이트된 *.sfb 파일을 자동으로 생성합니다.

이미 가져온 애셋의 매개변수를 반복하는 방법은 다음과 같습니다.

  • SFA 파일 형식 참조를 가이드로 사용하여 *.sfa 텍스트 파일을 수정합니다.
  • 변경사항을 저장합니다. 그러면 애셋이 다시 컴파일되고 *.sfb 파일이 업데이트됩니다.
  • *.sfb 파일을 더블클릭하여 애셋 뷰어 창을 열어 업데이트된 애셋을 미리 봅니다.

애니메이션 데이터를 포함하는 이전에 가져온 애셋을 업데이트하는 경우 가져오기 대화상자의 애니메이션 파일 섹션에서 더하기 (+) 기호를 사용하여 업데이트된 각 *.fbx 파일을 개별적으로 가져옵니다.

Gradle 애셋 정의

가져오기 프로세스는 build.gradle 파일 끝에 *.fbx 애니메이션 파일을 추가합니다.

sceneform.asset('sampledata/models/andy_dance.fbx',
'default',
'sampledata/models/andy_dance.sfa',
'src/main/res/raw/andy_dance',
['sampledata/models/andy_wave_r.fbx',
'sampledata/models/andy_wave_l.fbx'])

렌더러 만들기

애셋이 *.sfb 형식으로 컴파일되면 다음과 같이 ModelRenderable를 빌드하여 장면의 노드에 연결할 수 있습니다.

ModelRenderable.builder()
    // To load as an asset from the 'assets' folder ('src/main/assets/andy.sfb'):
    .setSource(this, Uri.parse("andy.sfb"))

    // Instead, load as a resource from the 'res/raw' folder ('src/main/res/raw/andy.sfb'):
    //.setSource(this, R.raw.andy)

    .build()
    .thenAccept(renderable -> andyRenderable = renderable)
    .exceptionally(
        throwable -> {
          Log.e(TAG, "Unable to load Renderable.", throwable);
          return null;
    });

맞춤 소재 사용

장면 양식의 기본 자료를 사용하면 개발자가 멋진 결과를 쉽게 얻을 수 있습니다. 커스텀 머티리얼을 사용하여 애셋이 표시되는 방식을 세부적으로 맞춤설정할 수도 있습니다.

애셋에 맞춤 자료를 할당하려면 다음 단계를 따르세요.

  1. [맞춤 머티리얼 참조](/sceneform/develop/custom-material)를 가이드로 사용하여 맞춤 머티리얼 정의(*.mat) 파일을 만듭니다.

  2. 다음과 같이 애셋에 맞춤 자료를 적용합니다.

    새 애셋을 가져오는 경우:

    이전에 가져온 애셋을 업데이트하는 방법:

    • *.sfa 콘텐츠가 맞춤설정되지 않은 경우 기존 *.sfa*.sfb 파일과 build.gradlesceneform.asset() 항목을 삭제한 다음 애셋을 다시 가져옵니다. 이렇게 하면 재생성된 *.sfa 속성 및 머티리얼 매개변수가 맞춤 머티리얼에서 지원하는 매개변수와 일치하게 됩니다.

    • 적용한 *.sfa 맞춤설정을 유지하려면 *.sfa 파일을 열고 source 속성을 맞춤 머티리얼 *.mat 파일의 경로로 변경한 다음 맞춤 머티리얼과 일치하도록 *.sfa 속성 및 머티리얼 매개변수를 수동으로 조정합니다.