3D-COATから書き出したAOテクスチャはLightwaveでどう使えばいいのか考える話
この記事はこちらの記事の続きです。
3D-COATから書き出したAOテクスチャはLightwaveでどう使えばいいのかという話と、LightwaveでAOを使う方法についての考察記事です。ライティングについてはまだ勉強不足なので、今回は"解説"と言うより"考察"する記事です。
- ■アンビエントオクルージョンの基本
- ■NewTekフォーラムでの意見
- ■考えられる4つの選択肢
- ■AOを合成するタイミング
- ■AOをレンダーバッファで出力できるようにする
- ■AOの強さを調節できるようにする
- ■ノードの構築例
- ■まだ考察中
- ■参考
■アンビエントオクルージョンの基本
まずはアンビエントオクルージョン(以下AO)の基本的な事について調べたので、それを箇条書きにしました。
AOの話
- AOは大域照明(グローバル・イルミネーション(略:GI))で得られるような描写を模したもの。
- AOのような描写は大域照明によって得られる。
- lightwaveは大域照明をサポートしているのでAOを使わなくても、同じような描写をシーンライトで得られる。
- AOはシーンライトでできた陰ではない。
- AOは陰ではなくオブジェクトの凹凸から得られる遮蔽。
- 必要ならばlightwaveにもAOを得るための機能がある。
- AOはシーンライトとは別の機能で得られる描写なのでライトの影響を受けない。
- シーンライトを無効にしても描画される。
下の画像では"シーン編集パネル"で全てのライトを無効にしています。
左下の"Final_Render"ではライトの影響が失われたため真っ黒になって何も描画されていいないのに対し、左上のAOバッファはライトの有無とは無関係に描画されています。
(AOバッファの出力方法は後に記載があります。)
AOベイクの話
- AOテクスチャは3D-COATの機能でAOをテクスチャに描き込んだもの(AOベイク)。
- 当たり前だがテクスチャに描き込まれた色なのでオブジェクトに固定されている。
- オブジェクトを回転させるなど角度を変えると固定された陰の描写も動いてしまうのでシーンライトによる影と差異が出て違和感が出る。
- 固定された背景などに向いている。
- 陰を得るためのレンダリングコストを減らすことができる。
下の画像は左が3D-COATでAOベイクしたときのオブジェクトの向きです。陰が球体の下側に落ちて自然に見えます。右が球体部分の角度を極端に変えた状態です。陰がテクスチャに固定されているので陰も動いてしまい不自然に見えます。
■NewTekフォーラムでの意見
Lightwave でAOテクスチャの取り扱いについてNew Tekのフォーラムにスレッドがあったのでこちらを参考にして考えてみました。
■考えられる4つの選択肢
1, AOを使わない
そもそもLightwaveは大域照明(グローバル・イルミネーション(略:GI))をサポートしているのでシーンライトのライティング次第でAOテクスチャが模しているような描写を得ることはできる。
シーンライトを使うので陰の向きや強さに正確さがあり、3D-COATのテクスチャを使わないオブジェクトとの描写の差異も小さくなる。
レンダリングコスト 大
よりフォトリアル向き。
2, AOテクスチャを使う
AOテクスチャを使えば3D-COATで行ったペイントの見た目に近づけることが容易になる。但しすでにテクスチャに描き込まれている(ベイク)ので後からは濃淡くらいしか調整ができない。
固定されておりオブジェクトを大きく回転させると違和感が出るため、使えるものが限定される。そのかわり改めて陰を描写するための計算が必要なく低コスト。
レンダリングコスト 小
ノンフォトリアルにも向く
3, Lightwaveの機能でAOを描写する
AOテクスチャを使わずLightwaveの"occlusion"ノードを使ってAOを描写する。
3D-COATとの見た目は比較的合わせやすい。
シーン内のオブジェクトを全てに"occlusion"ノードを使用すれば親和性は高くなる。
大域照明で行うより簡単で労力や演算が低コスト。
シーンライトとは別の機能なので、厳密にはライティングが合わない。
レンダリングコスト 中
ノンフォトリアルにも向く
4, 2と3を合わせる
AOテクスチャを使いつつ"occlusion"ノードも乗算で重ねる。
3D-COATとの見た目を合わせつつシーン内で親和をとるための調整幅を拡張できる。
レンダリングコスト 中
ノンフォトリアルにも向く
"Mixer"ノードを使い"ブレンドモード"を乗算にして重ねます。
"Fg Color"に入力した値がオプションの"不透明度"で調節できます。AOテクスチャと"occlusion"ノードの、どちらを基本色にして調節するかによって繋ぎ方を変える必要があります。
■AOを合成するタイミング
AOを使う場合、Lightwaveのレンダリング時に合成するか、別々に書き出してAftereEffctsなどのコンポジットで合成するかによってもフローが変わってくる。
■AOをレンダーバッファで出力できるようにする
AOをレンダリング後のコンポジットで合成や編集を行う場合はAOだけを分けて書き出す必要があります。その場合はレンダーバッファという機能を使うのですがデフォルトだとAOはレンダーバッファで出力することができません、そこでカスタムバッファを使ってレンダリングでAOをバッファ出力できるようにします。
①"レンダープロパティィ"パネルを開いて②"バッファ"タブの③"編集"メニューから"カスタムバッファを作成"を選び④開いたダイアログに任意の名前(今回は"AO")をつけてOKを押します。
⑤すると最下の"Cusutom"グループに作成した"AO"バッファが追加されます。⑥"AO"を選択すると下部にオプションパネルが開くので"適正サンプリング""ノイズフィルタリング"にチェックを入れます。⑦最後に"レンダー"欄にチェックを入れて設定完了です。"レンダー"欄にチェックを入れることでレンダリング時に該当のバッファが出力されるようになります。(このチェックはオプションの"レンダーバッファ"と連動しています。)
カスタムバッファを作成すると、"サーフェイス"ノードに同名の入力が追加されます。
ここに"Occlusion"ノードやAOテクスチャを読み込んだ"Image"ノードを繋ぐ事でAOをバッファとして出力できるようになります。画像は"Occlusion"ノードを繋いだ様子とそのレンダリング結果です。
出力結果
参考
Custom Buffers
https://docs.lightwave3d.com/lw2020/getting-started-with-rendering/buffer-list/custom-buffers
■AOの強さを調節できるようにする
"Occlusion"ノードだけではAOの強さが調節できません。そのような場合は間に"Gradient"ノードを挟みます。グラデーションを使ってAOの強さを調節できるようになります。
■ノードの構築例
ここまで考察したことを元に全部乗せでノードを組んでみました。
AOテクスチャと"occlusion"ノードを"Mixer"ノードで重ねて"Gradient"ノードで濃淡を調節したものを"Image"ノードに繋いで"color"テクスチャと重ねてLightwaveの最終レンダリングにAOが乗った画像として出力します。
また、同じ出力を"サーフェイス"ノードの"AO"バッファの入力につなぐことでAOのレンダリング結果だけをバッファとして出力できるようにします。
ここから用途に応じて接続やノードを減らして使用すると良いかと思います。
最終レンダリング結果
AOバッファレンダリング結果
■まだ考察中
AOを使ってレンダリングコストを下げるにはグローバルイルミネーションや通常のライティングを簡略化する必要があるのでは?と、考えるのですが、ちょっとまだわからないです。
ライティング全般を勉強するときにまた何か分かるかもしれません。その時はまた記事にしようと思います。
■参考
"グローバルイルミネーション"について
GIについてはwikipediaがわかりやすかったです。
"アンビエントオクルージョン"について
"アンビエントオクルージョン"について検索した中でこちらのブログがわかりやすかったです。
ambientocclusion.hatenablog.com
Lightwaveのカスタムバッファを使ってAOをバッファ出力している動画です。
この動画の中で「Lightwave2018のカスタムバッファの出力結果は壊れている」というコメントが有るのですがLightwave2020では修正されていて、出力結果に問題は無いようです。
上の動画の中で使っている有料プラグイン。
これを使えばひとつのノード編集パネルでシーン内で使用しているオブジェクトの全てのマテリアルにアクセスできるようになり、シーン全体にポストプロセス的に処理を追加できるようです。AOなど全て同じ設定で済むものをマテリアルごとにひとつづつ開いてそれぞれ設定する手間が無くなるようです。
TrueArt's Global Materials