Search Unity

HD レンダーパイプライン:アーティストのためのクイックスタートガイド

, 9月 24, 2018

本記事では、Unity の HD レンダーパイプライン(HDRP)を使ってレンダーするシーンの作成について解説します。新規 HDRP プロジェクトの開始方法、インポート済アセットのマテリアルのアップグレード方法、そしてマテリアルのインスペクター内にある新しいパラメーターを使ってリアリスティックなガラスのマテリアルを作成する方法をご紹介します。また、組み込みパイプラインと HDRP の違いについてもご説明します。

Unity 2018.1 で、スクリプタブルレンダーパイプライン(SRP)という新しいシステムが登場しました。これにより、プロジェクトのニーズに応じた独自のレンダリングパイプラインの作成が可能になりました。SRP には「ライトウェイトレンダーパイプライン(LWRP)」および「HD レンダーパイプライン(HDRP)」という既成の 2 つのパイプラインが含まれます。HDRP は忠実度の高いビジュアルに重点を置いており、PC や据え置き型プラットフォームに適しています。

HDRP をセットアップする

まだ Unity Hub をお使いでない方は、こちらからインストールされることをお勧めします。Unity Hub では、プロジェクトの管理だけでなく、Unity のインストール済みバージョンの管理も行えます。Unity Hub で新規プロジェクトを作成すると、「Template」で「High-Definition RP (Preview)」のオプションが選択可能になっています。

HDRP は現段階ではまだプレビュー版なので、制作途中での HDRP への切り替えは推奨されませんが、最近搭載された「パッケージマネージャー」から HDRP をインストールすれば HDRP へのアップグレードをお試しいただけます。ただし、HDRP へのアップグレード後にプロジェクトを元に戻すことはできませんのでご注意ください。アップグレード前には、必ずプロジェクトのバックアップを取るようにしてください。

上述の通り HDRP はまだプレビュー版ですので、今後変更が加えられる可能性があります。組み込みのレンダリングパイプラインから HDRP へのアップグレードを行うには、メニューから Window > Package Manager の順に選択してください。パッケージマネージャーに、現在ご自分の Unity プロジェクト内にインストールされているパッケージがすべて表示されます。「All」のリストから「HD Render Pipeline」(Render-pipelines.high)を選択して最新版をインストールしてください。インストールを行うと、レンダリングパイプラインのコア、シェーダーグラフ、ポストプロセッシングパッケージの組み込みも行われます。

HDRP パッケージのインストールが完了したら、メニューを Edit > Project Settings > Graphics の順に開き、スクリプタブルレンダーパイプラインアセットを HDRP に割り当ててください。

インスペクターの「Scriptable Render Pipeline Settings」のフィールドに、現在インストールされているレンダーパイプラインアセットが表示されます。Unity Hub からパイプラインをインストールしていれば、HD Render Pipeline Asset が割り当てられます。組み込みのパイプラインからプロジェクトをアップグレードしている場合は、このフィールドは「None」に設定されます。パイプラインアセットの割り当ては、アセット選択ボックスの隣にあるボタンをクリックするか、Settings フォルダーから該当アセットをドラッグして行うことができます。

HDRP は C# Scriptable Render Pipeline API を使用しています。この API には、プロジェクトのレンダリングをカスタマイズするための多数の設定項目が搭載されています。レンダリングの設定はレンダーパイプラインアセット内に保存されるので、新しいレンダーパイプラインアセットをこのフィールドにアサインすればレンダー設定を変更することができます。

新しいレンダーパイプラインアセットを作成するには、Settings フォルダー内で右クリックし、Create > Rendering > High Definition Render Pipeline Asset の順に選択してください。

マテリアルをアップグレードする

