写一个支持urp的溶解shader
以下是一个支持URP (Universal Render Pipeline) 的溶解shader示例:
Shader "Custom/DissolveShader" { Properties { _MainTex ("Texture", 2D) = "white" {} _DissolveAmount ("Dissolve Amount", Range(0, 1)) = 0.0 _DissolveColor ("Dissolve Color", Color) = (1, 1, 1, 1) }
SubShader {
Tags {"RenderType"="Opaque"}
Pass {
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;
float4 _MainTex_ST;
float _DissolveAmount;
float4 _DissolveColor;
v2f vert (appdata v) {
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
}
fixed4 frag (v2f i) : SV_Target {
fixed4 col = tex2D(_MainTex, i.uv);
float dissolve = 1.0 - _DissolveAmount;
if (i.uv.x < _DissolveAmount) {
col = lerp(col, _DissolveColor, dissolve);
}
return col;
}
ENDCG
}
}
FallBack "Diffuse"
}
该shader中包含一个主纹理和两个自定义属性:溶解量和溶解颜色。在顶点着色器中,我们将顶点位置转换为屏幕空间,并将纹理坐标转换为主纹理的坐标。在片段着色器中,我们首先通过tex2D函数获取主纹理颜色。然后,我们根据溶解量和溶解颜色的值来计算溶解的颜色。如果纹理坐标的x值小于溶解量,则使用lerp函数将主纹理颜色和溶解颜色进行混合,混合比例为1.0 - 溶解量。
这个溶解shader可以应用于任何使用URP渲染管线的Unity项目中
原文地址: https://www.cveoy.top/t/topic/fksE 著作权归作者所有。请勿转载和采集!