BlenderのEEVEEはリアルタイムレンダリングを目的とした描画エンジンで、光や影の計算に近似的な手法を用いています。
そのため、高品質なパストレーシングを行うCyclesに比べて、一部の表現に制限があり、意図しない描画結果(アーティファクト)が出ることもあります。
よくあるEEVEE特有の「描画のズレ」例
現象 | 原因 |
---|---|
シャドウの光漏れ | シャドウマップの精度・ステップ不足 |
SSR(スクリーンスペース反射)の欠落 | 画面外の情報は取得できない |
ガラスや屈折が正確に見えない | EEVEEでは屈折が1段階まで・擬似的 |
ライティングの不自然な変化 | 間接光がライトプローブ依存 |
今回は、その中でも光や影に関するトラブルとその対処法をまとめてみました。
反射や屈折の問題に関しては以下の記事で触れています。
ガラス表現に関して↓
EEVEEはBlender4.2からEEVEE NEXT(EEVEE 2.0)として大幅に変更されました。旧バージョンのBlenderを使っている方は設定項目などが変化していますので注意してください。
Light Leak(ライトリーク)
ライトリーク(光漏れ)とは、光が壁を通り抜けて漏れる現象です。
解決法は以下の2つです
- 壁を厚くする
- Shadow Step Countを上げる

❶壁を厚くする
モディファイアのSolidifyなどで壁の厚みを増やします。
改善されますが、全ての光漏れを修正するためにかなり壁が分厚くなることもあります。

❷Shadow Step Count(シャドウステップカウント)を上げる
レンダープロパティ > Sampling > Shadows > Steps
Stepsの数を上げていくとライトリークが改善されます。


Shadow Step Countとは?
EEVEEにおいては、シャドウレイを一定のステップ数で分割して、各ステップで遮蔽物の有無を判定する近似方式が使われます。
このとき Steps 数が少ないと、間隔が広くなってしまい、細い物体や薄い壁を検出できず、光が漏れることがあります。
光のノイズ
ライトのAngleを上げ、ライトの境界線をソフトにしようと思うと、その境界線にノイズが大量に発生します。
解決法は以下の2つです。
- 全体のサンプル数を上げる
- シャドウレイを増やす(影だけに影響)

❶全体のサンプル数を上げる
レンダープロパティ > Samplingのタブを開き、
Viewport(作業画面でのサンプル数)とRender(レンダー画面でのサンプル数)のSamplesを上げます。
ノイズは綺麗になりますが全ての処理に適用されるためレンダリングに時間がかかるようになります。(このシーン:38秒→1分34秒)

EEVEEはTAA(テンポラル・アンチエイリアシング)と呼ばれる手法を使って、ジャギー(エイリアシング)を軽減しています。
この手法では、カメラをわずかにずらして複数回サンプリングし、その結果を平均化することで、ノイズやちらつきを抑えています。
そのため、内部的にはフレームごとに何度も処理を行うことになり、サンプル数が多いほど描画負荷が高くなります。
❷シャドウレイを増やす(影だけに影響)
レンダープロパティ > Sampling > Shadows > Rays
EEVEEでは、ソフトシャドウを計算するために、1ピクセルあたり最大4本までのシャドウレイを使って影を検出します。レイの本数を増やすことで、影の輪郭がなめらかになり、ノイズも軽減されます。

全体のサンプル数を上げるよりも、レンダリング時間が増えることはなく、手軽に光や影をソフトにできます。
カメラを動かすと画面の明るさが変わる
Raytracing(レイトレーシング)にチェックを入れると、室内に入った光の反射により室内が少し明るくなります。
しかし、少しカメラを近づけたり、角度を変えたりすると、明るさが全く変わってしまうことがあります。
これは、EEVEEのレイトレーシングがスクリーンスペースに限定されており、画面外にある反射光を考慮しなくなるためです。
つまり、レイトレーシングを使用すると、カメラの画面内に光があるかどうかでレンダリング結果が大きく違ってきてしまいます。


解決法はLight Probe(ライトプローブ)を使うことです。
Shift + AでLight Probe > Volumeを出します。
Volumeは、内部的に空間の照明をサンプリングする小さな測定点(プローブ)の3Dグリッドです。各点で間接光や環境光の情報を保存できます。
※SphereやPlaneは反射用です。

Volumeを出し、Object Data プロパティのResolutionでプローブの点を増やします。(ある程度増やさないと効果がありません)
空間を囲んだらBake Light Cacheのボタンを押して光の情報を焼きつけます。

これで明るさがあまり変化しなくなりました。(少し暗くなってしまいますが…)

Light Probeの跡がつく、光漏れ
Light Probe Volumeで明るくしても、そこからまたライトリーク(光漏れ)が出たり、プローブをおいたグリッドのような模様が汚く出てしまったりします。
解決法はLight Probe Volumeのグリッドを壁のギリギリにキレイに配置することです。


ライトプローブをきちんとそろえると、壁のくぼんだ部分がきちんと暗くなったり、グリッドの模様がなくなります。
光が届かない場所なのに明るいんだけど?
HDRIを使って周囲に環境光を用意し、窓のないCubeを追加します。
中に光は届かないので真っ暗になるはずなのに、EEVEEだと中が明るく映ります。


Raytracingをオン/オフにしても、Fast GI Approximationをオフにしてもやっぱり明るいです。
EEVEEは環境光も近似計算で表現されており、遮蔽を検出できません。なのでHDRIやワールドのライトは壁があっても全体にかかってしまいます。
これも解決法はLight Probe Volumeを置くことです。
Light Probe Volumeは光や暗さの情報を焼き付けることができるため、遮蔽もきちんと計算してくれます。
詳しくは「カメラを動かすと画面の明るさが変わる」の項目をご覧ください。

ライトリーク(光漏れ)があっても少し明るくなってしまうので、そのときはLight Leak(ライトリーク)の項目を参照ください。