ブログやめる言いましたけど、知識の定着を図って書きたくなったので書きます。(笑)
3Dやってないと話しよくわからんかもしれません。
以前は1F辺り3.4秒くらいレンダリングにかかっていたが、マテリアルやらシェーダ、レンダリング設定を見直して1F辺り0.8秒ほどになった。
どれがどの程度効果があったのかは正直定かでないが(一番以外)列挙する。
- サンプリング数を減らす
- ポリゴン数を減らす
- シェーダの変更
- サンプリング数を減らす
この変更が一番大きかった。
これまではなんとなくサンプリング数を1024~2048でやっていたが、試しに100まで落としてみたところ1024以上のものと大差なかった。(!)
上からサンプリング数100,1024,2048の画像。
...プロレベルだとこのくらいの差はわかるんだろうか? コレガワカラナイ。
サンプリング数に対する知識が浅いのが明白だった。
学ぼうと思う。
2.ポリゴン数を減らす
見えないところ(服、スカートの中の身体)をレンダリングする必要なくね?ということに気づき
画面に映らないポリゴンを削除した。
結果、△61000→△45000まで削減した。1/4も削れば結構差が出るだろうと思ったが思ったより大きな効果はでなかった。0.05秒くらい減ったかな?レベル。
でも5000F以上をレンダリングすることもあるのでそん時は4分くらい早い。減ってよかったね。
余談だが、この蘭子モデルはサブディバイドかけてなんもリトポしてないので死ぬほどトポロジーが汚い。具体的にいうと足の裏から腰までのエッジループができてたりする。クソ!
作り出した当初はリトポの重要性を知らなかったのでUV展開、テクスチャ作成、シェイプキーをそのままやってしまい、ウェイトペイント、アニメーションをつける際に地獄を見た。もうぜってえ同じ轍は踏まねえからな。
もうこれ以上ポリゴン数を減らせないのだが、今やればはるかに少ないポリゴン数で同じようなモデルが作れると思う。2万くらいあれば余裕で行ける気がする。いつかリトライする。
余談の方が長い、次に。
3.マテリアルの変更
ここでは体のマテリアルを例にとって以前のシェーダ構造と比較する。
上は新しいシェーダ、下は以前のシェーダ。
ノードエディターはどんな構造でオブジェクトが着色されてるか感覚的に理解できるから大好きだ。
以前のシェーダはhttps://dskjal.com/blender/eevee-cell-shading.htmlのサイトのものを参考にしていた。 復習がてら概要を説明する。
拡散反射光(物体の表面色)を設定するDiffuseシェーダにBlender2.8から追加されたShader to RGBをつなぎ、色をカラーランプで設定できるようにする。
カラーランプの色は肌の表面色、スペキュラ(ハイライト)色を設定し、この境界めっちゃ近づけることによってアニメらしい、くっきりとした色わけを再現している。
スペキュラ色を設定する、といったが実際にスペキュラを設定しているわけではない。
それっぽい色を表面色として設定しているのである。
最後の放射(自己発光)をつける理由はわかってなかったが、書いてる今わかった。
放射を使わねばSunライトによって、アニメ表現には無用なグラデーションがかった影が蘭子に襲い掛かるからだ。
リアルチックな影がお顔に・・・
改めて立ち返るとこのシェーダはこれはアニメ的なくっきりとした表現をするために表面色、仮のスペキュラ色しか設定していない。Sunライトによる影を防ぐためにマテリアルを発行させているのだ。なぜなら光源には影は落ちない!
あ~理解できてめっちゃ気持ちいい。
少し乱雑に書いてしまった。すんません。へへ。
↓あんまりにも楽しかったのでここから語調が乱れてます。直すのは手間なの苦しいでしょうがそのまま読んでください。
新しいシェーダについても書きます。わすれてました。
これはhttp://awa.newday-newlife.com/blog/blendernpr/の内容がすごく参考になった。
このシェーダ構造の最大のミソはミックスシェーダーの係数にノーマルマップのY軸方向(緑色)の値、つまり面が下を向いているという情報を使うことにあるとおもう。
左二つの縦に並んだ放射は前回と同じように肌の表面色、仮のスペキュラ色を設定している。
そしてこの二つをミックスシェーダーで混ぜるわけであるが、ノーマルマップのY軸の値が大きい面では表面色、小さいところ(つまり上を向いている面)ではスペキュラ色を多めの割合で混ぜているのだ。
最初この記述見たときは天才すぎて信じらんねえ!やべえ!ってずっと言ってた。
頭良すぎんよ~。
次のミックスシェーダーと放射にフレネル値を加えている理由はよくわかりません。
ちなみにこれは輪郭線を表している部分です。
フレネル値(IOR)が物体の屈折率を表していることはわかるのですが・・・
IORが高いものは屈折率が高いということです。
推測になりますが、光の入射した角によって屈折する光の性質を表現するためのものだと思います。
輪郭でしかこの色が出ないところを見ると高い入射角では色は出ず、低い入射角ではこの色が出る、というものなのではないかと...。
これはまだ不勉強な分野ですのでサンプリング数のことも含めてまた調べようと思います。
つい楽しくて色々たくさん書いちゃいました。
やっぱ人に説明するように書くと自分の理解を深められていいですね。
定期的に書こうと思います。
では、やみのま。