HDRP プロジェクトを使用している場合、Unity 組み込みシェーダーや Standard シェーダー や Unlit シェーダーのマテリアルは一切レンダーされません。したがってこれらは、シェーダーが壊れた時に表示されるデフォルトのピンクの Unlit シェーダーを使用して表示されます。これは、既存のプロジェクトのアップグレードを試みた時や、HDRP と互換性のあるシェーダーを使用していない(アセットストアのアセットなどの)レガシー製品を統合する時に起こることがあります。HDRP によってレンダーされるためには、マテリアルはアップグレードされている必要があります。

Unity 2018.1 にはマテリアル変換ツールが組み込みで搭載されています。これは Unity のスタンダードシェーダーからマテリアルのプロパティを取得して新しく HDRP マテリアルに変換します。(注)これはカスタムシェーダーでは機能しません(HDRP 用に書き換えが必要となります)。

マテリアル変換ツールを使用するには、メニューを Edit > Render Pipeline の順に進んでください。

このメニュー内にはいくつかのアップグレードオプションがあります。ここでは最初の 2 つに焦点を絞ってご説明します。「Upgrade Project Materials to High Definition Materials」を選ぶと、プロジェクト内の、アップグレード可能なマテリアルがすべてアップグレードされます。「Upgrade Selected Materials to High Definition Materials」を選べば、アップグレードしたいマテリアルをプロジェクトウィンドウから選択できます。

この時点で(上記を行う前に)プロジェクトのバックアップを取るようにしてください。

変換されたマテリアルのシェーダーが「HDRenderPipeline/Lit」という名前に変わります。これで、マテリアルのインスペクター内で HDRP Lit シェーダーのすべての新機能が利用できるようになりました。

さらに、マテリアルの Shader オプションメニューの「HDRenderPipeline」の配下で、シェーダータイプ(LitTesseleation や Unlit など)の選択・適用を行えます。

以降のセクションでは、HDRP に追加された新機能の一部をご紹介します。新機能のうちのいくつかを使用して、キッチンのシーンを改良しています。

HDRP のライティング

HDRP のライティングは 物理における光の単位(PLU)を使用しています。つまり、ライティングで使う単位が、現実世界の測定単位(お店で電球を探す時や、露出計で光を測定する時に目にする単位)に基づいていることを意味します。

ディレクショナルライトにはルクスを使用します。なぜなら、現実世界での太陽光の強度の測定にはルクスが使用されており、ルクスメーターで簡単に測定可能だからです。この他現実世界には、ルーメンで強度が測定される光源もあります。これは、本記事で取り上げているサンプルシーンでは、小さな発光体用の参照単位として使用できます。

リアルタイム ラインライト

リアルタイム ラインライトによる光は、(ユーザー定義可能な長さの)線形の光源から、シームレスで一貫した光が出力されます。このタイプの光はアニメーションフィルムでリアリスティックなライティングを作るために一般的に使用されています。シーンのライティングに映画のような雰囲気をもたらします。ラインライトを作成するには、ライトをシーン内に配置した後に、インスペクターで「Shape」の「Type」に「Line」を設定します。

モダンなキッチンの多くはクッキングスペースの照明に何かしらのラインライトを用いているので、このタイプを使用すれば、リアリスティックなライティングが作り出されるだけでなく、実際に存在するようなキッチンが再現されます。

また、Light のインスペクターの色温度の設定で、照射されるライトの色を設定することができます。1000 ~ 20000 ケルビンの範囲で、値が低いほど放射される熱量が少なくなってライトがより赤く見えます。逆に色温度の値を上げると、より青く見えます。

これと似て、Shape Type が「Rectangle」の場合は、カスタムの X および Y 軸の値に基づいたライトが放射されます。

(注)現在、「Line」および「Rectangle」の Shape Type はシャドウには対応していません。

Light Explorer

さらに、Light Explorer を使用すると、プロジェクトで使用されているすべてのタイプの光を簡単に管理することができます。値の変更やライトのタイプの変更だけでなくシャドウタイプの操作も、シーン内でその場所を探すことなく行えます。リフレクションプローブやライトプローブ、静的エミッシブもこのウィンドウから操作可能です。

