テクスチャのペイントとブレンド
テクスチャ ツールを使って、メッシュ上の複数のテクスチャをペイントおよびブレンドします。
メッシュ上でテクスチャをブレンドするには、テクスチャ のブレンド方法を決めるシェーダーをマテリアルが使うようにします。マテリアルおよび、テクスチャのブレンドをサポートするシェーダーの使い方詳細は、下記のトピックを参照してください。
- Unity のビルトインレンダーパイプラインについては、マテリアルの作成と使用 を参照してください。
- 2019.3 より前の Unity Editor をお使いの場合は、LWRP 入門 (軽量レンダーパイプライン)、Unity 2019.3 以降をお使いの場合は URP 入門 (ユニバーサルレンダーパイプライン)。
- HDRP 入門 (HDRP)
互換性のないシェーダーを使ってメッシュにマウスオーバーすると、Polybrush は警告を表示します。
デフォルトのUnity シェーダーの大半は、テクスチャブレンディングをサポートしていませんが、プロジェクトにインポートできるサンプルシェーダーを Polybrush は備えています。詳細は、Polybrush シェーダーをインポートする を参照してください。
メッシュに適切なマテリアルが備わると、メッシュ上でテクスチャをペイントおよびブレンドすることができます。
- テクスチャツールをカスタマイズするには、Texture Paint Settings セクションにある、このモードでのみ選べる選択肢のいずれかを変更します。
- テクスチャを適用させたいメッシュオブジェクトを選びます。
- テクスチャモードをアクティベートするために、モードツールバーにある、メッシュ上のテクスチャをペイント () のアイコンをクリックします。
- ブラシの半径、フォールオフ、強さ(強度)をカスタマイズするには、Brush Settings セクションの下のプロパティーを変更します。
- 適用した変更をミラーするには、Brush Mirroring セクションの下の、軸およびリファレンスを設定します。
- Texture Paint Settings セクションの下にあるスロットの中から 1 つを、そのテクスチャ表面をクリックして選択します。
- ペイントするには、マウスカーソルをメッシュ上に置いて、選択したテクスチャを適用したい場所で左クリックします。
- 現在選択しているテクスチャを消すには、マウスカーソルをメッシュ上に置いて、左クリックしながら Ctrl キー (macOS の場合は Command キー) を押下します。
カスタムシェーダー
Polybrush は、[ UV0、UV2、UV3、UV3, Color, Tangent]
の属性の一部またはすべての組み合わせを使い、テクスチャを適用します。シェーダーコードは、この情報を定義します。
Texture Paint Settings
ブラシスタイルツールバー。以下のボタンのいずれか1つをクリックして、Polybrush にテクスチャを適用させたい方法を選択します。
ボタン | 説明 |
---|---|
Brush | ブラシを使った標準的な塗り方。Polybrush は、頂点に全体的にテクスチャをなめらかに適用します。 |
Fill | Polybrush は、ハードエッジで三角形(面)を塗りつぶします。 |
Flood | Polybrush は、メッシュを完全に塗りつぶします。 |
メッシュに複数のマテリアルがある場合、Material ドロップダウンメニューから、編集およびペイントするマテリアルを選択します。
Configure ボタンを選択して、テクスチャをマテリアルに設定します。
Polybrush は、どのテクスチャが各マテリアルに使えるのかを自動的に検出し、そのテクスチャをスロットとして選択グリッドに表示します。
ブラシテクスチャを選択してメッシュオブジェクトにペイントするには、以下を行います。
グリッド内のテクスチャスロットを 1 つクリックします。
プレビューの下に、選択したテクスチャが緑のバーがついた形で表示されます。
メッシュオブジェクトから選択したテクスチャを削除するには、次のようにします。
- ブラシ (クリック) しながら、Ctrl キー (macOSでは Command キー) を押下します。
テクスチャマテリアルの設定
Polybrush は、メタデータ内のメッシュデータを解釈するための詳細なインストラクションを保存します。
メタデータには、シェーダーのメタデータファイルに保存される属性が含まれます。各エントリーには、Polybrush がシェーダー内の各値をどうやって使うかの完全な情報が含まれます。
マテリアルをテクスチャモードにロードする時、Polybrush はこのメタデータを検索します。見つからない場合は、シェーダーの設定をするようにメッセージが表示されます。
設定パネルをすべて表示するには、Configure ボタンを選択します。
この設定パネルを使って、各テクスチャスロットおよびリンクチャンネル (例えば RGB
、UV1
、UV2
) について、テクスチャスロットに対して、 属性を定義します。
シェーダーの設定が終わったら、パネル上部にある Save を選択して変更を確定、または Revert を選択して変更を取り消します。
属性の定義
テクスチャブレンドシェーダーに定義されたプロパティーをカスタマイズするために、以下の属性を設定することができます。
属性 | 機能 |
---|---|
[シェーダープロパティターゲット] | 属性が影響するシェーダーです。 より複雑なインタラクションはシングルシェーダープロパティーにマップされない場合があるため、シェーダープロパティー名またはシンプルな記述になります。 この文字列がシェーダー内の 2D プロパティーに一致する場合、Polybrush は、このプロパティー名にマッチするマテリアルのテクスチャをロードします。テクスチャプロパティーに一致しない場合、この文字列は、テクスチャスロット内のプレビューとして表示されます。 |
Channel | 以下のどのメッシュチャンネルを属性にリンクさせるかを選択します。Color 、Tangent 、UV1 、UV2 、UV3 、UV4 |
Index | 属性が、チャンネルのどのコンポーネントからデータを受け取るのかを選択します。R 、G 、B 、A |
Range | 属性が動作する範囲を、最小 (X) と最大 (Y) で設定します。 |
Group | テクスチャスロットに対して、属性グループを 1 つ選択します。 適用されると、一致するグループを伴う属性は互いに影響します。この属性に常に独立して動作させたい場合は、 No Mask を使います。 |
属性すべてを削除するには、Erase attributes ボタンをクリックします。
シェーダープロパティーに定義された属性がない場合は、そのかわりに Create attributes ボタンが表示されます。Create attributes ボタンを選択して、新しい属性のセットを表示します。
Polybrush のテクスチャデータ適用方法
テクスチャモードでテクスチャを選択すると、Polybrush は各属性の新しいターゲット値を設定し、選択した属性グループに一致させます。選択した属性のターゲット値を Range.max
に設定する一方で、グループ内の他のすべての属性を Range.min
値に設定します。その後 Polybrush は、属性値のこの新しい組み合わせをメッシュに適用し、ブラシ 強度 と フォールオフ を考慮します。
テクスチャデータの例
この例では、テクスチャが5つあるシェーダーをもっていると想定しています。ベーステクスチャを1つと、ブレンドテクスチャを4つです。
このシェーダーは、mesh.color
チャンネルから、テクスチャブレンディング情報を読み込みます。
最終的なフラグメント色は、次の式を使ってビルドされます。
// テクスチャをサンプリング
fixed4 col1 = tex2D(_MainTex, i.uv);
fixed4 col2 = tex2D(_Texture1, i.uv) * i.color.y;
fixed4 col3 = tex2D(_Texture2, i.uv) * i.color.z;
fixed4 col4 = tex2D(_Texture3, i.uv) * i.color.w;
fixed4 final_color = lerp(lerp(lerp(col1, col2, i.color.y), col3, i.color.z), col4, i.color.w);
この場合、Polybrush がこれらのエントリーを Texture Palette 内に表示できるように、テクスチャを4つメタデータに加える必要があります。
すべてのテクスチャプロパティーは関連しています。つまり、ある値を最大強度に設定すると、他の値は最小強度に設定する必要があります。そのために、これら属性を同じグループとして作成し、以下の値を使用します。
プロパティー | チャンネル | コンポーネント | 範囲 | グループ |
---|---|---|---|---|
_MainTex |
Color | G | { 1, 0 } | 0 |
_Texture1 |
Color | G | { 0, 1 } | 0 |
_Texture2 |
Color | B | { 0, 1 } | 0 |
_Texture3 |
Color | A | { 0, 1 } | 0 |
_MainTex
と _Texture1
は同じチャンネルを共有しています。その理由は、_MainTex
はその強度を単一の属性にマップせず、その強度は他のテクスチャチャンネルに強度の欠落によって決定されます。
_MainTex
が Color
チャンネルを使うように設定し、それを G
フィールドに登録します。ただし、強度を 0 から 1 に設定するかわりに、1 から 0 に設定します。つまり、Polybrush が _MainTex
を最大強度で適用すると、Color.G
フィールドは 0 になり、Color.B
フィールドと Color.A
フィールドも 0 になります (最低値が 0 のため)。