用shader给一个圆柱体附上多段贴图

本文介绍了一种使用Unity Shader实现的特殊纹理混合效果。通过定义多个纹理并设置不同的范围阈值,可以在同一区域中平滑过渡多种纹理效果。具体包括四层主要纹理叠加,并根据UV坐标Y轴位置变化渐进混合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Shader "Custom/zkTex" {
	Properties {
		_FirstTex ("First (RGB),Alpha (A)",2D) = "White" {}
		_SecondTex ("Second (RGB),Alpha (A)",2D) = "White" {}
		_ThirdTex ("Second (RGB),Alpha (A)",2D) = "White" {}
		_ForthTex ("Fourth (RGB),Alpha (A)",2D) = "White" {}
		_BackTex ("Back (RGB),Alpha (A)",2D) = "White" {}//白色贴图做底色背景

		_FirstRange ("FirstRange",Range(0,1)) = 0.33
		_SecondRange ("SecondRange",Range(0,1)) = 0.33
		_ThirdRange ("SecondRange",Range(0,1)) = 0.33
	}
	SubShader {
		Tags { "RenderType"="Opaque" }
		LOD 200
		
		Cull Off
		Lighting Off

		Pass{
			CGPROGRAM

			#pragma target 3.0
			#pragma vertex vert
			#pragma fragment frag
			#include "UnityCG.cginc"

			float _FirstRange;
			float _SecondRange;
			float _ThirdRange;

			sampler2D _FirstTex;
			sampler2D _SecondTex;
			sampler2D _ThirdTex;
			sampler2D _ForthTex;
			sampler2D _BackTex;

			float4 _BackTex_ST;

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

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

			v2f vert(appdata_t v){
				v2f o;
				o.vertex = mul(UNITY_MATRIX_MVP,v.vertex);
				o.texcoord = TRANSFORM_TEX(v.texcoord,_BackTex);
				o.color = v.color;

				return o;
			}

			fixed4 frag(v2f i) : COLOR{
				fixed4 col1 = tex2D(_FirstTex,i.texcoord);
				fixed4 col2 = tex2D(_SecondTex,i.texcoord);
				fixed4 col3 = tex2D(_ThirdTex,i.texcoord);
				fixed4 col4 = tex2D(_ForthTex,i.texcoord);
				fixed4 col_back = tex2D(_BackTex,i.texcoord);

				float2 uv = i.texcoord.xy;
				float4 c1 = i.color;
				float4 c2 = i.color;
				float4 c3 = i.color;
				float4 c4 = i.color;
				float4 c_back = i.color;

				if(uv.y > 0 && uv.y < _FirstRange){
					c1.rgba = col1.rgba;
				}
				if(uv.y > _FirstRange && uv.y < _SecondRange){
					c2.rgba = col2.rgba;
				}
				if(uv.y > _SecondRange && uv.y < _ThirdRange){
					c3.rgba = col3.rgba;
				}
				if(uv.y > _ThirdRange && uv.y < 1){
					c4.rgba = col4.rgba;
				}

				fixed4 col_a = col_back * c1 * c2 * c3 * c4;

				return col_a;
			}
			ENDCG
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值