24
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Unity】Fragment ShaderにEmissionを適用する

Last updated at Posted at 2018-06-19

はじめに

Standard Shaderを使っている場合はEmissionに値を入れれば光物が表現できる
しかし、Surface Shaderでない自作のShaderの場合はEmissionを作るのにひと工夫が必要

環境

  • Unity 2018.1.0f2
  • Post Processing Stack v1

事前準備

Assets->Create->Post Processing ProfileでProfileを作成
Bloomにチェックを入れる
今回は分かりやすくThresholdを0.9にしておく
image.png

メインカメラに「Post Processing Behaviour」をAddcomponentし、先ほど作ったProfileを設定する
image.png

そうすると物体が光るようになる
emit1.gif

元となるShaderの作成

Shader "Custom/BaseShader" 
{
    Properties 
	{
        _MainTex ("Base (RGB)", 2D) = "white" {}
		_MainColor("Color", Color) = (1,1,1,1)
    }
    SubShader 
	{
        Pass 
		{
            CGPROGRAM
            #pragma vertex vert_img
            #pragma fragment frag

            #include "UnityCG.cginc"
            
            uniform sampler2D _MainTex;
			float4 _MainColor;

            fixed4 frag(v2f_img i) : SV_Target 
			{
                return tex2D(_MainTex, i.uv) * _MainColor;
            }
            ENDCG
        }
    }
}

このシェーダーをマテリアルに適用して適当なテクスチャを張ると
image.png
白い部分がうっすら光ります

任意の部分を光らせるシェーダー

Shader "Custom/EmissionShader" 
{
    Properties 
	{
        _MainTex ("Base (RGB)", 2D) = "white" {}
		_MainColor("Color", Color) = (1,1,1,1)
        _EmissionMap ("Emission Map", 2D) = "black" {}               //追加
        [HDR] _EmissionColor ("Emission Color", Color) = (0,0,0)    //追加
    }
    SubShader 
	{
        Pass 
		{
            CGPROGRAM
            #pragma vertex vert_img
            #pragma fragment frag

            #include "UnityCG.cginc"
            
            uniform sampler2D _MainTex;
			float4 _MainColor;

            uniform sampler2D _EmissionMap;    //追加
			float4 _EmissionColor;             //追加

            fixed4 frag(v2f_img i) : SV_Target 
			{
                fixed4 albedo = tex2D(_MainTex, i.uv) * _MainColor;

                //↓今回のキモ。通常のalbedoにEmission分の色を足している
                return albedo + tex2D(_EmissionMap, i.uv) * _EmissionColor;  
            }
            ENDCG
        }
    }
}

Baseにはベースとなるテクスチャ
Emission Mapには光らせたい部分を白にしたテクスチャをアサイン
image.png

あとはEmission Colorを光らせたい値に調整すればOK
Intensityの値を大きくすれば、より輝きます
emit2.gif

参考

24
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?