From BlenderWiki

Jump to: navigation, search

Blender 2.67: Freestyle ラインレンダリングエンジン

Freestyle は、Blenderに新しく統合されたノンフォトリアリスティック(NPR)レンダリングエンジンです。 元々学術的な研究プロジェクトの中のスタンドアロンプログラムとして開発されたもので、Freestyle はアーティストに Blender で作成された3Dシーンから2Dライン描画を生成するための新しいツールセットを提供します。

生成されたラインはラインカラー、アルファ透過、ライン幅、ライン形状を調整する様々なオプションでスタイル化できます。その結果のラインアートはレンダーレイヤーやコンポジターを通じ、他のレンダーコンポーネント(例えば Blender 内部レンダーや Cycles のレンダーパス)と組み合わせることができます。

Freestyle の使用例として、アニメ調レンダリング、建築ビジュアライゼーション、テクニカルドローイング、ブループリント、コンピュータ生成のスケッチなどがあります。Freestyle は特に2D風のコンピュータグラフィックスに適した、Blender の形状ベースのビジュアライゼーションソリューションに基づくレンダリング能力を拡張します。

mato.sus304氏作。CC BY-SA
Rylan Wright (RONIN)氏作。CC BY (File:TheFamily.zip)
Rylan Wright (RONIN)氏作。CC BY

形状ベースのラインアート生成

Freestyle は2Dラインドローイングを一連のメッシュから生成します。メッシュの頂点、辺、面が、アーティストにとって重要な特徴エッジ(Feature Edges)を抽出するのに使用されます。

抽出された特徴エッジはその後様々なオプションを通じてスタイル化されたラインに変換されます。Blender の古き良き Edge(Toon)オプションのようにラスターイメージを作成するだけでなく、Freestyle の特徴エッジはラインの長さや二つの隣り合うライン間の角度、カメラからの距離などの形状情報を用いて操作できます。 さらに、抽出された特徴エッジのラインは違うラインカラー(Color)やアルファ透過(Alpha)、ライン幅(Thickness)など、多くの方法でスタイル化できます。また、直線のセグメントにランダムな変位を付加してかわいいカーブに変形させたり、スムーズなベジェカーブにフィットさせることもできます。

下のブロックダイアグラムには Freestyle の主要な処理コンポーネントが示されています。入力はメッシュオブジェクトのある3Dシーンです。与えられたシーンは以下のように2Dスタイル化されたラインに変換されます。

  1. 特徴エッジの探知アルゴリズムが3Dシーンに適用され、シルエットラインや境界、クリースラインのような重要な特徴エッジを抽出します。抽出された特徴エッジのセットをビューマップ(View map)と呼びます。ビューマップはシーンのレンダーレイヤー毎に計算されます。レンダーレイヤー(Render Layers)プロパティにはこのビューマップ構築をコントロールするため、新しく Freestyle オプションが追加されています。
  2. 最終的なスタイル化ラインの形状の元となる、特徴エッジのチェーン(Chain)を生成するため、特徴エッジがユーザー定義の演算で処理されます。処理中の特徴エッジのセットをラインセット(Line Set)と呼び、特徴エッジ選択(Selection)、チェーン化(Chaining、エッジの連結)、分割(Splitting)、区分け(Sorting)するための多数のオプションが定義されています。一つのビューマップ(つまり各レンダーレイヤー)に対し、複数のラインセットを定義可能です。例えば、二つのラインセットを可視ラインの描画と不可視ラインの描画用にそれぞれ設定できます。
  3. 特徴エッジのチェーン(Chains of feature edges)はユーザ定義のスタイル化オプションを適用することで、スタイル化されたライン(ストローク)に変形されます。このスタイル化オプションのセットをラインスタイル(Line Style)と呼びます。ラインスタイルは新しい Blender のデータブロックです。つまり、複数のラインセット間や、場合によっては別のシーンや外部 .blend ファイルとも共有できるということで、同じスタイルを簡単に別のラインセットに適用できます。
  4. 最後にスタイル化されたストロークがレンダリング(Stroke rendering)され、その結果の2D描線(2D line drawing)が Blender 内部レンダラの統合(Combined)パスにマージされます。
Key processing components of Freestyle

Freestyle は描線のみを生成することに注意してください。現時点では影だけではなく、ハッチングや面のシェーディングも Freestyle の範疇には入りません。しかし、Freestyle は完全にレンダーレイヤーとコンポジターに統合されており、Freestyle の描線は簡単に他のレンダーコンポーネントと組み合わせることができます(後述)。

特徴エッジ探知のコントロール

入力された3Dシーンからの特徴エッジの探知は様々なレベルでコントロール可能です。

レンダーレイヤープロパティのFreestyle オプション

