Aracılığıyla paylaş


Modeller

Azure Uzaktan İşleme'deki bir model, varlıklar ve bileşenlerden oluşan tam nesne gösterimini ifade eder. Modeller, özel verileri uzaktan işleme hizmetine almanın ana yoludur.

Model yapısı

Modelin kök düğümü olarak tam olarak bir varlığı vardır. Bunun altında alt varlıkların rastgele bir hiyerarşisi olabilir. Bir model yüklenirken bu kök varlığa başvuru döndürülür.

Her varlığın ekli bileşenleri olabilir. En yaygın durumda, varlıkların mesh kaynaklarına başvuran MeshComponent'leri vardır.

Model oluşturma

FBX, GLTF veya E57 gibi dosya biçimlerinden giriş modelleri dönüştürülerek çalışma zamanı için model oluşturma elde edilir. Dönüştürme işlemi dokular, malzemeler ve kafesler gibi tüm kaynakları ayıklar ve bunları iyileştirilmiş çalışma zamanı biçimlerine dönüştürür. Ayrıca yapısal bilgileri ayıklar ve bunu ARR'nin varlık/bileşen graf yapısına dönüştürür.

Önemli

Model dönüştürme, kafes oluşturmanın tek yoludur. Ağlar çalışma zamanında varlıklar arasında paylaşılsa da, modeli yüklemek dışında çalışma zamanına ağ eklemenin başka bir yolu yoktur.

Modelleri yükleme

Model dönüştürüldükten sonra Azure blob depolamadan çalışma zamanına yüklenebilir.

Varlığın blob depolamada ele alınmasına göre farklılık gösteren iki farklı yükleme işlevi vardır:

  • Blob depolamanın hesaba bağlı olması durumunda model blob depolama parametreleriyle doğrudan ele alınabilir. Bu durumda ilgili yükleme işlevi parametresiyledir LoadModelAsync LoadModelOptions.
  • Model SAS URI'siyle ele alınabiliyor. İlgili yükleme işlevi parametresiyledir LoadModelFromSasAsync LoadModelFromSasOptions. Yerleşik modelleri yüklerken de bu varyasyonu kullanın.

Aşağıdaki kod parçacıkları, her iki işlevle de modellerin nasıl yükleneceklerini gösterir. Bir modeli blob depolama parametrelerini kullanarak yüklemek için aşağıdakine benzer bir kod kullanın:

async void LoadModel(RenderingSession session, Entity modelParent, string storageAccount, string containerName, string assetFilePath)
{
    // load a model that will be parented to modelParent
    var modelOptions = LoadModelOptions.CreateForBlobStorage(
        storageAccount, // storage account name + '.blob.core.windows.net', e.g., 'mystorageaccount.blob.core.windows.net'
        containerName,  // name of the container in your storage account, e.g., 'mytestcontainer'
        assetFilePath,  // the file path to the asset within the container, e.g., 'path/to/file/myAsset.arrAsset'
        modelParent
    );

    var loadOp = session.Connection.LoadModelAsync(modelOptions, (float progress) =>
    {
        Debug.WriteLine($"Loading: {progress * 100.0f}%");
    });

    await loadOp;
}
void LoadModel(ApiHandle<RenderingSession> session, ApiHandle<Entity> modelParent, std::string storageAccount, std::string containerName, std::string assetFilePath)
{
    LoadModelOptions modelOptions;
    modelOptions.Parent = modelParent;
    modelOptions.Blob.StorageAccountName = std::move(storageAccount);
    modelOptions.Blob.BlobContainerName = std::move(containerName);
    modelOptions.Blob.AssetPath = std::move(assetFilePath);

    ApiHandle<LoadModelResult> result;
    session->Connection()->LoadModelAsync(modelOptions,
        // completion callback
        [](Status status, ApiHandle<LoadModelResult> result)
        {
            printf("Loading: finished.");
        },
        // progress callback
        [](float progress)
        {
            printf("Loading: %.1f%%", progress * 100.f);
        }
    );
}

SAS belirteci kullanarak bir model yüklemek istiyorsanız aşağıdaki kod parçacığına benzer bir kod kullanın:

async void LoadModel(RenderingSession session, Entity modelParent, string modelUri)
{
    // load a model that will be parented to modelParent
    var modelOptions = new LoadModelFromSasOptions(modelUri, modelParent);

    var loadOp = session.Connection.LoadModelFromSasAsync(modelOptions, (float progress) =>
    {
        Debug.WriteLine($"Loading: {progress * 100.0f}%");
    });

    await loadOp;
}
void LoadModel(ApiHandle<RenderingSession> session, ApiHandle<Entity> modelParent, std::string modelUri)
{
    LoadModelFromSasOptions modelOptions;
    modelOptions.ModelUri = modelUri;
    modelOptions.Parent = modelParent;

    ApiHandle<LoadModelResult> result;
    session->Connection()->LoadModelFromSasAsync(modelOptions,
        // completion callback
        [](Status status, ApiHandle<LoadModelResult> result)
        {
            printf("Loading: finished.");
        },
        // progress callback
        [](float progress)
        {
            printf("Loading: %.1f%%", progress * 100.f);
        }
    );
}

Daha sonra varlık hiyerarşisinde geçiş yapabilir ve varlıkları ve bileşenleri değiştirebilirsiniz. Aynı modelin birden çok kez yüklenmesi, her biri kendi varlık/bileşen yapısı kopyasına sahip birden çok örnek oluşturur. Ağlar, malzemeler ve dokular paylaşılan kaynaklar olduğundan verileri yeniden yüklenmez. Bu nedenle bir modelin örneğini birden çok kez oluşturmak görece az bellek yüküne neden olur.

API belgeleri

Sonraki adımlar