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
- C# İşleme Bağlan ion. LoadModelAsync()
- C# İşleme Bağlan ion. LoadModelFromSasAsync()
- C++ Rendering Bağlan ion::LoadModelAsync()
- C++ Rendering Bağlan ion::LoadModelFromSasAsync()