メッシュが別のメッシュと交差するか、かなり接近したとき、インタラクティブ マテリアルが反応します。 このエフェクトはディスタンス フィールドを使用して実現されます。
リアクティブ マテリアルを作成する 3 種類の方法を次に示します。
距離により、メッシュの色を変更するマスクを作成する
正弦波を使用して、2 つのメッシュが交差した部分のサーフェスに波を生み出す
ベクター マスクを使用して、すぐそばにある別のメッシュにメッシュのサーフェスを引き付け、交差しているメッシュを覆う
DistancetoNearestSurface ノードはディスタンス フィールドが有効であるプラットフォームでのみ機能します。 そのため、低パフォーマンスの PC やモバイル デバイスで期待どおりに動作しない場合があります。これは、ディスタンス フィールド演算処理はパフォーマンス ボトルネックになることがあるためで、原因としては、高解像度のフィールドであることや、入力メッシュで演算が不完全になりタスクをほとんど実行できないことがあります。
そこで、ShadingPathSwitch を使用して、DistancetoNearestSurface のシェーダーにモバイル プラットフォームと低パフォーマンス PC で設定どおりに機能するようにします。
まず、別のメッシュと交差したときに、色を変更するマテリアルを作成します。
コンテンツ ブラウザで新しいマテリアルを作成し、マテリアル サムネイルをダブルクリックして、マテリアル エディタを開きます。
次のノードを作成します。
DistancetoNearestSurface ノード
ShadingPathSwitch ノード
Divide ノード
Saturate ノード
OneMinus ノード
Time ノード
Sine ノード
Add ノード
VertexNormalWS ノード
Mask ノード
3 X Multiply ノード
DistancetoNearestSurface ノードからドラッグして、ShadingPathSwitch ノードの Default 入力に接続します。
Divide ノードを選択し、Const B 入力の値を「50.0」に変更します。 エフェクトが発動するオブジェクト間の距離を決定します。
Divide ノードからドラッグし、ShadingPathSwitch の Mobile 入力に接続します。 これにより必ずシェーディング マスクがすべてのプラットフォームで正常に動作します。
ShadingPathSwitch ノードからドラッグして、Saturate ノードに接続します。 これによりメッシュのカラーがサチュレートされます。
Saturate ノードからドラッグして OneMinus ノードに接続します。 これによりメッシュのシェーダーが反転します。
OneMinus ノードからドラッグして、マテリアルのルート ノードの Base Color 入力に接続します。
これにより、オブジェクト間の距離を数学的に表現したディスタンス フィールド コンフィギュレーションの基本が作成されます。 シェーダーはメッシュにマスキング エフェクトを生み出します。 対象メッシュを別のメッシュに交差させることでテストして、マテリアルが反応する様子を確認します。
メッシュが近づくと自動車のボディのマテリアルが線をどのように生み出すかがわかります。
リップル エフェクト
リアクティブ マテリアルの 2 番目のコンフィギュレーションを作成します。
Time ノードからドラッグし、Add ノードの B 入力に接続します。
Add ノードからドラッグして Sine ノードに接続します。
Sine ノードからドラッグし、1 番目の Multiply ノードの B 入力に接続します。
Sine ノードを選択して展開し、Period の値を「0.2」に変更します。
OneMinus ノードからドラッグし、1 番目の Multiply ノードの A 入力に接続します。
1 番目の Multiply ノードからドラッグし、マテリアルのルート ノードの Base Color 入力に接続します。 これにより OneMinus ノードとマテリアルのルート ノード間のリンクが解除されます。
ディスタンス フィールドの前のコンフィギュレーションを使用して、現在リアクティブであるメッシュにカラーを適用します。 マテリアルはその周りにあるメッシュと環境と相互作用します。 メッシュが別のメッシュと相互作用するとき、マテリアルによりサーフェスが波うちます。
このコンフィギュレーションは一般に水面を作成するために使用されます。
エンベロープ エフェクト
リアクティブ マテリアルの第 3 コンフィギュレーションを作成するには、以下を実行します。
OneMinus ノードからドラッグして、マテリアルのルート ノードの Base Color 入力に接続します。 1 番目の Multiply ノードとマテリアルのルート ノード間のリンクを解除します。
VertexNormalWS ノードからドラッグして、Mask ノードに接続します。
Mask ノードからドラッグし、2 番目の Multiply ノードの A 入力に接続します。
2 番目の Multiply ノードを選択して展開し、B 入力の値を「50.0」に変更します。
2 番目の Multiply ノードからドラッグし、3 番目の Multiply ノードの B 入力に接続します。
1 番目のコンフィギュレーションの OneMinus ノードからドラッグし、3 番目の Multiply ノードの A 入力に接続します。
3 番目の Multiply ノードからドラッグし、マテリアルのルート ノードの World Position Offset 入力に接続します。
2 番目のコンフィギュレーションはこのようになります。
プレビュー ウィンドウで、マテリアルに突出部分が現れることがわかります。 メッシュに適用すると、メッシュの形状も変わります。 メッシュが自動車のそばに移動すると、マテリアルによりメッシュが乗り物をラップするようになります。