Autodesk Forge の登場以来、Autodesk Platform Services に名称を変更しても、Viewer は最も多用されている機能/API です。その後も、SVF2 サポート や 選択ロード に代表されるように、主に大規模 BIM モデルの表示を目的に、継続してパフォーマンスを改善する対応が施されてきました。
ここ最近も、集中して Viewer パフォーマンスを改善・改良が導入されていますので、簡単にまとめてご紹介しておきたいと思います。導入された内容は、公式ドキュメントの Changelog に記載があるものです。
SVF2 モデルのロード時間を短縮・改善する機能が盛り込まれています。v7.95 以降の APS Viewer バージョンをお使いいただければ、機能享受することが出来ま。、同機能を明示的に有効/無効にする設定等はありません。
URL パラメータ useOPFS=true を使用して有効化出来る、新しく改良されたジオメトリーキャッシュを導入しています。
APS Viewer は、初めて SVF2 モデルを開と、大量のジオメトリ データを取得します。この際、2度め以降のロードで再度同じデータを再度取得しないように、SVF2 を介してジオメトリデータをローカルキャッシュに保存します。このキャッシュは、これまで IndexedDB と呼ばれるブラウザ技術を使用してきました。ただし、特に Google Chrome では、IndexedDB は大量のデータに対してパフォーマンス上の問題を抱えており、初回のモデル読み込み時間が大幅に遅くなる場合がありました。
この問題を修正するために、OPFS(Origin Private File System)キャッシュと呼ばれる新しいキャッシュ機構がバックエンドのリソースが実装されました。OPFS はハードドライブ上のファイルのようなストレージへの高性能アクセスを提供します。OPFS を活用することで、IndexedDB のデータベースライクな API に関連するオーバーヘッドが排除され、Chromeで発生するパフォーマンスの低下が解消されます。
ただし、OPFS キャッシュには独自の制限があることに注意することが重要です。 Viewer は、デザインの系統 (ACC または BIM 360 の特定のデザインのすべてのバージョン) 毎に 1 つの OPFS キャッシュを作成します。系統がない場合は URN ごとに 1 つの OPFS キャッシュを作成します。
IndexedDB を使ったキャッシュバックエンドと比較すると、OPFS キャッシュは初回モデルの読み込み時間が小規模キャッシュで1.1〜1.7 倍、中規模キャッシュでは約2〜7 倍、大規模キャッシュでは更に改善される可能性があります。2度め以降のモデル ロード時間では、小規模キャッシュで2~4 倍、中規模キャッシュで3~6倍、大規模キャッシュではさらに短縮されます。大規模なモデルには、50k から 100万以上のユニークなジオメトリを含めることができます。
ここで言う小規模キャッシュや中規模キャッシュとは、キャッシュに含まれるジオメトリ数を表すために使用されていることにご注意ください。通常、小規模キャッシュには最大で数千のジオメトリが含まれますが、中規模キャッシュには約 250 万のジオメトリが含まれます。
※ キャッシュ方式の変更で SVF2 のオフライン運用が可能になるわけではありません。
なお、v7.98 以降のバージョンでは、既定でこの機能が有効になっているので、明示的なパラメーター指定は不要です。
- v7.99(Beta)
Viewer の設定パネルに「大規模モデルの操作性」設定が新設されて、大規模モデルのレンダリングを最適化するスムーズ ナビゲーション機能を利用することが出来ます。スムーズ ナビゲーション機能は、まだ、開発テストという段階なので、Beta 版扱いになっています。既定ではオフに設定されているので、利用には明示的な有効化指定が必要です。また、この機能は、スマートフォンやタブレットなどのモバイル デバイスではお使いいただけません。
機能が有効になると、モデルのロード/表示時に Viewer 左下に表示されるプログレスバー上に「読み込み中」>>「最適化中」>>「レンダリング中」と表示されるようになります。
スムーズ ナビゲーション機能オフ
スムーズ ナビゲーション機能オン
設定変更後は、念のため、ブラウザ自体を再起動することをお勧めします。
スムーズ ナビゲーション機能が提供する最適化は Beta 版扱いで、あらゆるモデルに対応しているわけではありません。設定パネルから「大規模モデルの操作性」設定項目から非表示にする機能フラグも提供しています。Autodesk.Viewing.Initializer() の呼び出し前に次の行を挿入してください。
:var options = {env: 'AutodeskProduction2',api: 'streamingV2',getAccessToken: getCredentials};Autodesk.Viewing.FeatureFlags.set('HIDE_LARGE_MODEL_EXPERIENCE', true);Autodesk.Viewing.Initializer(options, function () {_viewer = new Autodesk.Viewing.GuiViewer3D(document.getElementById('viewer3d'));:
上記いずれも、SVF(SVF1 とも呼称する場合あり)ではなく、SVF2 を利用した場合の効果を得られるものです。ご注意ください。
By Toshiaki Isezaki
コメント
コメントフィードを購読すればディスカッションを追いかけることができます。