6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Unity 2019.3のHDRP (DXR使用)で簡単なシーンを作成 (Tier2)

Posted at

HDRPでDXRを使用する手順については「Unity 2019.3のHDRP (DXR使用)のプロジェクトを作成」をご参照くださいませ。
上記の作業直後では「Tier2」になっているようですので、そのまま進めます。
ここでは、シンプルなシーンでレイトレーシングの挙動を確認します。

HDRPの要素

HDRPの要素は「Unity 2019.3のHDRP (DXR使用)のプロジェクトを作成」での指定より以下を使います。
hdrp_dxr_012.png

GameObject名 内容
Sky and Fog Volume Visual Environment/HDRI Sky/Fogなど。
背景とフォグの要素。
Post Process Volume Vignette/Exposure/White Balanceなど。
Post Procssingの要素。
Raytrace Settings Ray Tracing/Screen Space Reflection/Ambient Occlusionなど。

背景を変更

背景(IBLとしても使用)は、パノラマ(2:1の比率のequirectangularのexr/hdr)画像をキューブマップに変換して使用します。

equirectangularの以下のようなexr画像を作成しました。
unity_dxr_102.jpg
Insta360 EVOを使用し、HDRとして360度で撮影。
Affinity PhotoでHDRとして合成し、撮影者を消す加工を行い、exrファイルとして出力しました。

これをUnityのProjectにインポートします。
Inspectorウィンドウを開き、「Texture Shape」で「Cube」を選択して下にスクロールし、Applyボタンを押します。
unity_dxr_103.jpg
これで、equirectangular画像がキューブマップに変換されます。
unity_dxr_104.jpg
Hierarchyウィンドウから「Sky and Fog Volume」を選択し、Inspectorを表示します。
Projectウィンドウから背景のキューブマップファイルをInspector内の「Volume」-「HDRI Sky」内の「Hdri Sky」にドラッグします。
これで背景が指定のものに置き換わります。
unity_dxr_107.jpg
「HDRI Sky」の割り当てが存在しない場合は、「Add Override」ボタンを押して追加するようにします。

Fogを調整

HDRPの初期シーンから移行した直後はFog(霧)がかかっています。
調整は「Sky and Fog Volume」の「Fog Attenuation Distance」で減衰距離(単位 m)を指定します。
hdrp_dxr_105.jpg
値が大きいほど、霧は遠ざかります。
hdrp_dxr_106.png
霧はスクリーンに向かって奥方向と高さ方向の2つが使用されており、高さ方向を調整しないと水平線より下が白いままになってしまいます。
これを調整します。
左上の「All」を選択するとすべての項目が指定できるようになります。
hdrp_dxr_107.jpg
「Maxixmum Height」の値を大きくすることで、高さ方向(単位 m)に拡散していきます。
hdrp_dxr_108.jpg
ここでは、「Fog Attenuation Distance」を30000、「Maxixmum Height」を5000としました。
hdrp_dxr_109.jpg
ほんのわずかにフォグを与えています。
このフォグは、リアルな奥行き表現で重要な要素になります。
光が差し込んだときのほこりのような表現(ボリュームライト表現)や、空気感はフォグで表現できます。

オブジェクトを配置

オブジェクトとして、地面のPlane、Cylinder/Sphereを配置しました。
hdrp_dxr_101.jpg

Directional Lightの確認

このシーンの場合は、背景からのIBLとしての光源と、
「Directional Light」(平行光源)の2つが光源として作用します。
hdrp_dxr_102.png
Inspector内のLightの設定で、「Emission」の「Intensity」で明るさを指定します。
影は「Shadows」の「Shadow Map」の「Enable」をOnにして調整できます。

レイトレーシングの確認

マテリアルで鏡のような反射を割り当てて、レイトレーシングが機能しているか確認します。
Projectウィンドウ上を右クリックして新しくMaterialを作成します。
Inspectorを表示し、「Surface Inputs」の「Metallic」を1.0、「Smoothness」を1.0にします。
こうすることで、完全な鏡面反射になります。
これを球に割り当てます。
hdrp_dxr_110.jpg
LightmapやReflection Probeなどを使用していな状態でも、反射しているのを確認できます。
この段階ではScreen Space Reflection(SSR)が適用されています。

