回答編集履歴

1

夜中だけ光の上乗せを行う場合を追記

2021/07/20 17:26

投稿

Bongo
Bongo

スコア10807

test CHANGED
@@ -185,3 +185,81 @@
185
185
 
186
186
 
187
187
  ![図](7e182a1fae0147d7f94b811e84cda5ae.gif)
188
+
189
+
190
+
191
+ ## 夜中だけ上乗せを行う場合
192
+
193
+
194
+
195
+ 先のコードで書き足した場所のうち、プロパティ宣言部は
196
+
197
+
198
+
199
+ ```ShaderLab
200
+
201
+ // 上乗せする色を表すプロパティを追加する
202
+
203
+ [Header(Additional Skylight)]
204
+
205
+ [HDR] _Skylight ("Sky", Color) = (0.0, 0.25, 0.5, 1.0)
206
+
207
+ [HDR] _Equatorlight ("Equator", Color) = (0.0, 0.0, 0.125, 1.0)
208
+
209
+ [HDR] _Groundlight ("Ground", Color) = (0.0, 0.0, 0.0, 1.0)
210
+
211
+ [Toggle] _NighttimeOnly ("Nighttime Only", Float) = 1.0
212
+
213
+ _TwilightAngle ("Twilight Angle", Range(-90.0, 90.0)) = -10.0
214
+
215
+ _TwilightRange ("Twilight Range", Range(0.0, 180.0)) = 5.0
216
+
217
+ ```
218
+
219
+
220
+
221
+ ユニフォーム変数宣言部は
222
+
223
+
224
+
225
+ ```ShaderLab
226
+
227
+ // 追加したプロパティと対応するユニフォーム変数を追加し...
228
+
229
+ half3 _Skylight;
230
+
231
+ half3 _Equatorlight;
232
+
233
+ half3 _Groundlight;
234
+
235
+ half _NighttimeOnly;
236
+
237
+ half _TwilightAngle;
238
+
239
+ half _TwilightRange;
240
+
241
+ ```
242
+
243
+
244
+
245
+ 上乗せ処理部は
246
+
247
+
248
+
249
+ ```ShaderLab
250
+
251
+ // この位置で色の上乗せを行う
252
+
253
+ half h = y * SKY_GROUND_THRESHOLD;
254
+
255
+ half3 additionalLight = lerp(0.0, _Skylight, saturate(-h)) + lerp(0.0, _Equatorlight, saturate(1.0 - abs(h))) + lerp(0.0, _Groundlight, saturate(h));
256
+
257
+ half lightAngle = asin(clamp(_WorldSpaceLightPos0.y, -1.0, 1.0)) * 180.0 * UNITY_INV_PI;
258
+
259
+ col += additionalLight * lerp(1.0, saturate((_TwilightAngle + _TwilightRange - lightAngle) * 0.5 / _TwilightRange), _NighttimeOnly);
260
+
261
+ ```
262
+
263
+
264
+
265
+ という風に書き換えてみました。Directional Lightの角度をもとに昼夜を判断すればいいんじゃないかと思ったのですが、いかがでしょうか?