ゲームエンジンでのライトトランスポート

はじめに

通常、アーティストはすべての3Dモデリングを行い、次にすべてのテクスチャリングを行い、3D DCCの見栄えの良いモデルを見て「良い出来だ、組込みの準備ができた!」と言います。その後、ゲームに組み込まれ、照明が設定され、ゲームが実行されます。

それでは、この”HDR”の事業はどの時点で実現するのでしょうか?答えを理解するために、ディスプレイがどのように動作するかを見る必要があります。

ディスプレイは、最大強度から最小強度までの直線的な比率の光を出力します。現代のゲームエンジンは、それぞれのシーンで直線的な光量に対して複雑な計算を実行します。では、何が問題なのでしょうか?

ディスプレイの種類に応じて、ディスプレイの輝度範囲は制限されています。ただし、ゲームエンジンは無制限の範囲の強度値にレンダリングします。 「最大輝度」はsRGBディスプレイにとって何かを意味しますが、ゲームエンジンには影響しません。レンダリングのフレームごとに生成される潜在的に無限に広い範囲の強度値のみがあります。

This means that some transformation of the scene light intensity, also known as scene-referred light ratios, need to be transformed and mapped to fit within the particular output range of the chosen display. This can be most easily understood if we consider virtually photographing our game engine scene through a virtual camera. Here, our virtual camera would apply a particular camera rendering transform to the scene data, and the output would be ready for display on a particular display type.

コンピューターのディスプレイ

ほとんどすべてのディスプレイでは、送信されるコード値に非線形エンコードが必要です。次に、そのユニークな転送特性を使用して、コード値を出力の直線的な光量比に「デコード」し、赤、緑、青の各発光部からその値を投影します。

大多数のコンピューターディスプレイの場合、ディスプレイの仕様はIEC 61966-2-1(1996 sRGB仕様とも呼ばれます)に基づいて概説されています。 この仕様では、LEDピクセルのライトの色、入力(OETF)および出力(EOTF)の伝達特性など、sRGBディスプレイの動作の概要を説明します。

Not all displays use the same OETF and EOTF as a computer display. For example, television broadcast displays use the BT.1886 EOTF. However, Godot currently only supports sRGB displays.

sRGB規格は、一般的なデスクトップコンピューター用CRTディスプレイの電流出力と光出力の間の非線形関係に基づいています。

../../_images/hdr_gamma.png

The mathematics of a scene-referred model require that we multiply the scene by different values to adjust the intensities and exposure to different light ranges. The transfer function of the display can't appropriately render the wider dynamic range of the game engine's scene output using the simple transfer function of the display. A more complex approach to encoding is required.

シーンリニアおよびアセットパイプライン

Working in scene-linear sRGB is not as simple as just pressing a switch. First, imported image assets must be converted to linear light ratios on import. Even when linearized, those assets may not be perfectly well suited for use as textures, depending on how they were generated.

これを行うには、次の 2 つの方法があります:

画像インポート時に線形比を表示するsRGB伝達関数

This is the easiest method of using sRGB assets, but it's not the most ideal. One issue with this is loss of quality. Using 8 bits per channel to represent linear light ratios is not sufficient to quantize the values correctly. These textures may also be compressed later, which can exacerbate the problem.

直線化変換を表示するハードウェアsRGB伝達関数

The GPU will do the conversion after reading the texel using floating point. This works fine on PC and consoles, but most mobile devices don't support it, or they don't support it on compressed texture formats (iOS for example).

シーンリニアからディスプレイ標準ノンリニアへ

すべてのレンダリングが完了した後、シーンのリニアレンダリングは、sRGBディスプレイなどの適切な出力に変換する必要があります。 これを行うには、現在の Environment でsRGB変換を有効にします(詳細は以下を参照)。

Keep in mind that the sRGB -> Display Linear and Display Linear -> sRGB conversions must always be both enabled. Failing to enable one of them will result in horrible visuals suitable only for avant-garde experimental indie games.

HDRのパラメーター

HDR settings can be found in the Environment resource. Most of the time, these are found inside a WorldEnvironment node or set in a Camera node. For more information, see 環境とポストプロセッシング.