元記事:blender.org - Hair and Fur


Hair と Fur



Peach を実現させるべく、Fur (体毛)と草原をレンダリングするための多くの機能が追加されました。

Strand レンダリング


内部レンダラが改良され、更にメモリ消費量が少なく、そして速く Hair Strand をレンダリングするようになり、大量の毛や草をレンダリングできるようになりました。これは Hair の Curve をポリゴンではなく、使用時にポリゴンに変換するキーポイントのみを格納することによって実現しています。
二つめの違いは透過方法です。現存の方法を用いるではなく、ある部分のすべての Strand のセグメントを前から後ろにソートし、その順番でレンダリングします。

この特別な Strand レンダリングは、Particle Buttons の Visualization パネル内の[Strand Render]ボタンを ON にすることで使用できます。
いずれにせよ最終的にはスムーズな曲線になるため、パフォーマンスを上げるには、Render Steps ボタンを低めに設定することをおすすめします(例:体毛では2で十分でしょう)。
また、Render Buttons の Parts を増やすことで、メモリ使用量を減らすことができるでしょう。

現時点では、これらの Strand プリミティブはレイトレースされないことに注意して下さい。



Strand シェーディング


多くのオプションが Material Buttons内の Strand settings(ポップアップ)に追加されました。
[wiki]-''Surface Diffuse:'' ディフューズのライティング計算において、Mesh の表面の Normal を使用するようにします。Hair のライティングが、通常の Mesh のライティングと似るようになり、短い毛ではっきりと現れます。
-''Dist:'' このオプションは、Hair の長さにしたがい、表面上の Normal をブレンドします。距離は Blender 単位です。
-''Use Blender Units:'' ピクセル数の代わりに Blender 単位で幅を指定します。
-''Width Fade:'' Strand の幅にそってαをフェードアウトし、ソフトな感じにします。0.0で減衰なし、高い値ですばやくαが減衰し、1.0で線形に減衰します。[/wiki]





Strand の Simplification(単純化)


Hair Particle システムで Strand レンダラと子 Particle (訳注;Children From は "Faces" を使用)を使用すると、Simplification パネルで Simplification オプションが使用できます。これらのオプションは、Mesh の Face がカメラから遠く離れた時に、子 Hair を削除し、Hair Strand をフェードアウトさせます。これはレンダリング時間の短縮だけでなく、サブピクセル Hair に見られるジャギーの問題の解決にも役立ちます。
Strand の幅は残っている Hair の数にあわせ、自動的に増加します。

[wiki]-''Reference Size:'' もしスクリーン上の Mesh 全体の大きさがこのサイズより小さいと、単純化が開始されます。例えばデフォルトの1920では、その Mesh が HD レンダリング画像を完全に占めると、子 Hair の最大数が可視化されます。
-''Rate:'' どれぐらい単純化を行うか。デフォルトの1.0でピクセル毎の Hair の数がほぼ同じに留まり、低い値でもっと減らします。
-''Transition:'' フェードアウトする Hair のパーセンテージで、いきなり消えてしまうのを防ぐためにあります。デフォルトの0.1で、与えられた時間毎に Hair の10%のα値が調整されます。
-''Viewport:'' ビューの外側の Face からの Hair も削除されるようになります。直接見えることはなくても、例えば影として影響することもあるためです。
-''Rate:'' 前述同様、Mesh Face が画像の端から出た時、単純化をどの程度行うか、です。
[/wiki]

キャラクタ上に毛を生やす


これは Peach で使用されたキャラクタ上に毛を生やすプロセスを要約したものです。

Particle システム

まずはじめに行うことは、Particle システムを Hair タイプで設定することです。Hair を完全にコントロール下に置くことで、Particle Mode で編集や追加、削除ができます。ここでは、最初に適切な分布を作成してみましょう。

チンチラには、約1000の Hair がベースレイヤに使用されています。毛のセグメント数は5に設定、それ以上のセグメント数で、そのまま編集中にコントロールできる Hair のポイントが増えます。セグメント数は後で Hair 編集中に変更可能です。小さな初期 Normal と Tangent 速度により、Hair にほぼ正しい方向を初期的な物として与えています。


親と子

ふわふわしたネズミには1000以上の毛がありますが、そのすべてをコントロールするのは大変です。そのため、親の Hair を元に子の Hair を発生させることができるようになっています。
これらの Hair は Face から発生します。そして、Mesh に追加され、同時に親 Hair のそばで補間されます。

Amount と Render Amount は、Subsurf のように別々に設定可能です。このチンチラでは、各親 Hair ごとに1000の子 Hair をレンダリング用に持ち、結果的には約100万の Hair となります。子 Hair にバリエーションを与えるには、Children パネルの Rough の設定を使用します。


Hair の編集

