Unity がカスタムレンダーテクスチャを更新する場合、デフォルトでは、マテリアルを使って一度にテクスチャすべてを更新します。カスタムレンダーテクスチャを使うと、特定の更新を行うゾーンを定義することができ、必要なだけゾーンを作成して順序を決めて処理することもできます。
Update Zone (更新ゾーン) は、複数の目的に利用できます。例えば、テクスチャ上に複数の小さなゾーンを作り、テクスチャに水滴を飛び散らせてから、リップルをシミュレーションするためにフルパスを実行します。テクスチャ全体の更新は不要であることがわかっている場合に、最適化として使用することもできます。
更新ゾーンには、それ自体に一群のプロパティがあり、Update Zone Space がディスプレイに表示されます。座標はテクスチャの次元によって異なります。2D で Cube テクスチャの場合は 2D、3D テクスチャの場合は 3D です。
カスタムレンダーテクスチャのほとんどの機能は、スクリプティング API でアクセスできます。スクリプトを使って、マテリアルのパラメーター、更新頻度、更新ゾーン、更新のリクエストなどを変更することもできます。
カスタムレンダーテクスチャが更新または初期化されると、次のフレームは現在のプロパティを使用してレンダリングされます。これにより、このテクスチャを使用するマテリアルに最新の結果が保証されます。例えば、以下のスクリプトでは、Unity は 2 番目の Update Zone 配列を使って 2 つの更新を行います。
customRenderTexture.updateZones = updateZones1;
customRenderTexture.Update();
customRenderTexture.updateZones = updateZones2;
customRenderTexture.Update();
注意Unity では、カスタムレンダーテクスチャの更新または初期化は、Update() または Initialize() の呼び出しと同時には行われません。これは、常に次のフレームの開始時にカスタムレンダーテクスチャが更新、初期化されるためです。
カスタムレンダーテクスチャをダブルバッファリングすることができます。このためには、Custom Render Textures コンポーネントで Double Buffered を有効にするか、CustomRenderTexture.doubleBuffered を使用します。
ダブルバッファリングとは、1 つのカスタムレンダーテクスチャの中に 2 つのテクスチャがあり、それぞれが更新されるたびに交換されることを意味します。これにより、カスタムレンダーテクスチャに新しい結果を書き込みながら、最後の更新の結果を読み取ることができます。
ダブルバッファリングは、すでにテクスチャに書き込まれたコンテンツをシェーダーで使用する必要があるものの、古典的なブレンドモードで値を混ぜることができない場合に特に有効です。また、シェーダーが直前の結果から異なるピクセルをサンプリングする場合にも必要です。
パフォーマンスに関する注意: ダブルバッファリングは現在のところ、各スワップでテクスチャのコピーを使用するため、実行される頻度とテクスチャの解像度に応じてパフォーマンスが低下する可能性があります。