A game about forced loneliness, made by TACStudios
1using NUnit.Framework;
2
3namespace UnityEngine.Rendering.Tests
4{
5 class LightUnitTests
6 {
7 GameObject go;
8 const float epsilon = 0.001f;
9
10 [SetUp]
11 public void Setup()
12 {
13 GameObject go = new GameObject("Light", typeof(Light));
14 }
15
16 [TearDown]
17 public void TearDown()
18 {
19 GameObject.Destroy(go);
20 }
21
22 [Test]
23 public void LightUnitSupport()
24 {
25 // Directional and box lights should only support Lux
26 LightType t = LightType.Directional;
27 Assert.False(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Lumen));
28 Assert.False(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Candela));
29 Assert.True(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Lux));
30 Assert.False(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Nits));
31 Assert.False(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Ev100));
32 t = LightType.Box;
33 Assert.False(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Lumen));
34 Assert.False(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Candela));
35 Assert.True(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Lux));
36 Assert.False(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Nits));
37 Assert.False(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Ev100));
38 // Point lights should only support Lumen, Candela, Lux, EV100
39 t = LightType.Point;
40 Assert.True(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Lumen));
41 Assert.True(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Candela));
42 Assert.True(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Lux));
43 Assert.False(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Nits));
44 Assert.True(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Ev100));
45 // Spot lights should only support Lumen, Candela, Lux, EV100
46 t = LightType.Spot;
47 Assert.True(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Lumen));
48 Assert.True(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Candela));
49 Assert.True(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Lux));
50 Assert.False(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Nits));
51 Assert.True(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Ev100));
52 // Area lights should only support Lumen, Nits, EV100
53 t = LightType.Rectangle;
54 Assert.True(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Lumen));
55 Assert.False(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Candela));
56 Assert.False(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Lux));
57 Assert.True(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Nits));
58 Assert.True(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Ev100));
59 t = LightType.Disc;
60 Assert.True(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Lumen));
61 Assert.False(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Candela));
62 Assert.False(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Lux));
63 Assert.True(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Nits));
64 Assert.True(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Ev100));
65 t = LightType.Tube;
66 Assert.True(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Lumen));
67 Assert.False(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Candela));
68 Assert.False(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Lux));
69 Assert.True(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Nits));
70 Assert.True(LightUnitUtils.IsLightUnitSupported(t, LightUnit.Ev100));
71 }
72
73 [Test]
74 public void DirectionalAndBoxLightUnitConversion()
75 {
76 Light l = GameObject.FindAnyObjectByType<Light>().GetComponent<Light>();
77
78 l.type = LightType.Directional;
79 Assert.AreEqual(3f, LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lux, LightUnit.Lux));
80
81 l.type = LightType.Box;
82 Assert.AreEqual(3f, LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lux, LightUnit.Lux));
83 }
84
85 [Test]
86 public void PointLightUnitConversion()
87 {
88 // Point light
89 Light l = GameObject.FindAnyObjectByType<Light>().GetComponent<Light>();
90
91 l.type = LightType.Point;
92 l.luxAtDistance = 3f;
93 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Candela, LightUnit.Candela), Is.EqualTo(3f).Within(epsilon));
94 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lumen, LightUnit.Candela), Is.EqualTo(0.238732412f).Within(epsilon));
95 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Candela, LightUnit.Lumen), Is.EqualTo(37.6991119f).Within(epsilon));
96 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lumen, LightUnit.Lux), Is.EqualTo(0.0265258234f).Within(epsilon));
97 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lux, LightUnit.Lumen), Is.EqualTo(339.292023f).Within(epsilon));
98 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lumen, LightUnit.Ev100), Is.EqualTo(0.933466434f).Within(epsilon));
99 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Ev100, LightUnit.Lumen), Is.EqualTo(12.566371f).Within(epsilon));
100 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Candela, LightUnit.Lux), Is.EqualTo(0.333333343f).Within(epsilon));
101 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lux, LightUnit.Candela), Is.EqualTo(27.0f).Within(epsilon));
102 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Candela, LightUnit.Ev100), Is.EqualTo(4.58496237f).Within(epsilon));
103 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Ev100, LightUnit.Candela), Is.EqualTo(1f).Within(epsilon));
104 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lux, LightUnit.Ev100), Is.EqualTo(7.75488758f).Within(epsilon));
105 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Ev100, LightUnit.Lux), Is.EqualTo(0.111111112f).Within(epsilon));
106 }
107
108 [Test]
109 public void SpotLightUnitConversion()
110 {
111 Light l = GameObject.FindAnyObjectByType<Light>().GetComponent<Light>();
112
113 l.type = LightType.Spot;
114 l.enableSpotReflector = false;
115 l.luxAtDistance = 3f;
116 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Candela, LightUnit.Candela), Is.EqualTo(3f).Within(epsilon));
117 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lumen, LightUnit.Candela), Is.EqualTo(0.238732412f).Within(epsilon));
118 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Candela, LightUnit.Lumen), Is.EqualTo(37.6991119f).Within(epsilon));
119 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lumen, LightUnit.Lux), Is.EqualTo(0.0265258234f).Within(epsilon));
120 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lux, LightUnit.Lumen), Is.EqualTo(339.292023f).Within(epsilon));
121 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lumen, LightUnit.Ev100), Is.EqualTo(0.933466434f).Within(epsilon));
122 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Ev100, LightUnit.Lumen), Is.EqualTo(12.566371f).Within(epsilon));
123 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Candela, LightUnit.Lux), Is.EqualTo(0.333333343f).Within(epsilon));
124 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lux, LightUnit.Candela), Is.EqualTo(27.0f).Within(epsilon));
125 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Candela, LightUnit.Ev100), Is.EqualTo(4.58496237f).Within(epsilon));
126 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Ev100, LightUnit.Candela), Is.EqualTo(1f).Within(epsilon));
127 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lux, LightUnit.Ev100), Is.EqualTo(7.75488758f).Within(epsilon));
128 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Ev100, LightUnit.Lux), Is.EqualTo(0.111111112f).Within(epsilon));
129
130 l.enableSpotReflector = true;
131 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Candela, LightUnit.Candela), Is.EqualTo(3f).Within(epsilon));
132 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lumen, LightUnit.Candela), Is.EqualTo(14.0125141f).Within(epsilon));
133 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Candela, LightUnit.Lumen), Is.EqualTo(0.642283022f).Within(epsilon));
134 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lumen, LightUnit.Lux), Is.EqualTo(1.55694604f).Within(epsilon));
135 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lux, LightUnit.Lumen), Is.EqualTo(5.78054714f).Within(epsilon));
136 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lumen, LightUnit.Ev100), Is.EqualTo(6.80864382f).Within(epsilon));
137 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Ev100, LightUnit.Lumen), Is.EqualTo(0.214094341f).Within(epsilon));
138 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Candela, LightUnit.Lux), Is.EqualTo(0.333333343f).Within(epsilon));
139 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lux, LightUnit.Candela), Is.EqualTo(27.0f).Within(epsilon));
140 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Candela, LightUnit.Ev100), Is.EqualTo(4.58496237f).Within(epsilon));
141 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Ev100, LightUnit.Candela), Is.EqualTo(1f).Within(epsilon));
142 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lux, LightUnit.Ev100), Is.EqualTo(7.75488758f).Within(epsilon));
143 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Ev100, LightUnit.Lux), Is.EqualTo(0.111111112f).Within(epsilon));
144 }
145
146 [Test]
147 public void AreaLightUnitConversion()
148 {
149 Light l = GameObject.FindAnyObjectByType<Light>().GetComponent<Light>();
150
151 l.areaSize = new Vector2(4f, 5f);
152
153 l.type = LightType.Rectangle;
154 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lumen, LightUnit.Nits), Is.EqualTo(0.0477464795f).Within(epsilon));
155 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Nits, LightUnit.Lumen), Is.EqualTo(188.495575f).Within(epsilon));
156 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lumen, LightUnit.Ev100), Is.EqualTo(-1.38846159f).Within(epsilon));
157 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Ev100, LightUnit.Lumen), Is.EqualTo(62.8318558f).Within(epsilon));
158 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Nits, LightUnit.Ev100), Is.EqualTo(4.58496237f).Within(epsilon));
159 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Ev100, LightUnit.Nits), Is.EqualTo(1f).Within(epsilon));
160
161 l.type = LightType.Disc;
162 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lumen, LightUnit.Nits), Is.EqualTo(0.0189977214f).Within(epsilon));
163 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Nits, LightUnit.Lumen), Is.EqualTo(473.741028f).Within(epsilon));
164 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lumen, LightUnit.Ev100), Is.EqualTo(-2.71802998f).Within(epsilon));
165 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Ev100, LightUnit.Lumen), Is.EqualTo(157.913681f).Within(epsilon));
166 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Nits, LightUnit.Ev100), Is.EqualTo(4.58496237f).Within(epsilon));
167 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Ev100, LightUnit.Nits), Is.EqualTo(1f).Within(epsilon));
168
169 l.type = LightType.Tube;
170 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lumen, LightUnit.Nits), Is.EqualTo(0.0596831031f).Within(epsilon));
171 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Nits, LightUnit.Lumen), Is.EqualTo(150.796448f).Within(epsilon));
172 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Lumen, LightUnit.Ev100), Is.EqualTo(-1.06653357f).Within(epsilon));
173 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Ev100, LightUnit.Lumen), Is.EqualTo(50.2654839f).Within(epsilon));
174 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Nits, LightUnit.Ev100), Is.EqualTo(4.58496237f).Within(epsilon));
175 Assert.That(LightUnitUtils.ConvertIntensity(l, 3f, LightUnit.Ev100, LightUnit.Nits), Is.EqualTo(1f).Within(epsilon));
176 }
177 }
178}