Hair の編集を行うには、Particle システムを編集できる状態に設定します。この操作の後は、もう分布と速度を Particle システムの設定からコントロールすることができなくなります。その代わり、ParticleMode ツールで編集できます。

ParticleMode では、Path、Point、Tip 選択モードが利用可能で、Hair とコントロールポイントを選択し、通常の EditMode のように移動、回転、サイズ変更、プロポーショナルエディティングを行うことができます。デフォルトでは、Hair は編集時長さと根元の位置を保持し続け、Emitter Mesh と交差しないようになっています。更に Comp、Puff、Addといった、様々なブラシが使用できます。


左右対称

左右対称に毛を分布させるために、ParticleMode にはミラーエディティングツールがあります。Mirror モディファイアは、Hair 編集前に Apply し、Mesh を左右対称の状態している必要があることに注意して下さい。

Particle システムの[Set Editable]を押して編集可能にした後、Paricle Point 選択モードで、Hair の半分を選択し、削除します。その後、残り半分を選択し、Mirror ツール([Ctrl]+[M])で、Particle を反対側に反転コピーします。その後、X-Axis Mirror Editing をONにすると、自動的に Mesh の一方で行った編集が反転して適用されます。


更にコントロール

Vertex Group や Texture で、子 Particle を更にコントロールすることができます。Density や Length、Clumping、Roughness…といった多くのプロパティを、Vertex Group で指定できます。また、Particle が使用している Material の MapTo パネルの[PAttr]ボタンをONにすることで、Texture スロットで同様にプロパティを割り当てできます。

一つの Mesh には、複数の Particle システムを持つことができます。例えばこのチンチラでは、Base と Scruffy(汚れ)レイヤがあり、そして尻尾とひげに別々のシステムを持っています。それぞれの Particle システムは、自身の設定と Material を持っています。


Strand レンダリング

何百万もの毛をレンダリングする場合、レンダリングパフォーマンスとメモリ使用量が問題になります。そのため、Peach 用に新しい Strand プリミティブが追加されました。これにはカーブのコントロールポイントだけが格納されており、レンダリング時にポリゴンに変換されます。これは Strand Render オプションで使用できます。メモリを節約するためには、体毛用の Render Step オプションをできるだけ低く設定するといいでしょう。チンチラの場合では Base レイヤでは2に設定されています。

Strand プリミティブは半透明の時に効率的なレンダリングができ、カーブのコントロールポイントのみをシェーディングすることによりシェーディング時間を節約しますが、レイトレーシングなど、いくつかのレンダリング機能がサポートされていません。Material の Strand オプションで Hair の幅と形状をコントロールできます。


体毛の Material

ご存知のとおり、髪の毛は光りにくいのですが、体毛については仮定をいくらか単純化できます。Mesh をライティングするのと似たようなライティングに近づける、新しいシェーディングオプションが追加されました。Hair には、Mesh 表面の Normal を使用します。この Surface Diffuse(Strands ボタン内)オプションで、体毛用にデザインされディフューズモデルが有効になり、その隣の Distance オプションにより、Mesh 表面の Normal がその Hair にどれだけ使用されるかを決定します。スペキュラは、現存のタンジェントシェーダが使用できます。

すべての Hair にポリゴンを使用すると、レイトレースはとても遅くなります、新しい Approximate Ambient Occlusion では、Mesh 表面から Stand プリミティブへの遮蔽情報の伝達をサポートしており、短い毛においては実用範囲の近似になります。


毛のテクスチャリング
Hair には Mesh 表面からのテクスチャ座標でテクスチャを貼る事ができます。例えば Mesh に UV マッピングとテクスチャペインティングや通常の Material のような設定をし、Hair に Mesh からの色を継承させることができます。

更に Map Input パネルの Strand オプションにより、Hair の長さにあわせたテクスチャを適用することができます。例えば長さにあわせてαをフェードアウトさせるなど、Blend Texture がよく使用されます。また、Blend Texture をステンシルとして、Hair の根元もしくは先端に使用することもできます。


Simplification (単純化)

スクリーン上でキャラクタが小さく表示されている場合、Hair は1ピクセルより小さくなります。このことでレンダリングが無駄に遅くなるだけでなく、すべての Hair を見る事すらできないため、ジャギーの問題も生じます。
Blender で多くの Hair を自動的に縮小することができます。ただし、注意して調整する必要があります。

まず、Particle Buttons の Child Simplification オプションは、Mesh がスクリーン上で小さくなるにつれて、多数の子 Hair を減らします。
Reference Size は最大 Hair 数でキャラクタが表示されるサイズをピクセル数で示し、このサイズ未満で Hair がフェードアウトし始めます。
Rate と Transition オプションはそれぞれ、どれぐらい Hair を削除するのか、どれぐらい長く Hair のフェードアウトまでの移行期をとるのかを示します(いきなり出現・消失するのを防ぐため)。




元記事:blender.org - Hair and Fur