レイトレーシングのパラメータを調整

「Ray Tracing Settings」に割り当てているレイトレーシングのパラメータを調整します。
Inspectorウィンドウを開いたときの「Volume」に各要素が追加されていない場合は、「Unity 2019.3のHDRP (DXR使用)のプロジェクトを作成」の手順で追加しておきます。

Ambient Occlusion

hdrp_dxr_111.jpg

「Ray Tracing」をOnにすると、レイトレーシングでのAOが使用されます。
Offにすると、SSAOとして動作します。
「Intensity」を大きくすることでAOの効果がかかります。
初期状態ではノイズがちらつくため「Denoise」をOnにします。
hdrp_dxr_112.jpg

Screen Space Reflection (SSR)

初期状態でも映り込みは反映されますが、
SSRの「Ray Tracing」をOnにすることで、レイトレーシングによるより正確な映り込みが表現されるようになります。
hdrp_dxr_113.jpg
Tier2の場合、反射回数を「Bounce Count」で指定できます。
Tier1の場合は、反射は1回だけです。

SSRパラメータの「Minimum Smoothness」値よりも反射があるマテリアルの「Smoothness」値が小さい場合、
映り込み効果は無効になります。
以下は、マテリアルのSmoothnessが0.8、SSRパラメータの「Minimum Smoothness」が0.9の場合です。
hdrp_dxr_114.jpg
映り込みは背景だけになっており、地面や円柱が映り込んでいません。
SSRパラメータの「Minimum Smoothness」を0.8とすると以下のようになります。
hdrp_dxr_115.jpg
MaterialのSmoothnessが1.0よりも小さい場合はラフネス効果がかかり、サンプリング数を増やす必要があるためノイズが出ることになります。
その場合は「Denoise」をOnにすると緩和されます。
hdrp_dxr_116.jpg

Global Illumination

GIの確認を行うため、cubeで壁や天井を配置しました。
GIが適用されていない場合は以下のようになります。
hdrp_dxr_117.jpg
「Global Illumination」の「Ray Tracing」をOnにすることで、GIの間接照明の効果がかかります。
hdrp_dxr_118.jpg
「Denoise」「Second Denoiser Pass」をOnにすることでノイズを緩和できます。
hdrp_dxr_119.jpg
Iter1の場合はGIとしての反復(再帰)回数は1回だけ、Iter2の場合は回数を指定できます。
Iter2で「Screen Space Reflection」と「Global Illumination」の「Bounce Count」を4とした場合は以下のようになります。
hdrp_dxr_120.jpg
ただし、「Bounce Count」を増やした場合はよりGPU負荷がかかることになります。
この「Bounce Count」の指定で強制的に指定回数分反射するからか、値を増やしたらより正確になる、というものでもなさそうです。
そのため、LightmapやReflection ProbeをこのGlobal Illuminationに置き換えることができるかというと、現状は難しいかもしれません。

Path Tracing (Iter2)

Iter2では「Path Tracing」を指定できます。
Iter1では指定できません。
hdrp_dxr_121.png
これを使用する場合、「Ambient Occlusion」「Screen Space Reflection」「Global Illumination」の指定は無視されるようです。
「Enable」をOnにすると有効になります。
「Maximum Depth」で反射回数の最大を指定します。
以下のようになりました。
hdrp_dxr_122.jpg
HDRP+DXRの表現では、一番現実に近い表現になるかと思われます。
なお、レンダリング時間がかかります(GTX1060では3秒以上)。

ただし、HDRI Skyの背景のExposureが極端に強くなったり、Fogがかからないようでした。
上画像は、HDRI Skyの背景の「Exposure」の値を10から1に変更しました。

また、Path Tracingを使用するとGPUリソースをたくさん消費するからか、シーンによってはうまくレンダリングされない場合がありました。

Post Processingの調整については「Unity 2019.3のHDRP (DXR使用)でのPost Procssing」をご参照くださいませ。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?