Model Derivative API:SVF と SVF2

SVF2 は、従前、OTG のコードネームでご紹介してきたファイル形式で、SVF 同様、デザイン ファイルを Forge Viewer で表示する目的で Model Derivative API によって生成されるものです。SVF が苦手としていた大規模モデルの表示を改善する目的で、導入が決定した経緯があります。

SVF2 を利用すると、ドアや窓、階段など、モデル内で形状が同じで反復するジオメトリ要素を共有して、個別にインスタンス化されることを抑止、さらにキャッシュを利用することで、少メモリでのモデルを表示が出来るようになっています。

SVF2 は従来の SVF(Streaming Vector Format)の正常進化版で、POST job endpoint を使った変換時に、リクエストボディで SVF2 を指定して、新規に SVF2 ファイルとその派生物(Derivatives)を生成することができます。

{
    "input": {
        "urn": "<Your Encoded URN>"
    },
    "output": {
        "formats": [
            {
                "type": "svf2",
                "views": [
                    "2d",
                    "3d"
                ]
            }
        ]
    }
}

SVF2 の生成で生成されるマニフェストには、SVF2 であることを意味する outputType が示されます。

{
    "urn": "<Your Encoded URN>",
    "derivatives": [
        {
            "hasThumbnail": "true",
            "children": [
                : "progress": "complete",
                "outputType": "svf2",
                "status": "success"
            },
            :
        }
    ],
    "hasThumbnail": "true",
    "progress": "complete",
    "type": "manifest",
    "region": "US",
    "version": "1.0",
    "status": "success"
}

一度、SVF ファイル変換を完了しているデザイン ファイルに対して SVF2 ファイル変換を実行することも出来ます。この場合、POST job endpoint 呼び出し時のリクエスト ヘッダーに x-ads-force パラメータを指定せずに、または、false を指定する必要があります。この方法を利用すると、比較的短い時間で SVF2 を得ることが可能です。この方法をとった場合、マニフェストには overrideOutputType: svf2 が現れます。

{
    "urn": "<Your Encoded URN>",
    "derivatives": [
        {
            "hasThumbnail": "true",
            "overrideOutputType": "svf2",
            "children": [
                : "progress": "complete",
                "outputType": "svf",
                "status": "success"
            },
            :
        }
    ],
    "hasThumbnail": "true",
    "progress": "complete",
    "type": "manifest",
    "region": "US",
    "version": "1.0",
    "status": "success"
}

生成された SVF2 viewable を Forge Viewer で表示するには、従来と同じく Base64 エンコードされた URN を指定することになります。ただ、現在の Beta ステージでは、Viewer の初期化では env と api を、それぞれ、MD20ProdUS(米国)あるいは MD20ProdEU(EMEA)に、api を D3S に変更する必要があります。

(ご注意:2021 年 7 月の SVF2 正式サポートに際して、JavaScipt ライブラリ バージョン 7.28 以降、SVF2 を利用するアプリは、Forge Viewer の初期化オプションで指定する従来の env 値  MD20ProdUS(または MD20ProdEU)、 api 値 D3S に代わって、env 値 AutodeskProduction2(または AutodeskStaging2 AutodeskProduction2 )、api 値 streamingV2(または streamingV2_EU)への置き換えが推奨されています。従来値は将来廃止される予定ですので、お早めに上記置き換えをお願いします。- 2021 年 8 月追記)

// Intialize Viewer
var options = {
    env: 'AutodeskProduction2',
    api: 'streamingV2',
    language: 'ja',
    getAccessToken: getCredentials
};
Autodesk.Viewing.Initializer(options, function () {
    _viewer = new Autodesk.Viewing.GuiViewer3D(document.getElementById('viewer3d-1'));
    var startedCode = _viewer.start();
    if (startedCode > 0) {
        console.error('Failed to create a 3D Viewer: WebGL not supported.');
        return;
    }
    // Load viewable
    var documentId = 'urn:' + urn_svf;
    Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess, onDocumentLoadFailure);
});

なお、モデルの内容によっては、デザインファイル形式に関係なく、期待した使用メモリの低減が得られない場合もあります。地形モデルのように、前述した形状の一致と反復がみられない場合、ジオメトリをキャッシュしてモデル全体で共有利用することが出来ないためです。

ただし、SVF2 のストリーミングには WebSocket が使用されているため、消費メモリに差がみられない場合でも、ロードが高速になるものも存在します。

その他、現状の注意点には、次のようなものがあります。SVF2 が正式にリリースされる時点で、これらの内容、あるいは、方向性が変更される可能性がありますので、ご注意ください。

  • SVF2 は SVF を完全に置き換えるものではありません。用途によって、SVF と SVF2 を使い分ける必要が出る場合があります。いまのところ、SVF の運用を中止するような計画はありません。
  • SVF2 のオフライン運用は、現在サポートされていません。
  • SVF2 変換された URN を使って、従来の Viewer 初期化オプション api と env 属性の変更(env: ‘ AutodeskProduction’ )、api: ‘derivativeV2‘(または  api: ‘derivativeV2_EU‘)を指定した場合は、SVF がロードされます。

By Toshiaki Isezaki

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading