元記事:Hair Strand Rendering


Hair Strand レンダリング



Static Particle システムは、三つの方法でレンダリングできます。
- Halo Material を使用する方法。これは小さなブラシで塗ったようになります。
- デュプリケータとして、Parent した Object のコピーを、それぞれの Static Particle のラインの節にコピー(複製)する方法。(Dupliverts)
- そして、今デフォルトとなった、スクリーンと並ぶ "Hair Strand(髪の毛の房)"を使用する方法。

補足:Particle システムの新オプションもチェックして下さい。

Hair Strand は小さなポリゴンで、Static Particle のラインの方向に Extrude されていますが、その幅は正確には、ビューアングルに平行で、きっちり1ピクセルです。これはどの方法でも、常に Strand を確実にアンチエリアスエラーなくレンダリングするためです。
これは "Wire Render" オプション と少し似ていますが、大きな違いは、レンダリング用の Face Normal が、実際に有効なままであること、そして常に―カメラの方向と― Strand が平行なことです。

髪の毛の先端がシャープもしくは薄く見えるよう、Alpha Blend Texture(と、ZTransp オプション)を使用するのが、一番いい結果になります。この目的で、新しい "MapInput" チャネルが追加されています(名前は "Strand" です)。

Strand レンダリングのオプションは、Material パネルの最初のパネルのポップアップメニューにあります。



Use Tangent Shading

このオプションは Particle Strand のデフォルトで、Face の Normal をレンダリングに使用せず、代わりに Strand の方向のベクトル(タンジェント)を使用します。この時、Blender でのシェーディングは、ディフューズとスペキュラの両方に異方性反射(Anisotropic Reflection)を使用するよう切り替わります。

ディフューズでは、現在偽の Normal を計算しており、Normal がライトを指して、最適化された髪の毛を表示しています。Ramp を含む、現在のすべての内蔵シェーダはこれにより動作しています。

スペキュラでは、現在 Normal の代わりにタンジェントベクトルを使用している、すべてのライン用に、内積で置き換えた新たな方程式を使用しています。

dot = vector * tangentvector
dot = sqrt(1.0 - dot*dot)

公式では(論文に従えば)、このトリックはディフューズにも使用できるらしいのですが、髪の毛が非常に平坦になってしまいます。現在、Ramp もしくは Oren-Nayer などで、簡単に平坦さをコントロールできます。

"Tangent Shading" オプションを OFF にしても、綺麗にレンダリングできますが、金属や木材のような、よりソリッドな髪の毛のようになります。





Tangent レンダリング、異方性(Anisotopic)スペキュラ使用
 

従来の Normal によるレンダリング








Strand の幅の設定

Strand の始点と終点の幅も設定可能です。デフォルトでは、線形補間を行います。"Shape" スライダで、補間をコントロールできます。負の値で、Strand が細く(とがり)、正の値で太く(葉っぱのように)なります。

右の画像(上から下)は、Strand のサイズが1、10から0.5ピクセルへと線形に変形、よりとがった形への変形例です。





Strand が スクリーンと並ぶフラットポリゴンであるため、影の計算はレイトレーシングでは、髪の影の小さく暗いドットが髪の毛の上に見えるのはもとより、まだ多くのエリアシングがあります。
Shadow Buffer オプションを使用することにより、もっといい結果が得られます。大きな Buffer を作成し、Sample の大きさと量を大きく設定して下さい。





ヘアボール、1ピクセルの Strand
 

ヘアボール、5 から 1ピクセルの太い Strand




元記事:Hair Strand Rendering
Last update: Nov 12 2005.
This section is maintained by Ton Roosendaal.