WorldPositionOffsetでメッシュを上下に揺らす
WorldPositionOffsetを使用すると、マテリアルを適用したメッシュを動かす事が出来ます。
まず新しいマテリアルを作成し、M_WPOffset_Basicと名付けます。
増幅したSine派をWorld Position Offsetに接続します。
マテリアルのプレビューを確認すると、XYZ方向にメッシュが前後している事が確認出来ます。
Z軸方向にだけ前後するようにします。
マテリアルのプレビューを確認すると、XYZ方向にメッシュが前後している事が確認出来ます。
新しいActorBPクラスを作成し、BP_WPOffsetと名付けます。
BP_WPOffsetを開き、SphereコンポーネントとSphereCollisionコンポーネントを追加します。
Sphereコンポーネントを選択し、MaterialsにM_WPOffset_Basicを適用します。
見てわかる通り、Sphereメッシュは上下に移動していますが、コリジョンの位置が動いていない事が確認出来ます。
メッシュは上下していてもコリジョンの位置は移動していないので、
よくある横スクロールアクションゲームの上下するアイテム等に使えます。
SimpleGrassWindで葉を揺らす
マーケットプレイスにある
Infinity Blade: Grass Lands(無料)のプロジェクトを開きます。
プロジェクトを開いたらSM_Cherry_Treeを右クリックし、AssetActions -> Migrateを選択して自分のプロジェクトへコピーします。
自分のプロジェクトに戻り、新しいマテリアルを作成しM_WindWaveと名付けます。
TextureSampleを追加し、TextureにT_Cherry_Tree_Flowers_Dを設定し、BaseColorに接続します。
T_Cherry_Tree_Flowers_Dを開くと分かりますが、このテクスチャはAlphaチャンネルを持っています。
マテリアルのリザルトノードをクリックし、BlendModeをMaskedに変更します。
TextureSampleのAピンをOpacity Maskへ接続し、黒い部分が透過するようになった事を確認します。
ここからようやく本題に入るのですが、SimpleGrassWindノードを追加し、World Position Offsetへ接続します。
プレビューを確認すると、ウネウネ動いている事が確認出来ます。
表示されないメッシュの裏側を表示する(Two Sided)
レベルマップにPlaneを配置し、Planeに先程作成したマテリアルを適用します。
Planeの裏側を確認するとメッシュが表示されています。
これはバグでは無く、通常のメッシュのモデルは法線側のメッシュだけが表示され、裏側は表示しない設定になっているからです。
わざわざモデルを変更したりしなくてもマテリアルで裏面も表示させるようにする事が出来ます。
メッシュに適当しているマテリアルを開き、マテリアルのリザルトノードをクリックし、Two Sidedにチェックを入れます。
これで裏面も表示されるようになります。
葉っぱの裏側表示を自然にする(Two Sided Foliageシェーディングモデル、Subsurface Color)
メッシュの裏面が表示されるようになったら、レベルマップ上のPlaneをコピペし、複製したPlaneを90度回転させます。
マテリアルの
ShadingModelをTwo Sided Foliageに変更し、TextureSampleのRGBピンをSubsurface Colorに接続します。
これにより裏面が影になった時に、裏面部分が表面と同じ色になります。
葉っぱのメッシュが複雑に重なり合ったりした時に裏面のメッシュだけ極端に暗くなって、遠くから見て不自然に見えてしまわないようにする事が出来ます。
(左:Default Lit、 右:Two Sided Foliage)
左の葉は明らかにPlaneを十字配置しているのがバレバレですが、右側はチラっと見ただけなら自然な木に見えます。
TwoSidedFoliage
シェーディングモデルは、簡単に説明すると光が通過した部分にSubsurface Colorで指定した色が適用されます。
例えばマテリアルの以下のようにSubsurface Colorを赤色指定すると、影になっている側のメッシュの色は赤くなります。
光が当たっている側から見ると、光が通過している部分が若干赤くなっています。
並べて比較すると、Default Litの場合は裏側は単純に暗くなりますが、Two Sided Foliageの場合は裏面は指定した色に変化しています。
(左:Default Lit、 右:Two Sided Foliage)
葉っぱでこのような事をすると不自然になりますが、人間の手を光にかざして裏側から見た時に赤く見える皮膚の表現等に用いられます。
ちなみにInfinity Bladeで使用されていたSM_Cherry_Treeのスタティックメッシュのマテリアルをデフォルトに戻すと、
静止画では分かり難いですが、葉っぱ部分は片面表示のポリゴンが多い事が分かります。