3D 모델을 가져오고, 장면 형식으로 변환하고, Android 스튜디오에서 미리 보는 방법을 알아봅니다.
새 3D 애셋 가져오기
장면 양식은 3D 애셋을 다음 형식으로 지원합니다.
- OBJ
- glTF (애니메이션 지원되지 않음)
- EMM을 사용하거나 사용하지 않을 수 있습니다.
새 3D 애셋을 가져오려면 다음 단계를 따르세요.
프로젝트의
app
폴더에sampledata
폴더가 포함되어 있는지 확인합니다.폴더를 만들려면 Project 창의
app
폴더를 마우스 오른쪽 버튼으로 클릭한 후 New > Sample Data Directory를 선택합니다.sampledata
폴더는 Android 스튜디오 프로젝트의 일부이지만, 해당 콘텐츠는 APK에 포함되지 않습니다.3D 모델 소스 애셋 파일(
*.obj
,*.fbx
또는*.gltf
)과 모든 종속 항목(*.mtl
,*.bin
,*.png
,*.jpg
등)을sampledata
폴더에 복사합니다.이러한 소스 파일을 프로젝트의
assets
또는res
폴더에 복사하지 마세요. APK에 불필요하게 포함될 수 있습니다.3D 모델 소스 애셋을 마우스 오른쪽 버튼으로 클릭하고 장면 애셋 가져오기를 선택하여 가져오기 프로세스를 시작합니다.
이 값은 앱
build.gradle
의sceneform.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
애니메이션 파일을 가져오는 경우 더하기 기호 (+)를 클릭하고 나머지 파일을 개별적으로 추가합니다.마침을 클릭하여 가져오기 프로세스를 시작합니다.
애셋을 가져오기 위해 플러그인은 다음 작업을 실행합니다.
Lifecycleform Gradle 플러그인이 project
build.gradle
에 아직 없다면 이를 추가합니다.dependencies { … classpath 'com.google.ar.sceneform:plugin:1.15.0' }
app
build.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 플러그인 참조를 확인하세요.
텍스트 창에서
*.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;
});
맞춤 소재 사용
장면 양식의 기본 자료를 사용하면 개발자가 멋진 결과를 쉽게 얻을 수 있습니다. 커스텀 머티리얼을 사용하여 애셋이 표시되는 방식을 세부적으로 맞춤설정할 수도 있습니다.
애셋에 맞춤 자료를 할당하려면 다음 단계를 따르세요.
[맞춤 머티리얼 참조](/sceneform/develop/custom-material)를 가이드로 사용하여 맞춤 머티리얼 정의(
*.mat
) 파일을 만듭니다.다음과 같이 애셋에 맞춤 자료를 적용합니다.
새 애셋을 가져오는 경우:
- 가져오기 프로세스 중에 맞춤 머티리얼
*.mat
파일을 지정합니다.
이전에 가져온 애셋을 업데이트하는 방법:
- 가져오기 프로세스 중에 맞춤 머티리얼