けいブログ

端くれ描画プログラマによるNote

HDRPとお知り合いになる

Unityの公式RenderPipelineであるURPとHDRP。URPはチョットワカルのですが、HDRPのことは何も知らなかったので学んでみます。

物理ベースのテクニックが散りばめられてそうなRenderPipelineにドキドキワクワクです。

はじめに

まずは Unity Learning Materials (https://learning.unity3d.jp/) の「ゼロから始めるHDRP」シリーズの第3回~第7回をざっと見てみました。

内容としては

  • 第3回と第4回は Unite 2020 (海外公演) の日本語翻訳の動画+プチ解説
  • 第5回~第7回は Unity 2020.2 から一新されたテンプレートプロジェクトの解説

という感じになっていました。

上記動画では 2020.1系 や 2020.2系 が使われています。一方で、自分の環境は 2020系 最新の 2020.3.18 を横で弄りつつ動画を視聴しました。(Assetsの構成など一部異なるようでしたが理解には概ね問題なかったです)

個人的に気になったことを書いてみます。

Render Pipeline Debug

ハイエンド向けの様々な機能、物理ベースな各種シェーダやポスプロ、露出関連、物理単位でライトを扱うなど・・・そういったものがたぶん重要なのですが、とにかく RendeRender Pipeline Debug が便利そうだなぁというところに目がいきました。

様々な描画要素を表示・非表示できる優れものです。こういうのを実装しておくと何かと便利ですよね。

それがデフォルトで備わっているのは便利ですね~! (URPは空のウィンドウが開きます(泣) そのうち搭載されるのだろうか・・・?)

Volume

このあたりのベースの仕組みはURPと同じようです。ただURPに比べて、多くの見た目を決めていく設定がVolumeに集約されているようです。

HDRPでは「現在のどのVolumeに影響を受けて、各種パラメータがいくつになっているか」は前述の Render Pipeline Debug で見ることができるようです。便利ですね。

露出関連

Project Settings > HDRP Default Settings の Lens Attenuation Mode で「Imperfect Lens」「Perfect Lens」が選べるようです。

実装の方も含めて軽く見ると、

// Imperfect Lens : S = 100, q = 0.65
lensImperfectionExposureScale = 78 / ( S * q ) = 1.2
EV100ToExposure = 1.0 / ( lensImperfectionExposureScale * 2^EV ) = 0.833... / 2^EV
// Perfect Lens : S = 100, q = 0.78
lensImperfectionExposureScale = 78 / ( S * q ) = 1.0
EV100ToExposure = 1.0 / ( lensImperfectionExposureScale * 2^EV )  = 1.0 /  2^EV

のようになっており、「Perfect Lens」はExposure変換するときの光のエネルギー損失が無いようですね。

今後

実装の方、気になるところを少し見てみようと思います。