Maya のパフォーマンスを最適化するために、以下の操作を行うと効果的です。
ハードウェア シェーダ
以下は、ハードウェア シェーダ プラグイン製作者向けのコーディングのヒントです。
- 必要のない場合は、すべての GL アトリビュートをプッシュしたりポップしたりしないようにします。特定のアトリビュートをプッシュするよりもリソースを消費する操作になるからです。
- シーン ビュー内でハードウェア シェーダのみを使用している場合は、旧 API の geometry()、bind() および unbind() の使用をお勧めします。ハードウェア シェーダのバッチ レンダリングも行う場合は、新しい API の
glGeometry、glBind および glUnbind の使用をお勧めします。
- すべてのノード アトリビュートを、内部的にキャッシュすることをお勧めします。hwColorPerVertex、hwPhongShader および cgFxShader などは、すべて内部キャッシュを行います。キャッシュされていない値は、評価する際にリソースを大量に消費し、作成にかかる時間が倍増します。
- 複雑なアトリビュート(構造体や配列)を使用しないようにします。
- シェーダ上に出力されるカラーが重要ではない場合は、どのアトリビュートもそれに作用しないようにします。アトリビュートが作用すると、あるアトリビュートをダーティにしたときに従属するアトリビュートを派生させるための再計算が行われるため、余分な計算が発生するからです。
- 必要が無い場合は、compute() メソッドを空にしておくことが可能です。メソッドが単純であるほど、パフォーマンスが向上します。出力カラーを計算しなければ、スウォッチは表示されません。
- プラグイン内で、接線を処理後に正規化しないようにします。これは自動的に行われます。
- ジオメトリ コールを経由して送信されたデータは読み取り専用で、内部的にキャッシュされます。この値は変更しないでください。
- 単純なデータには(Maya API オブジェクトに代わって)単純なデータ構造を使用します。たとえば、MFloatVector ではなく float3 を使用します。OpenMaya で使用されるインタフェースにより、パフォーマンスが大幅に向上します。
- M3dView 上で使用可能なメソッドを活用します。OpenGL の状態は内部的にキャッシュされ、beginGL() や endGL() を使用したり、OpenGL への直接コールを行うよりもパフォーマンスが向上します。
- 描画は、glDrawRangeElements を使って行います。これは、ハードウェア シェーダに渡されるジオメトリ配列を使用して描画を行うためのカード ベンダ推奨 API です。
- hasTransparency() の戻り値が正しく設定されているかを確認します。true に設定すると、Maya はオブジェクトを 2 回描画します(1 回目はフロント フェースのカリング、2 回目はバックのカリング)。
- M3dView でのカレントの表示状態を考慮します。たとえば、表示モードがの場合は、ライティングを無効にしないでください。
- 透明度が有効になっていれば、フレーム バッファのブレンドは既に有効になっています。改めて有効にする必要はありません。
- 新しいメソッド MPxHwShaderNode::currentPath() を利用し、アトリビュートの検索メソッド(たとえば、getTexCoordSetNames())に適切な情報を送信します。
- カラー/アルファ値およびデプス マスクのパラメータのうち、どれがインタラクティブになっているか、特にハードウェア レンダリングの設定をテストします。これにより、より単純なバージョンのジオメトリを描画する方法についてのヒントが得られます。
- ハードウェア レンダラの場合、プラグインは複数回コールすることが可能です。通常、一般的なコールの順序は次のとおりです: デプス パス、[ライティング パス[追加]]、カラー パス、[シャドウ マップ パス]、[アルファ値パス]、[デプス パス]。中カッコ「[」と「]」で示す項目はオプションで、シーン内のライト数、ライトのシャドウが有効になっているかどうか、アルファ値とデプスの出力イメージがレンダー設定(Render
Settings)で指定されているかどうかによって異なります。
- オブジェクト(NURBS またはポリゴン サーフェス)ごとに使用可能な、新しく追加されたオプションを使用します。これは、のセクションで、またはメニューの新しいオプションとして使用できるようになっています。でオブジェクト上にハードウェア シェーダが表示されないようにしたり、でシェーダ表示をデフォルトに戻したりします。これにより、プラグインのユーザは、パフォーマンスを向上させるためにシェーダの表示を必要に応じて無効にすることができます。
メモリ
- 操作履歴を制限しないと、制限した場合に比べて多くのメモリを消費します。ウィンドウの待ち行列のサイズ(Queue size)は、デフォルトで 50 に設定されています。
- Windows XP の Large Address Awareness(3 GB まで)を活用します。
- 可能な場合は、インスタンス化を使用します。これには、ジオメトリ、マテリアル、テクスチャ、ライティングなどのインスタンス化が含まれます。
- 場合によっては、並行メモリ コピーにより、Opterm システムまたは Nehalem システムの処理速度が向上する可能性があります。しかし、それによって Xeon システムの処理速度が落ちる可能性はあります。処理速度に影響があると判明した場合は、MAYA_NO_PARALLEL_MEMCPY
を使用して並行メモリ コピーを無効にします。ただし、シーンの複雑さや作業負荷など、ほかにも Maya の処理速度に影響を及ぼす可能性のある要因があることに留意してください。
IK、ディペンデンシー ループ、パフォーマンス
- ファイルをロードしたあと待機カーソルが表示され、すべての CPU サイクルを長い時間(少なくとも数分間)Maya が使用する場合があります。この問題は、IK ループとディペンデンシー ループを含むシーン ファイルで発生する傾向があります。
理想的な解決方法は、ディペンデンシー ループを見つけて削除することです。ディペンデンシー ループは見つけにくい場合があります。たとえば、A が pointConstraint B によって移動され、B はターゲット C を使用し、ターゲット C
の親が D であり、D はエクスプレッション E によって回転され、エクスプレッション E の入力は F であり、F は G によって制約(コンストレイン)され、その G が A の子オブジェクトであるという複雑なケースも考えられます。1 つのヒントとして、数多くの異なるノード上のアトリビュートに対して出力を行うエクスプレッションに注意します。
つまり、複雑なシーンは評価に時間がかかるため、ファイルのロードに時間がかかることがあります。
ポリゴン描画キャッシュ
- Maya では、ポリゴン描画キャッシュを使用すると通常、速度とパフォーマンスが向上します。ただし、Maya で特定の大容量ファイルをロードする場合、ポリゴン描画キャッシュを使用することで Maya のメモリ使用量がシステムのアプリケーションの使用可能メモリを超えて不安定になる可能性があります。
(注: Windows と Linux の Maya の 64 ビット バージョンではこの問題の発生を防ぐのに十分なメモリ空間を提供しています。)
32 ビット システムの Windows XP でこの問題が発生する場合は、Maya のアプリケーション メモリ制限を上げることをお勧めします。その方法については、 Maya で最大メモリが使用されるよう設定する(仮想メモリのリミットを増やす)を参照してください。
ポリゴン描画キャッシュを無効にして、大容量ファイルをより簡単にロードすることもできます。MAYA_DISABLE_POLYGON_DRAW_CACHE という名前の環境変数があります。ポリゴン描画キャッシュを無効にするには、この変数を 1 に設定します。
ポリゴン描画キャッシュを無効にすると、インタラクティブな描画パフォーマンスが遅くなります。この環境変数を 1 に設定したままにせず、この問題が発生するファイルで作業する場合にのみ変数を設定することをお勧めします。
アニメーション
- デフォーマの編集 > メンバーシップの削減(Edit Deformers > Prune Membership)を使用し、デフォーマによる影響を受けないコンポーネントを削除します。
オーディオ
- Maya にインポートされたオーディオ ファイルを使用しているときに、バックグラウンドでオーディオ機能を使用するアプリケーションを実行することはお勧めしません。オーディオを使用する他のアプリケーションを実行すると Maya がハングアップする恐れがあります。
ファー
- ヘアのの値を低くするとインタラクティブな描画スピードは大幅に向上します。ただし、、またはのプレビューが難しくなります。
- をレンダーするとリソースを大量に消費するので、必要以上に使用しないようにしてください。自動シェーディングはリソースを消費せず、レンダラを使用していれば、いくつかの取り込み可能なライトが提供されます。
モデリング
- ポリゴンのアトリビュートを使用します。
- を使用し、複雑なジオメトリを簡素化します。ポリゴン モデルは、共有されていない法線およびテクスチャ座標、マッピングされていないフェース、三角ポリゴンではない(三角化されていない)フェースを含まない方が表示速度が速くなります。
ダイナミクス
- リジッド ボディ ジオメトリのアトリビュートを使用します。
- シミュレーションを開始したり設定したりする場合は、パーティクル上のジオメトリが少ない状態で開始します。
クラシック Cloth
- 初期設定またはシミュレーションのテストのときは、コ リジョンをオフにします。
- アニメート設定をやなどにすると、シミュレーション速度が向上します。
- バッチ モードでシミュレーションを行います。
レンダリング
- を使用すると、パフォーマンス向上のためのヒントが得られます。詳細については、Maya のレンダー診断を参照してください。
- 複製されたシェーディング ネットワークを削除します。
アーティザン
- 可能な場合は、を広げます(設定エディタのセクション)。
- 可能な場合は、を使用します(設定エディタのセクション)。