今回はフワフワの芝生の庭やグラウンドなどを表現する方法を紹介します。細かい設定で見た目がどのように変わるかも確認しましょう。


Blender_Lawn_Mat



Contents

  1. ヘアーパーティクルシステム
  2. 放射パネルの設定
  3. 子パーティクルパネルの設定
  4. 子パーティクルの粗さ

1. ヘアーパーティクルシステム

芝生を表現するためには、「パーティクルシステム」の「ヘアー」という機能を使用します。これは指定した表面から細い糸のようなものを発生させます。
まずはヘアーを発生させるための準備をします。
  1. 試しに芝生マットのようなものをつくってみたいので、まず平面オブジェクトを作ります。ここではサイズは1m×1mとしました。
  2. 平面にマテリアルを設定し、適当な名前をつけます。ここでは「Lawn_Grass」としました。シェーダーもデフォルトで選択されている「プリンシプルBSDF」のままで、色を「7cfc00」とします。
  3. プロパティエディタから「パーティクルシステム」を選択して、タイプを「ヘアー」にします。

    Lawn_Mat_01

これで平面オブジェクトからヘアーパーティクルを発生させることができました。

2. 放射パネルの設定

それでは細かい設定による違いを確認していきます。まずは放射パネルで設定するプロパティについてです。放射パネルでは次の4つのプロパティが設定できます。
  • シード
  • ヘアー長
  • セグメント

Blender_Particle_Emittion_1


    数    

ヘアーパーティクルの数を設定します。
計算負荷が大きくなるのでできるだけ少なくします。このサイズの芝生だと10000程度は必要に見えます。
後から紹介する「子パーティクル」という機能をつかうと、「数」を増やさずにボリュームを出すことができます。
Lawn_Mat_Number_1k
1000
Lawn_Mat_Number_5k
5000
Lawn_Mat_Number_10k
10000

    シード    

この値を変更するとヘアーパーティクルの発生する位置がランダムに変化します。ただ、今回は特に必要ないので使用しません。


    ヘアー長    

ヘアーの長さを設定します。
一般的に芝の長さは2~5cmくらいらしいのですが、ここでは変化が分かりやすいように長めの10cm (0.1m) に設定します。


    セグメント    

セグメントの数を設定します。
セグメントはヘアーの動きを出すため機能で、ヘアーをいくつかの節でつながった直線で表現します。


3. 子パーティクルパネルの設定

「 子パーティクル」とは、設定した親パーティクルに基づいて自動的にボリュームを増やす機能になります。

Lawn_Mat_Child_Panel

「シンプル」では親パーティクルの周辺に集中して「子パーティクル」が表示されます。親パーティクルが発生面の端の方にある場合は「子パーティクル」が発生面からはみ出すこともあります。
「 補間」では各親パーティクル間を埋めるように「子パーティクル」が表示されます。

Lawn_Mat_Child_None
なし
Lawn_Mat_Child_Simple
シンプル
Lawn_Mat_Child_Intepolate
補間

「 子パーティクル」パネルでは以下のプロパティを設定します。
  • 表示数
  • レンダリング時の数
  • 長さ
  • しきい値
  • シード

    表示数 / レンダリング時の数    

「表示数」「レンダリング時の数」は各親パーティクルに対して発生する「子パーティクル」の数を設定します。
「表示数」は3Dビューポートに表示される「子パーティクル」の数となり、「レンダリング時の数」はレンダリングした際の画像に表示される「子パーティクル」の数となります。
「表示数」を大きくすると操作時に動作が遅くなり操作しづらくなるので、「表示数」はある程度の数に設定し、「レンダリング時の数」のみ希望の数に設定するのがよいと思います。


    長さ / しきい値    

「長さ」は「子パーティクル」の長さを設定します。値は放射パネルで設定した親パーティクルの長さに対する割合で設定し、0~1となります。
「しきい値」も同様に0~1の値で設定され、「長さ」の設定に影響されない「子パーティクル」の割合を指定します。
「長さ = 0.5 」「しきい値 = 0.5」とすると表示される「子パーティクル」の半分だけが、親パーティクルと同じ長さとなり、残りの半分が親パーティクルの半分の長さとなります。

Lawn_Mat_Children_threshold_0
しきい値 0
Lawn_Mat_Children_threshold_0.5
しきい値 0.5
Lawn_Mat_Children_threshold_1.0
しきい値 1.0

    シード    

この値を変化させることで「子パーティクル」をランダムに変化させます。

4. 子パーティクルの粗さ

    均一    

「子パーティクル」の位置によって形が変わります。

Lawn_Mat_Children_Roughness_Uniform


    終端    

それぞれの「子パーティクル」の終端を移動した形になります。

Lawn_Mat_Children_Roughness_Endpoint

    ランダム    

ランダムに「子パーティクル」の形を変化させます。

Lawn_Mat_Children_Roughness_Random

それぞれの粗さプロパティを追加してレンダリングしてみます。


Lawn_Mat_Rough_None
粗さ なし
Lawn_Mat_Rough_Unify
粗さ 均一
Lawn_Mat_Rough_Endpoint
粗さ 終端
Lawn_Mat_Rough_Random
粗さ ランダム

「粗さ」のプロパティを追加しない場合はまっすぐに伸びた芝生のようになります。
「均一」のプロパティを設定すると、芝目の流れのような模様をもった状態になります。
「終端」のプロパティを設定すると、荒れた芝生のような表現になります。
「ランダム」のプロパティを設定すると、「均一」のときのような流れはなく一様に乱れた芝生になります。


次回は、このモデルのレンダリング時間を調べてみたいと思います。