今年の初めに、ProBuilder と Polybrush が正式に Unity の一部になることを発表しました。高速レベルのモデリングのための ProBuilder について詳しく説明しましたが、Polybrush は、ラフなスカルプト、テクスチャ ブレンディング、オブジェクトの散乱、頂点カラーのペイントに役立ちます。
通常、頂点カラーを処理するには、3D プログラミングを実行し、最終結果を推定する必要があります。しかし、Polybrush を使用すると、エディターで直接描画し、処理後の効果を確認できます。
この記事では、頂点カラーを使用するシェーダーの例と、頂点カラーでポリブラシを使用する方法をいくつか紹介します。
ポリブラシを入手
アセット ストアにアクセスして Polybrush をダウンロードできます。
https://www.assetstore.unity3d.com/cn/?stay#!/content/111427
ダウンロードが完了したら、リソース パックをインポートし、メニュー バーをクリックして、[ツール] > [ポリブラシ] > [ポリブラシ ウィンドウ] を選択します。
以下の図に示すように、Polybrush ウィンドウを開くと、4 つの機能オプションが表示されます。
彫刻
頂点カラーペイント
オブジェクトの散乱
テクスチャブレンド
特徴
1
彫刻
この機能には 2 つのタブ ページがあり、最初のタブ ページは頂点位置の上下に使用され、2 番目のタブ ページは頂点位置のスムージングに使用されます。
2
オブジェクトの散乱
関数のこの部分を使用する前に、まずパレットにいくつかのプレハブを追加する必要があります。プレハブは、Procore > PolybrushPrefab Palettes > Default ディレクトリにあります。
描画したいプレハブをここにドラッグします。プレハブを削除する場合は、プレハブを選択して Backspace キーを押します。
オブジェクトをクリックして配置できるようになり、ブラシの [強度] プロパティによってオブジェクトの密度が制御されます。
3
テクスチャブレンディング
テクスチャ ブレンディング機能には、3 つの UV セットを使用する特定のシェーダ セットアップが必要です。リソース パックには、セットアップ方法を示すいくつかの例が含まれています。
以下にPolybrushのTriPlanar Blend機能を示します。
マテリアルに希望のテクスチャを追加し、テクスチャ ペイント設定でテクスチャを選択します。塗りつぶしオプションはメッシュ全体を選択した色でペイントし、塗りつぶしオプションはプレビュー画像の頂点のみをペイントし、ブラシオプションはカーソルを中心として特定の半径の円形領域を描画します。
頂点カラーペイント
次に、頂点カラーのペイントについて詳しく説明します。
1
シェーダーで頂点カラーを読み取る
シェーダーの頂点カラーにアクセスするには、Input Struct (サーフェス シェーダーで使用される構造) または Appdata Struct (頂点/フラグメント シェーダーで使用される構造) にコード行を追加するだけです。
頂点/フラグメントシェーダ
次のコードは、Appdata 構造体の色を読み取り、v2F 構造体で色を宣言し、2 つの構造体間で色を渡します。フラグメントシェーダー内の「i.color」を使用して色を読み取ることができます。
サーフェスシェーダ
頂点カラーは「IN.vertexColor」で読み取ることができます。
コードを書きたくない場合は、次のリンクにアクセスしてください。これは最も基本的な頂点シェーダーです。
https://pastebin.com/6wwsnJgY
頂点カラーをペイントできるようになったので、いくつかの興味深い例を見てみましょう。
例
1
ハイライト
以下のリンクにアクセスしてください。これは Toon Specular シェーダ (Toon Specular) です。
https://www.patreon.com/posts/quick-game-art-13059579
このシェーダは静的マスクなしでさらに効果的に機能し、このシェーダを使用して任意の場所にペイントし、オブジェクトを濡れたように見せたり、ガラスのように見せたりすることができます。
この部分を実現するには、擬似ハイライト値に IN.vertexColor.r を乗算し、o.Emission チャンネルのリム ライトにも IN.vertexColor.r を乗算します。そのため、ペイントされた領域にもグロー効果が与えられます。
float3 spec = (step(_SpecSize, rampS.r) * IN.vertexColor.r;
o.Emission = pow(rim, _RimPower) * IN.vertexColor.r;
これは、赤が描かれた場所がどこでも光ることを意味し、光を目立ちすぎたくない場合は、より暗い赤を使用できます。
鏡面頂点カラー シェーダー コード: https://pastebin.com/xBMNuySz
漫画のカラー スケールを次の図に示します。
ハイライト カラー スケールを次の図に示します。
2
スイングアニメーション
アニメーションは動的な草に似ています。フラグ、葉、チェーンなどの一部の静的オブジェクトに布地/物理シミュレーション エフェクトを使用したくない場合は、頂点アニメーションを処理するシェーダーを使用できます。
ほとんどのグローバル ソリューションではクリッピングの問題が発生します。頂点カラー パレット ソリューションを使用する利点は、許可される移動量を設定できることです。以下の例では、旗の上部は動かさないようにしますが、ポールの中央は少しだけ動かします。
赤の頂点カラー チャネルを乗算して、エフェクトの位置を制御できます。
v.vertex.yz += sin(_Time.y * 動き計算 ) * v.vertexColor.r;
スイング頂点カラー シェーダー コード: https://pastebin.com/SsDaBEgy
3
3プレーンマルチテクスチャ
この記事の前半で示したテクスチャ ブレンディング ツールは、非常に滑らかな効果やぼやけた効果を提供します。一部のアート スタイルではこれで問題ありませんが、ノイズを使用してエッジをよりシャープにすることもできます。
このシェーダは、トリプレーンと同じベース カラーを使用しますが、ワールド法線で「草」を使用する代わりに、赤と青の頂点チャネルを使用して新しいテクスチャを追加します。
float Primary = step(0.6* ノイズテクスチャ,IN.vertexColor.r );
これを赤いチャンネルに表示されているテクスチャと掛け合わせ、テクスチャの周囲のエッジについては、元の部分より少し大きい領域に、小さな部分だけを残して反転した元の部分を掛け合わせます。
float PrimaryEdge = (step(0.5* ノイズテクスチャ,IN.vertexColor.r )) * (1-primary);
頂点カラーは非常にぼやけていますが、Step 関数とノイズ テクスチャのおかげで、結果は非常にきれいです。複数の UV セットによりさらに多くのテクスチャが生成されるため、テクスチャ ブレンディング シェーダを再加工して同様の効果を実現することもできます。
トライプレーン頂点カラー シェーダー コード: https://pastebin.com/r9EcWvgH
まとめ
ここではポリブラシについて共有します。このツールを使用して記事内の例を試していただければ幸いです。ただし、処理中のメッシュのインポート設定を変更すると、ジオメトリが破壊され、再作成が必要になる可能性があることに注意してください。それ。
Polybrush はまだベータ段階ですが、今年中に Unity に直接統合される予定ですので、関連情報は Unity の中国公式フォーラム (UnityChina.cn) に注目してください。
推奨読書
Unity Shader シェーダーの最適化
Shader Graph シェーダービュー サンプルプロジェクトの紹介
Unity シェーダー トレーニング キャンプ (1): はじめに
Unity シェーダー ブートキャンプ (2) - MVP 変換と法線マッピング
ProBuilder クイック レベル モデリング演習
Unity を使用してリアルな VR 視覚体験を作成する
Unity VR/AR プロジェクトの最適化手法とツール
Unity UI パフォーマンス最適化のヒント
Made with Unity 短編アニメーション「ダバイの羊を数える夢」
公式活動
Unity の公式教師トレーニングの登録が本格化しています
Unity は、10 月 22 日から 26 日まで、5 日間のプロフェッショナルな Unity 公式教師トレーニング コースを開催します。Unity で最新のテクノロジーを学び、共有する教師の皆様を心から歓迎します。[もっと詳しく知る...]