前回 p927 で、PLATEAUの丸の内(東京)に地面・道路・橋梁を入れて“本物の街並み”に整備しました。今回はその街を、Unityで夜景にしてみます。月明かり・街灯・ビルの窓の光——この3つの灯りで、昼の街がどれだけ雰囲気を変えるかが見どころです。

さらに今回は、2つの「比較」をやります。ビルの窓を「一様に光らせる簡易版」と「窓を計算して光らせる本格版」、そして光のにじみ(Bloom)の「無し」と「あり」。手間と見栄えがどう変わるかを並べて見ていきます。

🌙 この記事でわかること
・昼の3D都市を夜景にする手順(月明かり・暗い空・街灯)
ビルの窓を光らせる2つの方法(一様emissionの簡易版 / 窓を計算する本格シェーダー)
Bloom(光のにじみ)の有り/無しで夜景がどう変わるか
・重い街でも軽く仕上げるライティングの考え方(実ライト最小+発光主体)

昼の街を夜にする

スポンサーリンク

出発点は、p927で整備した昼の丸の内です。ここから空を暗くし、灯りを足して夜にしていきます。

出発点:p927で整備した昼の丸の内
出発点。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で道路を入れたので、今回は道沿いに街灯を並べられます(前は道路が無く、おおまかな配置になる予定でした)。暖色(オレンジっぽい)の灯りを点々と置くと、一気に街の生活感が出ます。

⚠️ ビルトインRPでの街灯の注意
リアルな点光源(Point Light)をたくさん置くと重くなります。そこで街は動かない(静止)ことを活かし、街灯の光を「ライトマップに焼き込む(ベイク)」と、実行時の負荷をほぼゼロにしつつ大量に置けます。
街灯を道路沿いに灯した状態
暖色の街灯を道路沿いに。道があると“どこに置くか”が自然に決まる

今回は街灯102灯すべてをベイクし、道路や橋の路面に“光だまり”が乗るようにしました(窓の光は地面を照らさない設定)。ベイクなので、これだけ置いても実行時の負荷はほぼゼロのままです。

③ ビルの窓を光らせる(簡易版 vs 本格版)

夜景の主役はビルの窓明かり。ところがPLATEAUの建物は昼用のテクスチャで、「どこが窓か」「窓が光っているか」という情報を持っていません。そこで窓は自分で“作って”光らせます。2つの方法を比べました。

簡易版:建物全体をぼんやり光らせる

いちばん手軽なのは、建物のマテリアルに一様な発光(emission)を与える方法。street全体がぼんやり光って、それっぽくはなります。ただ「壁ごと光る」ので、近くで見ると窓らしさはありません。

簡易版:建物に一様なemission
簡易版:一様な発光。手軽だが“壁が光る”感じ

本格版:窓を計算して、ランダムに点灯させる

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

本格版:窓を計算して点灯させるシェーダー
本格版:窓の升目を計算し、一部だけ点灯。散らばった窓明かりでリアルに

並べると一目瞭然で、本格版(窓が点々と点灯)の方が圧倒的にリアル。しかも窓の発光はライトではなくマテリアルの発光なので、たくさん光らせても負荷はほぼ変わりません。手間もシェーダーを割り当てて数値を少し調整するだけ。「本格版一択」というのが結論でした。

つまずき:窓シェーダーが“全部真っ白”に光ってしまった

ただ、本格版は一度建物が真っ白になって大失敗しました。原因は2つ、どちらもPLATEAUならではの落とし穴でした。

⚠️ 2つの原因と対処
  • 変数名が予約語だった:シェーダー内で使った名前 half が、実はシェーダー言語の“予約語”でエラーに。気づかず通っていたため、シェーダーが効かず通常表示に戻っていました(→ 名前を変えて解決)。
  • 街の座標が大きすぎて計算が壊れた:PLATEAUの建物はp927本物の地理座標(数百〜の大きな数)を保持しています。窓のランダムを決める計算がこの大きな数で精度を失い、結果が偏って“全部の窓が点灯”=真っ白に。座標を小さく折り返して計算するよう直して解決しました。

さらに細かい所では、建物が1つに結合されたメッシュで“材質の枠”が複数あり、ひとつだけ差し替えても大半が昼テクスチャのまま——という罠も。全部の材質枠にシェーダーを当てて解決しました。「正確な街の形」をくれるPLATEAUは、こうした“素のデータならでは”の癖に毎回出会うのが面白いところです。

④ Bloom 無し vs あり

最後に、光のにじみ(Bloom)の有り無しを比べます。Bloomは明るい部分を自動でにじませる効果で、夜景の灯りが「ふわっと光って」見えるようになります。

Bloom無しの夜景
Bloom無し:発光・露出・コントラストだけ
Bloomありの夜景
Bloomあり:灯りがにじんで夜景らしく

Bloom無しでも、十分に暗くして発光を強めれば夜景になりますが、光点がシャープで少し寂しめ。一方Bloomありは、窓や街灯に柔らかいにじみが乗って一気に“夜景写真”の質感になります。ただし強すぎると画面が真っ白(白飛び)になるので、効き具合は控えめが正解。今回はしきい値(Threshold)1.0・強さ(Intensity)2.5くらいの控えめ設定に落ち着きました。Bloomは無料の「Post Processing」を入れると使えます。

ビルに近づくと、違いがもっとはっきりします。Bloom無しは窓ひとつひとつが四角くくっきり、Bloomありは窓の光がふわっとにじんで、夜のオフィスビルらしい質感になります。窓が計算で作った格子状に並び、一部だけ点いているのもよく分かります。

ビルのクローズアップ(Bloom無し)
クローズアップ:Bloom無し(窓がくっきり)
ビルのクローズアップ(Bloom有り)
クローズアップ:Bloom有り(窓がにじんで光る)
Post ProcessingのBloom設定画面
BloomはPost ProcessingのVolumeで設定。Threshold/Intensityは控えめに

昼と夜を見比べる

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

昼の街
昼(p927)
夜の街
夜(今回)

最後に、夜景の街を上空からぐるりと巡る動画です。道路に乗った街灯の“光だまり”と、点々と灯るビルの窓明かりが見渡せます。

夜景の上空空撮(15秒)。街灯の光だまり+窓明かりを俯瞰で

まとめ

  • 夜景は「まず暗くする」(月明かり+暗い空・環境光)が土台。灯りはそのあと。
  • 街灯は道路沿いに。ビルトインRPではベイクで軽く大量に置ける。
  • ビルの窓は、一様emissionの簡易版より、窓を計算する本格シェーダーが断然リアル。しかも発光なので軽い。
  • Bloomは、無しでも夜景にできるが、ありの方が“にじみ”で楽にリッチ。やりすぎ(白飛び)注意。
  • 重い街でも「実ライト最小+発光主体」なら、RTX3060で快適に夜景化できる。
  • PLATEAUの大きな地理座標は、窓シェーダーの計算を壊して“全部真っ白”を招くことがある。座標を小さく扱う工夫が要る。

同じ街でも、灯りひとつで表情が大きく変わるのが3Dの面白いところ。PLATEAUの“正確な街の形”に、自分で灯りという演出を足していく——その積み重ねで、街がどんどん“本物”に近づいていきます。

それでは、今回はここまで。最後までありがとうございました😊