レンダレイヤを作る

初期のレンダリングを組み込む状態

現在レンダレイヤは空の状態です、ここから始めたいと思います。

モデルメッシュ内部フエーズの形状は四角形で有る事が絶体の条件です、但し端末のフエーズに関してはその限りでは有りません。

レンダレイヤ未使用でのレンダリングですがこのレンダラ光学効果を指定する事は出来ません。これからレイヤーの指定から合成までこのU552を使い皆さんに説明します。

マスターレイヤの静止画像です、一番基本の画像で光学効果は設定出来ませんが!ま~綺麗ではあります。

これからも装備が増えて行きます

現在試験撮影の環境として球形のドームが指定してあり、その内部にはカメラとアンビエントライトが配置してあります。

その状態をメンタルレイで撮影しました、ま!綺麗では有るのですが問題が多々あるのですがそれらを述べて見たいと思います

海面を挿入しました(U552の船出)

現状のプロジェクトに海洋を追加しています、凄いでしょ!。このリファレンスエデイタとは本当に素晴らしいのです。更にOBJは巨大化しています。

かっこいいですね静止画だけで多分50枚は軽く超えて行きます。これを正規にレンダリングしたら素晴らしい画像になりますよ!きっと。その内に潜航して行きますよ!本当に楽しみですね、胸がワクワクして来ます。

各レンダレイヤ内部には光源が必要

各レンダレイヤ内部にはOBJと光源が必要です、又オバーライドを有効にするのは忘れない様にして下さい、レンダーレイヤの名前はOBJの名前を指定するのが良いのではと私は思います、名前を指定しない場合後から苦労します面倒くさがらず名前を特記しておきましょう。

私の場合には各ブロック毎に別けでありますからレイヤの管理は非常に楽ですこの辺にもリファレンスエデイタの効果が存分に表れていると思います如何でしょうか。

レンダレイヤに含めるメンバーを選択してレイヤを作成します

レイヤを選択してドームと光源が入って居る事を確認します。

レンダリングを試験的に作成しました。現在のレイヤーにはこの静止画が一枚です

このレンダーレイヤには勿論レンダーパスも設定する事が可能ですがまだ設定するべきでは有りません。

ドーム環境の設定を見ておきましょう

単純ですが設定がしてあります。このドーム中心にU552が組み込まれて来ます、そのように位置合わせがしてあります。

この時点で解る事を想定します(マスク)

例えばこの船を海に浮かばせるのであれば喫水線より下側は海面の下側になりますから当然に喫水線より下側ま隠す為にマスクが必要になります。

しかしそのマスクは海面のレンダーから作成しなければ行けません、その辺はまだ後で良いと思われます。

レンダー毎に設定を行います

カメラとかフォルダー名とかをシンプルに設定して置きます。後からでも変更できますから覚えやすい名前を入れて下さい(現在でも和文はダメだと思いますがハッキリ解りません)。

TMPフォルダ内にファイルが作成される

以下の様にTMPフォルダー内部に静止画が作成されています。

同一構成で三本プロジェクトを作成

同一な構成で三本作成しました、資産を変更すればこの3本全てが更新されるので不都合は有りません、例えばデッキガンの資産に変更追加を行えば全てのプロジェクトに更新が自動的に行われます、又U552のスケールも自由に変更が可能でスケール変更を加えた所で資産には変更される事は有りません、あのプロジェクトは1/10の倍率でBは2倍とか自由に行えます、今回の場合海面に浮かべるプロジェクトで縮尺りを変えていますこれがアセットを利用する大きな利点です。

プロジェクトの構造

スケールが異なるのと大海が挿入されているだけで他のプロジェクト構成は全てが同一の資産を参照しています。

この作業途中場合MAYAを立ち上げながらネットを立ち上げています、物凄く素晴らしい動作速度度リソース等々にもまったく支障が起きません、リファレンスとアセット恐ろしく素晴らしい。

構成は外部カメラでレンダリングする船外撮影と室内の六部屋内部から撮影するシーン専用レンダーレイヤを分けて作成して行きます、各部屋の内部には室内カメラが一台設置されていますし又光源も各部屋に配置済みです、どんなに変更追加を資産側で変更してもすべてのプロジェクトにその加えた変更と修正は反映されて来ますからまったく不都合は発生しなのです。

