OctaneRender:ディスプレイスメントとマスクの設定
https://www.youtube.com/watch?v=T5i_RnfHmzsこのビデオではOctaneRenderにおけるディスプレイスメントの設定と、そのマスクの設定方法について解説していきます。
Octaneのマテリアルの中にはDisplacement (ディスプレイスメント)という項目がありますので、このDisplacement (ディスプレイスメント)に対してディスプレイスメントテクスチャを設定します。マテリアルのDisplacement (ディスプレイスメント)を選択した状態で、左側メニューからNew Displacement (新規ディスプレイスメント)ボタンをクリックしてみます。そうすると、Displacement (ディスプレイスメント)としてTexture Displacement (テクスチャディスプレイスメント)とVertex Displacement (頂点ディスプレイスメント)、Vertex Displacement Mixer (頂点ディスプレイスメントミキサー)の3種類が提供されています。
Texture Displacement (テクスチャディスプレイスメント)というのは、画像テクスチャを使い、高速なボクセルベースのアプローチによりディスプレイスメントを実現します。この手法の制限として、必ずUVマップが必要となってきますが、基本ディスプレイスメントを行うには、この手法を選択すると良いでしょう。Vertex Displacement (頂点ディスプレイスメント)というのは、従来のModoでのディスプレイスメントと同様、ジオメトリを分割して、その頂点に対して高低差を付けることでディスプレイスメントを実現するというやり方ですので、メモリを多く消費することになります。Vertex Displacement Mixer (頂点ディスプレイスメントミキサー)はディスプレイスメントをミックスするための機能を提供しますが、ミックスするディスプレイスメントはVertex Displacement (頂点ディスプレイスメント)のみであり、Texture Displacement (テクスチャディスプレイスメント)はサポートしていません。
では実際にTexture Displacement (テクスチャディスプレイスメント)を見てみましょう。New Texture Displacement (新規テクスチャディスプレイスメント)をクリックすると、Texture Displacement (テクスチャディスプレイスメント)のノードが追加されますので、こちらにテクスチャを追加します。Texture (テクスチャ)を選択した状態で、New Texture (新規テクスチャ) > Grayscale Image (グレースケール画像)を追加します。ここでグレースケール画像を読み込んで、Filename (ファイル名称)にその画像の名称を接続してみます。例えばプリセットを開き、Assets > Images > Misc > modosLogoを読み込んでみましょう。クリップタブから画像をスケマティックビューへとドラッグアンドドロップし、ファイル名称をFilename (ファイル名称)へと接続します。わかりやすいように、同時にこのGrayscale Image (グレースケール画像)の出力をOctaneマテリアルのDiffuse (ディフューズ)へと接続しましょう。Grayscale Image (グレースケール画像)のBorder Mode (境界モード)をUVともWhite Color (白色)に設定し、Transform Value (トランスフォーム値)のScale (スケール)値を調整します。この状態だとただ単に画像が貼り付けられているだけのように見えますので、Displacement (ディスプレイスメント)の強さを調整します。
Texture Displacement (テクスチャディスプレイスメント)を選択し、Height (高さ)プロパティを0.05に設定してみます。そうするとディスプレイスメントによる凹凸が確認できるようになります。この凹凸をより滑らかに表現するには、Filter Type (フィルタータイプ)を調整すると良いでしょう。Filter Type (フィルタータイプ)をBox (ボックス)もしくはGaussian (ガウス)に設定し、Filter Radius (フィルター半径)の値を調整すると、より滑らかなディスプレイスメントが高速に実現できるようになります。
このようにTexture Displacement (テクスチャディスプレイスメント)マップは便利に使えますが、基本的に画像テクスチャに対して適用するものであり、プロシージャルテクスチャに対してはそのままでは使用することはできません。
試しにプロシージャルテクスチャを適用してみましょう、今まで使用したロゴ画像は接続を解除し、バックドロップでひとまとめにしておいておきます。もう一度Texture Displacement (テクスチャディスプレイスメント)のTexture (テクスチャ)を選択した状態で、New Texture (新規テクスチャ)からプロシージャルテクスチャのカテゴリにあるNoise (ノイズ)を追加してみます。すると正しく接続はされているものの、実際にはテクスチャの効果は表れていません。これは接続しているのが、画像テクスチャではないためです。
プロシージャルテクスチャをTexture Displacement (テクスチャディスプレイスメント)へと接続するには、プロシージャルテクスチャをいったん画像テクスチャへとベイクして、そのベイクした画像をTexture Displacement (テクスチャディスプレイスメント)へと接続します。New Texture (新規テクスチャ) > Baking Texture (ベイクテクスチャ)を追加すると、ベイク用のテクスチャが追加されます。このBaking Texture (ベイクテクスチャ)のTexture (テクスチャ)へとプロシージャルテクスチャを接続し、Baking Texture (ベイクテクスチャ)のOutput (出力)をTexture Displacement (テクスチャディスプレイスメント)へと接続しなおします。そうするとプロシージャルテクスチャをリアルタイムにベイクし、画像テクスチャへと変換したうえでTexture Displacement (テクスチャディスプレイスメント)で活用することができます。
このようにTexture Displacement (テクスチャディスプレイスメント)のほうで、画像やプロシージャルに対してもディスプレイスメント処理を行うことができるのですが、UVマップを保持していない、または一部のプロシージャルテクスチャに対してはTexture Displacement (テクスチャディスプレイスメント)で正しく行えないという場合がありますので、そういった場合にはVertex Displacement (頂点ディスプレイスメント)を使います。
ではVertex Displacement (頂点ディスプレイスメント)を見ていきましょう。Displacement (ディスプレイスメント)の接続を解除し、今度はNew Displacement (新規ディスプレイスメント) > Vertex Displacement (頂点ディスプレイスメント)を追加します。Texture (テクスチャ)を選択した状態で、New Texture (新規テクスチャ) > Noise (ノイズ)を追加してみます。そうすると、ポリゴンがすべて分離した状態になっています。ModoのOctane Renderの場合、Vertex Displacement (頂点ディスプレイスメント)を使う時には、ディスプレイスメントを適用するメッシュを選択し、Octaneタブの中にあるLoad Cage (ケージ読み込み)オプションを有効にしてください。そうすることで、正しくディスプレイスメントが行えるようになります。デフォルトの状態だと粗すぎて正しくディスプレイスメントがかからない場合もありますので、その場合にはVertex Displacement (頂点ディスプレイスメント)のSubdivision Level (分割レベル)を調整するようにしてください。これはメッシュを分割するレベルとなりますので、値を上げれば正しく変形しますが、その分メモリ消費量も多くなります。
では、最後にTexture Displacement (テクスチャディスプレイスメント)のマスク処理について解説します。先ほど、ロゴ画像によるディスプレイスメントとプロシージャルテクスチャによるディスプレイスメントを解説しましたが、今度はプロシージャルテクスチャによるディスプレイスメントの適用範囲を、ロゴ画像でマスクしてみます。
ベイクしたプロシージャルテクスチャをDisplacement (ディスプレイスメント)に、ロゴ画像の方をDiffuse (ディフューズ)へと接続してみます。この二つのテクスチャを組み合わせるには、Mix (ミックス)テクスチャを使います。New Texture (新規テクスチャ) > Operators (オペレータ) > Mix (ミックス)ノードを追加し、Amount (量)にロゴ画像、First Texture (第1テクスチャ)にプロシージャルテクスチャを接続します。このMix (ミックス)をさらにベイクして画像テクスチャにしたいので、新たにBaking Texture (ベイクテクスチャ)を追加し、Mix (ミックス)をBaking Texture (ベイクテクスチャ)へと接続し、その出力をTexture Displacement (テクスチャディスプレイスメント)へと接続しなおします。そうするとロゴ画像の中だけに対して、プロシージャルのディスプレイスメントがかかるようになります。これを反対にしたいのであれば、プロシージャルテクスチャの接続先をFirst Texture (第1テクスチャ)からSecond Texture (第2テクスチャ)へと切り替えると、簡単にロゴ以外の部分に対してディスプレイスメントがかけられるようになります。
このように、OctaneRenderのディスプレイスメントの場合、従来のModoのディスプレイスメントと比較し、高速にディスプレイスメント効果を実現できるようになります。