前回 p927 で、PLATEAUの丸の内(東京)に地面・道路・橋梁を入れて“本物の街並み”に整備しました。今回はその街を、Unityで夜景にしてみます。月明かり・街灯・ビルの窓の光——この3つの灯りで、昼の街がどれだけ雰囲気を変えるかが見どころです。
さらに今回は、2つの「比較」をやります。ビルの窓を「一様に光らせる簡易版」と「窓を計算して光らせる本格版」、そして光のにじみ(Bloom)の「無し」と「あり」。手間と見栄えがどう変わるかを並べて見ていきます。
・昼の3D都市を夜景にする手順(月明かり・暗い空・街灯)
・ビルの窓を光らせる2つの方法(一様emissionの簡易版 / 窓を計算する本格シェーダー)
・Bloom(光のにじみ)の有り/無しで夜景がどう変わるか
・重い街でも軽く仕上げるライティングの考え方(実ライト最小+発光主体)
昼の街を夜にする
出発点は、p927で整備した昼の丸の内です。ここから空を暗くし、灯りを足して夜にしていきます。

今回の環境と方針
| 項目 | 内容 |
|---|---|
| エンジン | Unity 6000.4.5f1(ビルトインRP・シリーズ統一) |
| 作業マシン | Windows 11 / GPU: GeForce RTX 3060(VRAM 12GB) |
| 使う街 | p927で整備した丸の内(地形・道路・橋梁入り) |
整備後の街は約900万トライアングルと重いので、実際のライトは最小限にします。具体的には 「月明かり=Directional Light 1灯」+「街灯=ベイク(焼き込み)」+「ビルの窓=ライトではなくマテリアルの発光」。光源を増やさず“発光”で見せるのが、ビルトインRPで重い街を破綻させないコツです。
① 夜の土台:月明かりと暗い空
夜景でいちばん大事なのは、実は「暗くすること」です。灯りを足す前に、空と全体を夜にします。
- 月明かり:太陽(Directional Light)の明るさをぐっと下げ、色を少し青白く。これで弱い月光になります。
- 空と環境光:スカイボックスを暗い夜空に、全体を照らす環境光(Ambient)も暗い紺色に。ここを暗くしないと、いくら灯りを足しても「夜」になりません。
- 月を空に出すと、ぐっと夜らしくなります。

参考の設定値:月明かり(Directional)は明るさ0.18・色は青白めで角度を低く(長い影)。環境光は暗い紺の一色、スカイボックスも暗く、薄い夜霧を少し。これくらい暗くして初めて、このあと足す灯りが映えます。
② 街灯を道路沿いに灯す
次は街灯です。p927で道路を入れたので、今回は道沿いに街灯を並べられます(前は道路が無く、おおまかな配置になる予定でした)。暖色(オレンジっぽい)の灯りを点々と置くと、一気に街の生活感が出ます。
リアルな点光源(Point Light)をたくさん置くと重くなります。そこで街は動かない(静止)ことを活かし、街灯の光を「ライトマップに焼き込む(ベイク)」と、実行時の負荷をほぼゼロにしつつ大量に置けます。

今回は街灯102灯すべてをベイクし、道路や橋の路面に“光だまり”が乗るようにしました(窓の光は地面を照らさない設定)。ベイクなので、これだけ置いても実行時の負荷はほぼゼロのままです。
③ ビルの窓を光らせる(簡易版 vs 本格版)
夜景の主役はビルの窓明かり。ところがPLATEAUの建物は昼用のテクスチャで、「どこが窓か」「窓が光っているか」という情報を持っていません。そこで窓は自分で“作って”光らせます。2つの方法を比べました。
簡易版:建物全体をぼんやり光らせる
いちばん手軽なのは、建物のマテリアルに一様な発光(emission)を与える方法。street全体がぼんやり光って、それっぽくはなります。ただ「壁ごと光る」ので、近くで見ると窓らしさはありません。

