最適化

DOKIのレンダリングを行う場合の最適化について記載します。

レンダリング対象から外す形状

ブラウザで非レンダリングとしている形状はレンダリング対象になりません。
optimize_01.png

レンダリングしない形状をレンダリング対象から外すことで、レンダリングリソースの削減や速度アップにつながります。

アニメーションレンダリング時の最適化 (内部処理)

アニメーションレンダリング時は、1フレーム目でDOKIに渡した形状がアニメーション要素を持たない場合、
2フレーム目以降で同一形状の読み込みはせず再利用するようにしています。
また、テクスチャやマテリアルも一度渡したものが再利用されます。
動画テクスチャを使用している場合は部分的にマテリアルは更新されます。
これにより、2フレーム以降は極力前処理(Shade3DからDOKIに情報を渡す処理)を短縮するようにしています。

同じ形状を配置する場合はリンクを活用

木など、同一形状で位置/回転/スケールのみ変化させてシーンに複数配置する場合は「リンク」を使用することをお勧めします。
以下は、マスターオブジェクトとして木を作成しシーンにはリンクで配置しています。
optimize_02.jpg

レンダリングすると以下のようになりました。
optimize_03.jpg

こうすることでShade3DからDOKIに形状を渡す際は木1本のみを渡して、後は参照で表現されます。
これにより、レンダリング時間の圧倒的な短縮、メモリリソースの節約、shdファイルサイズを小さくする、など多くの利点があります。

同一のマテリアルをまとめる

DOKIでは、マテリアルの数もレンダリングの負荷となります。
マテリアルについては同一のものは1つにまとめるようにすると、負荷軽減につながります。
マスターマテリアル(マスターサーフェス)でマテリアルをまとめるのが有効です。
optimize_04.jpg

OSPRay含むほとんどの3Dエンジンでは、マテリアルと形状は分離して管理されています。
マテリアルの数が多いほどそれだけリソース(メモリ使用量やレンダリング時間など)を消費することになります。
DOKI for Shade3Dでは、「パートに対して独立した表面材質を割り当てる」よりも「マスターサーフェスを使用する」ほうが
レンダリング時間の短縮につながります。