3D öğeleri içe aktarma ve önizleme

3D modelleri içe aktarmayı, Sceneform biçimine dönüştürmeyi ve Android Studio'da önizlemeyi öğrenin.

Yeni 3D öğeleri içe aktarma

Sceneform, aşağıdaki biçimlerde 3D öğeleri destekler:

  • OBJ
  • glTF (animasyonlar desteklenmez)
  • WebGL, animasyonlar içeren veya içermeyen.

Yeni bir 3D öğeyi içe aktarmak için şu adımları uygulayın:

  1. Projenizin app klasörünün bir sampledata klasörü içerdiğini doğrulayın.

    Klasörü oluşturmak için Proje penceresinde app klasörünü sağ tıklayın ve Yeni > Örnek Veri Dizini'ni seçin.

    sampledata klasörü, Android Studio projenizin bir parçası olsa da içerikleri APK'nıza dahil edilmeyecek.

  2. 3D model kaynak öğe dosyanızı (*.obj, *.fbx veya *.gltf) ve tüm bağımlılarını (*.mtl, *.bin, *.png, *.jpg vb.) sampledata klasörüne kopyalayın.

    Bu kaynak dosyaları, projenizin assets veya res klasörüne kopyalamayın. Aksi takdirde bu dosyalar APK'nıza gereksiz şekilde dahil edilir.

  3. İçe aktarma işlemine başlamak için 3D model kaynak öğesini sağ tıklayın ve Sahne Öğesini İçe Aktar'ı seçin.

    Değerler uygulamadaki sceneform.asset() girişi tarafından kullanılır build.gradle ve *.sfa ile *.sfb dosyalarının projenizde nerede oluşturulacağını belirler.

    Bir modeli ilk kez içe aktarıyorsanız varsayılan değerleri kullanın.

    Alan Açıklama
    Kaynak Öğe Yolu İçe aktarılacak OBJ, {8/} veya glTF 3D model öğesinin dosya adı.
    Malzeme Yolu default, Sceneform'a yerleşik varsayılan malzemeyi veya özel malzeme *.mat dosyasının yolunu kullanmasını söyler.
    .sfa Çıkış Yolu Varsayılanı kullanın veya sampledata klasörünün altında başka bir yol belirtin.

    Eksikse .sfa dosyası oluşturulur. İçe aktarma işleminin bazı yönlerini kontrol etmek için değiştirilebilir.

    Bu, *.sfa’nın gereksiz bir şekilde APK'nıza eklenmemesini sağlar.

    .sfb Çıkış Yolu Varsayılan olarak rastgele öğe dosya adlarının kullanılmasına olanak tanıyan src/main/assets/ klasörü kullanılır.

    Dosya adı (dosya uzantısı olmadan) geçerli bir kaynak tanımlayıcısıysa (ör. R.raw.filename) isterseniz bunun yerine src/main/res/raw/ klasörünü kullanabilirsiniz.

    Uygulamanızda assets/ ve res/ klasörlerini kullanma hakkında daha fazla bilgi için Android'in Uygulama kaynaklarına genel bakış sayfasına göz atın.

    Animasyon Dosyaları

    *.fbx animasyon dosyasını içe aktarıyorsanız artı işaretini (+) tıklayın ve geri kalan dosyaları tek tek ekleyin.

  4. İçe aktarma işlemini başlatmak için Son'u tıklayın.