本格版:窓を計算して、ランダムに点灯させる
もう一段リアルにするため、窓の格子を計算して、一部の窓だけランダムに点灯させる専用シェーダーを作りました(p920でBlenderでやった「窓のプロシージャル発光」のUnity版です)。ビルの座標から窓の升目を作り、ところどころ暖色・寒色で光らせ、消えている窓も混ぜると、本物の夜のオフィス街に近づきます。

並べると一目瞭然で、本格版(窓が点々と点灯)の方が圧倒的にリアル。しかも窓の発光はライトではなくマテリアルの発光なので、たくさん光らせても負荷はほぼ変わりません。手間もシェーダーを割り当てて数値を少し調整するだけ。「本格版一択」というのが結論でした。
つまずき:窓シェーダーが“全部真っ白”に光ってしまった
ただ、本格版は一度建物が真っ白になって大失敗しました。原因は2つ、どちらもPLATEAUならではの落とし穴でした。
- 変数名が予約語だった:シェーダー内で使った名前
halfが、実はシェーダー言語の“予約語”でエラーに。気づかず通っていたため、シェーダーが効かず通常表示に戻っていました(→ 名前を変えて解決)。 - 街の座標が大きすぎて計算が壊れた:PLATEAUの建物はp927で本物の地理座標(数百〜の大きな数)を保持しています。窓のランダムを決める計算がこの大きな数で精度を失い、結果が偏って“全部の窓が点灯”=真っ白に。座標を小さく折り返して計算するよう直して解決しました。
さらに細かい所では、建物が1つに結合されたメッシュで“材質の枠”が複数あり、ひとつだけ差し替えても大半が昼テクスチャのまま——という罠も。全部の材質枠にシェーダーを当てて解決しました。「正確な街の形」をくれるPLATEAUは、こうした“素のデータならでは”の癖に毎回出会うのが面白いところです。
④ Bloom 無し vs あり
最後に、光のにじみ(Bloom)の有り無しを比べます。Bloomは明るい部分を自動でにじませる効果で、夜景の灯りが「ふわっと光って」見えるようになります。


Bloom無しでも、十分に暗くして発光を強めれば夜景になりますが、光点がシャープで少し寂しめ。一方Bloomありは、窓や街灯に柔らかいにじみが乗って一気に“夜景写真”の質感になります。ただし強すぎると画面が真っ白(白飛び)になるので、効き具合は控えめが正解。今回はしきい値(Threshold)1.0・強さ(Intensity)2.5くらいの控えめ設定に落ち着きました。Bloomは無料の「Post Processing」を入れると使えます。
ビルに近づくと、違いがもっとはっきりします。Bloom無しは窓ひとつひとつが四角くくっきり、Bloomありは窓の光がふわっとにじんで、夜のオフィスビルらしい質感になります。窓が計算で作った格子状に並び、一部だけ点いているのもよく分かります。



昼と夜を見比べる
同じ丸の内の、昼(p927)と夜(今回)を並べてみます。街の“形”は同じでも、灯りが入るだけでまるで別の街に見えます。


最後に、夜景の街を上空からぐるりと巡る動画です。道路に乗った街灯の“光だまり”と、点々と灯るビルの窓明かりが見渡せます。
まとめ
- 夜景は「まず暗くする」(月明かり+暗い空・環境光)が土台。灯りはそのあと。
- 街灯は道路沿いに。ビルトインRPではベイクで軽く大量に置ける。
- ビルの窓は、一様emissionの簡易版より、窓を計算する本格シェーダーが断然リアル。しかも発光なので軽い。
- Bloomは、無しでも夜景にできるが、ありの方が“にじみ”で楽にリッチ。やりすぎ(白飛び)注意。
- 重い街でも「実ライト最小+発光主体」なら、RTX3060で快適に夜景化できる。
- PLATEAUの大きな地理座標は、窓シェーダーの計算を壊して“全部真っ白”を招くことがある。座標を小さく扱う工夫が要る。
同じ街でも、灯りひとつで表情が大きく変わるのが3Dの面白いところ。PLATEAUの“正確な街の形”に、自分で灯りという演出を足していく——その積み重ねで、街がどんどん“本物”に近づいていきます。
それでは、今回はここまで。最後までありがとうございました😊