まず、各レンダーレイヤーには用途に応じて特徴エッジの探知をカスタマイズするための、独立した Freesytle オプションがあります(右図のスクリーンキャプチャ参照)。 縁の探知オプションには以下のようなものがあります。 (a)クリース角度(crease angle)。しわの線の量をコントロールします(大きい値でしわの線が増えます)。

(b)カリング(culling)。2D画像境界外の入力3Dシーンの縁を排除します(大抵の場合パフォーマンスが向上しますが、ラインスタイル化オプションによっては若干見た目に違いが生じることもあります)。

(c)面のスムーズさ(face smoothness)。メッシュの面のスムーズさを考慮します(通常、レンダリング時間の増加と引き換えにオブジェクトのシルエットラインがスムーズになります)。

(d)マテリアル境界(material boundary)。別々のマテリアルを持つ二つの隣り合う面を探し、その間の辺を特徴エッジとします。

次に、ユーザーが直接それぞれの辺や面に注釈をつけて特徴エッジ探知を補助できるよう、メッシュデータブロックが拡張されました。メッシュの辺に Freestyle の描線に影響するメッシュの辺を指定するための新しい属性、Freestyle 辺マーク(Freestyle Edge Mark)が追加されました。これらの辺マークは以下の用途に利用できます。 (a)強制的に特徴エッジとして探知されるよう辺を指定する。

(b)Freestyle の描線から排除する。

同様にメッシュの面も、Freestyle レンダリング用に影響する領域を指定するための Freestyle 面マークがあります。マークされた面はその面内の辺を強制的に特徴エッジとして探知させることも、Freestyle レンダリング処理から外すことにも利用できます。

編集モードで Freestyle 辺としてマーク
辺マークなしでレンダリング
辺マークを有効にした状態のレンダリング

ラインスタイルオプション

Blender 用の Freestyle にはラインスタイル化用に二つの相補的なモードがあります。パラメーター編集(Parameter Editor)と Python スクリプト(Python Scripting)モードです。各レンダーレイヤーには二つのモードの内の一つが設定され、ラインスタイルが関連するビューマップに適用されます。

パラメーター編集モード(Parameter Editor Mode)

パラメーター編集モード(Parameter Editor Mode)はユーザがインタラクティブに豊富なラインスタイルオプションを操作できます。このモードでユーザが調整できるオプションは、ラインセット(Line Set)オプションとラインスタイル(Line Style)オプションの二つのグループに分けられます。

ラインセット(Line set)オプション

ラインセット(Line Set)オプションはビューマップの特徴エッジの一部をピックアップし、その後のラインスタイル化処理に送り込むのに使用できます。 Edge selection can be conditioned by: エッジ選択は次の状態があります。 (a)ライン可視状態(line visibility)。(可視の線のみ(Visible)、陰線のみ(Hidden)、定量的不可視性(QI Range))

(b)エッジタイプ(edge types)。(シルエットライン(silhouette lines)やクリースライン(crease lines)、辺マーク(edge marks)など)

(c)面マーク(マークされた面内の辺を含める、または排除するため)

(d)オブジェクトグループ(オブジェクトのグループのエッジをフォーカスするため)

(e)画像境界(完全に画像外の特徴エッジを排除するため)

この選択基準は論理積(AND)、論理和(OR)、独占(Negation)演算によって組み合わせることができます。

ラインスタイルオプション(ジオメトリ(Geometry)セクション)

ラインスタイルオプションはユーザ定義のラインスタイルを作成するのに使用されます。選択された特徴エッジはチェーン化により特徴エッジのチェーンに連結され、スタイル化されたライン(ストローク)の基本形状となります。チェーン化(Chaining)オプションにはシンプルにエッジを後ろにつないでいく※平面プレーン(Plain)チェーン化と、一つ以上の一連のストロークを作成し、アーティストによる手描きの複数のタッチを模倣するスケッチチェーン化があります。

チェーンは分割(二つの隣り合うエッジ間の角度が指定の範囲内のポイントで)と、選択(しきい値より短いチェーンを除外)によりリファインできます。ストロークの外見はベースラインカラー(Color)やアルファ透過(Alpha)、ライン幅(Thickness)、さらにベーススタイルパラメーターに適用されるモディファイアーによっても設定されます。ベースストローク形状ももジオメトリ(Geometry)モディファイアーによって変形できます。先端の丸め(Round)や正方形化(square)、ユーザ定義のパターンによる破線(Dashed Line)にも対応しています。 (※yamyam注:後のバージョンで修正する予定です)

Python スクリプトモード

