基本は球体デッサン
ここからは、実際にAOVsを用いてコンプをしたいと思う。今回の例の場合、腹の辺りの形の見え方がいびつになっている。これをコンプで整えたいと思う。
beautyで見られる、キャラクターの腹と首のあたりにある"いびつ"さを自分なりに評価してみた。丸いものは丸く見せるというのが基本大前提であり、この辺りは球体デッサンに繋がる部分が多い
実際の手順としては、まず、コンプとして用いることができるAOVsを確認する。今回はper light AOVsでligh selectを用いたlighting(diffuse)とspecular、そしてGIとreflectionを用いる。また、normalとポーズリファレンスのposition(pref)がAOVsに含まれている。
今回はAOVsをOpenEXRのマルチレイヤー機能を用いてひとつの画像データに格納しているが、それらをLayerContactSheetノードを用いて、一度に表示してみた。どういうチャンネルがあるか一度に確認できるので便利である
まずはNUKEのviewerの機能であるexposureとgammaを用いていびつになっている理由を探してみると、本来、球体的に感じたい腹のあたりに球体と感じるのを邪魔する広範囲に照らされた部分があるのが見て取れる。これはデッサンでいうところの明暗境界線を探しているようなもので、その形状に沿った明暗境界線でないと、観察者が適切な形状とボリュームを感じることが難しくなる。
viewerのexposureとgammaを用いて、画像の情報を"極端"にしていみる。すると、デッサンでいうところの明暗境界線が分かりやすく浮き出して来て、その明暗境界線が、想像している形状に沿わずに、水平気味にはいっているのが見て取れる。これが"いびつ"に感じる原因だ
そこで、各light selectパスを確認して、どの光源がそれを引き起こしているかを見つける。
light selectを眺めて、少しだけずれて形状を把握しづらくしているスペキュラや、いびつな形状に感じさせてしまっているdiffuseなどを特定する。diffuseでボリュームや形を表現して、specularでディテールを表現するといった役割であると筆者は考える
今回の場合、6つの光源でライティングされている。viewerのexposure機能を用いて探すのも良い。exposureを上げてやっと見つけられるなんて、beautyにあまり影響が無いのでは? と思われるかもしれないが、これがナカナカに影響している。そしてこれこそがコンプの役割のひとつでもある。作例では幾つかの光源の影響を受けて、観察者がいびつと感じそうな部分がいくつかあったので、それらを削除、弱めていった。
再度beautyで確認して、どうすればよく見えるか、すんなりと見て取れるかを考える。CGコンプはこういった細かい作業の連続である
その際、Gradeの選択範囲としてロトを用いても良いのだが、そうするとショットを別のショットでも同じ問題が出たとき、同じような処理をイチからやる必要があるので、選択範囲にはポーズリファレンスのposition(pref)パスを用いて選択範囲をつくった。prefは通常のposition worldパスと比べるとわかるが、キャラクターが移動、変形してもキャラクターの各場所に必ず同じ色がくるようになっている。
prefをフレーム毎にContactSheetで並べてみた。ContactSheetにはこのように、フレーム毎に表示させる機能もあり、こういうものを評価するのにとても便利だ。ちなみに、この図からもprefで表現している色がキャラクターの動きに追従しているのがよくわかる
こちらはpWorldをフレーム毎にContactSheetで並べてみた様子。フレーム(空間位置)によって色が変化しているのが見て取れる。これだと、選択範囲をつくっても滑ってしまう
これを用いて、キャラクターのサーフェイスに存在するある点(色)からの距離に応じた選択範囲をつくる。要するに球体のボリュームで選択しているような感覚である。これで、キャラクターが移動、変形しようとも、キャラクターのサーフェイス上のある範囲を選択することができる。キャラクターのモデルをショット毎に変更しているわけでなければ、prefはショット毎にかわらず、ショットをまたいでもこのような処理が可能になる。
prefのあるピクセルのrgb情報を用いて(この場合お腹のある点)、そのrgbをpref上でピクセルごとに評価する。今回の場合は、clamp((radius - sqrt(pow2(pref.red-center.x)+pow2(pref.green-center.y)+pow2(pref.blue-center.z)))/radius)といった感じで、その指定した点(center.x, center.y, center.z)からの距離で評価している。その距離がradiusというユーザー変数で指定した数値よりも小さければ、その距離に応じてマスクの強度が変わるような数式になっている
マスクをmatteモードで表示させた例。画像左はprefで行なった例で、キャラクターが動いて変形しても常に同じサーフェイス上を選択出来ているのが見て取れる。対して、画像右はpWorldを用いた例。こちらはマスクが空間に固定してしまって、キャラクターが動いて変形するとそのマスクが滑っている
今回は特に行なっていないが、この手の形状の場合はキャラクターの輪郭部分が回り込んでいて、回り込んでいるということはサーフェイスが広範囲に外を向いているということで、周りからの影響を受けやす部分になっていることが多い。つまり見かけ上狭い面積ではあるが、サーフェイス上はある程度の面積があるはずで、かつ広範囲に光を集めていることが考えられる。もっといえば、これも球体デッサンと同じで、エッジはかすかに明るくなっていると観察者が丸みを感じやすい。
その反面、球体デッサンでは光源でのハイライトの反対側で明暗境界線の陰の方に含まれて、かつ床からの照り返しの影響を最も受けないところに一番暗い部分をつくる。これと同じく、観察者が感じられるぐらいの暗いスポットをつくってやる。そうすることで、観察者に、より立体的であると認識できるように整えていく。
beautyの再構築を大きくノードグラフで組んでも良いのだが、簡単にやるときは、筆者は必要なチャンネルを一旦beautyからマイナスして(Bラインを維持するためmergeのfrom)、そしてそのチャンネルをgradeしてプラスで戻す。こうすると、簡単に1チャンネル(レイヤー)ずつ簡単に調整ができる。ただし、同じチャンネル(レイヤー)を複数回gradeしたいときには不向きである
と、ナカナカと微細な話になってしまったが、これを繰り返すことで、ライティングから受け取った3DCGをより良くしていく。また、この手の作業をやるとどうしてもどうしても、元々もっていた情報を削除しすぎて、画がフラットになることもしばしある。これはやはりよろしくなくて、元々の情報を損なうこと無く、形を整えてボリュームを出す必要がある。
今回はAOVsの利用方法を説明しつつ、コンプで形状を整えるということを伝えたが、もちろんCGコンプはこれに限ったことではなく、むしろこれはそれのかなり細かな部分である。機会があれば、今後、その他のCGコンプについても紹介できればと思う。
ココまでに説明してきたテクニックなどを用いて形状を整えてた。左が処理済み、右がオリジナルである。viewerノードのgamma、exposureを用いて明暗境界線を明らかにしてみると、処理済みの方が綺麗な曲線がでているのが見て取れる
おまけ。テクスチャが複雑になると、ライティングによる形状が把握しづらくなる。そういう場合は、V-Rayでいうところのraw lighting、つまりdiffuse(V-Ray)のレンダーエレメントのlightingをテクスチャカラー(V-Rayのレンダーエレメントのdiffuse)で割ると、テクスチャカラーを取り除いた、つまりdiffuse colorに(1,1,1)を用いたシェーディングの状態が見れるので、形状が把握しづらい場合にはこういうことが指針になったりする
Column.
車が......!!
先日、車を運転していたら突然アクセルを踏み込んでも、まともに加速しなくなり、これはおかしいと脇道にそれ、その数十秒後にはエンジン停止して完全にとまってしまうというとても怖い体験をしました。車は修理して今はまともに動いていますが、レッカーを呼んだりと、初めてづくしの恐ろしい出来事でした......。
TEXT_テラオカマサヒロ(Galaxy of Terror)
株式会社ギャラクシーオブテラーにて VFX ディレクターとして活躍中。
実写合成からフルCGまで幅広いVFX制作に携わっている。
個人サイト「tiraokan.」