プロジェクトである大海のシーンにはドーム環境は必要ない為に非表示にしてあります。

画面右側のアウトラインウインドウ内部をご覧ください、プロジェクトには海洋が追加されています、物凄い大きさのプロジェクトになっています。

複数のカメラが存在します

赤枠内部には複数のカメラがリストアップされています。カメラはアニメーションフレームワークを使わなくてもエックスプレションを使い制御する事も出来ます。もっともプロジェクトは三本に別けたのですが、別けずともこのプロジェクトだけで事が済むのですがね!バックアツプとでも取りあえず考えれば良いでしょう。

これからこのプロジェクトで使用している資産に修正と変更を加えて行きますが、まずはレンダレイヤを作成して行きましょう、あ!それからキャラクターセットアップを使い構造体化して置きTRX(アニメ)を使いやすくして行きます。

カメラアングルを変えて自動でレンダリング

下記の静止画像はレンダーレイヤを使わずにそのままMAYAに任せて自動的にレンダリングした静止画像です。

単純に綺麗(船が綺麗すぎです、もっとサビも発生しているはず)ですがね(水しぶき、航跡がまだありません)!やはり船は大海が似合ますね、波の設定はエックスプレションで一括に指定しています。

不具合を見てから実際に経験する

レンダーレイヤを二つ追加しました、大海用とU552です、この後レンダリングしますと?

レンダレイヤを設定した場合には不具合が発生します。

それはMAYAでは画面を単純に重ね合わせる為にレンダリングの順序で重ね合わせされてこのような事柄が発生して海面の上にU552の全体が乗せられて表示されてしまいます、これでは不自然です。

これらの理由によりマスク処理を行う必要性が出てきます、もっと詳細に観察すれば不具合が多数表れています。

でも海面上に伸びた光跡いいですね、しかし甲板に光跡が表れていませんし不自然ですなのでこれらの光跡をレンダーパス機能で効果を静止画として記録して行きます。

静止画像で光跡効果が独自に作成されていて、それらの効果を主レンダレイヤ内のモデル静止画上に演算処理を行いますと甲板に光跡とか反射等々の効果が表れてきます。

貴方はこんな静止画像をどこかで見た事ないですか?

本来ここでの静止画像は海面の下にあるU552下部の範囲は海面の下になければ行けません。

又甲板上には反射された光跡が表れて居なければ行けないのです。

船が飛行しています(笑い)これでは御話にはなりません。

この画像を見れば明らかなようにレンダレイヤの前後関係状況はMAYAでは把握せずに単純に重ねられた静止画像(マスターレイヤ)が制作されているのが理解出来ます。ですからレンダーパスを使う為にはこの辺を完璧に処理する能力をMAYAから貴方に要求されて来ます。

もう一度編集画面を見て下さい、レンダーレイヤの状況をもう一度ご覧ください。

海洋とU552に対してレンダーレイヤが構築されています。

所で海面に光跡を描く方法を貴方はご存知ですか、この辺も御説明して行きます。

MAYAは非常に奥深いノウハウが必要なんです、簡単には応用は出来ません基本が非常に大事なんです。モデリング方法などはどうでも良い!!基本を覚えて下さい。

レンダレイヤとパスライン

さてこれからマスクとレンダレイヤーを実際に作成しながらレンダパスを組み込みCompositeに渡すファイルを作成し MAYAに付属するCompositeでどの様に合成を行うのか実際に御見せいたします。

全資産を参照し組み立てる事が可能です

U552のプラモデルと同じように部品を参照しその参照部品の移動・拡大等々の変更を参照側で行えば常時参照部品がその位置に自動的に移動して再現され表示してくれます、資産側で変更が行われているのであればその変更箇所も反映されて表示されてきます。

これがリファレンスエディターの素晴らしい所です、拡大・縮小・移動等々の編集も可能ですし、資産である部品単体には変更を加える事は出来ませんが、資産を直に開いて編集するとこの資産を参照している全てのプロジェクトには自動的に参照資産部品を自動的に更新を加えた状態で表示されます。

