本記事は グレンジ Advent Calendar 2021 への寄稿です。
はじめに
UnityのUniversal Render Pipelineでは、最近多くの機能が追加されました。
新機能の把握は大変ですが、概要だけでも知っておくと後々役立ちます。
そこで本記事ではこれらの新機能のうち、主要なものの概要と使い方をまとめます。
目次
- クリアコートマテリアル - Unity2020.3
- リフレクションプローブのボックスリフレクション - Unity2021.2
- ライトクッキー - Unity2021.2
- デカール - Unity2021.2
- ライトレイヤー - Unity2021.2
- デファードレンダリング - Unity2021.2
- ポイントライトシャドウ - Unity2021.1
クリアコートマテリアル - Unity2020.3
クリアコートは、自動車の表面の塗装やニスの塗られた木材などを表現できるマテリアルです。
以下はクリアコートを有効にしていない状態と有効にした状態の比較です。
今までURPでは、標準的なPBRシェーダとしてLitシェーダが存在していました。
これとは別に追加されたComplex Litシェーダを適用するとこのようなマテリアルを作れます。
クリアコートマテリアルの使用手順は以下の通りです。
- マテリアルを作成する
-
Universal Render Pipeline > Complex Lit
シェーダをアサイン - Clear Coatにチェックを入れてMaskとSmoothnessを1にする
- レンダラーにマテリアルをアサインする
リフレクションプローブのボックスリフレクション - Unity2021.2
リフレクションプローブという機能を使うと、周りの風景が鏡のように映り込むオブジェクトを作ることができます。
しかしながらこの機能は、「比較的近くにある物体を」「床に反射させる」ようなケースではうまく映り込ませることができません。
こんな時にボックスプロジェクションを使うと、ある程度いい感じに映り込ませることができるようになります。
なおボックスプロジェクションは、直方体で表現できる範囲で最も効果を発揮するため、四角い部屋の室内などがいい活用例になります。
リフレクションプローブのボックスプロジェクションは以下の手順で利用できます。
- Universal Render Pipeline Asset > Lighting > Reflection Probes > Box Projectionにチェック
- Reflection Probeを配置してBox Projectionにチェックを入れ、Box Sizeを調整
- Reflection Probeをベイク
ライトクッキー - Unity2021.2
ライトクッキーはテクスチャを使ってライトにマスクをかけられる機能です。
例えば以下のようなスポットライトがあったとします。
これに以下のようなクッキーテクスチャを適用します。
すると以下のようにライトがマスクされます。
また、スポットライトだけではなく、ポイントライトやディレクショナルライトにも適用できます。
ライトクッキーの使用方法は以下の通りです。
- クッキー用のテクスチャのTexture TypeをCookieに設定しておく
- ライトのInspectorから
Light Cookie > Cookie
に先程のテクスチャをアサインする
デカール - Unity2021.2
デカールはオブジェクトのテクスチャを投影するための機能です。
物体にプロジェクターで画像を投影したような効果を得られます。
壁に当たった銃弾の弾痕を表現したりするのに使います。
デカールの使い方は以下の通りです。
- Universal Render DataのAdd Renderer FeatureボタンからDecalを追加
- マテリアルを作成して
Shader Graph > Decal
をアサイン - Base Mapにテクスチャをアサイン
-
GameObject > Rendering URP Decal Projector
からDecal Projectorを作成 - Decal ProjectorのMaterialプロパティに先程のマテリアルをアサイン
- Decal Projectorの位置を調整
ライトレイヤー - Unity2021.2
ライトレイヤーは「特定のオブジェクトにだけ影響するライトを作る」機能です。
デフォルトでは以下のように赤と緑のライトを配置すると、各オブジェクトは両方のライトに照らされます。
ライトレイヤー機能を使うと、指定したライトを指定したレイヤーに所属するオブジェクトのみに適用できます。
ライトレイヤーは以下の手順で利用できます。
- Universal Render Pipeline AssetのLightingの右側にある省略記号のようなボタンを押下
- Show Additional Propertiesを有効にする
- Light Layersというチェックボックスが現れるのでこれにチェックを入れる
- ポイントライトのInspectorの
General > Light Layer
からライトレイヤーを選択 - Mesh Rendererの
Additional Settings > Rendering Layer Mask
に先程のライトレイヤーを設定
デファードレンダリング - Unity2021.2
デファードレンダリングは、一度アルベドや法線などの中間情報をG-Bufferに書き込み、
最後にまとめてライティングの計算を行うレンダリング手法のことです。
この手法はフォワードレンダリングとは異なり、リアルタイムライトを多数配置することができます。
複雑なライティングを行いたいプロジェクトは採用するメリットがあります。
一方で半透明描画ができない(フォワードで描画される)などのデメリットもあるので注意が必要です。
設定方法は以下の通りです。
- Universal Renderer DataのRendering PathをDeferredに切り替える
ポイントライトシャドウ - Unity2021.1
Unity2021.1からはポイントライトからも影を落とせるようになりました。
設定手順は以下の通りです。
-
Universal Render Pipeline Asset
のLighting > Additional Lights
をPer Pixel
にチェック -
Lighting > Additional Lights > Cast Shadows
にチェックを入れる - シーンにポイントライトを配置する
- ポイントライトのInspectorの
Shadows > Shadow Type
をHard ShadowsやSoft Shadowsに切り替える
最後に
最後までお読みいただきありがとうございます。
今回紹介した機能の他にも、URPにはSSAOやレンズフレアなど、便利な機能が追加されています。
さらに今後も多数の機能追加が予定されているようで楽しみです。
また、今回僕はCyberAgent Developers Blogのアドベントカレンダーにも記事を書いてますので、
もしよろしければこちらもご覧ください。社内におけるシェーダ開発のお話です。