Light Explorer にアクセスするには、Window > Rendering > Light Explorer の順に選択してください。

Volume Settings

「Volume Settings」では、「Visual Environment」「Procedural Sky」「HD Shadow Settings」などの環境設定を、視覚的に確認しながら調整できます。また、複数の Volume Profile をカスタム作成して切り替えることも可能です。

Volume Settings の操作は、ゲームオブジェクトを作成して Volume コンポーネントを追加すると行えます。このワークフローは、ポストプロセッシングスタック v2 の Volume 作成ワークフローと似ています。HDRP ではデフォルトでヒエラルキー内に 1 つ含まれています。

HD Shadow Settings

「HD Shadow Settings」では、そのボリュームのシャドウの全体的なクオリティを設定できます。「Max Distance」フィールドで、シャドウからカメラまでの距離に基づいたシャドウのクオリティを制御できます。

Visual Environment

「Visual Environment」の設定には 2 つのドロップダウンメニューが含まれています。

「Sky Type」の選択肢は「Procedural Sky」「Gradient Sky」「HDRI Sky」の 3 つです。

「Procedural Sky」は、Procedural Sky コンポーネント内で選択されている値に基づいて環境を生成します。

「HDRI Sky」は、HDRI Sky コンポーネント内に設定されている画像に基づいて環境マップを構築します。デフォルトでは HDRI Sky コンポーネントは「Volume Settings」には割り当てられていません。インスペクタータブの下部にある「Add component overrides…」をクリックして「HDRI Sky」を選択すると、このコンポーネントが利用可能になります。

これで、HDRI Sky キューブマップを割り当てて、忠実度の高い現実世界のようなライティングを実現すべく、値の調整を行うことができます。

Unity HDRI Pack はアセットストアで、Unity Technologies から無料で入手できます。プロジェクト内ですぐに使える事前変換済の(解像度 1024×2014 の)7 つの HDR キューブマップが提供されています。

このサンプルシーン用には、Unity HDRI Pack の中では「TreasureIslandWhiteBalancedNoSun」が最も適していました。キッチンを明るくするに十分な光を、白飛びさせることなく供給できるからです。もちろん、このコンポーネントに含まれる項目(Exposure や Multiplier など)で輝度は調整可能です。シーンを引き立たせられる HDRI マップを選ぶことが重要です。

最後の項目「Fog Type」 は「Linear」「Exponential」「Volumetric」の 3 つから選択可能です。値の設定を行うには、上述の手順(「Add Component Override」をクリックし、該当コンポーネントをインスペクターに適用する)を行ってください。

マテリアルのインスペクター

HDRP が登場する前は、ガラスのマテリアルの作成は簡単ではありませんでした。リアリスティックなガラスのマテリアルを構築するには、広範にわたる研究と、シェーダーのプログラミングやアセットストアのカスタムシェーダーの利用が必要でした。

現在ではマテリアルのインスペクター内で HDRP Lit シェーダーの新機能が利用可能になり、単に見た目が素晴らしいだけでなく、設定に応じて光を屈折させることのできるガラスを作成できます。

まず、新しい HDRenderPipeline/Lit マテリアルを作成します。これは HDRP で新規作成されたすべてのマテリアルに適用されるマテリアルシェーダーです。

新しいマテリアルを作成するには、任意のフォルダー内で右クリックし、Create -> Material と選択してください。HDRP のマテリアル用の新しいインスペクターが表示されます。その中でいくつか特筆すべき変更点があるので、それらを確認して行きましょう。

Surface options

マテリアルのサーフェスの設定です。

Surface Type

「Surface Type」は「Opaque」か「Transparent」のどちらかに設定できます。「Opaque」は、完全に中身の詰まった、光をまったく浸透させないマテリアルをシミュレートします。

