質問するログイン新規登録

回答編集履歴

1

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

2021/07/20 17:26

投稿

Bongo
Bongo

スコア10816

answer CHANGED
@@ -91,4 +91,43 @@
91
91
 
92
92
  下図のように、真夜中でも青っぽい雰囲気になりました。
93
93
 
94
- ![図](7e182a1fae0147d7f94b811e84cda5ae.gif)
94
+ ![図](7e182a1fae0147d7f94b811e84cda5ae.gif)
95
+
96
+ ## 夜中だけ上乗せを行う場合
97
+
98
+ 先のコードで書き足した場所のうち、プロパティ宣言部は
99
+
100
+ ```ShaderLab
101
+ // 上乗せする色を表すプロパティを追加する
102
+ [Header(Additional Skylight)]
103
+ [HDR] _Skylight ("Sky", Color) = (0.0, 0.25, 0.5, 1.0)
104
+ [HDR] _Equatorlight ("Equator", Color) = (0.0, 0.0, 0.125, 1.0)
105
+ [HDR] _Groundlight ("Ground", Color) = (0.0, 0.0, 0.0, 1.0)
106
+ [Toggle] _NighttimeOnly ("Nighttime Only", Float) = 1.0
107
+ _TwilightAngle ("Twilight Angle", Range(-90.0, 90.0)) = -10.0
108
+ _TwilightRange ("Twilight Range", Range(0.0, 180.0)) = 5.0
109
+ ```
110
+
111
+ ユニフォーム変数宣言部は
112
+
113
+ ```ShaderLab
114
+ // 追加したプロパティと対応するユニフォーム変数を追加し...
115
+ half3 _Skylight;
116
+ half3 _Equatorlight;
117
+ half3 _Groundlight;
118
+ half _NighttimeOnly;
119
+ half _TwilightAngle;
120
+ half _TwilightRange;
121
+ ```
122
+
123
+ 上乗せ処理部は
124
+
125
+ ```ShaderLab
126
+ // この位置で色の上乗せを行う
127
+ half h = y * SKY_GROUND_THRESHOLD;
128
+ half3 additionalLight = lerp(0.0, _Skylight, saturate(-h)) + lerp(0.0, _Equatorlight, saturate(1.0 - abs(h))) + lerp(0.0, _Groundlight, saturate(h));
129
+ half lightAngle = asin(clamp(_WorldSpaceLightPos0.y, -1.0, 1.0)) * 180.0 * UNITY_INV_PI;
130
+ col += additionalLight * lerp(1.0, saturate((_TwilightAngle + _TwilightRange - lightAngle) * 0.5 / _TwilightRange), _NighttimeOnly);
131
+ ```
132
+
133
+ という風に書き換えてみました。Directional Lightの角度をもとに昼夜を判断すればいいんじゃないかと思ったのですが、いかがでしょうか?