BlenderのFreestyleの設定を試す

Blenderには線画のレンダリングをする**FreeStyle**レンダラが搭載されています
既に　解説記事はいくつか書かれているものの　利用目的から検索した場合に見つけることができない部分があるようなので
改めて書いてみたいと思います。 （Blender2.93時点での情報になります）

まずは問題になりがちな設定にしたシーンをレンダリングしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151493/3f62a1d5-7a48-bbc6-29d5-f58aaf1f98da.png)
テクスチャで透過した平面が　平面自体の境界線がレンダリングされている上に透過した向こうの線は出ていません。
また、水色でレンダリングされている板の向こう側にあるキューブの縦線や　トーラスの線の一部だけ描かれています。
今回はこういった問題に対処する手順を追ってみます

# ラインセットとラインスタイル

Freestyleはビューレイヤプロパティにある**ラインセット**で
シーン内の**どの条件の部分に線を引くか**を設定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151493/141dc21e-ae55-8e06-46c2-b8f6949caf40.png)
ラインセットはビューレイヤ毎に複数設定でき
それぞれのラインセットで設定した選択条件を満たす部分に、対応する**ラインスタイル**の設定の線を引きます

**選択条件**：の部分で有効になっている部分のみ詳細の設定が現れて　上から順に条件の判別がされるようです
**エッジタイプ**：の項目の **条件該当**/**排他** の切り替えは
チェックボックスの設定入った項目に線を引くのが**条件該当**、チェックの入っていない項目に線を引くのが**排他**
その横の **論理和(OR)**/**論理和(AND)** は
条件該当/排他の条件を元に どれか1つでも満たす部分に線を引くのが**OR**
同条件を全て満たすもの部分だけに引くのが**AND**　ということになります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151493/b92bb93f-6a7e-43b4-8278-e606aa9874bd.png)
エッジタイプの設定で1つの項目だけをチェックしたラインセットを作って、どこに線が出るのか試してみました
**ラインスタイル**の**カラー**と**幅**の項目を調整してラインセットの項目に加筆してある色で描画されるようにしています

- **シルエット**:エッジを構成するポリゴンの片方がカメラから見て裏側に行く部分
- **ボーダー**:連続するポリゴンのない端っこになるところ（スザンヌの目の部分にはポリゴンに穴が開いています）
- **輪郭**:文字通り個々のオブジェクトと他のオブジェクトや背景との輪郭部分
- **クリース**:隣り合う面同士が上の**クリース検知オプション**の設定よりも鋭角な部分  
　（オブジェクトにスムースが入っていて**面のスムーズさ**がオンになっている場合はスムーズでなくて鋭角な部分）

ということになります。
また
**辺マーク**は編集モードの辺メニューで**Freestyle辺をマーク**でマークした辺
**外部輪郭**はオブジェクトをひとまとめにした背景との境目
**マテリアル境界**はオブジェクトのマテリアル設定の境目（別オブジェクトの別のマテリアルとの境目は判断されない）
のようです

# 特定のオブジェクトやパーツのみ線を描かない
ラインセットの設定次第で線の描画を切り替えられるのは先に見た通りですが
特定の設定の部分には線を描きかない設定をしてみます。
### コレクション
選択条件のコレクションを使用した例です
先の設定と比較してエッジタイプの下にコレクションの項目が追加されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151493/ff7258b4-87da-7cd1-4070-00bc7889b636.png)
Shift+M等でオブジェクトをコレクションに登録して「**排他**」を選択することで
コレクション内にあるオブジェクトの線を描かない設定にできます。
ただし、手前のオブジェクトの線が描画されなくなるだけで、透過した奥にあるものに線が描画されないのは同じです

また、同様に選択条件:**面マーク**の項目では
編集モードで**Freestyle面をマーク**でマーキングした面のみ　線を描いたり、描かない部分に指定することができます

### 遮蔽物の向こうの線
さて　コレクションの「排他」を利用することで　テクスチャを使った透明板自体の境界を表示しないということはできましたが
透明物の奥にあるものの線を出したい　といった場合どうすればいいでしょう
Freestyleの可視性の項目の中には**Qi範囲**というのがあります

これは　カメラから隠れているものでも　指定の遮蔽の範囲のものを描画単位にするといった設定です
中央のキューブと水色半透明の板をコレクションに加えて指定してみました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151493/601624b7-c450-ab7a-6f4b-01dcf038df5e.png)
テクスチャの板に隠れた部分が青色の線で描画されています
ただ、水色半透明の板や　黄色のトーラスに隠れた部分も青色線が出ています
これは　**Qi範囲**がこの機能自体は通常のレンダリングで出前にあるのが透明物かどうかに関係なく
「指定した回数のオブジェクトを通り抜ける範囲」で線を描画しているからです
またキューブの上面に一部線が欠けている部分があるのは　ここがテクスチャ平面と水色半透明の２つのオブジェクトの重なった向こうだからです

以上の点で　透明物の奥部分だけ線を出すといったことはFreestyleだけではできないようですが
コンポジットを組み合わせることである程度は対応可能なデータが出せそうです

# マテリアルで線の変更
ここまでは説明のためにFreestyleラインスタイルで　線の条件毎に線のベースカラーを変更していましたが、
マテリアルによってラインスタイルを変更できるのでその設定も紹介しておきます

ラインスタイルのカラーやアルファ等のタブの下にはモディファイアのプルダウンがあり
この各項目のデータを元に　色や幅等に変化をつける設定ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151493/b0f3dc9e-1893-58f3-d714-737e2ba58c2e.png)
この中のマテリアル　がマテリアルプロパティ内の設定で線の色を変更する項目になります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151493/0a0211ea-a44e-9434-0af4-8fe28394e6e9.png)
下側にあるプルダウンが**ラインカラー**が選択されている状態だと
マテリアルプロパティの　Freestyleライン　ので設定されている色が使われることになります
その他の設定項目としてディフューズ色がありますが
これはEeveeやCyclesで使用されるベースカラーではなく　現在の設定では「ビューポート表示」の項目にある色なので注意が必要です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151493/bfe77191-53b4-2e9b-3945-bc735a954011.png)
カラー以外の幅等の項目は機会があればまた触れたいと思います。

因みに　ラインスタイルはデータブロック（プリセット）としてファイル内に保存されるので
アペンドやリンクを利用して他のファイルと設定を共有できます。

# 意図しない線の例
冒頭に触れたように
Freestyleではまれに　形状の奥にあるはずの線が描画されてしまうことがあります。
これは　Freestyleでの面と辺の前後関係の計算を面単位で行っているため　計算の誤差が大きいことが原因です

今回使ったシーンを見ると　水色の平面は1つの細長い面で作成されています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151493/bb02e607-fd67-3c58-b8dd-5d56162b8f6e.png)
このように　他のオブジェクトと比べて大きい面　特に細長い面がシーン内にあると前後の判別が乱れるようです

同じ形状でも面を少し分割するだけで改善することが多いようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151493/8b46af15-d9ce-214b-e1de-408d869bb7e4.png)
試してみてください

以上　最近見かけた　BlenderのFreestyleの設定関連について書いてみました
何かのお役に立てば幸いです。