逆に「Transparent」はアルファブレンドで、光を通すサーフェスをシミュレートします。このタイプのサーフェスは便利ですがレンダリングの負荷がより高くなります。

HDRP の重要な機能のひとつは、一元的なライティング(透明なオブジェクトと不透明なオブジェクトが両方とも同じライティングを受ける)です。

ここでは「Transparent」を選択しましょう。これによって後述する各種パラメータ―が利用可能になります。

Double Sided

この設定をオンにすると、マテリアルの両面がレンダーされます。「Normal mode」はデフォルトでは「Mirror」に設定されていますが、ドロップダウンメニューで「Flip」か「None」も選択可能です。

「Double Sided」がオフになっている場合、マテリアルの面はカメラの方向を向いている方だけがレンダーされます。

Material Type

「Material Type」のオプションは、さらにリアリスティックなマテリアルにするための新しい挙動を作成します。各オプションとも、選択すると専用の追加パラメーターがインスペクター上で利用可能になります。

Standard

基本のパラメーターを使用する、デフォルトの Material Type です。

Subsurface Scattering (SSS)

「Subsurface Scattering」(表面下散乱)は、光の相互作用や、光を通すオブジェクト(植物など)への光の浸透をシミュレートします。皮膚のレンダリングにも使用されます。手の指先に光を当てると、光が表面化で散乱して色が変化するのが見えます。これを、この Surface Type で再現することができます。

これを選択すると、Transmission(透過性)のパラメーターが表示されます。Transmission を使用すると Thickness map(シックネスマップ)を使ってオブジェクトの透光性を設定できます。

これらの機能は両方とも Diffusion Profile(拡散プロファイル)を使って操作可能です。デフォルトで提供されている 2 つのプロファイル「Skin」(皮膚)および「Foliage」(植物の枝葉)は、その種の SSS マテリアルのベースとして使用できます。この他の 13 個のプロファイルは、下の画像のように Profile の設定でカスタマイズ可能です。

SSS の簡単なデモ動画を作成しましたので、ご覧ください。

Anisotropy(異方性反射)

「Anisotropy」(異方性反射)は、例えば艶消しアルミニウムなど、角度によって反射の性質が変化するサーフェス素材をシミュレートします。クリーンではっきりした反射を起こす金属表面を作成するのではなく、Tangent Map と Anisotropy Map を使用して反射の強さや角度を調整することができます。

Iridescence(遊色効果)

マテリアルの表面に、油の表面に見える光のような、遊色効果を作り出すパラメーターが使用できます。光の見え方は Iridescence Map と Iridescence Layer Thickness Map で調整されます。

Specular Color

「Specular Color」を選ぶとマテリアル内のスペキュラー反射の色と強さを制御できます。拡散反射以外にも、異なる色のスペキュラー反射が可能になります。

Translucent

「Translucent」は草木の光の相互作用のシミュレートに非常に有用です。この Material type も SSS のように Profile を使用しますが、SSS と違うのは、Thickness Map が光がどのように透過するかの設定に使用されることです。

Enable Decal

マテリアルがデカールマテリアルに反応するように簡単に設定できる便利なパラメーターです。Decal Projector 経由で、またはオブジェクトのコンポーネントとして、両方のワークフローで設定できます。

Inputs

Base Color + Opacity

この時点ではまだ、このガラスマテリアルは不透明に見えています。光を浸透させるには、「Inputs」の項目内で「Opacity」(不透明度)の値を変える必要があります。

これを行うには、「Base Color + Opacity」という表記の隣の色見本ウィンドウを開いてください。

R(赤)・G(緑)・B(青)チャンネルが基本色として使われており、アルファチャンネルで不透明度が設定されます。現在、マテリアルの不透明度は 0 から 255 の値の範囲で設定可能となっています。255 は完全に不透明、0 は完全に透明になります。ここでは、マテリアルを薄い緑色に設定しましょう。

Opacity を 30 に設定します。こうするとマテリアルがほぼ透明になります。

