先週は、オブジェクトの高さに沿ってグラデーションを作成するために、Color RampをオブジェクトのZ軸に沿ってマッピングする方法を、ローカルモードとグローバルモードの両方で紹介する動画を公開しました。
動画の書き起こし
こんにちは、皆さん!先週は、オブジェクトの高さに沿ってグラデーションを作成するために、Color RampをオブジェクトのZ軸に沿ってマッピングする方法を、ローカルモードとグローバルモードの両方で紹介する動画を公開しました。
このチュートリアルでは、軸に基づいたマッピングのコンセプトをさらに発展させて、カラーグラデーションと2つのShaderのミックスを作成します。具体的な例としては、色付きの進行バーを作りますが、紹介する手法は他のコンテキストにも応用可能です。特に、制御用のEmptyを水平方向に動かすことで、赤から黄色を経て緑に変化するグラデーションで色付けされたバーが進行していくのが見られます。

まずは初期シーンのセットアップを説明します。Planeオブジェクトがあり、X軸方向に少し引き伸ばすようにスケールされています。作業しやすいように、オブジェクトのOriginを左上の角に配置しました。また、このオブジェクトには回転とスケールの変換が適用されています。このPlaneはこれ以上編集しません。

シーン内のもう1つのオブジェクトはEmptyで、PlaneのOriginの位置に配置されており、こちらにも回転とスケールの変換が適用されています。このEmptyはバーの進行を制御し、バーはPlaneのMaterialだけで実現され、Planeのジオメトリ自体は変更されません。

PlaneのMaterialには2つの要素が必要です。まず、PlaneのX軸に沿ったグラデーションを定義する必要があります。それができたら、Emptyより右側を透明にし、左側を定義したグラデーションで色付けされるようにします。
まず、オブジェクト全体に色のグラデーションを適用するところから始めましょう。先週のチュートリアルと同様に、Texture Coordinateノード、Separate XYZノード、Color Rampノードを順番につなげて使います。
Texture CoordinateノードのGenerated出力を使います。Plane自体のサイズに基づいているためです。Separate XYZノードからは、Planeのローカル水平方向のX出力を使用します。
次に、Color RampをEmissionノードに接続します。これは、Materialが常に表示され、ライティングの影響を受けないようにするためです。したがって、デフォルトのPrincipledノードはEmissionノードに置き換えましょう。

ここからColor Rampは自由にカスタマイズできます。私の場合は、左に赤、中央に黄色、右に緑のマーカーを配置し、Ease補間を使って赤と緑が端に限定されないようにしています。


Emptyの左側だけを着色し、右側を透明にするには、まずエディターに2つのShaderノードを追加する必要があります。具体的には、TransparentノードとMix Shaderノードです。Color Mixノードと間違えないように、必ずShader Mixノードを選んでください!
その後、EmissionノードをMix Shaderノードの最初のShader入力に接続します。Transparentノード(純白に設定)をMix Shaderノードの2番目のShader入力に接続します。
Mix Shaderノードの出力をMaterial OutputノードのSurface入力に接続します。この時点で、赤から黄、緑へと変化するグラデーションを持つ半透明のMaterialができています。

Mixノードでは、ColorでもShaderでも、Factorが1のときにのみ2番目の入力が完全に使用されます。したがって、Emptyの位置の右側でFactorが1になるようにする方法が必要です。
そのために、Texture CoordinateノードとSeparate XYZノードをエディターに追加し、Separate XYZノードのX出力をMix ShaderノードのFactor入力に接続します。
ただし今回は、Texture CoordinateノードのObject出力を使用し、そのノードのObjectフィールドにEmptyを指定します。

これで、意図したとおりに、Emptyの右側は透明になり、左側は色付きのMaterialになります。ただし、Emptyの位置をかなり越えた部分までMaterialが半透明のままであることがわかります。

Emissionノードへの切り替えをEmptyの位置でシャープに行うために、Separate XノードとMix Shaderノードの間にMathノードを挿入し、モードをGreater Thanに、Threshold値を0に設定します。

このようにすると、Greater ThanノードはEmptyのX座標を取得し、それより大きいすべての値に対して1を出力します。すると、Mix Shaderノードは第二のShader、つまりTransparentノードへと鋭く切り替わります。
最後に、EmptyをPlaneに親子関係で関連付けることができます。こうすることで、Planeをシーン内のどこに移動してもEmptyが追従し、それでいてEmptyは独立して移動やアニメーションが可能になります。
今回のチュートリアルはこれで終了です!他のビデオチュートリアルとは異なり、このチュートリアルのPDFバージョンは現在ダウンロードできません。ただし、説明欄に他の多くのビデオチュートリアルのPDF版が掲載されているページへのリンクがあります。いずれにせよ、今こそチャンネル登録と通知のオンをおすすめします!またすぐにお会いしましょう!