用 HLSL写一个urpshader实现这么一个功能:在Unity 原有的 UIUnlitTransparent 的基础上对给定材质图的左半部分和右半部分实现不同大小的缩放
下面是一个使用HLSL编写的URP Shader,实现了在Unity原有的UI/Unlit/Transparent基础上,对给定材质图的左半部分和右半部分实现不同大小的缩放。
Shader "Custom/UI/Unlit/TransparentWithScale" {
Properties {
_MainTex ("Texture", 2D) = "white" {}
_LeftScale ("Left Scale", Range(0, 2)) = 1
_RightScale ("Right Scale", Range(0, 2)) = 1
}
SubShader {
Tags { "RenderType"="Transparent" "Queue"="Transparent" }
Pass {
Cull Off
ZWrite Off
ZTest Always
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata {
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f {
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
float _LeftScale;
float _RightScale;
v2f vert (appdata v) {
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
fixed4 frag (v2f i) : SV_Target {
fixed4 col = tex2D(_MainTex, i.uv);
float2 scale = float2(1, 1);
if (i.uv.x < 0.5) {
scale.x = _LeftScale;
} else {
scale.x = _RightScale;
}
col *= tex2D(_MainTex, i.uv * scale);
return col;
}
ENDCG
}
}
}
将上述代码保存为一个名为"TransparentWithScale.shader"的文件,并将其放置在Unity项目的"Assets"文件夹或其子文件夹中。
然后,你可以在Unity的材质球中选择这个自定义的Shader,并调整"_LeftScale"和"_RightScale"属性来实现左半部分和右半部分的不同大小缩放。"_MainTex"属性用于指定材质图。
希望这可以帮助到你!
原文地址: https://www.cveoy.top/t/topic/i9mu 著作权归作者所有。请勿转载和采集!