8
9

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で影の色を変える

Last updated at Posted at 2018-10-26

#はじめに
Unityで色つきの影が必要になり,シェーダを使って影の色を変えてみた.

※シェーダ始めたばかりですので間違いなどはご容赦ください.

#環境

  • Unity 2017.4.3f1

#準備
UnityのProjectで新しいシェーダを追加する.
[Create]→[Shader]→[Standard Surface Shader]

名前は"ColoredShadow"にしておきます.これを右クリックし,同じ名前でマテリアルも作成しておきましょう.
[Create]→[Material]

では,作成したシェーダファイルをエディタで開き,書き込んでいきましょう.

#コーディング

ColoredShadow.shader
Shader "Example/ColoredShadow" {

	Properties{
		_MainTex("Texture", 2D) = "white" {}
		_ShadowColor("ShadowColor", Color) = (0,0,1,1)

	}

	SubShader{
		Tags { "RenderType" = "Opaque" }

		CGPROGRAM
		#pragma surface surf SimpleLambert
		sampler2D _MainTex;
		half4 _ShadowColor;
		
		struct Input {
			float2 uv_MainTex; // uv座標
		};

		void surf(Input IN, inout SurfaceOutput o) {
			o.Albedo = tex2D(_MainTex, IN.uv_MainTex); //テクスチャ貼り付け

		}
		
		// SimpleLambertの設定 lightDir:光方向 atten:影のパラメータ
		half4 LightingSimpleLambert(SurfaceOutput s, half3 lightDir, half atten) {

			half NdotL = dot(s.Normal, lightDir); //ライティング計算(表面法線と光方向の内積)
			half4 c;

			c.rgb = s.Albedo * _LightColor0.rgb * (NdotL * min((atten + _ShadowColor.rgb), 1) * 1.5); //影に色を付ける
			c.a = s.Alpha;

			return c;
		}
		ENDCG
	}
	Fallback "Diffuse"
}

#手順
つぎに,Unityで最初に作成したマテリアルに上記のコードを記入したシェーダを適用します.
そして,影がつくオブジェクト(床や壁など)にマテリアルを適用します.

すると影に色が付きます.影の色もシェーダのプロパティで設定可能です.
ColoredShadow.gif

8
9
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
8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?