Files
Fishing2/Packages/com.jbooth.microverse.vegetation/Scripts/Shaders/DetailPasteStamp.shader
2025-06-09 23:23:13 +08:00

83 lines
2.2 KiB
Plaintext

Shader "Hidden/MicroVerse/DetailPasteStamp"
{
Properties
{
_MainTex("mt", 2D) = "black" {}
[HideInInspector] _ClearMask("ClearMask", 2D) = "black" {}
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma shader_feature_local_fragment _ _RINT
#include "UnityCG.cginc"
#include_with_pragmas "Packages/com.jbooth.microverse/Scripts/Shaders/Noise.cginc"
#include_with_pragmas "Packages/com.jbooth.microverse/Scripts/Shaders/Filtering.cginc"
sampler2D _MainTex;
sampler2D _PlacementMask;
float4 _MainTex_TexelSize;
sampler2D _WeightMap;
sampler2D _IndexMap;
sampler2D _ClearMask;
float _ClearLayer;
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD0;
float2 stampUV : TEXCOORD1;
};
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
o.stampUV = mul(_Transform, float4(v.uv, 0, 1)).xy;
return o;
}
#if _RINT
int
#else
float
#endif
frag(v2f i) : SV_Target
{
float stamp = tex2D(_MainTex, i.stampUV).r;
float2 noiseUV = (i.uv * _NoiseUV.z) + _NoiseUV.xy;
float maskSample = tex2D(_PlacementMask, i.uv).w;
float mask = 1.0 - maskSample;
float result = saturate(DoFilters(i.uv, i.stampUV, noiseUV));
float2 clearMask = tex2D(_ClearMask, i.uv);
if (round(clearMask.r * 256) > _ClearLayer)
result *= 1.0 - clearMask.g;
return stamp * result * mask;
}
ENDCG
}
}
}