例えば拡大率を参照側で変更しても、資産は安全です(変更されません)、しかしながら資産側を変更すれば全ての参照プロジェクトに変更通知され参照部品はすべて更新されています。

ですから資産と参照側である全体のプロジェクトに対して自動的に更新ヶ所が反映されて来ます、ですから参照側でどんどん勝手に自由に進めて行き、その後から資産に変更と追加を自由に行う事が可能です。素晴らしい機能です。

アセット+リファレンスエデイタの利点

アセットで資産として部品化して置くとレンダーレイヤに組み込む事が非常にシンプル化して来ます、私の様に全ての部品にアセット宣言を追加して置きさえすればこのままでレンダーレイヤに組み込む事が出来るので素晴らしい機能です。

レンダーレイヤを作る部品を選ぶ

特定の部品でレイヤを作成します

レンダーレイヤが作成されました

撮影環境を追加します(光源も必要)

各レンダーレイヤには光源を必ず配置しなければ行けません。

この場合試験環境内部にアンビエントライトが含まれています。、

環境が同一レイヤに追加されました

確かに円形状の環境が作成されたレイヤー内に含まれました。

マスターレイヤには変化なし

マスターレイヤを選択すると全ての参照部品が表示されます。

作成したレイヤをレンダリング

作成したレンダレイヤを選択すると内部に含まれる参照部品が表示されて来ます。

特定のレンダで作成された静止画像

選択した阿新しいレイヤをレンダリングしました。

レイヤ内部だけの静止画が確かに出来ています、その他の部品は無視されています。

リファレンスエディターとOutlinの連携

参照した資産をOutlinに組み入れた後に再度組いれた参照資産をマトメテ選択を行いアセットでマトメて初期化します。

Outlin内でアセットとして記録して置くと下記の様に自動リファレンスエディタの資産参照のチェックを外して変化すると自動的にOutlinのアセットメンバーも比例して変化します。

リファレンスエデイターで左側のチェックが入って居るとOutlineに項目が表れます。

チェックを外すとOutlineに含まれるメンバーである資産が消えて表示されなくなります、がチェックを再度入れると再びOutlineのメンバーが再組込みされて表示されて来ます。

チェックを外した時の右下側のOutli内部nのアセット一覧表示です(1行消えています)が全体としての参照資産に対する構成は何も変化していないのです。

参照側の資産でチェックをすべて外すとOutlineのアセットメンバーは全てのメンバーが一覧から表示されなくなります。

実際に海面下に隠れる部分のマスク

レンダレイヤは2個作ります。

  • U552の外側部分をマトメテ組み込みました
  • 海面を組み込みました
  • 各光源を両方のレンダレイヤに組み込みました
  • その他の部品は無視でレンダリングしません
  • オバーライドをカクレンダレイヤに設定しました

これから海面のマスクを作成します、いわゆる海面下の船体部分だけを黒く塗りつぶします但し合成作業で処理しますのでCompositeで海洋とU552を合成して見ましょう。

赤色の枠内を選択してU552のレンダレイヤに含め+光源も同じに含めます、OCANには海洋をそっくり組み込みレンダーレイヤを作成してありますなをマスターレイヤーは使いません。

実際にレイヤに組み込まれてた資産

実際に組み込まれている光源とU552の資産をレイヤーを選択した後でOutlinの内部で選択してワイヤーモードで確認します、選択するとハイライトされて来ますので解ります。

オバーライドは忘れずに確認

U552レイヤの組み込み状況

OCANレイヤーの組み込み状況

上下静止画像でレンダーレイヤに注目して下さい。

マスク画像はMAYAでは使えません

マスク静止画像は合成アプリケーションで使いMAYAでは使えません。

なぜこのような面倒くさい処理が必要なのでしょうか?結論から言えばカメラが移動されるとカメラのレンズから見た物体の順序(物体の見え方)も動的に入れ替わるからなんですです。

合成アプリケーションでは合成順序は通常一種類のプログラムを作成します。

