Modellek
Az Azure Remote Renderingben a modellek entitásokból és összetevőkből álló teljes objektumábrázolásra utalnak. A modellek az egyéni adatok távoli renderelési szolgáltatásba való beolvasásának fő módja.
Modellstruktúra
A modell gyökércsomópontként pontosan egy entitással rendelkezik. Az alábbiakban a gyermek entitások tetszőleges hierarchiája lehet. Modell betöltésekor a függvény a legfelső szintű entitásra mutató hivatkozást ad vissza.
Minden entitáshoz csatolhatók összetevők . A leggyakoribb esetben az entitások MeshComponents-ekkel rendelkeznek, amelyek a mesh-erőforrásokra hivatkoznak.
Modellek létrehozása
A futtatókörnyezet modelljeinek létrehozásával olyan fájlformátumok bemeneti modelljeit konvertálhatja, mint az FBX, a GLTF vagy az E57. Az átalakítási folyamat kinyeri az összes erőforrást, például a textúrákat, az anyagokat és a hálókat, és optimalizált futtatókörnyezeti formátumokká alakítja őket. Emellett kinyeri a szerkezeti információkat, és átalakítja az ARR entitás-/összetevő-gráfstruktúrájába.
Fontos
A hálók létrehozásának egyetlen módja a modellkonvertálás. Bár a hálók futásidőben megoszthatóak az entitások között, a modell betöltésén kívül nincs más mód a hálók futásidejű betöltésére.
Modellek betöltése
A modell konvertálása után betölthető az Azure Blob Storage-ból a futtatókörnyezetbe.
Két különböző betöltési függvény létezik, amelyek az objektum blobtárolóban való kezelése alapján különböznek:
- A modell közvetlenül blobtároló paraméterekkel kezelhető, ha a blobtároló a fiókhoz van csatolva. A megfelelő betöltési függvény ebben az esetben a paraméterrel
LoadModelOptions
vanLoadModelAsync
. - A modell az SAS URI-jával kezelhető. A megfelelő betöltési függvény a paraméterrel
LoadModelFromSasOptions
vanLoadModelFromSasAsync
megadva. Ezt a változatot beépített modellek betöltésekor is használhatja.
Az alábbi kódrészletek bemutatják, hogyan tölthet be modelleket bármelyik funkcióval. Ha egy modellt a blobtároló paramétereivel szeretne betölteni, használja az alábbihoz hasonló kódot:
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);
}
);
}
Ha SAS-jogkivonat használatával szeretne betölteni egy modellt, használja az alábbi kódrészlethez hasonló kódot:
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);
}
);
}
Ezt követően bejárást végezhet az entitáshierarchián, és módosíthatja az entitásokat és összetevőket. Ugyanazon modell többszöri betöltése több példányt hoz létre, és mindegyik saját példányt tartalmaz az entitás/összetevő szerkezetéről. Mivel a hálók, anyagok és textúrák megosztott erőforrások, az adataik azonban nem töltődnek be újra. Ezért a modell többszöri példányosítása viszonylag kevés memóriaterhelést okoz.
API-dokumentáció
- C# renderelés Csatlakozás ion. LoadModelAsync()
- C# renderelés Csatlakozás ion. LoadModelFromSasAsync()
- C++ renderelés Csatlakozás ion::LoadModelAsync()
- C++ renderelés Csatlakozás ion::LoadModelFromSasAsync()