Unityで3Dミニゲームを作る #5 ライティング、ポストプロセス

投稿者: | 2019-12-03

ライティングやポストプロセスを使って、見た目を良い感じにしてみます。

まず飛んでくるBallに、スタンダードアセットに入っているマテリアルを付けました。

複雑な凸凹が付いているので、Ballを生成するときに、Ballの回転値やスケールをランダムで変えます。

private IEnumerator ThrowTheBall() // Ballを生成して飛ばすコルーチン
{
    while (true)
    {
    // ポジションと向きをランダムにする
    rb_ball = Instantiate(ball, new Vector3(Random.Range(-9f, 9f), Random.Range(-5f, 5.5f), -30f), Quaternion.Euler(Random.Range(0, 360), Random.Range(0, 360), Random.Range(0, 360))) as Rigidbody;

    float ballScale = Random.Range(1f, 3f); 
    rb_ball.gameObject.transform.localScale = new Vector3(ballScale, ballScale, ballScale); // スケールをランダムにする

    rb_ball.AddForce(Vector3.forward * 10f, ForceMode.Impulse); // Ballをカメラの方に飛ばす

    yield return new WaitForSeconds(Random.Range(0.1f, 1f));
    }       
}

Quaternion.Euler()にx,y,z軸の角度を入れるときに、0度以上360度未満のランダムの角度にしています。

プレイヤーのCubeを少し大きくしてポイントライトを付けました。

プレイヤーの子オブジェクトにしているので、ライトがプレイヤーに付いていきます。

ライトのインスペクタで範囲や色、強さ(Intensity)を調節できます。

レンダリング設定

Edit -> Project Settings… を開きます。

Player -> Other Settings のColor SpaceをLinearにします。

こちらのほうが綺麗です。

また、カメラのインスペクタで、Allow HDRにチェックを入れました。

これで強い光をうまく処理できます。

スカイボックスを付ける

Window -> Rendering -> Lighting Settings を開きます。

よく使うウィンドウなので、どこかのウィンドウのタブエリアにドラッグアンドドロップしておきます。

無料アセットのスカイボックスをインポートして使ってみます。

好きなスカイボックスのマテリアルを、Lighting設定のSkybox Materialにドラッグアンドドロップします。

空の画像が変わりました。

環境光を設定する

デフォルトのDirectional Lightで太陽光を表現します。

夕暮れなので少し角度を下げてみます。

また、インスペクタで、Directional Lightの強さや色を調節できます。

さらに、Lighting Settingsの Intensity Multiplier を下げると環境光の明るさを調節できます。

ついでに、Lighting Settingsで、リアルタイムGlobal Illuminationをオンにして、Baked GIの方はオフにしました。

下部のAuto Generateにチェックが入っていると、設定を変えるごとにBakeが始まってしまうので今はオフにします。

ポストプロセスを使う

Window -> Package Managerから Post Processingをインストールします。


ポストプロセッシングでは、見た目を綺麗にするための色々な効果を設定できます。

ポストプロセッシングを使うにはカメラにPost-process Layerコンポーネントを追加します。

LayerをEverythingに設定します。

画像はたくさんの小さな四角なので、どうしても画面上のモデルの端っこなどに小さな段差が出来てギザギザに見えてしまいますね。
それを取り除くためのAnti-aliasingという処理のモードもここで設定できます。

とりあえず好きなものを選びます。

次に、新しい空のオブジェクトを作って、Post Process Volumeコンポーネントを付けます。

Is Globalにチェックを入れて、Newをクリックします。

Add effect…から他の効果を追加できます。

今回はBloomを使ってみます。

明るい光が溢れるよう効果を付けられます。

強い光が強調されていますね。

(Bloomなし)

反射光を付ける

リアルタイムGlobal Illuminationを使って、反射光をみてみます。

緑色の床と白いCubeを新しく配置してみました。

Cubeが全く緑色の床の影響を受けていません。本当は緑色に光って欲しいです。

そこで、インスペクタから、CubeをLightmap Staticに設定します。

そして、Lighting Settingsで、Generate Lightingをクリックし、ライトマップを作ります。

すると、Cubeに緑色の反射光が見えるようになりました。

でも飛んでくる岩は緑色になりません。
動かないオブジェクトとへは反射光の色を焼き付けることができますが、動くオブジェクトに対してはライトプローブを使う必要があります。

ライトプローブを使うには、まず空のオブジェクトをつくって、Light Probe Groupコンポーネントを付けます。

すると、四角形のシンプルなライトプローブができます。

反射光の情報がこのライトプローブに保持されて、ここを通る動くオブジェクトが反射光の影響を計算できるようになります。
なので、まずはこれを岩が通る範囲をカバーするように広げます。

普通のオブジェクトを拡大縮小するのと同じ方法が使えます。

再度Generate Lightingをクリックしてからプレイします。

岩に反射光が付いています。

ライトプローブは、外側の黄色い玉が稠密に配置されている部分のほうが、反射光の変化が繊細に表現されます。
黄色い玉を編集するには、Light Probe GroupコンポーネントのEdit Light Probesをクリックします。

すると、一つ一つの玉を普通のオブジェクトのように操作できるようになります。

ライトプローブを広げた状態で、一つの玉だけを選択します。

Duplicate Selectedをクリックすると、その玉がコピーされます。

コピーしては動かす、というのを繰り返して、隙間を埋めることができます。

面倒くさいですが、複数選択すれば意外と楽です。


本来は、反射光を繊細に表現したいところだけライトプローブを増やすべきです。

反射光の変化がスムーズですね。

コメントを残す

メールアドレスが公開されることはありません。