距離に応じて全マテリアルのセルエッジ幅をコントロールするには
https://www.youtube.com/watch?v=X55H7h5yBBk
今回は距離に応じて、シーン内に存在するすべてのマテリアルのセルエッジの幅をコントロールする方法をご紹介します。
解説ビデオ「距離によってセルエッジの太さを変化させるには」で既に、カメラとアイテムの距離に応じて、セルエッジの幅を変化させる方法を解説していますが、この場合にはカメラとの距離でエッジ幅は導き出されますが、セルエッジが適用されている箇所はすべて同じエッジ幅となります。
シーン内に存在するすべてのマテリアルのエッジ幅を距離によって変化させていくには、レンダリングするサンプルの場所に応じて確定する必要があります。まずは距離をコントロールするためのロケータをひとつ作成し、ロケータのワールド位置をスケマティックビューへと追加します。このロケータのワールド位置と、レンダリングするサンプル位置とを測定する必要がありますので、サンプル位置を追加します。スケマティックビューの追加 > Shader Inputs > サンプル位置を追加します。
この二つの位置の間の距離を測定するために、距離を測定するノードを追加します。追加 > 測定 > Measure Distanceを追加します。ロケータのワールド位置をMeasure Distanceの起点に接続します。サンプル位置のワールド位置を終点に接続しますが、タイプがベクトルと行列とで異なるため、直接接続することはできません。ベクトルを行列へと変換するために、追加 > 行列 > Matrix Constructを追加します。サンプル位置のワールド位置をMatrix Constructの入力へと接続し、出力をMeasure Distanceの終点へと接続します。これでサンプル位置とロケータ間の距離を測定することができます。
ではセルエッジのエッジ幅をスケマティックビューへと追加します。距離をそのままエッジ幅へと接続すると、ロケータからの距離が遠ざかるほど、エッジ幅が大きくなります。距離が近いほどエッジ幅を大きくしたいので、この値を逆数にします。接続を選択し、右クリックからチャンネルモディファイヤを追加 > 演算 > BasicMath:除算ノードを追加します。距離出力を除算ノードの値Bに接続し、値Aには適切な値を指定したら、出力をエッジ幅へと接続します。
これでセルエッジが適用されている全てのマテリアルに対して、距離に応じたエッジ幅を適用させることができます。