본문 바로가기
공허의 유산/표현의 자유

[sceneform]#3. model 변경하기

by 바른생활머시마 2020. 1. 18.
728x90
반응형

 ARCore 문서에 있는 다른 내용들을 해 보려고 하는데, 쉽지 않네요.

 특히, lambda 표현식 때문에 샘플 코드들이 오히려 더 한 눈에 딱 들어오지 않네요. 타입 지정하지 않고 사용되는 변수들이 그 중 가장 어색하고 가독성을 떨어뜨리네요. 옛날 사람의 코딩 방식에서 벗어나기가 쉽지 않네요.

 

 아직 Node나 Transform 등 기반 구조를 잘 모르는 상태라서 뭔가 멋진 것을 만들어 보기는 쉽지 않네요.

https://developers.google.com/ar/develop/java/sceneform/create-renderables

 

Create a Renderable  |  ARCore  |  Google Developers

A Renderable is a 3D model and consists of vertices, materials, textures, and more. It can be attached to a Node and rendered as part of a scene. This page describes how to create and modify Renderables. You can create a ViewRenderable from standard androi

developers.google.com

구를 하나 넣어보려고 했는데 샘플 코드만 보면 이걸 다른 곳에 쓸 수 있는 방법을 모르겠네요. 재질을 만들어서, 내부에 정의 된 Sphere에 적용시키니, 다른 곳에 어떻게 적용 시켜야 할지...Sphere가 먼저 선언 되어 있던 것이면 모르겠는데...아무튼.. 고민 좀 하다가 일단 skip~

MaterialFactory.makeOpaqueWithColor(this, new Color(android.graphics.Color.RED))
        .thenAccept(
            material -> {
              redSphereRenderable =
                  ShapeFactory.makeSphere(0.1f, new Vector3(0.0f, 0.15f, 0.0f), material); });

그래서, 기존에 있던 모델(andy)을 다른 모델로 한번 바꿔 보도록 하겠습니다. 이걸 하면 fbx를 sfb/sfa로 변환하는 내용도 포함 되니, 나름 중요한 부분이구요. 아래 링크에 그에 대한 별도의 포스트가 있습니다.

https://developers.google.com/ar/develop/java/sceneform/import-assets

 

Import and preview 3D assets  |  ARCore  |  Google Developers

Learn how to import 3D models, convert them into Sceneform format, and preview them in Android Studio. Note: To import and work with 3D models in Sceneform, ensure you have installed the Google Sceneform Tools (Beta) plugin. Import a new 3D asset Sceneform

developers.google.com

 

1. 모델 데이터 (andy_dance.fbx)

https://github.com/google-ar/sceneform-android-sdk/tree/master/samples/animation/app/sampledata/models

 

google-ar/sceneform-android-sdk

Sceneform SDK for Android. Contribute to google-ar/sceneform-android-sdk development by creating an account on GitHub.

github.com

위 경로에서 fbx를 받아서 로컬에 저장합니다.

 다운로드 받은 데이터를 프로젝트에 추가 시키기 위해 android studio에서 데이터 폴더 만들기를 했더니 만들어지지 않는군요. 

그래서, 직접 폴더를 만들고, 다운로드 받은 파일을 넣어줬습니다.

2. 데이터 변환

참고 포스트를 보면, 변환을 위해 팝업 매뉴를 띄우라고 합니다만, 이 폴더 자체가 보이지 않습니다.

그런데,  'android'로 되어 있는 부분을 'Project'로 바꾸면 보입니다.

 

 

import 창을 띄워보면, 처음 프로젝트 만들 때 직접 입력했던 내용 비슷한 내용이 보입니다. 이렇게 설정하면 거기에 반영되나 봅니다.

이렇게 했을 때 sfb가 asset에도, raw에도 생기지 않아서 사용 할 수가 없었습니다. 이것 저것 확인을 해 보니, 경로 문제였는데, 프로젝트에서 관리하는 폴더 구조와 제가 새로 만든 폴더 구조가 달라서, 기본 경로를 그대로 사용하면 엉뚱한 곳에 폴더가 생기고 그 곳에 결과물이 만들어지게 됩니다. 

Finish를 눌렀는데, 왜 이런 에러가 나올까요... 다른 분들도 종종 겪는 문제인가 봅니다.

https://stackoverflow.com/questions/51416555/import-sceneform-asset-option-gives-error-while-generating-sfb-file-using-obj-fi

 

Import Sceneform Asset option gives error while generating SFB file using OBJ file

I have an OBJ file for the 3D Object and I'm using Import Sceneform Asset to convert it to SFA but while doing so it is always giving me error stating Failed to find 'sampledata/models/plc.mtl' on ...

stackoverflow.com

일단 원인을 모르니, andy fbx 대신 turbo squid에서 자동차 obj를 하나 받아서 사용하겠습니다.

 폴더 구조가 잘못 되었으니 먼저 변경합니다. 

그리고, 리소스 폴더인 res도 기본 경로에 포함되어 있지 않으니, 그것도 반영 할 필요가 있구요. (가장 확실한 방법은 우측의 경로 선택 버튼을 눌러서 직접 선택하면 가장 확실하고~)

참, 리소스로 등록하려면, 대문자가 없어야 하니 주의해야 합니다.

obj, mtl 파일 내부의 이름도 함께 수정이 되어야 될 것 같네요.

제대로 수정 못하거나 필요한 파일이 없으면 이런 에러가 나옵니다.

Sampler 'Lamborginhi Aventador_diffuse': Pipeline name 'Lamborginhi Aventador_diffuse.jpeg' doesn't match source assets, please update or remove pipeline_name field

 

잘 변환되면 아래와 같이 의도한 경로에 나옵니다.

그 아래 빌드 결과 내용이 주의 표시가 있는데, 보통 그냥 빌드 성공하면 무시했었는데, 지금 보니 잘 봐둬야 될 내용이네요.

 텍스쳐 하나가 없다는 것은 아마도, andy fbx가 빌드 실패한 이유이거나, 어딘가 텍스쳐 이름이 대문자로 되어 있는 곳이 한 곳 더 있어서 인 것 같고, 하나가 매우 크다는 것은, 자동차에 해당하는 것 같습니다. 실제로 띄워보면 자동차 실제 크기로 모델링 되어 있어서 화면을 가득 차게 만들어졌습니다.

 

잘 살펴보니, 텍스쳐 이름 중 하나에 underbar가 없네요. 수정해서 다시 변환을 하면 계속 추가가 되므로, 프로젝트의 build.gradle에서 이전 정보를 삭제하고 다시 만들어주세요.

 

오류 발생 가능성을 줄이기 위해 obj와 mtl에서 긴 이름들을 다 lambo로 수정했습니다. 

빌드는 잘 되었는데, 면이 이중으로 생성 된 것 같네요. 그건 다음에 알아봐야겠네요.

 

 

다음은 얼굴 위에 3D 모델을 그려주는 샘플을 살펴보겠습니다.

https://learn-and-give.tistory.com/6

 

[sceneform]#4. augmented face review

몇 개 샘플을 살펴보니, 대체로 구현이 비슷한 패턴으로 되어 있는 것 같아요. 그래서, 이 패턴에 좀 익숙해지고, 이 패턴의 구조를 이해하면 ARCore를 이해하는데 도움이 될 것 같아서 다른 예제

learn-and-give.tistory.com

 

 

 

 

 

 

 

728x90
반응형

댓글