Search Unity

ProBuilderとShader Graphで簡単なアニメーション表現

  • アーティスト向け
  • アニメーション
  • グラフィックス

<このページで学べる内容>

風を受けてはためいているカーペットをProBuilderとShader Graphで実現する方法を紹介します。 対象: Unity中級者

対象: Unity中級者

こちらの動画ではProBuilder、Polybrsh、ProGrid、Shader Graphを用いた効率的なレベルデザインついて解説しています。このページでは上記の動画の中で紹介しているテクニックから、下図の様な風を受けてはためいているカーペットをProBuilderとShader Graphで実現する方法を紹介します。

ProBuilderはUnity上でジオメトリの構築、編集、テクスチャリングができるモデリングツールです。このページでは頂点カラーをペインティングする方法を学べます。Shader Graphはノードを繋げるだけでオリジナルのシェーダーを作成できるツールです。このページでは頂点カラーの値を元に頂点アニメーションを行うシェーダーの作成方法を学べます。これらの機能を組み合わせることで比較的低コストに小物のアニメーション表現を学ぶことができます。

使用環境を以下に示します。

  • Unity 2020.2.7f1
  • Windows 10(21H2)

基本的にWindows 10で検証していますが、macOSでも利用できますのでご安心ください。

サンプルアセット

下記のURLにテクスチャファイルを格納しましたのでご利用ください。

https://forpro.unity3d.jp/wp-content/uploads/2022/03/ForProSamples-2.zip

ProBuilderによるカーペットの作成

まずは新規プロジェクトを作成します。テンプレートは「3D(URP)」を選択してください。Shader GraphがBiRP(Built-In Render Pipeline)でも使えるようになったためBiRPでも問題ありませんが、今回参考している動画がURPのためそちらに合わせました。

携帯電話の画面のスクリーンショット

自動的に生成された説明

次にProBuilderをインストールします。Package Manager経由でインストールします。

グラフィカル ユーザー インターフェイス, テキスト

自動的に生成された説明

次にProBuilderのSampleに含まれる「Universal Render Pipeline Support」をインストールします。これはProBuilderのデフォルトマテリア理が格納されています。ですが、自分で設定しないと使えませんので、サンプルパッケージのインストール後に設定するのを忘れないようしましょう。

それではProBuilderのデフォルトマテリアにURP用マテリアルを設定します。UnityのメニューからEdit > Preferencesを実行し、ProBuilderを選択します。次にMesh SettingsのMaterialsに「ProBuilder Default URP」をセットします。

準備ができました。それでは早速カーペットを作成します。PlaneやQuadを加工しても良いのですが、それだと厚みが無いため、ここではCubeを薄く引き伸ばして作成します。次にいくつか分割します。頂点数が増えればそれだけ細かくアニメーションを指定できます。ですが、余り沢山増やしても不自然な感じになるので、様子を見ながら増やしていくのが良いでしょう。図を参考に分割して、適当なところで折り曲げてください。

グラフ, レーダー チャート

自動的に生成された説明

モデリングが苦手な方は配布したパッケージの中に作成済みのモデルがありますので、必要であればご利用ください。

グラフィカル ユーザー インターフェイス, アプリケーション

自動的に生成された説明
Assets > ForProSamples > Models > Carpet

これをSceneビューにドラッグ&ドロップしたあと、Carpet > Cubeを選択します。

グラフィカル ユーザー インターフェイス, テキスト, アプリケーション

自動的に生成された説明

そして、Tool > ProBuilder > Object > Pro Builderizeを実行してProBuilderで編集できるようにしてください。

グラフィカル ユーザー インターフェイス, アプリケーション

自動的に生成された説明

Shader Graphによる頂点アニメーションの作成

次に頂点カラーによる頂点アニメーションを行うシェーダーの作成です。SubGraphを用いているため見た目はすっきりしています。それではCarpetColorShakeグラフを開いてください。

グラフィカル ユーザー インターフェイス, テキスト, アプリケーション, チャットまたはテキスト メッセージ

自動的に生成された説明
Assets > ForProSamples > Shaders> CarpetColorShake

開くと大きく「Shake effect」(上)と「Visuals」(下)の2つに処理が分かれているのが分かると思います。そして、上下に関わっている重要なパラメータは「Vertex Color」です(左中央)。

グラフィカル ユーザー インターフェイス

低い精度で自動的に生成された説明

Shake Effectは頂点カラーのRGBの値をShake(サブグラフで定義)で乗算し、オブジェクトの頂点座標に加算しています。

グラフィカル ユーザー インターフェイス

自動的に生成された説明

Shake SubGraphはSimplexNoiseとSinカーブの乗算によるグラフです。3つパラメータが用意されていて調整ができます。

Shake Frequency: 振動周波数。値を大きくすると早く動く。

