i-school - 【3D】ゲームの見栄えを向上させる方法
 ゲームの魅力的なビジュアルを実現するため、いくつかの重要なテクニックがあります。

 この記事では、以下の要素に焦点を当てて紹介します(UI 関連については省いています)。



1.Skybox


 Skyboxはゲームの雰囲気を大きく変える重要な要素です。
Skyboxを設定することで、ゲームの背景にリアルな空や景色を表示できます。

 [Window → Rendering → Lighting] から設定画面を開き、[Environment] タブ内の [Environment] より設定できます。





 Skybox Material の部分に Skybox 用のマテリアルを設定することで、変更できます。






 スクリプトを利用し、動的に Skyboxの設定を変更することも出来ます。

// 変更したいマテリアルをアサイン
[SerializeField] private Material newSkyboxMaterial;

// Skyboxを設定する
RenderSettings.skybox = newSkyboxMaterial;


参考サイト
Unity 公式ドキュメント
Sky


2.Fog


 フォグは、ゲームの奥行き感を強調し、雰囲気を高めるための重要なエフェクトです。

 Skybox と同じく、[Window → Rendering → Lighting] から設定画面を開き、[Environment] タブ内の [Other Settings] より設定できます。

 最初は Fog のチェックが外れていますので、こちらにチェックを入れることで、フォグが有効になります。

 


 Color でフォグの色味の調整、Density でフォグの強度を設定します。

 他の設定項目については、マニュアルなどを参考にしらべて実際に試してみましょう。

 Skybox についても解説があります。


参考サイト
Unity 公式ドキュメント
Lighting ウィンドウ



 スクリプトを利用して動的にフォグを設定することもできます。

// フォグを設定する方法
// フォグを有効化(false で無効化)
RenderSettings.fog = true;

// フォグの色の変更
RenderSettings.fogColor = Color.gray;

// フォグの強度の変更
RenderSettings.fogDensity = 0.02f;


3.Camera コンポーネントの Clipping Planes


 Camera コンポーネントの Clipping Planes を調整することで、カメラの視野内のオブジェクトの表示範囲を制御できます。
これにより、パフォーマンスを向上させつつ、ゲームの見栄えを向上させることができます。






 Cinemachine の場合にも、VitualCamera コンポーネント内に設定項目(Lens 内)があります。



 


 スクリプトを利用して動的に設定することもできます。

// カメラの Clipping Planes を調整する方法(near)
Camera.main.nearClipPlane = 0.1f;

// カメラの Clipping Planes を調整する方法(far)
Camera.main.farClipPlane = 1000f;


参考サイト
Unity 公式ドキュメント
Camera component


4.Occlusion culling


 オクルージョンカリングは、不要なオブジェクトの描画を削減し、パフォーマンスを向上させるための方法です。

// オクルージョンカリングの実装
OcclusionCulling.generationMode = OcclusionCullingMode.OnDemand;
OcclusionCulling.doesSceneHaveManualPortals = true;

参考サイト
Unity 公式ドキュメント
Occlusion culling


5. Reflection Probe


 リフレクションプローブを使用すると、リアルな環境反射を実現できます。

リフレクションプローブを設定し、シーンの反射を向上させる方法を示します。

// リフレクションプローブを設定する方法
ReflectionProbe probe = GetComponent<ReflectionProbe>();
probe.RenderProbe();

参考サイト
Unity 公式ドキュメント
Reflection Probes


6.Light Probe


 ライトプローブを活用すると、キャラクターやオブジェクトが環境光を正確に反映できます。
ライトプローブを設定し、物体の照明を改善する方法について説明します。

// ライトプローブを設定する方法
LightProbes.Tetrahedralize(myProbePositions, myProbeCoefficients);

参考サイト
Unity 公式ドキュメント
Light Probes


7.ポストプロセッシングを使用したゲームビジュアル向上


 3Dゲームのビジュアルをさらに向上させるために、ポストプロセッシングは非常に有用です。
これは、ゲームシーンのレンダリングが完了した後に、エフェクトや補正を適用する技術です。

 Unityでは、レンダーパイプラインの種類によりますが、Post-Processing Stackというツールを使用して簡単にポストプロセッシングを導入できます。


参考サイト
Unity 公式ドキュメント
Post-processing and full-screen effects


1. Post-Processing のインストール


 Unity のレンダーパイプラインの種類により、導入方法が異なります。

 URP、あるいは HDRP を選択している場合、自動的にインストールされていますので、この手順は不要です。

 Built-in RenderPipeline の場合には、PackageManager の UnityRegistry より Post-Processing をインポートします。





2.Post-Processing Volumeの設定


 Post-Processing Stackをプロジェクトにインポートしたら、シーン内にPost-Processing Volumeを作成します。これは、ポストプロセッシングエフェクトを制御するためのオブジェクトです。

using UnityEngine;
using UnityEngine.Rendering.PostProcessing;

public class PostProcessingController : MonoBehaviour
{
    public PostProcessProfile profile;

    void Start()
    {
        var volume = gameObject.AddComponent<PostProcessVolume>();
        volume.profile = profile;
    }
}


3.エフェクトの適用


 Post-Processing Volumeを設定したら、エフェクトを適用できます。以下は一般的な例です。


1.ブルームエフェクトの適用

using UnityEngine;
using UnityEngine.Rendering.PostProcessing;

public class PostProcessingController : MonoBehaviour
{
    public PostProcessProfile profile;

    void Start()
    {
        var volume = gameObject.AddComponent<PostProcessVolume>();
        volume.profile = profile;

        Bloom bloom;
        if (volume.profile.TryGetSettings(out bloom))
        {
            bloom.enabled.value = true;
            bloom.intensity.value = 1.0f;
        }
    }
}


2.カラーグレーディング

using UnityEngine;
using UnityEngine.Rendering.PostProcessing;

public class PostProcessingController : MonoBehaviour
{
    public PostProcessProfile profile;

    void Start()
    {
        var volume = gameObject.AddComponent<PostProcessVolume>();
        volume.profile = profile;

        ColorGrading colorGrading;
        if (volume.profile.TryGetSettings(out colorGrading))
        {
            colorGrading.enabled.value = true;
            colorGrading.temperature.value = 0.5f; // 色温度の調整
            colorGrading.saturation.value = 1.2f; // 彩度の調整
        }
    }
}


4.カスタムエフェクトの作成


 また、独自のポストプロセッシングエフェクトを作成することもできます。
カスタムエフェクトを作成する場合、Post-Processing Stackのカスタムシェーダーを使用することが一般的です。
その後、C#スクリプトでそのエフェクトを制御します。

 ポストプロセッシングは、ゲームのビジュアルを劇的に向上させるためのパワフルなツールであり、エフェクトをカスタマイズできます。
ポストプロセッシングエフェクトを使って、ゲームの雰囲気や美しさをさらに高めましょう。


まとめ


 これらのテクニックを組み合わせることで、ゲームのビジュアルを向上させることができます。


参考サイト
【Unity】無料アセットのクオリティを簡単に上げる方法を解説します【ひろはす】