Created on | Updated on

Substance Designer パフォーマンス最適化ガイドライン

Substanceがより複雑であるほど、それらをレンダリングするためにより多くの処理能力が必要とされます。 したがって、Substanceは複雑さとレンダリング速度のバランスを取らなければなりません。 ゲームなどのリアルタイムグラフィックアプリケーションで使用する場合、これは特に重要です。

一般的に言って、実行時に修正される微調整(カスタムパラメータ)を公開しているノードはできるだけグラフの終わり近くに配置されるべきです。 これは、各ノードの出力が可能な限りキャッシュされるためです。 調整可能ノードがグラフの上にあるほど、調整の1つが変更されるたびに、より多くのOutputを再生成する必要があります。 微調整したノードがグラフの端に近い場合は、それとOutputノードの間にある数個のノードだけを再計算する必要があります。

たとえば、グラフの最初でUniform Colorを微調整すると、それに続くすべてのノードが再計算されます。 Outputの直前に配置されたHSLノードを微調整すると、このノードのみが再計算され、グラフのパフォーマンスが大幅に向上します。

一般的な最適化:

  • 解像度とrelative-to-parentの設定に注意してください。 高い値はパフォーマンスに深刻な影響を与えるため、そのマテリアルがどのように使用される可能性があるか、また関連するデータサイズを削減できるかどうかを検討してください。
  • 色が必要ない場合はグレースケールを使用してください。 カラー操作はグレースケール操作よりも4倍長くかかります。 型変換を最小限に抑え、グレイスケール/グラデーションに変換したり、グレイスケールに変換したりするなどしてください。
  • 16ビットが不要な場合は8ビットを使用してください。 (Substance CPUエンジンは実際には16ビットカラーまたは8ビットグレースケールをサポートしていないことに注意してください。GPUエンジンは8/16ビットとグレースケール/カラーの4つの組み合わせすべてをサポートします。現在、UnityとUE4ではCPUエンジンのみが使用されます。 )
  • 可能な限りノードOutputサイズを最小化してください。 場合によっては、一部のSubstanceノードを縮小しても最終結果には影響しませんが、パフォーマンスには影響します。 たとえば、ドキュメントと同じOutputサイズに設定されたUniform Colorノードを使用しても意味がありません。Uniform ColorをAbsolute [16px x 16px]に設定し、後続のノードをRelative to Parentに設定する必要があります。 一般に、このトリックは、Perlinノイズなどの低周波画像に適しています。
  • レンダリングパフォーマンスが低下するため、16 * 16より小さい画像は使用しないでください。
  • Blendノードを使用する場合、不要な場合はアルファブレンディングを無効にします。
  • BlurとWarpは、最もプロセッサー負荷の大きなノードです。
  • いくつかのノイズジェネレータは描画されるパターンの量の影響を受けます。たとえば、タイルジェネレータは、追加するパターンが多いほど遅くなります。
  • いくつかのノイズは、実際にはより多くのパターンを描画することになるズーム倍率の影響を受けます。 これには、noise_zoom、cells_zoomなどがあります。
  • ホワイトノイズパターンが必要な場合、非常に高いズーム値をnoise_zoomで使用しないでください、代わりにwhite_noiseを使ってください。
  • 逆に、White Noise、Fractal_Sum_Base、Anisotropic_Noiseなど、非常に高速なノイズジェネレータがいくつかあります。

モバイル利用のための最適化:

  • WarpsとFX-Mapsはパフォーマンスが非常に高いため、使用することはお勧めできません。
  • Blurノードの使用を避け、代わりにダウンスケールパフォーマンスを使用してください。
  • できるだけグレースケールで作業し、グラフの最後でカラーモードに切り替えます。
  • Output間でできるだけノードを共有するようにしてください。

埋め込みビットマップの最適化:

  • 埋め込みビットマップを使用すると、公開されているSubstanceファイル(sbsar)のサイズが大きくなります。 埋め込みビットマップは、リンク、埋め込み、またはベイク処理され、リソースとしてSubstanceパッケージに追加されるファイルです。 グラフで使用されている、つまり直接またはノードチェーンを介してOutputに接続されているビットマップのみが、Substance Materialとともに公開されます。 パフォーマンスを向上させるために、ビットマップに最低解像度を使用するようにしてください。 たとえば、最大テクスチャが1Kしかない場合は、2Kまたは4Kのビットマップを使用しないでください。 処理する埋め込みビットマップの数が多いと、ファイルサイズと計算量が増加します。
  • パッケージにリンクまたは埋め込まれたビットマップは、ノーマルマップを除いて圧縮をJPEGに設定する必要があります。 Normalでは、圧縮設定をRAWにしておく必要があります。 圧縮は、ビットマップ形式のアトリビュートで設定されます。
    format.jpg
  • ビットマップは、デフォルトでそのOutput SizeがAbsoluteに設定されています。 つまり、ビットマップがノードチェーンを介して出力に接続されている場合、最終的な出力は埋め込まれたビットマップのサイズになります。
    ビットマップの後に挿入したノードは、そのOutput Sizeが入力に対して相対に設定されます。 つまり、ノードはビットマップのサイズにも固有のものとなり、このサイズをノードチェーンに沿ってOutputに伝えます。
    これを修正するには、ビットマップの後にノードを設定して、そのOutput SizeをRelative to Parentに設定する必要があります
    input.jpg
  • Substanceが動的解像度を持つように設定されている場合は、埋め込みビットマップの[Output Size]を[Relative To Parent]に変更できます。
    これにより、ビットマップのサイズは親グラフに基づいて変化し、Substanceが必要以上に高い解像度でビットマップを処理しているという状況に陥ることはありません。

    注意:ビットマップノードを「relative to parent」に設定してSubstanceとしてエクスポートすると、ビットマップは元のサイズではなく256 x 256の解像度で保存されます。 代わりに、ビットマップノードを「absolute」に保ち、その直後に「relative to parent」解像度でtransform2Dノードを使用することをお勧めします。

    relativeToParent.jpg

原文:https://support.allegorithmic.com/documentation/sddoc/performance-optimization-guidelines-102400075.html

問題が解決しない場合は、Born Digital サポートまでお問い合わせ下さい。

※ 問い合わせ対応はBorn Digitalより製品をご購入頂きましたお客様のみのサービスとなります。ご了承下さい。
サポート問い合わせ