UnityでのBloomエフェクト適用ガイド

概要

Bloomエフェクトは、明るい部分から光が広がるような効果を再現するポストプロセスエフェクトです。これにより、オブジェクトが発光しているように見せることができます。この資料では、Bloomエフェクトを適切に設定し、ゲームビューでも正しく反映させる手順を解説します。


設定手順

1. Post Processing パッケージのインストール

Unity Package Manager を開く:

  • メニューから Window > Package Manager を選択。

Post Processing を検索:

  • パッケージ一覧から「Post Processing」を検索してインストール。

2. Main Camera に Post Processing Volume を追加

Main Camera を選択:

  • シーンビューまたはヒエラルキーから Main Camera を選択します。

Volume コンポーネントを追加:

  • インスペクターで Add Component をクリックし、Volume を追加します。

Post Processing プロファイルを設定:

  • Volume コンポーネントの「Profile」欄で New をクリックして新しいプロファイルを作成します。
  • 作成したプロファイルに必要なエフェクト(例: Bloom)を追加します。

Global Volume の設定:

  • 「Is Global」 のチェックをオンにして、Main Camera に適用されるポストプロセシングエフェクトをシーン全体に適用します。

3. Post-Processing プロファイルを作成

Post-Processing プロファイルを新規作成:

  • Volume コンポーネントの Profile 欄で「New」をクリック。

Bloom エフェクトを追加:

  • プロファイル内で Add Override > Post-processing > Bloom を選択。

4. Bloom のパラメータを調整

Threshold(閾値):

  • 明るさがどの程度からエフェクト対象になるかを設定。
  • 一般的に 0.81.5 の範囲で調整。

Intensity(強度):

  • Bloom 効果の強さを設定。
  • 2.05.0 を目安に調整。

Diffusion(拡散):

  • 光の広がり具合を調整。
    • 小さい値(例: 3): 発光の範囲が狭く、鋭いエフェクト。
    • 大きい値(例: 710): 発光の範囲が広がり、ソフトな見た目。

5. Main Cameraに Post-process Layer を設定

カメラにコンポーネントを追加:

  • シーン内のカメラを選択し、Post-process Layer を追加。

Layer の設定:

  • Post-process Layer の「Layer」をシーンのオブジェクトのレイヤーに合わせて設定(通常は Default)。

6. カスタムシェーダーの作成方法

カスタムシェーダーを使った高度な発光表現

デフォルトのスプライトシェーダーは、発光(Emission)プロパティを持たないため、動的な発光制御や複雑な発光表現には対応できません。そのため、発光(Emission)を実現するにはカスタムシェーダーの作成が必要です。

Bloomエフェクトは発光色(Emission Color)に依存するため、スプライトに発光効果を適用する場合は、カスタムシェーダーを利用して _EmissionColor プロパティを追加し、柔軟な発光制御を実現します。

6-1. カスタムシェーダーを作成

プロジェクトウィンドウを開く:

  • Unityエディタの Project ウィンドウを開きます。

新しいシェーダーを作成:

  • プロジェクトウィンドウ内で右クリック → Create > Shader > Unlit Shader を選択。

名前を変更:

  • 作成したシェーダーを SpriteWithEmission.shader と名前を変更します。

6-2. カスタムシェーダーを編集

作成したシェーダーファイルをダブルクリックして開き、以下のコードに置き換えます。

Shader "Custom/SpriteWithEmission"
{
    Properties
    {
        _MainTex ("Main Texture", 2D) = "white" {}
        _Color ("Tint", Color) = (1,1,1,1)
        _EmissionColor ("Emission Color", Color) = (0,0,0,0)
    }
    SubShader
    {
        Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
        LOD 100
        Blend SrcAlpha OneMinusSrcAlpha // アルファブレンディング
        Cull Off
        Lighting Off
        ZWrite Off

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            struct appdata_t
            {
                float4 vertex : POSITION;
                float4 color : COLOR;
                float2 texcoord : TEXCOORD0;
            };

            struct v2f
            {
                float4 vertex : SV_POSITION;
                float2 texcoord : TEXCOORD0;
                fixed4 color : COLOR;
            };

            sampler2D _MainTex;
            fixed4 _Color;
            fixed4 _EmissionColor;

            v2f vert (appdata_t v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.texcoord = v.texcoord;
                o.color = v.color * _Color;
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // テクスチャの色を取得
                fixed4 texColor = tex2D(_MainTex, i.texcoord) * i.color;

                // 発光色を加算 (アルファ値には影響を与えない)
                fixed4 outputColor = texColor + fixed4(_EmissionColor.rgb, 0);

                // アルファ値を保持して出力
                outputColor.a = texColor.a;
                return outputColor;
            }
            ENDCG
        }
    
}

6-3. シェーダーを使用したマテリアルを作成

新しいマテリアルを作成:

  • プロジェクトウィンドウで右クリック → Create > Material を選択。

カスタムシェーダーを割り当て:

  • 作成したマテリアルを選択し、「Shader」ドロップダウンから Custom/SpriteWithEmission を選択。

スプライトにマテリアルを適用:

  • スプライトを描画している SpriteRendererMaterial プロパティに、作成したマテリアルをドラッグ&ドロップ。

6-4. スクリプトで発光色を設定

スクリプトを使って発光色(Emission Color)を動的に設定します。

using UnityEngine;

public class EmissionExample : MonoBehaviour
{
    public SpriteRenderer spriteRenderer;
    public Color glowColor = new Color(1.0f, 1.0f, 0.5f); // 発光色
    public float glowIntensity = 2.0f; // 発光の強度

    void Start()
    {
        // マテリアルの発光色を設定
        spriteRenderer.material.SetColor("_EmissionColor", glowColor * glowIntensity);
    }
}

7. Graphics の設定確認

HDR の有効化

  1. メニューから Edit > Project Settings > Graphics を開きます。
  2. Tier Settings セクションを確認します。
  3. 各 Tier(Low, Medium, High)を選択し、以下を確認してください:
    • Use Default のチェックボックスを外します。
    • Use HDR を有効(チェック)にします。

Rendering Path

  1. 同じく Tier Settings で各 Tier を選択します。
  2. Rendering Path を Forward Rendering に設定します。
    • これも Use Default のチェックボックスを外す必要があります。

トラブルシューティング

ゲームビューで効果が弱い場合

HDR が無効:

  • カメラまたは Tier Settings で HDR が無効になっていないか確認。

発光色が弱い:

  • _EmissionColor の値を調整(例: 値を * 2.0* 5.0 にする)。

解像度の影響:

  • ゲームビューの解像度を高解像度に設定。

まとめ

  • Bloom エフェクトは、HDR や発光色の設定に依存するため、これらの調整を正確に行う必要があります。
  • カスタムシェーダーを利用することで、発光効果を自由に制御できます。
  • Diffusion(拡散)は光の広がり具合を調整する重要なパラメータです。

Post-Process

Posted by hidepon