現実の世界では、ライトは距離が離れるにしたがってフェードし、薄暗いライトは明るいライトよりも光域が狭くなります。“減衰” という用語は、光が弱まっていく割合を指します。Unity のデフォルトのライトの減衰の動作とともに、カスタムの減衰設定を使用することもできます。
プログレッシブなライトマッパーには、カスタムのフォールオフプリセットが用意されており、スクリプトで実装できます。これらがどのように動作するかを表す例については、表の下にある図を参照してください。また、図の下のコードサンプルは、機能の使用例です。
詳細については、FalloffType を参照してください。
ノート: 以下のコード例は、ベイクしたライトまたは混合ライトを使用する場合にのみプログレッシブなライトマッパーで動作します。リアルタイムライトでコード例を使用するには、Enlighten Realtime グローバルイルミネーションを使用します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Experimental.GlobalIllumination;
using UnityEngine.SceneManagement;
[ExecuteInEditMode]
public class ExtractFalloff : MonoBehaviour
{
public void OnEnable()
{
Lightmapping.RequestLightsDelegate testDel = (Light[] requests, Unity.Collections.NativeArray<LightDataGI> lightsOutput) =>
{
DirectionalLight dLight = new DirectionalLight();
PointLight point = new PointLight();
SpotLight spot = new SpotLight();
RectangleLight rect = new RectangleLight();
DiscLight disc = new DiscLight();
Cookie cookie = new Cookie();
LightDataGI ld = new LightDataGI();
for (int i = 0; i < requests.Length; i++)
{
Light l = requests[i];
switch (l.type)
{
case UnityEngine.LightType.Directional: LightmapperUtils.Extract(l, ref dLight); LightmapperUtils.Extract(l, out cookie); ld.Init(ref dLight, ref cookie); break;
case UnityEngine.LightType.Point: LightmapperUtils.Extract(l, ref point); LightmapperUtils.Extract(l, out cookie); ld.Init(ref point, ref cookie); break;
case UnityEngine.LightType.Spot: LightmapperUtils.Extract(l, ref spot); LightmapperUtils.Extract(l, out cookie); ld.Init(ref spot, ref cookie); break;
case UnityEngine.LightType.Rectangle: LightmapperUtils.Extract(l, ref rect); LightmapperUtils.Extract(l, out cookie); ld.Init(ref rect, ref cookie); break;
case UnityEngine.LightType.Disc: LightmapperUtils.Extract(l, ref disc); LightmapperUtils.Extract(l, out cookie); ld.Init(ref disc, ref cookie); break;
default: ld.InitNoBake(l.GetInstanceID()); break;
}
ld.cookieID = l.cookie?.GetInstanceID() ?? 0;
ld.falloff = FalloffType.InverseSquared;
lightsOutput[i] = ld;
}
};
Lightmapping.SetDelegate(testDel);
}
void OnDisable()
{
Lightmapping.ResetDelegate();
}
}
ノート: 上記の例のすべてのコードは、カスタムフォールオフを機能させるために必要です。ただし、行 ld.falloff = FalloffType.InverseSquared; の InverseSquared を変更して、任意のプリセットを使用できます。
2018.1 NewIn20181 でプログレッシブなライトマッパーを追加
2018–03–28