当前位置:   article > 正文

UnityShader初级篇——渐变纹理_spine shader渐变

spine shader渐变

1.使用渐变纹理来控制漫反射光照的结果

Shader"Unity Shaders Book/Chapter 7/Ramp Texture"
{
	Properties
	{
		_Color ("Color Tint", Color) = (1,1,1,1)
		//"White是内置纹理名字,即全白纹理,{}是初始值"
		_RampTex("Ramp Text", 2D) = "white" {}
		_Specular ("Specular", Color) = (1,1,1,1)
		_Gloss ("Gloss", Range(8.0, 256)) = 20 
	}
	SubShader
	{
		Pass
		{
		        Tags{"LightMode" = "ForwardBase"}
                        
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag

			#include "LIghting.cginc"

			fixed4 _Color;
			sampler2D _RampTex;
			//定义_RampTex的纹理属性变量
			float4 _RampTex_ST;
			fixed4 _Specular;
			float _Gloss;

			struct a2v
			{
				float4 vertex : POSITION;
				float3 normal : NORMAL;
				float4 texcoord : TEXCOORD0;
			};

			struct v2f
			{
			        float4 pos : SV_POSITION;
			        float3 worldNormal : TEXCOORD0;
			        float3 worldPos : TEXCOORD1;
			        float2 uv : TEXCOORD2;
			};		
			
			v2f vert (a2v v)
			{
				v2f o;
				o.pos = UnityObjectToClipPos(v.vertex);
				o.worldNormal = UnityObjectToWorldNormal(v.normal);
				o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
				//使用内置宏TRANSFORM_TEX(顶点纹理坐标,纹理名)计算经过平铺和偏移后的纹理坐标
				o.uv = TRANSFORM_TEX(v.texcoord, _RampTex);
				return o;
			}
			
			fixed4 frag (v2f i) : SV_Target
			{
				fixed3 worldNormal = normalize(i.worldNormal);
				fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));

				fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz ;

				//使用半兰伯特模型构建一个纹理坐标,使用此坐标对渐变纹理进行采样,uv方向都使用半兰博特,最后将渐变纹理与材质纹理相乘
				fixed halfLambert = 0.5 * dot(worldNormal, worldLightDir) + 0.5;
				fixed3 diffuseColor = tex2D(_RampTex, fixed2(halfLambert, halfLambert)).rgb * _Color.rgb;
				fixed3 diffuse = _LightColor0.rgb * diffuseColor;

				fixed3 viewDir = normalize(UnityWorldSpaceViewDir(i.worldPos));
				fixed3 halfDir = normalize(worldLightDir + viewDir);
				fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(worldNormal,halfDir)), _Gloss);

				return fixed4(ambient + diffuse + specular,1.0);
;			}
			ENDCG
		}
	}

	Fallback"Specular"
}



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/107233?site
推荐阅读
相关标签
  

闽ICP备14008679号