النماذج

يشير النموذج في Azure Remote Rendering إلى تمثيل كائن كامل، يتكون من كيانات ومكونات. النماذج هي الطريقة الرئيسية للحصول على بيانات مخصصة في خدمة العرض عن بعد.

بنية النموذج

يحتوي النموذج على كيان واحد تماما كعقدة الجذر الخاصة به. أدناه قد يكون لها تسلسل هيكلي عشوائي للكيانات التابعة. عند تحميل نموذج، يتم إرجاع مرجع إلى هذا الكيان الجذر.

قد يكون لكل كيان مكونات مرفقة . في الحالة الأكثر شيوعا، تحتوي الكيانات على MeshComponents، والتي تشير إلى موارد الشبكة.

إنشاء نماذج

يتم إنشاء نماذج لوقت التشغيل عن طريق تحويل نماذج الإدخال من تنسيقات الملفات مثل FBX أو GLTF أو E57. تستخرج عملية التحويل جميع الموارد، مثل المواد والمواد والشبكات، وتحولها إلى تنسيقات وقت التشغيل المحسنة. كما ستقوم باستخراج المعلومات الهيكلية وتحويلها إلى بنية الرسم البياني للكيان/المكون ل ARR.

هام

تحويل النموذج هو الطريقة الوحيدة لإنشاء شبكات. على الرغم من أنه يمكن مشاركة الشبكات بين الكيانات في وقت التشغيل، لا توجد طريقة أخرى للحصول على شبكة في وقت التشغيل، بخلاف تحميل نموذج.

تحميل النماذج

بمجرد تحويل النموذج، يمكن تحميله من تخزين Azure blob إلى وقت التشغيل.

هناك اثنتان من دالات التحميل المميزة التي تختلف حسب الطريقة التي يتم بها معالجة الأصل في تخزين الكائن الثنائي كبير الحجم:

  • يمكن معالجة النموذج بواسطة معلمات تخزين الكائن الثنائي كبير الحجم مباشرة، في حالة ربط تخزين الكائن الثنائي كبير الحجم بالحساب. دالة التحميل ذات الصلة في هذه الحالة هي LoadModelAsync مع المعلمة LoadModelOptions.
  • يمكن معالجة النموذج بواسطة SAS URI الخاص به. دالة التحميل ذات الصلة مع LoadModelFromSasAsync المعلمة LoadModelFromSasOptions. استخدم هذا المتغير أيضا عند تحميل النماذج المضمنة.

توضح القصاصات البرمجية التالية كيفية تحميل النماذج بأي من الدالتين. لتحميل نموذج باستخدام معلمات تخزين الكائن الثنائي كبير الحجم الخاصة به، استخدم التعليمات البرمجية مثل التعليمة البرمجية أدناه:

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 المميز، فاستخدم تعليمة برمجية مشابهة للمقتطف التالي:

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

بعد ذلك، يمكنك اجتياز التسلسل الهرمي للكيان وتعديل الكيانات والمكونات. يؤدي تحميل نفس النموذج عدة مرات إلى إنشاء مثيلات متعددة، لكل منها نسختها الخاصة من بنية الكيان/المكون. نظرا لأن الشبكات والمواد والمواد هي موارد مشتركة، فلن يتم تحميل بياناتها مرة أخرى، على الرغم من ذلك. لذلك فإن إنشاء مثيل لنموذج أكثر من مرة يتحمل القليل نسبيا من حمل الذاكرة.

مستندات API

الخطوات التالية