マテリアルのインスペクターでShaderを変更します。
2つのシェーダがあるので用途に応じて選んでください。
両面ライティング + 揺れ
fk/fkGrassDoubleSidedStandard2
揺れのみ。(ライティングは片面)
fk/fkGrassSingleSidedStandard2
あとは各パラメータを設定してください。
両面版のインスペクターで説明します。片面版のインスペクターは裏面用の設定がないことを除いて両面版と同じです。
このブロックはライティングに関連するパラメータです。
パラメータは表面と裏面で個別に設定できるようになっています。
表裏で同じ設定を使用する場合、例えば表裏で同じMainColorテクスチャを使いたい場合は単に両方に同じテクスチャを設定すればOKです。
テクスチャと値(カラー)を設定できるパラメータは、テクスチャと値を乗算しています。
テクスチャを使用せずにインスペクター上の値のみで設定したい項目は、単にテクスチャを無し(None)のままにして値を設定するだけでOKです。
テクスチャのみで設定したい場合はインスペクター上の値を1.0、色であれば白 (1.0, 1.0, 1.0) にしてください。この設定であればテクスチャに1.0が乗算されることになり、インスペクター上の値は事実上無視されることになります。
Main Color
ベースカラーです。テクスチャと色を設定することができます。
テクスチャと色は乗算されます。
Alpha Cutoff
テクスチャのアルファ値でオブジェクトを”抜く"ときの閾値です。
Main Color(Front Face)に設定しているテクスチャのアルファ値が使用されます。
Normal Map
法線マップです。使用しない場合はNoneのままでOKです。
Emission Color
発光色です。テクスチャと色を設定することができます。
テクスチャと色は乗算されます。
MSO Map
Metallic、Smoothness、Occlusionのテクスチャマップです。
RチャネルがMetallic、GチャネルがSmoothness、BチャネルがOcclusionです。
テクスチャとスライダーの値は乗算されます。
Metallic
大きいほど金属的な質感になります。
Smoothness
大きいほど滑らかな質感になります。
Occlusion
小さいほど間接光の影響が小さくなり、陰部が暗くなります。
揺れに関連するパラメータです。
Weight Map
揺れる部分と揺れない部分を設定するためのテクスチャです。
Rチャンネルのみを使用します。
これはシェーダによる頂点の移動に乗じられるウェイトと考えてください。
1.0で移動が100%、0.5では50%適用され、0.0では全く適用されなくなります。
Use VertexColor.red as Weight をチェックすると
頂点カラーのRチャンネルがウェイトに使用されます。
Use Height as Weightをチェックすると頂点のY座標がウェイトに使用されます。
Bottom Heightでウエィトが0になる高さを、TopHeightで最大になる高さを指定します。これらにはマイナスの値も設定できます。この2つの高さはGameObjectのTransformを適用していない状態で考えてください。たとえばGameObjectのスケーリングを100にすることで高さが1.0になっているのであれば、ここに設定する値は0.01です。
これら3種類のウェイト設定は併用するようなものではあませんが、併用した場合は乗算されます。
右図は設定されているウェイトを色として表示させてみたものです。
揺らしたくない草の根元から揺らしたい草の先端にかけて黒(0,0,0) → 赤 (1,0,0) のグラデーションになるように頂点カラーを設定しています。
木の葉は枝の根元から葉の先端にかけて黒→赤になるテクスチャを設定しています。
なお、このサンプルでは木の幹と太い枝は揺らしておらず
標準のStandardシェーダを使用しています。
Speed
揺れの速度です。大きいほど速く揺れます。
2次元の値になっていますが、これはワールド空間の方向とは無関係です。
例えばXのみを大きくしてもワールド空間のある方向のみの揺れが速くなるわけではありません。XとYの配分はあまり気にせずに設定しても基本的に問題ありません。
XとYの配分が異なるオブジェクト間では位置が近くても揺れがばらばらになります。
Strength
揺れの大きさです。ワールド空間の方向で指定してください。
Wave Density(Global)
揺らぎの密度です。
このシェーダでは、ワールド空間で近い位置にある頂点は
ある程度揃った動きになるようになっていますが
このパラメータを大きくすると近い頂点でも異なった動きになりやすくなります。
0にすると全ての頂点が同じ動きをするようになります。
(ただしWeight Mapの影響は引き続き有効です)
あまり大きくするとオブジェクトが波打ったような動きになりますので、Wave Density (Local)もあわせて調整してください。
Wave Density (Local)
オブジェクト内での揺らぎの密度です。
この値を小さくすると同一オブジェクト内の頂点が揃った動きをするようになります。
0にすると同一オブジェクト内の全ての頂点が同じ動きをするようになります(ただしWeight Mapの影響は引き続き有効です)。この場合でもGlobalが0でなければ異なるオブジェクト間では異なった動きをします。
Randomize Dir
揺れ方向にランダムなブレを加えます。
Dir Range (Degrees)
揺れ方向のブレ幅を0°~180°で指定します。
Strengthで定まる方向を中心としてこの範囲でランダムなブレが加えられます。
Dir Noise Density (Global)
この値が小さいと、ワールド空間で近い位置にある頂点は似通ったブレ方をします。
大きいと近い頂点でも異なったブレ方になりやすくなります。
Dir Noise Density (Local)
0にすると同一オブジェクト内の頂点は全て同じブレ方をします。
大きくすると同一オブジェクト内でも頂点によってブレ方が異なるようになります。
Dir Change Speed
時間経過による揺れ方向の変化のスピードです。
0にすると時間経過で揺れ方向は変化しなくなります。
2次元の値になっていますが、これはワールド空間の方向とは無関係です。
XとYの配分はあまり気にせずに設定しても基本的に問題ありません。
Standardシェーダーなどと同じです。
CullingはデフォルトでOffにしていますが、BackやFrontに変更して片面表示にもできます。