Shake Amplitude: 振幅。値を大きくすると揺れが大きくなる。

ShakeAxis: 振動方向:XYZにそれぞれ移動の可否を指定。1で最大移動、0で動かないとなります。グラフィカル ユーザー インターフェイス

自動的に生成された説明

まとめると、各頂点は頂点カラーのRGBの値に基づきXYZ方向に揺れます。例えばB(青)ならZ方向に揺れます。これで周期的な動きをさせたい方向の色を頂点カラーとして設定することで頂点がアニメーションします。全体的な調整は「Shake Frequency」と「hake Amplitude」で行います。

次にCarpetColorShakeグラフの下の方にある「Visuals」の方を見てみましょう。「PBR Inputs」はSubGraphです。これはURPのLit Shader相当の機能を提供するために似たような処理まとめているグラフです。興味がある方は追いかけてみてください。この「Visuals」のポイントは右上にあるBranchノードです。これはパラメータ「ColorView」の値により、画面出力に頂点カラーかAlbedoのいずれかを選択することができます。この機能により、揺れを編集するときは「ColorView」をチェック(True)に、リリース時は「ColorView」のアンチェック(False)にすることでUnityだけで揺れの編集ができます。

グラフィカル ユーザー インターフェイス

自動的に生成された説明

シェーダーの動きが分かったのでマテリアルを作成してCarpetモデルに適用しましょう。

グラフィカル ユーザー インターフェイス, テキスト, アプリケーション, チャットまたはテキスト メッセージ

自動的に生成された説明
Assets > ForProSamples > Materials> CarpetWave

上記のマテリアルを適用すると次のようになるはずです。

グラフ, 等高線グラフ

自動的に生成された説明

Albedoを見ると赤い部分がありますが、UV Editorで確認すると青い部分のみ使用しているのが分かると思います。

コンピューターゲームの画面

低い精度で自動的に生成された説明

頂点カラーの編集と揺れの確認

最後に頂点カラーを設定て揺れを確認しましょう。まずはSceneビューのCarpet > Cubeに対して、Assets > ForProSamples > Materials > CarpetWaveマテリアルを適用します。

グラフィカル ユーザー インターフェイス, テキスト, アプリケーション, チャットまたはテキスト メッセージ

自動的に生成された説明

マテリアルを適用すると少し動きがあると思います。より分かりやすくするために、Sceneビューの上部にあるメニューから「Always Refresh」を選択しましょう。

コンピューターのスクリーンショット

中程度の精度で自動的に生成された説明

さて、勝手に動いているので一旦止めたいと思います。まずは評点カラーを表示するモードに切り替えましょう。頂点カラーを表示するには、Inspectorの下部にあるマテリアルのプロパティの中から、「ColorView」を見つけてチェックしてください。

携帯電話のスクリーンショット

自動的に生成された説明

するとモデルが真っ白になります。つまりすべての頂点に白(RGB=1.0, 1.0, 1.0)と設定されていたため全方向に動いていました。これを黒にすることで止めることができます。

コンピューターのスクリーンショット

自動的に生成された説明

Tools > ProBuilder > Edtiros > Open Vertex Color Editorを実行して頂点編集ウィンドウを開きます。

グラフィカル ユーザー インターフェイス, アプリケーション

自動的に生成された説明

ウィンドウの位置は自由ですが、この辺に置いておくと良いでしょう。

グラフィカル ユーザー インターフェイス

自動的に生成された説明

まずは全体を黒にしたいのでオブジェクト選択モードにします。

グラフィカル ユーザー インターフェイス, アプリケーション

自動的に生成された説明

Carpet > Cubeを選択し、黒の隣にある「Apply」ボタンをクリックします。これで動きが止まりました。

グラフィカル ユーザー インターフェイス

自動的に生成された説明

次に頂点の編集選択モードにします。

グラフィカル ユーザー インターフェイス

自動的に生成された説明

次にカーブの下の辺りの頂点を選択します。

グラフ, レーダー チャート

自動的に生成された説明

矢印の色を確認してください。例えば手前と奥に揺らしたい場合は「青」を設定すれば良いと言うのが分かりますでしょうか?試しに設定してみましょう。

どうですか、上手く揺れましたか?このような感じで揺らしたい頂点を選択して、揺らしたい方向の色を設定するだけでアニメーションができます。設定が終わったら、マテリアルの「ColorView」のチェックを外しましょう。ここでは1つの頂点しか試していませんが、色々な頂点カラーを設定して確かめてみてください。

おわりに

頂点カラーはシェーダーやProBuilderを学び始めた時に利用しますが、それっきりになっている方も多いと思います。しかし、応用次第でこのような活用例もあるので皆さんも色々と工夫して面白い活用方法を見つけてください。

このブログでは今後も様々なUnityの機能について情報を発信していく予定ですのでご期待ください。

この記事はいかがでしたか?