Shader/Shader - SurfaceShader

13-2 스펙귤러

소나무꼴 2020. 4. 5. 10:22
Shader "Custom/13-1"
{
    Properties
    {
        //_Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
		_BumpMap ("NormalMap (RGB)", 2D) = "white" {}
		_SpecCol ("Specular Color", Color) = (1,1,1,1)
		_SpecPow ("Specular Pow", Range(10, 200)) = 100
			//_Glossiness ("Smoothness", Range(0,1)) = 0.5
			//_Metallic ("Metallic", Range(0,1)) = 0.0
	}
	SubShader
	{
		Tags { "RenderType" = "Opaque" }
		LOD 200

		CGPROGRAM
		// Physically based Standard lighting model, and enable shadows on all light types
		#pragma surface surf _CustomLight noambient//Lambert Standard fullforwardshadows

		// Use shader model 3.0 target, to get nicer looking lighting
		#pragma target 3.0
		sampler2D _MainTex;
		sampler2D _BumpMap;
		float4 _SpecCol;
		float _SpecPow;

		struct Input
		{
			float2 uv_MainTex;
			float2 uv_BumpMap;
		};


		// Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader.
		// See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing.
		// #pragma instancing_options assumeuniformscaling
		UNITY_INSTANCING_BUFFER_START(Props)
			// put more per-instance properties here
		UNITY_INSTANCING_BUFFER_END(Props)


		void surf(Input IN, inout SurfaceOutput o)
		{
			fixed4 c = tex2D(_MainTex, IN.uv_MainTex);
			o.Albedo = c.rgb;
			o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
			o.Alpha = c.a;
		}

		float4 Lighting_CustomLight(SurfaceOutput s, float3 lightDir, float3 viewDir, float atten)
		{
			//Lambert term
			float3 diffColor;
			float ndotl = saturate(dot(s.Normal, lightDir));
			diffColor = ndotl * s.Albedo * _LightColor0.rgb * atten;


			float3 H = normalize(lightDir + viewDir);
			float spec = saturate(dot(H, s.Normal));
			spec = pow(spec, _SpecPow);
			float3 specColor = spec *_SpecCol.rgb;

			//final term
			float4 final;
			final.rgb = diffColor.rgb + specColor;
			final.a = s.Alpha;
			return final;
		}

		ENDCG
	}
FallBack "Diffuse"
}

'Shader > Shader - SurfaceShader' 카테고리의 다른 글

13-4 rim  (0) 2020.04.06
13-3 Gloss  (0) 2020.04.05
12-2 Rim 라이트  (0) 2020.04.04
12-1 프리넬 공식  (0) 2020.04.04
11 - 3(Half-Lambert)  (0) 2020.04.04