見出し画像

Blender3.1のCyclesで、背面法を使った縁を出す

このやり方だと色移りすることが確認されました(´・ω・`)
dskjalさんところにいいやり方が載ってたので、コチラをどうぞ…

↓以下、エッジが明るいと色移りしちゃう元記事(´・ω:;.:...

Eeveeで背面法といえばSolidifyモディファイヤでポン、なのですが、CyclesでやろうとするとAO影がでて撃沈する。というわけで、初心者を抜けたあたりの人向けの記事としてちょうどいい難易度かなって思ったので記事にしておきます。


忙しい人向けの結論

縁を別オブジェクトで作って、ObjectPropertiesのRayVisibilityのShadowをOFFにする。

Diffuseも切らなきゃダメかも…

反省会場

見出し画像のミネットちゃんの縁出しに、ものすごく無駄なコストをかけてしまいました😇

ShadowでAOが切れることを知らず、AOの影響がないように別レイヤに縁オブジェクトを作ったら、合成するとジャギが出て汚くって……

ZCombine?
ジャギジャギやで(´・ω:;.:...

どうしようかと右往左往して、Compositでわりと無理目な計算式を立ててなんとかキレイに縁がでるように頑張った(ただしかなり細い)けど、汎用性が薄いわけで、次回作どうしようかちょっと悩んでたわけです。

結局そんな面倒なことをしなくても、一瞬できれいな縁がでるんやで……😇
しかもCompositを通さないのでビューポートで確認もできる。

ビューポートでリアルタイムに確認できてGood☺️

Cyclesでの縁の作り方

ただしSolidifyモディファイア、お前はダメだ

初心者向け講座だとSolidifyモディファイアをつけるだけで縁がでますよね。モディファイアなので元のオブジェクトの形状を変えると縁も自動で形状が変わってくれます。

ただしCyclesではShadowをOFFにしなければなりません。ここで元のオブジェクトには影響を与えず縁だけShadowをOFFにしたいところですが、ShadowをOFFにする設定はObjectPropertyです。はい詰んだ😱

もちろんSolidifyで作った縁をApplyして別オブジェクトに分離、という方法は取れますが、その場合元のオブジェクトを修正した場合は縁オブジェクトが作り直しになります。

というわけで、事実上Solidifyモディファイアでのお手軽縁作成方法は使えない、ということになります。

僕たちにはGeometryNodesがあるじゃないか

じゃぁどうするかって言うと、実は簡単でGeometryNodesでSolidifyモディファイアと同じようなことをすればいいわけです。

GeometryNodesをつけるのはどんなオブジェクトでもいいので、当然縁の元となるオブジェクトとは別のオブジェクトにつけることになります。別オブジェクトなので、こちらのShadowをOFFにすると縁のShadowだけがOFFになるわけです。

基本的なGeometryNodesの構成を貼っておきます。注意点としてObjectInfoのRelativeを有効にしておかないと、アニメーションが一部追従しなくなります。

忙しい人のための結論

Solidifyと同じように考えるとFlipFacesを挟みたくなるところですが、Cyclesは裏面・表面で大きな違いはないので、特に反転させる必要はないでしょう。

一応GeometryNodesの解説

つけるポリゴンはなんでもいいので(ただしMesh)、Plane辺りを作ってGeometryNodesモディファイアを追加します。見ての通り入力の
Geometryは結局使いません。

入力のObjectはそのまま縁を作るオブジェクトを入力させます。オブジェクトごとにやるのが面倒だといってCollectionごとまるっと縁を作る方法もあるのですが、オブジェクトごとに縁を作るのに比べて倍以上重たくなったので却下しました。レンダリング時間に大きく影響するので、面倒ならオブジェクトごとに縁オブジェクトを生成するスクリプト辺りを書いたほうがいいでしょう。

入力のWeightは頂点ウェイトを受け取れるようにします。頂点ウェイトの入力と固定の縁の大きさ(最大値)を掛け算して縁の大きさを決めています。

これは毛先等の細くしたい場所で使用します。

選択にでてこないので直接
頂点ウェイトの名前を入力します

オブジェクトの情報とウェイト値と固定の値を元に、Normal方向へSetPositionで膨らませます。

最後に縁用のマテリアルを設定しておしまいです。

一応縁用マテリアルの解説

Backfacingを使うと表面・裏面が取得できます。FlipFacesをしてないので表面を消す必要があるため、Backfacingが0(表面)つまり上側にTransparentBSDFを接続します。下側に描画するマテリアルです。

プロパティの設定

ShadowをOFFに

縁用のオブジェクトができたら、ObjectPropertiesのRayVisibilityのShadowをOFFにします。これでAOによって元のオブジェクトが暗くなっていたのを修正できます。

Diffuseも切らなきゃダメかも…

半透明の問題を解決する

ほぼもう終わりなのですが、実は作り込んだメッシュの場合に問題が発生します。具体的に言うと、デフォルトの設定のままだと8つくらいポリゴンが重なったらアウトです。

Cyclesのデフォルトのレイが半透明を透過する数は8に設定されています。それ以降は描画しない……だと良かったのですが、なんと黒く描画してしまいます。

コレクションでHoldOutしようがまるっと無視して、レイが届かない場合はとにかく黒で描画します。

髪の毛が集まるところとかが出やすいです

表面カリングにTransparentBSDF(半透明)を使っているため、半透明使いまくりモデル扱いになっちゃうんですね。

これはRenderPropertiesのLightPathsにあるMaxBouncesのTransparentの値を増やすことで解決できます。

届かなければ、届くまで回数を増やせばいいじゃない

これでCyclesでも背面法での縁出しが使えますね☺️

この記事が気に入ったらサポートをしてみませんか?