Unity は、プロシージャルマテリアル として知られている新しいアセットの種類を内蔵しています。これらは 基本的には、使用するテクスチャが実行時に生成でき、 事前に定義して保存されていることを除いて、標準的な材料と同じです。
プロシージャルなテクスチャを生成するスクリプトコードは、一般的には、ビットマップイメージよりも、ストレージと伝送量がはるかに少ない量で済みます。 そして、そのプロシージャルマテリアルは、ダウンロード時間を短縮することができます。 さらに、生成スクリプトは、実行時に、マテリアルの視覚的特性を変化させるために変更可能なパラメータを備えることができます。 これらのプロパティーは、壁の中のレンガのカラーバリエーションからサイズまで、何かしらの操作をすることができます。 多くの変形を、単一のプロシージャルマテリアルから生成できるだけでなく、 マテリアルをフレームごとにアニメーション化できることを意味します。 これを用いることで多くの興味深い視覚効果が可能です。例えば、石や酸に触れて、ダメージを与えられるキャラクターを想像してみてください。
Unity のプロシージャルマテリアルシステムは、Allegorithmic によって開発された、Substance と呼ばれる業界標準の商品に基づいています。 http://www.allegorithmic.com/.
Unity 5.2 では、プロシージャルマテリアルは、現在 Standalone(Windows、Mac、Linux スタンドアロンと Web Player)、Android と iOS、PlayStation 4 と Xbox One 向けに完全サポートされています。生成するプロシージャルマテリアルは、CPU ベースで、これらのプラットフォーム上の全ハードウェア構成で動作します。
その他のすべてのプラットフォーム(コンソール機、WSA/WP8、WebGL、Tizen)では、Unity はビルド時に通常のマテリアルをそれらをプリレンダリング (“ベイク”) されます。 これは明らかに Procedual generation の実行時の利点を否定していますが、 エディターの基本的なマテリアルのバリエーションを作成することができることで、それはまだ有用です。
プロシージャルマテリアルは、他のアセットと同様にインポートすることができ、Substance Archive ファイル(SBSAR) として提供されています (直接、Assets フォルダーの上にドラッグアンドドロップするか、 Assets->Import New Asset… を使います)。 Substance Archive アセットは、一つ以上のプロシージャルマテリアルを含み、これらに必要なすべてのスクリプトと画像が含まれています。 コンパイルされていない SBS ファイルはサポートされません。
異なる方法で実装されているにも関わらず、Unity は他のマテリアルと同様にプロシージャルマテリアルを取り扱います。 例えばプロシージャルマテリアルをメッシュに割り当てるには、他のマテリアルと同様に メッシュ上にドラッグ&ドロップするだけです。
おのおののプロシージャルマテリアルは、特定の種類のマテリアルを生成するカスタムスクリプトです。これらのスクリプトは、 インスペクターでの割り当てのために公開する変数を持つことができるという点で Unity スクリプトに似ています。 たとえば、“Brick Wall” Procedural Material を使用し、レンガの層の数、レンガの色とモルタルの色を設定するプロパティーを 公開することができます。これは、潜在的に単一のアセットから 無限のマテリアルのバリエーションを提供します。これらのプロパティーは、MonoBehaviour スクリプトのパブリック変数と ほとんど同じ方法で、実行時にスクリプトから設定することができます。
さらにプロシージャルマテリアルは複雑なテクスチャアニメーションを取り扱うことができます。例えば、 時計の針または床を這うゴキブリをアニメーションできます。
プロシージャルマテリアルは手続き生成したテクスチャや保存されたビットマップの任意の組み合わせで動作することができます。 また、含まれるビットマップイメージをフィルタして、使用する前に修正することができます。標準マテリアルとは異なり、 プロシージャルマテリアルは解像度に依存しないテクスチャを可能にする SVG ファイルの形式でベクトルイメージを使用することができます。
0 からプロシージャルマテリアルを作成するために利用可能なビジュアルな設計ツールを使用し、ノードベースで、 芸術的なツールに見られるような種類に類似した編集を行います。これは、ほとんど、あるいはまったく コーディングの経験がないアーティストにも作成しやすくなります。例として、ここに、Allegorithmic の Substance Designer からの スクリーンショット、建設中の“brick wall”プロシージャルマテリアルを示します。
Unity のプロシージャルマテリアルは、業界標準物質製品に基づいているため、プロシージャルマテリアル アセットは Unity 自身のアセットストアを含むインターネットからソースを容易に入手可能です。Allegorithmic の Substance Designer は、プロシージャルマテリアルをつくるのに用いられることができますが、 Substance 技術を取り入れて、Unity とまったく同じように動く他のアプリケーション(例えば、3D モデリングアプリケーション)があります。
プロシージャルマテリアルは、本質的にビットマップイメージより少ないストレージを使用する傾向があります。しかし、トレードオフは、 それらはスクリプトをベースにしてマテリアルを生成するために、これらのスクリプトを実行すると 、いくつかの CPU と GPU のリソースを必要とすることです。より複雑なプロシージャルマテリアルでは、実行時のオーバーヘッドも大きくなります。
プロシージャルマテリアルは、そのパラメータが、最後に生成されてから変更された場合には マテリアルのみアップデートされるキャッシュの形式でサポートしています。これに加えて、いくつかのマテリアルは、 理論的に変更することができ、多くのプロパティーを有することができます。少数だけは、実行時に変更する必要がまだあります。 このような場合、それがマテリアルの前の世代からできるだけ多くのデータをキャッシュするために 役立つ変更されない変数を Unity に知らせることができます。これは多くの場合、大幅にパフォーマンスが向上させます。
プロシージャルマテリアルは、隠れた、システムワイドの変数、例えば経過時間や多くの プロシージャルマテリアルインスタンスを参照することができます(このデータはアニメーションのためにに役立つかもしれません)。これらの変数の値の変化は、 例え、明確に定義されたパラメータのいずれも変更していない場合でも、プロシージャルマテリアルにアップデートを強制することができます。
プロシージャルマテリアルは、また、エディターで便利なように使用することができます(すなわち、 プロシージャルマテリアルのパラメータを設定し、その後、ベイクすることで、標準マテリアルを生成することができます)。これは、 マテリアル生成の実行時のオーバーヘッドを取り除きますが、当然、ベイクされたマテリアルは、ゲームプレイ中に変更 またはアニメーション化できません。
プロシージャルマテリアルの複雑さは、実行時のパフォーマンスに影響を及ぼす可能性があるので、Allegorithmic は、 プロファイリング機能をその Substance Player ツールに搭載しています。このツールは、 Allegorithmic’s website から無料でダウンロードすることができます。
サブスタンスプレイヤーは Unity に統合されている最適化されたレンダリングエンジンと同等のエンジンを使用するため、 レンダリングの測定は Substance Designer よりも Unity でのパフォーマンスを正しく表現します。