Python スクリプトモード(Python Scripting mode)では、ラインスタイルをすべてプログラムで実現できます。このコントロールモードでは、すべてのスタイル化の演算が、Freestyle 用語によるスタイルモジュールを参照する Python スクリプトとして書かれています。スタイルモジュールの入力はビューマップ(探知された特徴エッジの集合)、出力はスタイル化されたストロークの集合です。

スタイルモジュールは5つの基本オペレータ(selection、chaining、splitting、sorting、stroke creation)の連続的な呼び出しで構成されています。selection オペレータは入力特徴エッジの一部を、一つ以上のユーザ定義の選択状態(predicate)を元に選別します。選別されたエッジは、特徴エッジのチェーンを構築するため、chaining、splitting、sorting オペレータにより処理されます。 また、これらのオペレータは、特徴エッジをチェーンに変換する方法を決定する手段として、ユーザが与えた predicate と関数によりコントロールされます。最終的にこのチェーンは、ユーザ定義のストロークシェーダ(StrokeShader)のリストを取る stroke creation オペレータにより、スタイル化されたストロークに変換されます。

Python スタイルモジュールは .blend ファイル内にテキストデータブロックとして格納されます。外部スタイルモジュールファイルはまず、テキスト(Text)エディターウィンドウに読み込まなければなりません。その後スタイルモジュールスタックのエントリ内にあるプルダウンメニューでリストから読み込み済のスタイルモジュールを選択できます。

テキストエディタウィンドウに読み込まれたスタイルモジュール(cartoon.py)と、レンダーレイヤー(Render Layer)プロパティの▼Freestyle パネルの、スタイルモジュール選択用のプルダウンメニュー

Blender の Freestyle には、多数の Python スタイルモジュールがあり、自分のスタイルモジュールを記述する開始点となります。また、Blender Python API リファレンスマニュアルFreestyle Python APIセクションには、スタイルモジュールの詳しい情報があります。

コンポジターによるポストプロセッシング

Freestyle の描線はソリッド(Solid)や背景(Sky)のような従来の要素に加えられた、統合パス(Combined Pass)に不可欠な一部です。Freestyle のレンダリングは他の合成要素(ハロー(Halo)除く)の一番上に重ね合わせられます。 Freestyle のみの「パス」はインクルード(Include)オプションを使用することで利用できます。下のスクリーンキャプチャのように、Freestyle を ON にし、他の統合パスの要素を OFF にしてください。

Freestyleのみの「パス」を作成するオプションを含むレンダーレイヤー設定

Freestyle はコンポジターと完全に互換性があり、自由に描線のポストプロセッシングが行えます。フルサンプルアンチエイリアシング(FSAA)も Freestyle に利用できます。

描線合成の簡単なサンプル

Freestyle 作例集

FreeStyle ロゴアニメーション。Lee Posey (jikz)氏作。CC BY-SA
The Light At The End。Cris Burton氏作。CC BY-SA
Oha-Studiosからの1シーン。(.blend ファイル)。c Mechanimotion Entertainment.
LightBWK氏による1935年型 Martin M-130の設計図。CC0。注意:非常に重いです! Blender の限界までストレスを与えるテスト用であり、クラッシュする可能性があります。(File:M-130Blueprint.zip)
HVAC Pre-Viz。Lee Posey氏作。CC0 (File:HVACPreViz.zip)
ABC of AKARI。Vicente Carro氏作。c AnigoAnimation
Kitchen。Vicente Carro氏作。c AnigoAnimation
Over Weight Boss。Mclelun Lee氏作。CC BY-SA
Boy Playing in Snow。Mclelun Lee氏作。CC BY-SA
Kaede and the Mountains。Barkoczi Gergely氏作。CC BY-SA
Kaede versus Giant。Barkoczi Gergely氏作。CC BY-SA
T.K.氏によるページめくりアニメーション。Pythonスクリプティングモード使用。CC0 (File:Turning Pages.zip)
Sawshark。Charblaze氏作。CC0 (File:SawShark Sketch.zip)
Tire Bike。Pro Creaciones氏作。CC BY
Ronan Ducluzeau氏によるレンダーレイヤー(と物理演算アニメ)を使用したラインデモ(File:Line Demo Render Layers.zip)と、Vicente Carro氏によるグループ使用例(File:Line Demo Groups.zip)。CC0
ATV Buggy。Rylan Wright (RONIN)氏作。CC BY (File:AtvBuggy.zip)
Guitar Quote Poster。LightBWK氏作。CC0 (File:GuitarQuote.zip)
テンプレート Xylography。Charblaze氏作。CC-BY
mato.sus304.氏作。CC BY-SA (File:Mato sus304 cut02.zip)

リンク

Freestyle ドキュメント

Freestyle 関連のリンク(英文)

Freestyle 統合の過程(英文)