ども、淡波です。
Blenderの習熟度で言えばまだまだ素人の域を出ないのですが、むりやり(w)仕事でも使っている関係上、結構いろいろ試してみたりはしています。
先週のブログ記事『今週の一枚:ん? なんか見たことあるような……』で、あるアニメーションを作っているということを書きました。
ある方から引き継いだBlenderのデータにアニメーションをつけていて、レンダリング時間を短縮するために様々なチューニングを施しているのですが、もし、Blenderをお使いの方が読んでいたら、きっと興味を持っていただけたのだろうなあ……と思い、今回の記事を書くことにしました。
さて、NPRってなんでしょ?
から、ですね。
CGをやっていると、「写真みたいにリアルにする」ことが一つの目的だったりします。NPRというのはその正反対で、ノン・フォトリアリスティック・レンダリング、つまり、「写真みたいじゃない画像化」ということです。
この『とろろ姫の歌』のPVもそうですね。こちらは平面のアニメ調ですが。
さて、今回最初にいただいたデータも、どちらかというとNPR系のマテリアル設定になっていました。レンダリング時間を短くするため、反射や透過などの処理は一切省き、ディフューズカラー(=拡散反射色)のみの設定です。こういった設定だと、「写真みたいじゃない」というか、人形劇っぽい感じになります。光沢のない塗料で人形を塗った感じで、ある意味リアルになるんですよね。
さて、その状態でレンダリングした画像がこれ。
レンダリング時間は約1分50秒です(core i7 dual Macbook pro)。
ノイズをある程度減らさなければならないので、サンプル数は100です。これでも、ちょっと絵がノイジーですよね。
そして、今回チューニング済みのレンダリング結果がこれ。
レンダリング時間は約5秒で、実に22倍に高速化しています。サンプル数はたったの4です。
Cyclesレンダラーを使用していますが、これならInternalレンダラーと全く遜色のない計算時間ですね。むしろ速いくらい?
普通なら、ノイズだらけで見られたものではありませんが、こちらの画像だと、むしろオリジナル状態のレンダリングよりノイズが少ないですよね。
もちろん、オリジナルの自然な光の感じはまったくありませんし、雰囲気もかなり壊れています。でも、アニメーションを作る以上、レンダリングにかかる時間は最も大事な要素のひとつです。4,000フレームを100秒レンダリングすると、実に111時間もかかります。個人で、しかも「お手伝いで」作るCGのレベルではありません……!
雰囲気については手法を変えることで逆にプラスできる部分もあります。地面や山、背中のタンクなどは、面白い感じになっていると思います。しかも、絵はこれで完成ではありません。こちらをもとにしてコンポジットを行なった画像が冒頭にあげたもの。コンポジットのレンダリングにかかる時間は約1秒です。もちろん、オリジナル版を使う場合もそのまま完成ではなく何らかのコンポジットが必要なので、この時間は同程度ということになるでしょう。
好みはありますが、これはオリジナルの作者からもオッケーを貰いましたし、NPRのレンダリングとしては面白いものになったのではないでしょうか。
さて、前置きが長くなりましたが、本題です。
【超スピーディーにレンダリングが終わるNPRなんだけどちょっとリアルっぽいシェーダー】
タイトルも長いですね……。
ではまず、手前の人物の肌シェーダーを見てみましょう。
この設定のミソは、基本となるシェーダーにすべてエミッション(発光)シェーダーを使っていることです。発光させれば光を受けませんので、GI計算は不要です。影も不要です。
だから、レンダリングの設定も、Light Pathsの値にすべてゼロを入れています。普通では考えられませんよね。
では、シェーダーの内容を簡単に解説しましょう。すべてエミッターなのに、ちゃんと立体感がありますよね。ノード・ツリーの左端に注目すると、「Geometry」ノードがあり、それが「Seperate RGB」に接続されています。
そう、先日恵比寿で開かれたBlendxJPに出ていた方はご存知の、「ノーマル」を使って上下の色を塗りわけるテクニックを使っています。
形状から面の向きの情報を拾い、その下向きの面にはちょっと暗めの肌色シェーダーを、それ以外には明るめの肌色シェーダーを当てています。
この二つが、Mix Shaderで混ぜられています。そして、何となく輪郭線らしきものを出すために、その先にはこげ茶色のエミッションシェーダーが合成され、ています。FacにFresnel(フレネル値)がインプットされているので、Fresnel値で制限された部分にだけこげ茶色が現われます。IOR(屈折率)が1.0未満だと、色の境目にグラデーションがつかず、塗り分けたようになります。0.95〜0.99くらいの範囲にあると、輪郭線のような効果が出ます。曲率と太さが比例するので、小さなオブジェクト(指など)ではほとんど線が見えないのが弱点で、逆に大きな面が同じ方向を向いていると、ベタ塗りになってしまう欠点もあります。
ゲームで良く使われる裏ポリテクニックを使った方が線は均等できれいかとは思いますが、この方法ならデータ量が倍になるのを避けられます。Freestyleの線は美しいですが、レンダリング時間が増えてしまいますし(「トロロ姫」は超ローポリなのでFreestyleを使っています)。
ちょっとFresnel値を変えたものを見比べてみましょう。
使いようによって、面白い効果を出せそうですよね。
今回は肌を例に取りましたが、どのシェーダーもほぼ同じ作りです。
もう一つ、ちょっと違うものを見てみましょう。地面のシェーダーです。水っぽい球を置いてみました。
まず、基本色の茶色です。左上ですね。
2色のエミッション・シェーダーを使ってFresnelで混ぜています。カメラから遠ざかる(角度が付くと)と明るい色になるようにして、距離感を出しています。
散在する岩と水球を見ると、地面への反射があります。反射の他にも地面への影のようなものがあります。不思議ですね。普通に考えると、発光している地面に影が落ちるはずはありません。
そこで活躍するのが、図中オレンジ色の枠で示したアンビエント・オクルージョン・シェーダーです。環境から遮へいされている部分に疑似的な影を落とすものですね。これは少々レンダリング時間を増大させますが、あるとないのではオブジェクトの接地感がまるで違いますから、ここは我慢です。
このアンビエント・オクルージョン・シェーダーも、単色だと地面の色をのっぺりさせてしまうので、2色に塗り分けて、地面の基本色と同じFresnelノードをつなぎます。
その先に繋がっているのが、反射を出すGlossyシェーダーです。あまりにもツルツルにすると反射がわざとらしくなりますし、反射をぼけさせ過ぎると、きれいに見せるためのレンダリング時間が増大します。映り方が自然になるようにRoughnessの値を調整し、これも遠ざかると自然に消えるようFresnel値で制御します。
さて、いかがだったでしょうか?
ちょっとまとめてみます。
・BlenderのNPRレンダリングは、実はCyclesでも素早くレンダリングできる
・基本シェーダーを全てEmissionにすることでノイズレスになる
・GI不要、レンダリング設定の値は全てゼロでOK
・立体感は形状のノーマルをうまく利用して出せる
・地面への影はアンビエント・オクルージョンで出す
■注意点です。 全てが同値で発光しているので互いに影響を与えませんが、一つでも発光しないシェーダーがあると、それが光を受けてしまい、突然そこだけおかしな見栄えになりますし、ノイズが増えるので結果としてレンダリング時間が増大します。
僕の経験上、このやり方を使えばInternalレンダラーよりも速くレンダリング計算を行なわせることが出来ると思います。
シェーディング画面のキャプチャ動画とは異なり、DOFを調整できる(遠くをぼかせる)、反射を入れられる(しかもぼかせる)、という表現上の利点があります。
もちろん、OpenGLレンダリングでその中間の表現を目指す方法もあるのでしょうが、そこはまだ僕には未知の領域で(笑
また、進行状況を報告しますね。
では、今回はこれまで!