ここで使用した色値は以下の通りです。

RGB 値は以下の通りです。

R – 201

G – 255

B – 211

16 進数の値 – C9FFD3

ここで重要なのは、マテリアルのアルファ値を低く設定しても、「Surface Type」の設定が「Opaque」(不透明)のままだとマテリアルは透明にはならず、不透明性が保たれることです。

Metallic と Smoothness

この 2 つのオプションは 0 から 1 の間の値でスライダーで調整します。これら両方の値と出力は、インスペクターでこれらの項目の下にある、Mask Map のアルファおよび赤色のチャンネルから生成されます。Mask Map が割り当てられている場合は、スライダーを使って、最小値と最大値をリマップできます。

Normal Map

「Normal Map」(法線マップ)を適用した場合、パラメーターのスライダーで 0 から 2 の間で強さを調整できます。

Normal(法線)を適用することで、ガラスのマテリアルに凸凹や傷などのディテールを加えることができます。

Mask Map

HDRP においては、Mask Map は以下の組み合わせから成ります。

R(赤)チャンネル ― Metallic(0 ~ 1 の範囲)
G(緑)チャンネル ― アンビエントオクルージョン
B(青)チャンネル ― Detail Map Mask
アルファチャンネル ― スムースネス

デフォルトでは、Unity にインポートされたテクスチャは RGB を使用します。Texture のインスペクター内で「sRGB (Color Texture)」のチェックマークを外すと、テクスチャがリニア形式を使用するように変換されます。Mask Map は Mathematics を使用して出力を生成するので、このテクスチャはリニアである必要があります。Coat Mask

「Coat Mask」はマテリアルにクリアコートのエフェクトをシミュレートします。値を増加させるとスムースネスが高くなります。デフォルトでは Coat Mask の値は 0 に設定されていますが、スライダーで 0 から 1 の範囲でパラメーターを調整できます。クリアコートマスクは車の塗装やプラスティックなどのマテリアルを模倣するのに使用されます。

Detail Inputs

「Detail Map」は HDRP に登場した新しいマップで、マテリアルに細かなディテールを追加する複数の追加的なマップが一体化したものです。Detail Map は以下のチャンネルを使用しています。

R(赤)― オーバーレイ・ブレンディングを使用したグレースケール
G(緑)― Normal Map(法線マップ)の Y チャンネル
B(青)― スムースネス
アルファ ― Normal Map(法線マップ)の X チャンネル

Transparency Inputs

シェーダーの「Transparency Input」プロパティでは、全体的な透明効果の調整を行います。「Transparency Inputs」は「Surface Type」が「Transparent」に設定されている場合にのみ利用可能になります。

このサンプルでは、以下の項目の設定によってガラスのマテリアルの屈折を作り出しています。

Refraction Model

「Refraction Model」はマテリアルを通る光の屈折のシミュレーション方法を設定します。「Plane」と「Sphere」の 2 つのオプションから選択できます。

「Refraction Model」は、マテリアルを適用するオブジェクトの形状やサイズに応じて選択します。

Sphere ― 中身の詰まったオブジェクトには、「Sphere」モデルを使用し、「Refraction Thickness」をマテリアルが適用されるオブジェクトのサイズに合わせます。

Plane ― 空洞状のオブジェクトには、「Plane」モードを使用し、「Refraction Thickness」の値を小さくします。

「Index of Refraction」と「Refraction Thickness」 で、屈折モデルの挙動を制御できます。

Index of Refraction

屈折の強さを、1 から 2.5 の範囲でパラメーターで調整できます。デフォルトの値は 1 で、屈折がまったくない状態になっています。

1.1 から 1.2 の間で屈折がフリップし、マテリアルを通して見える環境の上下が反転します。

これでガラスのマテリアルの基礎が出来上がったので、ここからはカスタム調整で、マテリアルを適用するオブジェクトに適した、目標通りのマテリアルを作り上げて行くことができます。

