blender2.8でアウトライン(線画)を出す備忘録

blender2.8でアウトライン(線画)を描画する方法を紹介します。

f:id:aobayu:20190830163345j:plain

正直、アウトラインを綺麗に出すにはfreestyleが最強だと思っています。しかし、freestyleは非常に計算時間がかかってしまいます。(レンダリング時間の2/3以上がfreestyleの計算時間で、動画をレンダリングするのに非常に時間がかっていました。)

そこで、背面法等を使ってキャラクターのアウトラインを出す方法をまとめておきます。背面法を使うことで、ビューポートでの表示でき、アウトラインの調整が簡単になります。太い線を描こうと思わなければ、freestyleと遜色ないアウトラインが描画でき、レンダリング時間もかなり短くなります。

 

目次

 

ソリッド化モディファイアを用いたアウトラインの描画

多くのサイトで紹介されているスタンダードなアウトライン描画の手法です。

 

まず、オブジェクトのスケールが1になっていることを確認して下さい。 

また、板ポリゴンにはアウトラインを描画できないので、あらかじめ、別に[ソリッド化]モディファイアを設定し、厚みを付けておきます。

 

まず、目的のオブジェクトに[ソリッド化]モディファイアを追加します。設定は以下のようにしています。

f:id:aobayu:20190830144159p:plain

マテリアルインデックスオフセットが[1]になっているのがポイントです。またアウトラインの太さは[幅]の値で調整します。

次にアウトライン用のマテリアルを用意します。

f:id:aobayu:20190830144915p:plain

この時のポイントは本体のマテリアルの真下にアウトラインが来ていること、アウトライン用のマテリアルが裏面非表示になっていること、です。[ブレンドモード]を[アルファブレンド]にしておく必要があります。(その上の[裏面の非表示]でもいいかもしれません)

また、アウトラインの色は[放射]ノードの色で操作できます。

これでとりあえずアウトラインの描画は行えたはずです。

 

出したいところにのみアウトラインを描画する

次に、モデルの特定の部分にのみアウトラインを出す(出でほしくないところにアウトラインを出さない)方法をまとめます。

考えられる方法として、[ソリッド化]モディファイアの[頂点グループ]の設定によって場所ごとのアウトラインの太さ調整が行えます。しかし、頂点グループを使うと、ボーンアニメーションを行う時にボーンウエイトと干渉してしまうような気がして、個人的には嫌いです。(これを回避する方法はあるのかもしれませんが、、)

そこで、アウトラインを出したくない部分のみ別なマテリアルに設定することでアウトラインを回避します。

今回はスザンヌの右耳のみアウトラインを出さないように設定します。

f:id:aobayu:20190830151201p:plain

まず、[本体のマテリアル]を複製し、そのマテリアルをアウトラインを出したくない部分(今回は右耳)に適用します。

次に、写真のように透過シェーダのみを使用した[ダミー]マテリアルを[アウトラインなし]の一つ下に作成します。この時も[ブレンドモード]を[アルファブレンド]にしておく必要があります。

このとき、写真のようにオブジェクトのマテリアル一覧が

[マテリアル1]→[マテリアル1のアウトライン]→[マテリアル2]→[マテリアル2のアウトライン]

といった順番になっていることが必要です。(ソリッド化モディファイアの[マテリアルインデックスオフセット]=1を利用しています。)

これで不必要な部分のアウトラインを除去できるはずです。

 

出したい部分に強制的にアウトラインを描く

ソリッド化モディファイアでは出したいところにアウトラインを描くことはできません。

そこで、[ベベル]モディファイアを用いてアウトラインを描画していきます。

今回はスザンヌの目にアウトラインを付けます。

f:id:aobayu:20190830152109p:plain

まず、上のように、アウトラインを描きたい部分辺を選択し、[Ctrl+E]を押し、ベベルウエイトを[1]に設定します

f:id:aobayu:20190830152250p:plain

すると、その辺が水色にハイライトされます。

f:id:aobayu:20190830152651p:plain

次に、オブジェクトモードに戻り、[ベベル]モディファイアを設定します。この時のポイントは、[マテリアル]が[1]であることと、[制限方法]が[ウエイト]であることです。これによって先ほど設定したマテリアルで、ベベルウエイトを付けた辺にのみアウトラインが発生します。[幅]の値で、アウトラインの太さを調整します。

 

複数オブジェクトのアウトラインの色、太さを一括で操作する

アウトラインの色に関しては、同じ色のアウトラインを出すオブジェクトに同じ[アウトライン]マテリアルをセットすることで、そのマテリアルの放射ノードの色で一括操作できます。

しかし、線の太さに関してはオブジェクトごとに設定が必要になり、オブジェクト数が大きくなると非常に大変です。

そこで、blenderの[ドライバー]機能を用いて太さを一括で操作していきます。

f:id:aobayu:20190830153607p:plain

まず、操作用のシーン変数を設定します。プロパティウィンドウのシーンタブに移動し[カスタムプロパティ]→[追加]→[編集]から適切な名前と値を設定したプロパティを追加します。

f:id:aobayu:20190830154002p:plain

次にドライバを設定していきます。

設定したソリッド化モディファイアの[幅]を右クリック→[ドライバーを追加]をクリックし、開いたポップアップから、[ドライバーエディタに表示]を選択します。

f:id:aobayu:20190830154352p:plain

開いたウィンドウから、上のように設定を行います。初期状態では青四角で囲った部分の設定ができないので、一度[x]を押し、[入力値を追加]から新しく変数を作成しないといけません。現在のシーンを選択し、[パス]の部分には[ [”設定したシーン変数の名前”] ]を撃ち込みます。

その後、[依存関係を更新]を押します。

これで、先ほど設定したシーン変数の値を変えるとアウトラインの太さが変わるはずです。

f:id:aobayu:20190830154804p:plain

他のオブジェクトの線の太さを同期させたい場合は、先ほど設定し、紫色になったモディファイアの[幅]を右クリックし、ドライバーをコピーし、他オブジェクトの同じ部分を右クリックし、[ドライバーを貼り付け]を選択することで、同じドライバを設定できます。

 

特定のオブジェクトや特定のみ太さを調整したい場合は、ドライバーエディタ―の、[式]を、[ ver*0.5 ]などに設定することで、太さを調節できます。

 

シーン変数の方にさらにドライバを設定することで、カメラ距離に応じてアウトラインの太さを調整する、などの操作も行えるはずです。

 

ただし、この状態では、[ソリッド化]を用いて描いたアウトラインと[ベベル]を用いて描画したものとの太さに差が生じていると思います。そこで、変数を一つ追加します。

f:id:aobayu:20190830155729p:plain

次に、同じようにドライバーをコピー&ペーストした[ベベル]モディファイアの[幅]から、ドライバーエディタを開きます。

f:id:aobayu:20190830160003p:plain

上のように[入力値を追加]し、[式]を変更します、この時の値や式はシーンに合わせて適切に設定します。(スザンヌの場合はoutline_coef=0.5が最適でした。)