UnityのURPで3Dモデルのアウトライン表示をする

2021年6月28日月曜日

Unity URP

t f B! P L

はじめに

主人公を強調したり、選択中のオブジェクトを強調する時に重宝するアウトライン表示ですが、Unity標準の機能では以外に苦労します。

通常のレンダリングシステム(Built-In RP)を使ってゲームを作ったときは、以下のポストエフェクトで実現するアセットを使わせていただいていました。

https://github.com/westmark/unity-mesh-outline


ところがURPでは上記はもちろん、他の無償で公開してくださっているアウトライン表示系のライブラリやアセットが軒並み動作しません。

ネットで「Unity URP アウトライン」などで調べてもほどんどやり方が見当たらず、私のようなシェーダー弱者にはもう無理なのか?と諦めかけたその時、以下のアセットに出会うことができ、無事にURPのプロジェクトでアウトライン表示をすることができました。

https://github.com/Arvtesh/UnityFx.Outline

上記のアセットは他のモノと導入方法が異なるので、自分への忘備録の意味も込めてこのブログにやり方を残しておきます。



開発環境

  • Unity 2019.4.20f1
  • Universal RP v7.5.3 (URP)
  • UnityFx.Outline v0.8.3

使い方

UnityFX.Outlineを導入

まず導入したいUnityプロジェクトをUnityではなく普通のエクスプローラーで開きます
(WindowsならExploler、MacならFinderで開きます)

次にプロジェクトの中の「Packages」フォルダの中にある「manifest.json」ファイルをテキストエディタなどで開き、以下の依存関係を追加します。

{
  "scopedRegistries": [
    {
      "name": "Arvtesh",
      "url": "https://registry.npmjs.org/",
      "scopes": [
        "com.unityfx"
      ]
    }
  ],
  "dependencies": {
    "com.unityfx.outline": "0.8.3",
    "com.unityfx.outline.urp": "0.3.0",
  }
}

実際に追加した後は以下のような内容になるかと思います

{
  "scopedRegistries": [
    {
      "name": "Arvtesh",
      "url": "https://registry.npmjs.org/",
      "scopes": [
        "com.unityfx"
      ]
    }
  ],
  "dependencies": {
    "com.unityfx.outline": "0.8.3",
    "com.unityfx.outline.urp": "0.3.0",
    "com.unity.collab-proxy": "1.5.7",
    "com.unity.ide.rider": "2.0.7",
    "com.unity.ide.visualstudio": "2.0.8",
    "com.unity.ide.vscode": "1.2.3",
    // ~ 省略 ~ 
    "com.unity.modules.xr": "1.0.0"
  }
}

編集できたらファイルを保存してUnityを開くと、自動的にUnityFx.Outlineパッケージを導入してくれます。

アウトライン表示設定

まず、アウトライン表示するオブジェクトのレイヤーをOutlineに変更します。(※Outlineというレイヤー名でなくとも大丈夫です)
  1. オブジェクトを選択 > インスペクタからLayer > AddLayer...
  2. 適当に「Outline」レイヤーを追加
  3. もう一度オブジェクトを選択して > インスペクタからLayerをOutline に変更

次に、プロジェクトに設定しているForwardRendererにOutline機能を設定します。(URPテンプレートからUnityプロジェクトを作った場合はSettingsフォルダの中にあります。自分で後からURPを導入した場合は自分でCreateからForwardRendererを作成してメインカメラのCameraコンポーネントのRendering/Rendererに設定が必要)

  1. ForwardRendererを選択してインスペクタからAdd Renderer Feature > Outline Feature
  2. Outline Featureを以下の通り設定
    1. Nameを適当に変更
    2. Outline Filter SettingsをOutline Filter Settingsに変更
    3. LayerMaskでOutlineを選択
    4. Outline Settingsをお好みで設定する
      1. アウトラインの色、太さ、ブラー有無、描画順
      2. ※描画順は基本変更せず、うまく表示されていない時に変更すればOK
Outline Settingsの設定例

おわりに

UnityFx.Outlineを導入することで、かんたんにきれいなOutline表示を実現することができました!ありがたい限りです。
unitypackageでの導入ではないので最初はパッケージの入れ方が分からず困っていましたが、こんなパッケージ提供方法もあったのですね。

URPではない、ビルトインのRPでのアウトラインを実装したときのゲームは以下から遊べます。ぜひ遊んで見てください。

Translate

このブログを検索

  • ()
  • ()
もっと見る

QooQ