まとめ

以上、皆様が HDRP をプロジェクトに導入するための実際的なガイドとして、本記事が役に立つことを願っています。まだ実験的なプレビュー版ですが、GitHub 上で仮バージョンのドキュメンテーションを提供していますので、HDRP を使い始める際にご利用ください。

HDRP は、プロジェクト制作のための、進化し続ける新しいエキサイティングなツールです。皆様がこれを使ってどんなものを制作されるのか、ぜひご報告ください!ご不明な点などがございましたら、Twitter(@kierancolenutt)でお気軽に私に声をお掛けください。皆様の体験をお聴きできるのを楽しみにお待ちしています!

HDRP および SRP の開発全般についてはグラフィックス関連の実験的機能に関するフォーラムに是非ご参加ください。

28 コメント

コメントの配信登録

返信する

これらの HTML タグや属性を使用できます: <a href=""> <b> <code> <pre>

  1. The example is looking nice!
    Will the HDRP use hardware accelerated raytracing if available (e.g. DXR)?
    If I want to use DXR will the HDRP make the integration better than using a native plugin?
    Thanks

  2. Hello! Great writeup! I’m having trouble with the SSS Material type, how do I apply a diffusion profile to my render pipeline asset?

  3. Holik Krisztián

    9月 30, 2018 8:41 am 返信

    Nice article, but please tell us more about shader upgrade/rewrite!

  4. Nice article, i like it
    Free idm For Windows[ XP,7,8,10]</a

    1. Hey, Thank you.
      Keep an eye out for more blog posts in the near future regrading more complex topics for HDRP!

  5. Can I have the demo scene in this article? Or where is it?

    1. Yeah, weird it’s not linked, it’s all just words and fancy photos without a project.

    2. Hi,
      The Project is still internal. I hope to get it released to all you folks soon ! I will post a link on my twitter to the project.

  6. nice article

  7. Wow, thanks a lot guys, finally a video to explain how this works and whats are the benefits of making all thoose user complications, since i like the way shader works now i’d say it’s worth !

    1. Hey,
      Im glad you liked it ! I hope it helps getting started with HDRP. There will be future Blog Posts about HDRP tackling new and more complex topics.

  8. I’m not sure why but HD Render Pipeline is not included in my package manager. From Entities to In App Purchasing, it skips it.

  9. Keep it up Unity, that is a great job you guys did!! Honestly, I am waiting till the fully featured non-previewed version comes out.

  10. Thanks for the overview.

  11. When support to lens flares will be added? I cannot convert my project until these and many other features will be implemented in the new rendering pipelines. :(

  12. But will you do something with terrain support hdrp ?
    For now i can’t use it cuz terrain are doesn’t support hdrp render at all

    1. 4.0.0-preview (when released) will add new TerrainLit shader, it’s already in github master.

  13. The HD pipeline should finally be a chance for Unity to fix the specular aliasing that’s been killing scenes with reflections since forever.

    1. Good news, it does! Check out geometry specular AA, added in 2018.2.

      1. Yes but only with the Stack Shader, which is not recommended for games :(

  14. Is it only me or is the aliasing in the header image really, like really bad?

    1. Yeah, it is. Looks very strange.

  15. I second Hugo, I feel the LW pipeline is too simplified for Rift and Vive, which can take a lot more graphics quality than mobile VR platforms (I specially hate the light count limit).

  16. Can I has VR pls?

    Seriously, is VR not supported by the HDRP “simply” because of performance considerations or is there a deeper problem?

    1. HDRP has initial VR support along with MSAA on forward-only mode on upcoming version, it’s already merged to SRP master.

      1. oh, I prefer using realtime lights (deferred), but might be worth taking a look then :)
        Thanks.

        1. I think HDRP VR works in deferred too, I was mainly trying to say MSAA doesn’t (which is usually the preferred AA solution while doing VR).