Crystal Renderer 技術解説 補講

概要 この記事について

UE5 向けのプラグインである Crystal Renderer についての技術解説です。
全3回+αに分けての解説を予定しています(これはボリューム等を見て変更する可能性があります)。

第1回:Crystal Renderer の原理
第2回:光の反射と屈折
第3回:形状をマテリアルに取り込む
補講:色収差について (本記事)

本記事は補講です。先に前回までの記事を読んで頂くことをお勧めします。

とりあえずどういうものか

まずは、どのような効果のものであるかを画像で示します。

順に 効果なし/あり のスクリーンショットです。 ふわっとした表現をすれば「色がついた感じ」になります。

いわゆる色収差について

基本的に、色収差というとレンズで像を作る際に色が分解される現象を指します
Wikipediaの記事 へのリンクを貼っておきます)。
第2回で少し触れた屈折率についてですが、この値は光の波長により多少異なります。
多くの場合()において光はたくさんの波長を含みますので、レンズ等を通る際には波長ごとに軌道が異なるということになります。
余談ですが、これに対して同一の波長のみを選択的に増幅させたものがみんな大好きレーザーです)
波長により像を結ぶ点がずれるために視覚的には色がぶれたように映るわけですね。

Crystal Renderer の"色収差"

レンズに限らず一般に光が屈折する際には光が波長毎に分解される現象が起こり、これは分光と呼ばれます。
虹に色が付くことや、ダイヤモンドのような無色の宝石が白い光の下でも色づいて見えることがあるのはこの現象によるものです。
(そういうわけで Crystal Renderer のそれを色収差と呼ぶのは正しくありませんが、エフェクトの名前としては分かりやすいので Aberration と称しています。 )

原理としてはこのようなものですが、残念ながら忠実な色収差を再現するのは現実的ではありません。
現実的な光源は無数の波長成分を含んでいます(この分布を光源スペクトルといいます)。
そして波長毎に異なる軌道をとるわけですから、これを忠実に計算しようとすると計算量が膨大になります。
また、(少なくともゲームにおいて)CGの光源はスペクトルを情報として持ちません。

そういうわけなので、Crystal Renderer においては適当に波長が「長い」「中くらい」「短い」3つの軌道を計算して RGB 成分として合成しています。

まとめ

Crystal Renderer における Aberration (色収差っぽいエフェクト)について解説しました。
ナンバリングせず補講としたのはあまり本質的な部分ではないのと、他と比べてちょっといいかげんな内容だからです。
というわけで、一旦 Crystal Renderer に関する解説シリーズを終わります。

そういえば、UnrealEngine のポストプロセスにも色収差がありますがどのような実装になっているか調べてみるのも面白いかもしれません(他人任せ)。