この流れの中で適材適所にマスクは使われていきます、一つの合成過程処理の中で演算(四則演算と論理和演算 等々を指します)の仕方をプログラムで組み込んで行きます、これらの合成順序は通常では固定になり一度プログラムすれば合成順序もマスクの順序方法も確定されていきます。

正しくプログラムさえ出来ていればカメラが動的にどんなに動いてもマスク及び合成順序が正しくプログラムされて居れば合成アプリケーションではマスクを自動的に組み合せ合成は正しく行われて行きます、静止画像の合成順序を手動で入れ替えるのは不可能なんです。

海洋の設定は一括に行います

海洋シェーダの動きはエックスプレツションで一括に設定してしまえば良いのです、動きも各パラメータを瞬時に眺めながら修正出来て便利です、大海の動きを決めるパラメータはエックスプレション内部に記載を行い(簡単なプログラムです)大海シェダのパラメータ等々も多数同時に一覧を見ながら切り替えする事が可能になります。

下記の画像は一括で海洋のパラメータリストをプログラムしてここで設定しています。覚える必要もありませんし、なにかと便利になります。

画面右下のエックスプレツションをご覧ください、コメントも各パラメータに記載出来てしまいますしダイナミック項目も別々にコメントを付加して一度だけリストして置けば後の作業にも効率的に応用が出来てしまいます、皆さんも是非応用してください。

エックスプレションのプログラム例

これらのプログラムは皆共通に使えます、波の特徴もパラメータを変えれば瞬時に変更が可能になります、なを下記のプログラムはフレーム1の時点だけ初期化を行うようにして有ります。

//=======================================================
//==================== 海洋シェーダ =======================
//=======================================================


/*
if(frame==1){//White Caps
//========================================================
//==================海洋アートリビュート==========================
Destroyer_oceanShader1.waveSpeed =1.0;//波のスピード 1.0
Destroyer_oceanShader1.observerSpeed =0.0;//オブザーバーのスピード 0.0
Destroyer_oceanShader1.numFrequencies=12.0;//周波数の値 0.0
Destroyer_oceanShader1.waveDirSpread =0.2 ;//波の方向スプレッド 0.33
Destroyer_oceanShader1.waveLengthMin =0.3;//波長の最小 0.3
Destroyer_oceanShader1.waveLengthMax =40.776;//波長の最大 34.048
//================= 波のピーキング ===========================
Destroyer_oceanShader1.foamEmission =0.291;//波の放出 1.0
Destroyer_oceanShader1.foamThreshold=0.615;//波のしきい値 0.0
Destroyer_oceanShader1.bumpBlur =0.050;//バンプのブラー 0.0
Destroyer_oceanShader1.horizonFilter=1.0;//水平線フイルター 1.0
//========================================================
//========================================================
}
*/


if(frame==1){
//========================================================
//==================海洋アートリビュート==========================
Ocan:Destroyer_oceanShader1.waveSpeed =1.0;//波のスピード 1.0
Ocan:Destroyer_oceanShader1.observerSpeed =0.0;//オブザーバーのスピード 0.0


Ocan:Destroyer_oceanShader1.numFrequencies=12.0;//周波数の値 0.0
Ocan:Destroyer_oceanShader1.waveDirSpread =0.2 ;//波の方向スプレッド 0.33
Ocan:Destroyer_oceanShader1.waveLengthMin =0.3;//波長の最小 0.3
Ocan:Destroyer_oceanShader1.waveLengthMax =40.776;//波長の最大 34.048

//================= 波のピーキング ===========================
Ocan:Destroyer_oceanShader1.foamEmission =0.0;//波の放出 1.0
Ocan:Destroyer_oceanShader1.foamThreshold=0.510;//波のしきい値 0.0
Ocan:Destroyer_oceanShader1.bumpBlur =0.050;//バンプのブラー 0.0
Ocan:Destroyer_oceanShader1.horizonFilter=1.0;//水平線フイルター 1.0
//========================================================
//========================================================
}

if(Ocan:hazeFluid.Kep_Frame==0.0) Ocan:hazeFluid.Kep_Frame=frame;
else {
if(Ocan:hazeFluid.Kep_Frame!=frame) ;
}