Eklenti, öğenizi içe aktarmak için aşağıdakileri yapar:

  1. Henüz yoksa Sceneform gradle eklentisini projenize build.gradle ekler:

    dependencies {
        …
        classpath 'com.google.ar.sceneform:plugin:1.15.0'
    }
    
  2. app's build.gradle dosyanızı apply plugin satır ve yeni içe aktarılan öğe için sceneform.asset() girişi içerecek şekilde günceller:

    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.
    

    build.gradle adlı uygulamadaki bu yeni girişler iki tane gradyan görevi oluşturur:

    • createAsset-<asset-name> henüz yoksa Sceneform öğe tanımı (*.sfa) dosyası oluşturur.

      Bu görev, mevcut bir *.sfa dosyasının üzerine yazılmaz. Bu, içe aktarma işleminden sonra SFA dosyasında yaptığınız değişikliklerin üzerine yazılacağı anlamına gelmez.

      *.sfa dosyası, öğenin içe aktarma ayarlarının tam, kullanıcılar tarafından okunabilen bir açıklamasını içeren bir metin dosyasıdır. Kaynak öğenizdeki modellere ve dokulara referans verir ve Sceneform'un fiziksel tabanlı malzemeleri için malzeme parametreleri sağlayarak malzemeleri tanımlar.

    • compileAsset-<asset-name>, *.sfa dosyasını Sceneform ikili öğe (*.sfb) dosyasında derler.

      Bu *.sfb dosyası, uygulamanızın APK'sında yerleşik olarak bulunur ve oluşturulabilirliği oluşturmak için çalışma zamanında yüklenir.

    Daha fazla bilgi için Sceneform Gradle Plugin referansı sayfasına bakın.

  3. *.sfa öğesini bir metin penceresinde, *.sfb öğesini bir Görüntüleyen penceresinde açar.

Daha önce içe aktarılan bir 3D öğeyi güncelleme

Daha önce içe aktarılmış bir OBJ, veya glTF modeli kaynak öğe dosyasını (*.obj, *.fbx ya da *.gltf) güncellediğinizde uygulamanızın build.gradle öğesindeki ilgili sceneform.asset() girişi, eklentinin mevcut *.sfa parametrelerine göre otomatik olarak güncellenmiş bir *.sfb dosyası oluşturmasına neden olur.

Zaten içe aktarılmış bir öğenin parametrelerini tekrarlamak için:

  • *.sfa metin dosyasını, rehber olarak SFA dosya biçimi referansını kullanarak değiştirin.
  • Değişikliklerinizi kaydedin. Bu, öğenin yeniden derlenmesini sağlar ve *.sfb dosyasını günceller.
  • Güncellenmiş öğeyi önizlemek için *.sfb dosyasını çift tıklayarak Görüntüleyici öğesini açın.

Animasyon verileri içeren önceden içe aktarılmış bir öğeyi güncelliyorsanız içe aktarma iletişim kutusunun Animasyon Dosyaları bölümündeki artı (+) işaretini kullanarak güncellenen *.fbx dosyalarının her birini tek tek içe aktarın.

Gradyan tanımları

İçe aktarma işlemi, build.gradle dosyasının sonuna *.fbx animasyon dosyalarını ekler.

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'])

Oluşturulabilir Oluştur

Öğe *.sfb biçiminde derlendikten sonra ModelRenderable oluşturup sahnedeki bir düğüme aşağıdaki şekilde ekleyebilirsiniz:

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;
    });

Özel materyaller kullanma

Sceneform's varsayılan materyaller geliştiricilerin harika sonuçlar almasını kolaylaştırır. Öğelerinizin görünümünü özelleştirmek için özel materyaller de kullanabilirsiniz.

Öğenize özel bir materyal atamak için:

  1. [Özel Materyal Referansı](/sceneform/develop/custom-material) rehber olacak şekilde özel malzeme tanımı (*.mat) dosyası oluşturun.

  2. Özel materyali öğeye uygulayın:

    Yeni bir öğeyi içe aktarırken:

    Daha önce içe aktarılan bir öğeyi güncellemek için:

    • *.sfa içeriği özelleştirilmediyse mevcut *.sfa ve *.sfb dosyalarını, ayrıca uygulama'daki sceneform.asset() girişini silin ve ardından öğeyi yeniden içe aktarın. Bu şekilde, yeniden oluşturulan *.sfa özellikleri ile malzeme parametrelerinin, özel malzemenizin desteklediği parametrelerle eşleşmesi sağlanır.

    • Yaptığınız *.sfa özelleştirmeyi korumak için *.sfa dosyasını açın ve source özelliğini özel malzeme *.mat dosyanızın yoluyla değiştirin. Daha sonra, *.sfa özelliklerini ve malzeme parametrelerini özel malzemenizle eşleşecek şekilde manuel olarak ayarlayın.