土屋つかさの技術ブログは今か無しか

土屋つかさが主にプログラミングについて語るブログです。

円形のエリアライト(Unity2018.3からの新機能)の話

 シェーダー本3の執筆中に気づいたこと。2018.3から、エリアライトに円形(Disc)が追加されました。これまでは矩形(RectAngle)しかなかったので、表現の幅が広がったと言えましょう。
https://unity3d.com/jp/unity/whats-new/unity-2018.3.0
f:id:t_tutiya:20181220190822p:plain

 これにともない、LightType列挙体にDiscが追加されています。
https://docs.unity3d.com/ScriptReference/LightType.html
f:id:t_tutiya:20181220190843p:plain

 これ、2018.2までは4番目の要素はAreaでした。今回のアップデートに伴いRectAngleに変更したようです。
https://docs.unity3d.com/2018.2/Documentation/ScriptReference/LightType.html
f:id:t_tutiya:20181220190904p:plain
 ……って、え? コード互換性がなくなってない? 大丈夫? まあ、簡単に修正できますが、破壊的変更であることがreleasenoteには載ってないので、上手い手法が用意されているのかも。ちなみに日本語のドキュメントは2018.2なのでまだAreaのままです。

追記(2019/1/27)

 この記事を書いた時点では実機で確認してなかったのですが(すみません)、確認した所"RectAngle"/"Disc"の選択は"Area(Baked Only)"のサブカテゴリになっていました。
f:id:t_tutiya:20190127092041p:plain
 また、LightType列挙体の実装を確認した所、AreaとRectAngleには同じ値が設定されていました。ただし、SRPではLightType.Areaは削除予定とのこと。
https://github.com/Unity-Technologies/UnityCsReference/blob/master/Runtime/Export/GraphicsEnums.csgithub.com

    public enum LightType
    {
        Spot = 0,
        Directional = 1,
        Point = 2,

        //[System.Obsolete("Enum member LightType.Area has been deprecated. Use LightType.Rectangle instead (UnityUpgradable) -> Rectangle", true)]
        // For now, we will have both Area and Rectangle in the source, but this will be removed once the SRP package is in.
        Area = 3,

        Rectangle = 3,
        Disc = 4
    }

[asin:4862464130:detail]