[Add] All in one shader

This commit is contained in:
2026-02-23 22:01:07 +07:00
parent ec0aa86ac2
commit 4f942cd7c0
806 changed files with 401510 additions and 33 deletions
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 786a2bacb5f53844392f7846e0ff411c
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,87 @@
#ifndef ALLIN1SPRITESHADER_2DRENDERER_COMMONFUNCTIONS
#define ALLIN1SPRITESHADER_2DRENDERER_COMMONFUNCTIONS
//Prevent Unity warnings that are not relevant for this shader-------------------
#pragma warning (disable : 3571) // pow(f, e) will not work for negative f, use abs(f) or conditionally handle negative values if you expect them
#pragma warning (disable : 4008) // floating point division by zero
#pragma warning (disable : 3206) // implicit truncation of vector type
//BLURS-------------------------------------------------------------------------
#define ALLIN1_SAMPLE_TEXTURE_2D(texName, uv) SAMPLE_TEXTURE2D(texName, sampler##texName, uv)
half4 Blur(half2 uv, Texture2D source, SamplerState texSampler, half Intensity)
{
const half2 texelSize = 1.0 / _ScreenParams.xy;
const half4 color = SAMPLE_TEXTURE2D(source, texSampler, uv);
const half2 offset = Intensity * texelSize;
half4 accumulatedColor = color;
half accumulatedWeight = 1.0;
for (int x = -1; x <= 1; x++)
{
for (int y = -1; y <= 1; y++)
{
const half2 sampleUV = uv + half2(x, y) * offset;
const half4 sampleColor = SAMPLE_TEXTURE2D(source, texSampler, sampleUV);
accumulatedColor += sampleColor;
accumulatedWeight += 1.0;
}
}
half4 blurredColor = accumulatedColor / accumulatedWeight;
return blurredColor;
}
half BlurHD_G(half bhqp, half x)
{
return exp(-(x * x) / (2.0 * bhqp * bhqp));
}
half4 BlurHD(half2 uv, Texture2D source, SamplerState texSampler, half BlurAmount, half xScale, half yScale)
{
int iterations = 16;
int halfIterations = iterations / 2;
half sigmaX = 0.1 + BlurAmount * 0.5;
half sigmaY = sigmaX;
half total = 0.0;
half4 ret = half4(0, 0, 0, 0);
for (int iy = 0; iy < iterations; ++iy)
{
half fy = BlurHD_G(sigmaY, half(iy) -half(halfIterations));
half offsetY = half(iy - halfIterations) * 0.00390625 * xScale;
for (int ix = 0; ix < iterations; ++ix)
{
half fx = BlurHD_G(sigmaX, half(ix) - half(halfIterations));
half offsetX = half(ix - halfIterations) * 0.00390625 * yScale;
total += fx * fy;
ret += SAMPLE_TEXTURE2D(source, texSampler, uv + half2(offsetX, offsetY)) * fx * fy;
}
}
return ret / total;
}
//-----------------------------------------------------------------------
half rand(half offset, half2 seed) {
return (frac(sin(dot(seed, half2(12.9898, 78.233))) * 43758.5453) + offset) % 1.0;
}
half rand2(half2 seed, half offset, half speed) {
return (frac(sin(dot(seed * floor(50 + (_Time.x % 1.0) * 12. * speed), half2(127.1, 311.7))) * 43758.5453123) + offset) % 1.0;
}
half rand2CustomTime(half offset, half2 seed, half customTime, half speed) {
return (frac(sin(dot(seed * floor(50 + (customTime % 1.0) * 12. * speed), half2(127.1, 311.7))) * 43758.5453123) + offset) % 1.0;
}
//-----------------------------------------------------------------------
half RemapFloat(half inValue, half inMin, half inMax, half outMin, half outMax){
return outMin + (inValue - inMin) * (outMax - outMin) / (inMax - inMin);
}
half3 GetPixel(in int offsetX, in int offsetY, half2 uv, Texture2D tex, SamplerState texSampler, float4 texelSize)
{
half2 correctedUV = (uv + half2(offsetX * texelSize.x, offsetY * texelSize.y));
half3 res = SAMPLE_TEXTURE2D(tex, texSampler, correctedUV).rgb;
return res;
}
#endif //ALLIN1SPRITESHADER_2DRENDERER_COMMONFUNCTIONS
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: b271c3be2c8bda1448755707cbb814cd
ShaderIncludeImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 156513
packageName: All In 1 Sprite Shader
packageVersion: 4.661
assetPath: Assets/Plugins/AllIn1SpriteShader/Shaders/ShaderLibrary/2DRenderer/AllIn1SpriteShader_2DRenderer_CommonFunctions.hlsl
uploadId: 857600
@@ -0,0 +1,588 @@
#ifndef ALLIN1SPRITESHADER_2DRENDERER_FRAGMENTPASS
#define ALLIN1SPRITESHADER_2DRENDERER_FRAGMENTPASS
half4 CombinedShapeLightFragment(v2f i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
half randomSeed = _RandomSeed;
float texWidth;
float texHeight;
_MainTex.GetDimensions(texWidth, texHeight);
float4 texelSize = float4(1.0 / texWidth, 1 / texHeight, texWidth, texHeight);
float2 uvRect = i.uv;
half2 center = half2(0.5, 0.5);
#if ATLAS_ON
center = half2((_MaxXUV + _MinXUV) / 2.0, (_MaxYUV + _MinYUV) / 2.0);
uvRect = half2((i.uv.x - _MinXUV) / (_MaxXUV - _MinXUV), (i.uv.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
half2 centerTiled = half2(center.x * _MainTex_ScaleAndTiling.x, center.y * _MainTex_ScaleAndTiling.y);
#if CLIPPING_ON
half2 tiledUv = half2(i.uv.x / _MainTex_ScaleAndTiling.x, i.uv.y / _MainTex_ScaleAndTiling.y);
#if ATLAS_ON
tiledUv = half2((tiledUv.x - _MinXUV) / (_MaxXUV - _MinXUV), (tiledUv.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
clip((1 - _ClipUvUp) - tiledUv.y);
clip(tiledUv.y - _ClipUvDown);
clip((1 - _ClipUvRight) - tiledUv.x);
clip(tiledUv.x - _ClipUvLeft);
#endif
#if RADIALCLIPPING_ON
half2 tiledUv2 = half2(i.uv.x / _MainTex_ScaleAndTiling.x, i.uv.y / _MainTex_ScaleAndTiling.y);
#if ATLAS_ON
tiledUv2 = half2((tiledUv2.x - _MinXUV) / (_MaxXUV - _MinXUV), (tiledUv2.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
half startAngle = _RadialStartAngle - _RadialClip;
half endAngle = _RadialStartAngle + _RadialClip2;
half offset0 = clamp(0, 360, startAngle + 360);
half offset360 = clamp(0, 360, endAngle - 360);
half2 atan2Coord = half2(lerp(-1, 1, tiledUv2.x), lerp(-1, 1, tiledUv2.y));
half atanAngle = atan2(atan2Coord.y, atan2Coord.x) * 57.3; // angle in degrees
if(atanAngle < 0) atanAngle = 360 + atanAngle;
if(atanAngle >= startAngle && atanAngle <= endAngle) discard;
if(atanAngle <= offset360) discard;
if(atanAngle >= offset0) discard;
#endif
#if TEXTURESCROLL_ON && ATLAS_ON
i.uv = half2(_MinXUV + ((_MaxXUV - _MinXUV) * (abs(((_Time.y + randomSeed) * _TextureScrollXSpeed) + uvRect.x) % 1)),
_MinYUV + ((_MaxYUV - _MinYUV) * (abs(((_Time.y + randomSeed) * _TextureScrollYSpeed) + uvRect.y) % 1)));
#endif
#if OFFSETUV_ON
#if ATLAS_ON
i.uv = half2(_MinXUV + ((_MaxXUV - _MinXUV) * (abs((_OffsetUvX + uvRect.x) % 1))),
_MinYUV + ((_MaxYUV - _MinYUV) * (abs(_OffsetUvY + uvRect.y) % 1)));
#else
i.uv += half2(_OffsetUvX, _OffsetUvY);
#endif
#endif
#if POLARUV_ON
i.uv = half2(atan2(i.uv.y, i.uv.x) / (2.0f * 3.141592653589f), length(i.uv));
i.uv *= _MainTex_ScaleAndTiling.xy;
#endif
#if TWISTUV_ON
#if ATLAS_ON
_TwistUvPosX = ((_MaxXUV - _MinXUV) * _TwistUvPosX) + _MinXUV;
_TwistUvPosY = ((_MaxYUV - _MinYUV) * _TwistUvPosY) + _MinYUV;
#endif
half2 tempUv = i.uv - half2(_TwistUvPosX * _MainTex_ScaleAndTiling.x, _TwistUvPosY * _MainTex_ScaleAndTiling.y);
_TwistUvRadius *= (_MainTex_ScaleAndTiling.x + _MainTex_ScaleAndTiling.y) / 2;
half percent = (_TwistUvRadius - length(tempUv)) / _TwistUvRadius;
half theta = percent * percent * (2.0 * sin(_TwistUvAmount)) * 8.0;
half s = sin(theta);
half c = cos(theta);
half beta = max(sign(_TwistUvRadius - length(tempUv)), 0.0);
tempUv = half2(dot(tempUv, half2(c, -s)), dot(tempUv, half2(s, c))) * beta + tempUv * (1 - beta);
tempUv += half2(_TwistUvPosX * _MainTex_ScaleAndTiling.x, _TwistUvPosY * _MainTex_ScaleAndTiling.y);
i.uv = tempUv;
#endif
#if FISHEYE_ON
half bind = length(centerTiled);
half2 dF = i.uv - centerTiled;
half dFlen = length(dF);
half fishInt = (3.14159265359 / bind) * (_FishEyeUvAmount + 0.001);
i.uv = centerTiled + (dF / (max(0.0001, dFlen))) * tan(dFlen * fishInt) * bind / tan(bind * fishInt);
#endif
#if PINCH_ON
half2 dP = i.uv - centerTiled;
half pinchInt = (3.141592 / length(centerTiled)) * (-_PinchUvAmount + 0.001);
i.uv = centerTiled + normalize(dP) * atan(length(dP) * -pinchInt * 10.0) * 0.5 / atan(-pinchInt * 5);
#endif
#if ZOOMUV_ON
i.uv -= centerTiled;
i.uv = i.uv * _ZoomUvAmount;
i.uv += centerTiled;
#endif
#if DOODLE_ON
half2 uvCopy = uvRect;
_HandDrawnSpeed = (floor((_Time.x + randomSeed) * 20 * _HandDrawnSpeed) / _HandDrawnSpeed) * _HandDrawnSpeed;
uvCopy.x = sin((uvCopy.x * _HandDrawnAmount + _HandDrawnSpeed) * 4);
uvCopy.y = cos((uvCopy.y * _HandDrawnAmount + _HandDrawnSpeed) * 4);
i.uv = lerp(i.uv, i.uv + uvCopy, 0.0005 * _HandDrawnAmount);
#endif
#if SHAKEUV_ON
half xShake = sin((_Time.x + randomSeed) * _ShakeUvSpeed * 50) * _ShakeUvX;
half yShake = cos((_Time.x + randomSeed) * _ShakeUvSpeed * 50) * _ShakeUvY;
i.uv += half2(xShake * 0.012, yShake * 0.01);
#endif
#if RECTSIZE_ON
i.uv = i.uv.xy * (_RectSize).xx + (((-_RectSize * 0.5) + 0.5)).xx;
#endif
#if DISTORT_ON
#if ATLAS_ON
i.uvDistTex.x = i.uvDistTex.x * (1 / (_MaxXUV - _MinXUV));
i.uvDistTex.y = i.uvDistTex.y * (1 / (_MaxYUV - _MinYUV));
#endif
i.uvDistTex.x += ((_Time.x + randomSeed) * _DistortTexXSpeed) % 1;
i.uvDistTex.y += ((_Time.x + randomSeed) * _DistortTexYSpeed) % 1;
half distortAmnt = (ALLIN1_SAMPLE_TEXTURE_2D(_DistortTex, i.uvDistTex).r - 0.5) * 0.2 * _DistortAmount;
i.uv.x += distortAmnt;
i.uv.y += distortAmnt;
#endif
#if WARP_ON
half2 warpUv = half2(i.uv.x / _MainTex_ScaleAndTiling.x, i.uv.y / _MainTex_ScaleAndTiling.y);
#if ATLAS_ON
warpUv = half2((warpUv.x - _MinXUV) / (_MaxXUV - _MinXUV), (warpUv.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
const float tau = 6.283185307179586;
float xWarp = (_Time.y + randomSeed) * _WarpSpeed + warpUv.x * tau / _WarpScale;
float yWarp = (_Time.y + randomSeed) * _WarpSpeed + warpUv.y * tau / _WarpScale;
float2 warp = float2(sin(xWarp), sin(yWarp)) * _WarpStrength;
i.uv += warp;
#endif
#if WAVEUV_ON
float2 uvWave = half2(_WaveX * _MainTex_ScaleAndTiling.x, _WaveY * _MainTex_ScaleAndTiling.y) - i.uv;
uvWave %= 1;
#if ATLAS_ON
uvWave = half2(_WaveX, _WaveY) - uvRect;
#endif
uvWave.x *= _ScreenParams.x / _ScreenParams.y;
float waveTime = _Time.y + randomSeed;
float angWave = (sqrt(dot(uvWave, uvWave)) * _WaveAmount) - ((waveTime * _WaveSpeed));
i.uv = i.uv + uvWave * sin(angWave) * (_WaveStrength / 1000.0);
#endif
#if ROUNDWAVEUV_ON
half xWave = ((0.5 * _MainTex_ScaleAndTiling.x) - uvRect.x);
half yWave = ((0.5 * _MainTex_ScaleAndTiling.y) - uvRect.y) * (texelSize.w / texelSize.z);
half ripple = -sqrt(xWave*xWave + yWave* yWave);
i.uv += sin((ripple + (_Time.y + randomSeed) * (_RoundWaveSpeed/10.0)) / 0.015) * (_RoundWaveStrength/10.0);
#endif
#if WIND_ON
half windOffset = sin((_Time.x + randomSeed) * _GrassSpeed * 10);
half2 windCenter = half2(0.5, 0.1);
#if ATLAS_ON
windCenter.x = ((_MaxXUV - _MinXUV) * windCenter.x) + _MinXUV;
windCenter.y = ((_MaxYUV - _MinYUV) * windCenter.y) + _MinYUV;
#endif
#if !MANUALWIND_ON
i.uv.x = fmod(abs(lerp(i.uv.x, i.uv.x + (_GrassWind * 0.01 * windOffset), uvRect.y)), 1);
#else
i.uv.x = fmod(abs(lerp(i.uv.x, i.uv.x + (_GrassWind * 0.01 * _GrassManualAnim), uvRect.y)), 1);
windOffset = _GrassManualAnim;
#endif
half2 delta = i.uv - windCenter;
half delta2 = dot(delta.xy, delta.xy);
half2 delta_offset = delta2 * windOffset;
i.uv = i.uv + half2(delta.y, -delta.x) * delta_offset * _GrassRadialBend;
#endif
#if TEXTURESCROLL_ON && !ATLAS_ON
i.uv.x += ((_Time.y + randomSeed) * _TextureScrollXSpeed) % 1;
i.uv.y += ((_Time.y + randomSeed) * _TextureScrollYSpeed) % 1;
#endif
#if PIXELATE_ON
half aspectRatio = texelSize.x / texelSize.y;
half2 pixelSize = float2(_PixelateSize, _PixelateSize * aspectRatio);
i.uv = floor(i.uv * pixelSize) / pixelSize;
#endif
half4 col = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv);
half originalAlpha = col.a;
col *= i.color;
#if PREMULTIPLYALPHA_ON
col.rgb *= col.a;
#endif
#if GLITCH_ON
half2 uvGlitch = uvRect;
uvGlitch.y -= 0.5;
half lineNoise = pow(rand2(floor(uvGlitch * half2(24., 19.) * _GlitchSize) * 4.0, randomSeed, _GlitchSpeed), 3.0) * _GlitchAmount
* pow(rand2(floor(uvGlitch * half2(38., 14.) * _GlitchSize) * 4.0, randomSeed, _GlitchSpeed), 3.0);
col = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + half2(lineNoise * 0.02 * rand2(half2(2.0, 1), randomSeed, _GlitchSpeed), 0)) * i.color;
#endif
#if CHROMABERR_ON
half4 r = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + half2(_ChromAberrAmount/10, 0)) * i.color;
half4 b = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + half2(-_ChromAberrAmount/10, 0)) * i.color;
col = half4(r.r * r.a, col.g, b.b * b.a, max(max(r.a, b.a) * _ChromAberrAlpha, col.a));
#endif
#if BLUR_ON
#if ATLAS_ON
#if !BLURISHD_ON
col = BlurHD(i.uv, _MainTex, sampler_MainTex, _BlurIntensity, (_MaxXUV - _MinXUV), (_MaxYUV - _MinYUV)) * i.color;
#else
col = Blur(i.uv, _MainTex, sampler_MainTex, _BlurIntensity * (_MaxXUV - _MinXUV)) * i.color;
#endif
#else
#if !BLURISHD_ON
col = BlurHD(i.uv, _MainTex, sampler_MainTex, _BlurIntensity, 1, 1) * i.color;
#else
col = Blur(i.uv, _MainTex, sampler_MainTex, _BlurIntensity) * i.color;
#endif
#endif
#endif
#if MOTIONBLUR_ON
_MotionBlurAngle = _MotionBlurAngle * 3.1415926;
#define rot(n) mul(n, half2x2(cos(_MotionBlurAngle), -sin(_MotionBlurAngle), sin(_MotionBlurAngle), cos(_MotionBlurAngle)))
_MotionBlurDist = _MotionBlurDist * 0.005;
#if ATLAS_ON
_MotionBlurDist *= (_MaxXUV - _MinXUV);
#endif
col.rgb += ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + rot(half2(-_MotionBlurDist, -_MotionBlurDist)));
col.rgb += ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + rot(half2(-_MotionBlurDist * 2, -_MotionBlurDist * 2)));
col.rgb += ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + rot(half2(-_MotionBlurDist * 3, -_MotionBlurDist * 3)));
col.rgb += ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + rot(half2(-_MotionBlurDist * 4, -_MotionBlurDist * 4)));
col.rgb += ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + rot(half2(_MotionBlurDist, _MotionBlurDist)));
col.rgb += ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + rot(half2(_MotionBlurDist * 2, _MotionBlurDist * 2)));
col.rgb += ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + rot(half2(_MotionBlurDist * 3, _MotionBlurDist * 3)));
col.rgb += ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + rot(half2(_MotionBlurDist * 4, _MotionBlurDist * 4)));
col.rgb = col.rgb / 9;
#endif
#if NEGATIVE_ON
col.rgb = lerp(col.rgb, 1 - col.rgb, _NegativeAmount);
#endif
half luminance = 0;
#if GREYSCALE_ON && !GREYSCALEOUTLINE_ON
luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b;
luminance = saturate(luminance + _GreyscaleLuminosity);
col.rgb = lerp(col.rgb, half3(luminance, luminance, luminance) * _GreyscaleTintColor, _GreyscaleBlend);
#endif
#if GHOST_ON
luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b;
half4 ghostResult;
ghostResult.a = saturate(luminance - _GhostTransparency) * col.a;
ghostResult.rgb = col.rgb * (luminance + _GhostColorBoost);
col = lerp(col, ghostResult, _GhostBlend);
#endif
#if INNEROUTLINE_ON
half3 innerT = abs(GetPixel(0, _InnerOutlineThickness, i.uv, _MainTex, sampler_MainTex, texelSize) - GetPixel(0, -_InnerOutlineThickness, i.uv, _MainTex, sampler_MainTex, texelSize));
innerT += abs(GetPixel(_InnerOutlineThickness, 0, i.uv, _MainTex, sampler_MainTex, texelSize) - GetPixel(-_InnerOutlineThickness, 0, i.uv, _MainTex, sampler_MainTex, texelSize));
#if !ONLYINNEROUTLINE_ON
innerT = (innerT / 2.0) * col.a * _InnerOutlineAlpha;
col.rgb += length(innerT) * _InnerOutlineColor.rgb * _InnerOutlineGlow;
#else
innerT *= col.a * _InnerOutlineAlpha;
col.rgb = length(innerT) * _InnerOutlineColor.rgb * _InnerOutlineGlow;
col.a = step(0.3, col.r+col.g+col.b);
#endif
#endif
#if HITEFFECT_ON
col.rgb = lerp(col.rgb, _HitEffectColor.rgb * _HitEffectGlow, _HitEffectBlend);
#endif
#if GRADIENT_ON
half2 tiledUvGrad = half2(uvRect.x / _MainTex_ScaleAndTiling.x, uvRect.y / _MainTex_ScaleAndTiling.y);
#if GRADIENT2COL_ON
_GradTopRightCol = _GradTopLeftCol;
_GradBotRightCol = _GradBotLeftCol;
#endif
#if RADIALGRADIENT_ON
half radialDist = 1 - length(tiledUvGrad - half2(0.5, 0.5));
radialDist *= (texelSize.w / texelSize.z);
radialDist = saturate(_GradBoostX * radialDist);
half4 gradientResult = lerp(_GradTopLeftCol, _GradBotLeftCol, radialDist);
#else
half gradXLerpFactor = saturate(pow(tiledUvGrad.x, _GradBoostX));
half4 gradientResult = lerp(lerp(_GradBotLeftCol, _GradBotRightCol, gradXLerpFactor),
lerp(_GradTopLeftCol, _GradTopRightCol, gradXLerpFactor), saturate(pow(tiledUvGrad.y, _GradBoostY)));
#endif
gradientResult = lerp(col, gradientResult, _GradBlend);
col.rgb = gradientResult.rgb * col.a;
col.a *= gradientResult.a;
#endif
#if CONTRAST_ON
col.rgb = (col.rgb - float3(0.5, 0.5, 0.5)) * _Contrast + float3(0.5, 0.5, 0.5);
col.rgb += _Brightness;
#endif
#if COLORSWAP_ON
luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b;
half4 swapMask = ALLIN1_SAMPLE_TEXTURE_2D(_ColorSwapTex, i.uv);
swapMask.rgb *= swapMask.a;
half3 redSwap = _ColorSwapRed * swapMask.r * col.a * saturate(luminance + _ColorSwapRedLuminosity);
half3 greenSwap = _ColorSwapGreen * swapMask.g * col.a * saturate(luminance + _ColorSwapGreenLuminosity);
half3 blueSwap = _ColorSwapBlue * swapMask.b * col.a * saturate(luminance + _ColorSwapBlueLuminosity);
swapMask.rgb = col.rgb * saturate(1 - swapMask.r - swapMask.g - swapMask.b);
col.rgb = lerp(col.rgb, swapMask.rgb + redSwap + greenSwap + blueSwap, _ColorSwapBlend);
#endif
#if COLORRAMP_ON && !COLORRAMPOUTLINE_ON
luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b;
luminance = saturate(luminance + _ColorRampLuminosity);
#if GRADIENTCOLORRAMP_ON
col.rgb = lerp(col.rgb, ALLIN1_SAMPLE_TEXTURE_2D(_ColorRampTexGradient, half2(luminance, 0)).rgb, _ColorRampBlend);
#else
col.rgb = lerp(col.rgb, ALLIN1_SAMPLE_TEXTURE_2D(_ColorRampTex, half2(luminance, 0)).rgb, _ColorRampBlend);
#endif
#endif
#if CHANGECOLOR_ON
float3 currChangeColor = saturate(col.rgb);
luminance = 0.3 * currChangeColor.r + 0.59 * currChangeColor.g + 0.11 * currChangeColor.b;
luminance = saturate(luminance + _ColorChangeLuminosity);
half3 dif = abs(currChangeColor - _ColorChangeTarget.rgb);
col.rgb = lerp(col.rgb, half3(luminance, luminance, luminance) * _ColorChangeNewCol.rgb,
max(sign(1 - saturate(dif.x + dif.y + dif.z) - _ColorChangeTolerance), 0.0));
#if CHANGECOLOR2_ON
dif = abs(currChangeColor - _ColorChangeTarget2.rgb);
col.rgb = lerp(col.rgb, half3(luminance, luminance, luminance) * _ColorChangeNewCol2.rgb,
max(sign(1 - saturate(dif.x + dif.y + dif.z) - _ColorChangeTolerance2), 0.0));
#endif
#if CHANGECOLOR3_ON
dif = abs(currChangeColor - _ColorChangeTarget3.rgb);
col.rgb = lerp(col.rgb, half3(luminance, luminance, luminance) * _ColorChangeNewCol3.rgb,
max(sign(1 - saturate(dif.x + dif.y + dif.z) - _ColorChangeTolerance3), 0.0));
#endif
#endif
#if POSTERIZE_ON && !POSTERIZEOUTLINE_ON
col.rgb = pow(col.rgb, _PosterizeGamma) * _PosterizeNumColors;
col.rgb = floor(col.rgb) / _PosterizeNumColors;
col.rgb = pow(col.rgb, 1.0 / _PosterizeGamma);
#endif
#if HSV_ON
half3 resultHsv = half3(col.rgb);
half cosHsv = _HsvBright * _HsvSaturation * cos(_HsvShift * 3.14159265 / 180);
half sinHsv = _HsvBright * _HsvSaturation * sin(_HsvShift * 3.14159265 / 180);
resultHsv.x = (.299 * _HsvBright + .701 * cosHsv + .168 * sinHsv) * col.x
+ (.587 * _HsvBright - .587 * cosHsv + .330 * sinHsv) * col.y
+ (.114 * _HsvBright - .114 * cosHsv - .497 * sinHsv) * col.z;
resultHsv.y = (.299 * _HsvBright - .299 * cosHsv - .328 * sinHsv) *col.x
+ (.587 * _HsvBright + .413 * cosHsv + .035 * sinHsv) * col.y
+ (.114 * _HsvBright - .114 * cosHsv + .292 * sinHsv) * col.z;
resultHsv.z = (.299 * _HsvBright - .3 * cosHsv + 1.25 * sinHsv) * col.x
+ (.587 * _HsvBright - .588 * cosHsv - 1.05 * sinHsv) * col.y
+ (.114 * _HsvBright + .886 * cosHsv - .203 * sinHsv) * col.z;
col.rgb = resultHsv;
#endif
#if OVERLAY_ON
half2 overlayUvs = i.uv;
overlayUvs.x += ((_Time.y + randomSeed) * _OverlayTextureScrollXSpeed) % 1;
overlayUvs.y += ((_Time.y + randomSeed) * _OverlayTextureScrollYSpeed) % 1;
half4 overlayCol = ALLIN1_SAMPLE_TEXTURE_2D(_OverlayTex, CUSTOM_TRANSFORM_TEX(overlayUvs, _OverlayTex_ScaleAndTiling));
overlayCol.rgb *= _OverlayColor.rgb * _OverlayGlow;
#if !OVERLAYMULT_ON
overlayCol.rgb *= overlayCol.a * _OverlayColor.rgb * _OverlayColor.a * _OverlayBlend;
col.rgb += overlayCol.rgb;
#else
overlayCol.a *= _OverlayColor.a;
col = lerp(col, col * overlayCol, _OverlayBlend);
#endif
#endif
//OUTLINE-------------------------------------------------------------
#if OUTBASE_ON
#if OUTBASEPIXELPERF_ON
half2 destUv = half2(_OutlinePixelWidth * texelSize.x, _OutlinePixelWidth * texelSize.y);
#else
half2 destUv = half2(_OutlineWidth * texelSize.x * 200, _OutlineWidth * texelSize.y * 200);
#endif
#if OUTDIST_ON
i.uvOutDistTex.x += ((_Time.x + randomSeed) * _OutlineDistortTexXSpeed) % 1;
i.uvOutDistTex.y += ((_Time.x + randomSeed) * _OutlineDistortTexYSpeed) % 1;
#if ATLAS_ON
i.uvOutDistTex = half2((i.uvOutDistTex.x - _MinXUV) / (_MaxXUV - _MinXUV), (i.uvOutDistTex.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
half outDistortAmnt = (ALLIN1_SAMPLE_TEXTURE_2D(_OutlineDistortTex, i.uvOutDistTex).r - 0.5) * 0.2 * _OutlineDistortAmount;
destUv.x += outDistortAmnt;
destUv.y += outDistortAmnt;
#endif
half spriteLeft = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + half2(destUv.x, 0)).a;
half spriteRight = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv - half2(destUv.x, 0)).a;
half spriteBottom = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + half2(0, destUv.y)).a;
half spriteTop = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv - half2(0, destUv.y)).a;
half result = spriteLeft + spriteRight + spriteBottom + spriteTop;
#if OUTBASE8DIR_ON
half spriteTopLeft = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + half2(destUv.x, destUv.y)).a;
half spriteTopRight = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + half2(-destUv.x, destUv.y)).a;
half spriteBotLeft = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + half2(destUv.x, -destUv.y)).a;
half spriteBotRight = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + half2(-destUv.x, -destUv.y)).a;
result = result + spriteTopLeft + spriteTopRight + spriteBotLeft + spriteBotRight;
#endif
result = step(0.05, saturate(result));
#if OUTTEX_ON
i.uvOutTex.x += ((_Time.x + randomSeed) * _OutlineTexXSpeed) % 1;
i.uvOutTex.y += ((_Time.x + randomSeed) * _OutlineTexYSpeed) % 1;
#if ATLAS_ON
i.uvOutTex = half2((i.uvOutTex.x - _MinXUV) / (_MaxXUV - _MinXUV), (i.uvOutTex.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
half4 tempOutColor = ALLIN1_SAMPLE_TEXTURE_2D(_OutlineTex, i.uvOutTex);
#if OUTGREYTEXTURE_ON
luminance = 0.3 * tempOutColor.r + 0.59 * tempOutColor.g + 0.11 * tempOutColor.b;
tempOutColor = half4(luminance, luminance, luminance, 1);
#endif
tempOutColor *= _OutlineColor;
_OutlineColor = tempOutColor;
#endif
result *= (1 - originalAlpha) * _OutlineAlpha;
half4 outline = _OutlineColor * i.color.a;
outline.rgb *= _OutlineGlow;
outline.a = result;
#if ONLYOUTLINE_ON
col = outline;
#else
col = lerp(col, outline, result);
#endif
#endif
//-----------------------------------------------------------------------------
#if FADE_ON
half2 tiledUvFade1= CUSTOM_TRANSFORM_TEX(i.uv, _FadeTex_ScaleAndTiling);
half2 tiledUvFade2 = CUSTOM_TRANSFORM_TEX(i.uv, _FadeBurnTex_ScaleAndTiling);
#if ATLAS_ON
tiledUvFade1 = half2((tiledUvFade1.x - _MinXUV) / (_MaxXUV - _MinXUV), (tiledUvFade1.y - _MinYUV) / (_MaxYUV - _MinYUV));
tiledUvFade2 = half2((tiledUvFade2.x - _MinXUV) / (_MaxXUV - _MinXUV), (tiledUvFade2.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
half fadeTemp = ALLIN1_SAMPLE_TEXTURE_2D(_FadeTex, tiledUvFade1).r;
half fade = smoothstep(_FadeAmount, _FadeAmount + _FadeBurnTransition, fadeTemp);
half fadeBurn = saturate(smoothstep(_FadeAmount - _FadeBurnWidth, _FadeAmount - _FadeBurnWidth + 0.1, fadeTemp) * _FadeAmount);
col.a *= fade;
_FadeBurnColor.rgb *= _FadeBurnGlow;
col += fadeBurn * ALLIN1_SAMPLE_TEXTURE_2D(_FadeBurnTex, tiledUvFade2) * _FadeBurnColor * originalAlpha * (1 - col.a);
#endif
#if SHADOW_ON
half shadowA = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + half2(_ShadowX, _ShadowY)).a;
half preMultShadowMask = 1 - (saturate(shadowA - col.a) * (1 - col.a));
col.rgb *= 1 - ((shadowA - col.a) * (1 - col.a));
col.rgb += (_ShadowColor * shadowA) * (1 - col.a);
col.a = max(shadowA * _ShadowAlpha * i.color.a, col.a);
#endif
#if GLOW_ON
half4 emission;
#if GLOWTEX_ON
emission = ALLIN1_SAMPLE_TEXTURE_2D(_GlowTex, i.uv);
#else
emission = col;
#endif
col.rgb *= _GlowGlobal;
emission.rgb *= emission.a * col.a * _Glow * _GlowColor;
col.rgb += emission.rgb;
#endif
#if COLORRAMP_ON && COLORRAMPOUTLINE_ON
luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b;
luminance = saturate(luminance + _ColorRampLuminosity);
#if GRADIENTCOLORRAMP_ON
col.rgb = lerp(col.rgb, ALLIN1_SAMPLE_TEXTURE_2D(_ColorRampTexGradient, half2(luminance, 0)).rgb, _ColorRampBlend);
#else
col.rgb = lerp(col.rgb, ALLIN1_SAMPLE_TEXTURE_2D(_ColorRampTex, half2(luminance, 0)).rgb, _ColorRampBlend);
#endif
#endif
#if GREYSCALE_ON && GREYSCALEOUTLINE_ON
luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b;
luminance = saturate(luminance + _GreyscaleLuminosity);
col.rgb = lerp(col.rgb, half3(luminance, luminance, luminance) * _GreyscaleTintColor, _GreyscaleBlend);
#endif
#if POSTERIZE_ON && POSTERIZEOUTLINE_ON
col.rgb = pow(col.rgb, _PosterizeGamma) * _PosterizeNumColors;
col.rgb = floor(col.rgb) / _PosterizeNumColors;
col.rgb = pow(col.rgb, 1.0 / _PosterizeGamma);
#endif
#if SHINE_ON
half2 uvShine = uvRect;
half cosAngle = cos(_ShineRotate);
half sinAngle = sin(_ShineRotate);
half2x2 rot = half2x2(cosAngle, -sinAngle, sinAngle, cosAngle);
uvShine -= half2(0.5, 0.5);
uvShine = mul(rot, uvShine);
uvShine += half2(0.5, 0.5);
half shineMask = ALLIN1_SAMPLE_TEXTURE_2D(_ShineMask, i.uv).a;
half currentDistanceProjection = (uvShine.x + uvShine.y) / 2;
half whitePower = 1 - (abs(currentDistanceProjection - _ShineLocation) / _ShineWidth);
col.rgb += col.a * whitePower * _ShineGlow * max(sign(currentDistanceProjection - (_ShineLocation - _ShineWidth)), 0.0)
* max(sign((_ShineLocation + _ShineWidth) - currentDistanceProjection), 0.0) * _ShineColor * shineMask;
#endif
#if HOLOGRAM_ON
half totalHologram = _HologramStripesAmount + _HologramUnmodAmount;
half hologramYCoord = ((uvRect.y + (((_Time.x + randomSeed) % 1) * _HologramStripesSpeed)) % totalHologram) / totalHologram;
hologramYCoord = abs(hologramYCoord);
half alpha = RemapFloat(saturate(hologramYCoord - (_HologramUnmodAmount/totalHologram)), 0.0, 1.0, _HologramMinAlpha, saturate(_HologramMaxAlpha));
half hologramMask = max(sign((_HologramUnmodAmount/totalHologram) - hologramYCoord), 0.0);
half4 hologramResult = col;
hologramResult.a *= lerp(alpha, 1, hologramMask);
hologramResult.rgb *= max(1, _HologramMaxAlpha * max(sign(hologramYCoord - (_HologramUnmodAmount/totalHologram)), 0.0));
hologramMask = 1 - step(0.01,hologramMask);
hologramResult.rgb += hologramMask * _HologramStripeColor * col.a;
col = lerp(col, hologramResult, _HologramBlend);
#endif
#if FLICKER_ON
col.a *= saturate(col.a * step(frac(0.05 + (_Time.w + randomSeed) * _FlickerFreq), 1 - _FlickerPercent) + _FlickerAlpha);
#endif
col.a *= _Alpha;
#if ALPHACUTOFF_ON
clip((1 - _AlphaCutoffValue) - (1 - col.a) - 0.01);
#endif
#if ALPHAROUND_ON
col.a = step(_AlphaRoundThreshold, col.a);
#endif
#if ALPHAOUTLINE_ON
half alphaOutlineRes = pow(1 - col.a, max(_AlphaOutlinePower, 0.0001)) * step(_AlphaOutlineMinAlpha, col.a) * _AlphaOutlineBlend;
col.rgb = lerp(col.rgb, _AlphaOutlineColor.rgb * _AlphaOutlineGlow, alphaOutlineRes);
col.a = lerp(col.a, 1, alphaOutlineRes > 1);
#endif
col *= _Color;
originalAlpha = col.a;
half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, i.uv);
mask.rgb *= _LitAmount;
mask = saturate(mask);
SurfaceData2D surfaceData;
InputData2D inputData;
surfaceData.albedo = col.rgb;
surfaceData.alpha = col.a;
surfaceData.mask = mask;
inputData.uv = i.uv;
inputData.lightingUV = i.lightingUV;
half3 lightResult = CombinedShapeLightShared(surfaceData, inputData).rgb;
#if GLOWLIGHT_ON
mask.rgb += mask.rgb;
mask.rgb -= col.rgb;
mask.rgb = saturate(mask.rgb);
col.rgb = lerp(col.rgb, lightResult, mask.rgb);
#else
col.rgb = lightResult;
#endif
return col;
}
#endif //ALLIN1SPRITESHADER_2DRENDERER_FRAGMENTPASS
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 20a889619f1033c4497fa398bd65d8a4
ShaderIncludeImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 156513
packageName: All In 1 Sprite Shader
packageVersion: 4.661
assetPath: Assets/Plugins/AllIn1SpriteShader/Shaders/ShaderLibrary/2DRenderer/AllIn1SpriteShader_2DRenderer_FragmentPass.hlsl
uploadId: 857600
@@ -0,0 +1,405 @@
#ifndef ALLIN1SPRITESHADER_2DRENDERER_NORMALSRENDERINGFRAGMENTPASS
#define ALLIN1SPRITESHADER_2DRENDERER_NORMALSRENDERINGFRAGMENTPASS
float4 NormalsRenderingFragment(FragmentDataNormalsPass i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
half randomSeed = UNITY_ACCESS_INSTANCED_PROP(Props, _RandomSeed);
float texWidth;
float texHeight;
_MainTex.GetDimensions(texWidth, texHeight);
float4 texelSize = float4(1.0 / texWidth, 1 / texHeight, texWidth, texHeight);
float2 uvRect = i.uv;
half2 center = half2(0.5, 0.5);
#if ATLAS_ON
center = half2((_MaxXUV + _MinXUV) / 2.0, (_MaxYUV + _MinYUV) / 2.0);
uvRect = half2((i.uv.x - _MinXUV) / (_MaxXUV - _MinXUV), (i.uv.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
half2 centerTiled = half2(center.x * _MainTex_ScaleAndTiling.x, center.y * _MainTex_ScaleAndTiling.y);
#if CLIPPING_ON
half2 tiledUv = half2(i.uv.x / _MainTex_ScaleAndTiling.x, i.uv.y / _MainTex_ScaleAndTiling.y);
#if ATLAS_ON
tiledUv = half2((tiledUv.x - _MinXUV) / (_MaxXUV - _MinXUV), (tiledUv.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
clip((1 - _ClipUvUp) - tiledUv.y);
clip(tiledUv.y - _ClipUvDown);
clip((1 - _ClipUvRight) - tiledUv.x);
clip(tiledUv.x - _ClipUvLeft);
#endif
#if RADIALCLIPPING_ON
half2 tiledUv2 = half2(i.uv.x / _MainTex_ScaleAndTiling.x, i.uv.y / _MainTex_ScaleAndTiling.y);
#if ATLAS_ON
tiledUv2 = half2((tiledUv2.x - _MinXUV) / (_MaxXUV - _MinXUV), (tiledUv2.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
half startAngle = _RadialStartAngle - _RadialClip;
half endAngle = _RadialStartAngle + _RadialClip2;
half offset0 = clamp(0, 360, startAngle + 360);
half offset360 = clamp(0, 360, endAngle - 360);
half2 atan2Coord = half2(lerp(-1, 1, tiledUv2.x), lerp(-1, 1, tiledUv2.y));
half atanAngle = atan2(atan2Coord.y, atan2Coord.x) * 57.3; // angle in degrees
if(atanAngle < 0) atanAngle = 360 + atanAngle;
if(atanAngle >= startAngle && atanAngle <= endAngle) discard;
if(atanAngle <= offset360) discard;
if(atanAngle >= offset0) discard;
#endif
#if TEXTURESCROLL_ON && ATLAS_ON
i.uv = half2(_MinXUV + ((_MaxXUV - _MinXUV) * (abs(((_Time.y + randomSeed) * _TextureScrollXSpeed) + uvRect.x) % 1)),
_MinYUV + ((_MaxYUV - _MinYUV) * (abs(((_Time.y + randomSeed) * _TextureScrollYSpeed) + uvRect.y) % 1)));
#endif
#if OFFSETUV_ON
#if ATLAS_ON
i.uv = half2(_MinXUV + ((_MaxXUV - _MinXUV) * (abs((_OffsetUvX + uvRect.x) % 1))),
_MinYUV + ((_MaxYUV - _MinYUV) * (abs(_OffsetUvY + uvRect.y) % 1)));
#else
i.uv += half2(_OffsetUvX, _OffsetUvY);
#endif
#endif
#if POLARUV_ON
i.uv = half2(atan2(i.uv.y, i.uv.x) / (2.0f * 3.141592653589f), length(i.uv));
i.uv *= _MainTex_ScaleAndTiling.xy;
#endif
#if TWISTUV_ON
#if ATLAS_ON
_TwistUvPosX = ((_MaxXUV - _MinXUV) * _TwistUvPosX) + _MinXUV;
_TwistUvPosY = ((_MaxYUV - _MinYUV) * _TwistUvPosY) + _MinYUV;
#endif
half2 tempUv = i.uv - half2(_TwistUvPosX * _MainTex_ScaleAndTiling.x, _TwistUvPosY * _MainTex_ScaleAndTiling.y);
_TwistUvRadius *= (_MainTex_ScaleAndTiling.x + _MainTex_ScaleAndTiling.y) / 2;
half percent = (_TwistUvRadius - length(tempUv)) / _TwistUvRadius;
half theta = percent * percent * (2.0 * sin(_TwistUvAmount)) * 8.0;
half s = sin(theta);
half c = cos(theta);
half beta = max(sign(_TwistUvRadius - length(tempUv)), 0.0);
tempUv = half2(dot(tempUv, half2(c, -s)), dot(tempUv, half2(s, c))) * beta + tempUv * (1 - beta);
tempUv += half2(_TwistUvPosX * _MainTex_ScaleAndTiling.x, _TwistUvPosY * _MainTex_ScaleAndTiling.y);
i.uv = tempUv;
#endif
#if FISHEYE_ON
half bind = length(centerTiled);
half2 dF = i.uv - centerTiled;
half dFlen = length(dF);
half fishInt = (3.14159265359 / bind) * (_FishEyeUvAmount + 0.001);
i.uv = centerTiled + (dF / (max(0.0001, dFlen))) * tan(dFlen * fishInt) * bind / tan(bind * fishInt);
#endif
#if PINCH_ON
half2 dP = i.uv - centerTiled;
half pinchInt = (3.141592 / length(centerTiled)) * (-_PinchUvAmount + 0.001);
i.uv = centerTiled + normalize(dP) * atan(length(dP) * -pinchInt * 10.0) * 0.5 / atan(-pinchInt * 5);
#endif
#if ZOOMUV_ON
i.uv -= centerTiled;
i.uv = i.uv * _ZoomUvAmount;
i.uv += centerTiled;
#endif
#if DOODLE_ON
half2 uvCopy = uvRect;
_HandDrawnSpeed = (floor((_Time.x + randomSeed) * 20 * _HandDrawnSpeed) / _HandDrawnSpeed) * _HandDrawnSpeed;
uvCopy.x = sin((uvCopy.x * _HandDrawnAmount + _HandDrawnSpeed) * 4);
uvCopy.y = cos((uvCopy.y * _HandDrawnAmount + _HandDrawnSpeed) * 4);
i.uv = lerp(i.uv, i.uv + uvCopy, 0.0005 * _HandDrawnAmount);
#endif
#if SHAKEUV_ON
half xShake = sin((_Time.x + randomSeed) * _ShakeUvSpeed * 50) * _ShakeUvX;
half yShake = cos((_Time.x + randomSeed) * _ShakeUvSpeed * 50) * _ShakeUvY;
i.uv += half2(xShake * 0.012, yShake * 0.01);
#endif
#if RECTSIZE_ON
i.uv = i.uv.xy * (_RectSize).xx + (((-_RectSize * 0.5) + 0.5)).xx;
#endif
#if DISTORT_ON
#if ATLAS_ON
i.uvDistTex.x = i.uvDistTex.x * (1 / (_MaxXUV - _MinXUV));
i.uvDistTex.y = i.uvDistTex.y * (1 / (_MaxYUV - _MinYUV));
#endif
i.uvDistTex.x += ((_Time.x + randomSeed) * _DistortTexXSpeed) % 1;
i.uvDistTex.y += ((_Time.x + randomSeed) * _DistortTexYSpeed) % 1;
half distortAmnt = (ALLIN1_SAMPLE_TEXTURE_2D(_DistortTex, i.uvDistTex).r - 0.5) * 0.2 * _DistortAmount;
i.uv.x += distortAmnt;
i.uv.y += distortAmnt;
#endif
#if WARP_ON
half2 warpUv = half2(i.uv.x / _MainTex_ScaleAndTiling.x, i.uv.y / _MainTex_ScaleAndTiling.y);
#if ATLAS_ON
warpUv = half2((warpUv.x - _MinXUV) / (_MaxXUV - _MinXUV), (warpUv.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
const float tau = 6.283185307179586;
float xWarp = (_Time.y + randomSeed) * _WarpSpeed + warpUv.x * tau / _WarpScale;
float yWarp = (_Time.y + randomSeed) * _WarpSpeed + warpUv.y * tau / _WarpScale;
float2 warp = float2(sin(xWarp), sin(yWarp)) * _WarpStrength;
i.uv += warp;
#endif
#if WAVEUV_ON
float2 uvWave = half2(_WaveX * _MainTex_ScaleAndTiling.x, _WaveY * _MainTex_ScaleAndTiling.y) - i.uv;
uvWave %= 1;
#if ATLAS_ON
uvWave = half2(_WaveX, _WaveY) - uvRect;
#endif
uvWave.x *= _ScreenParams.x / _ScreenParams.y;
float waveTime = _Time.y + randomSeed;
float angWave = (sqrt(dot(uvWave, uvWave)) * _WaveAmount) - ((waveTime * _WaveSpeed));
i.uv = i.uv + uvWave * sin(angWave) * (_WaveStrength / 1000.0);
#endif
#if ROUNDWAVEUV_ON
half xWave = ((0.5 * _MainTex_ScaleAndTiling.x) - uvRect.x);
half yWave = ((0.5 * _MainTex_ScaleAndTiling.y) - uvRect.y) * (texelSize.w / texelSize.z);
half ripple = -sqrt(xWave*xWave + yWave* yWave);
i.uv += sin((ripple + (_Time.y + randomSeed) * (_RoundWaveSpeed/10.0)) / 0.015) * (_RoundWaveStrength/10.0);
#endif
#if WIND_ON
half windOffset = sin((_Time.x + randomSeed) * _GrassSpeed * 10);
half2 windCenter = half2(0.5, 0.1);
#if ATLAS_ON
windCenter.x = ((_MaxXUV - _MinXUV) * windCenter.x) + _MinXUV;
windCenter.y = ((_MaxYUV - _MinYUV) * windCenter.y) + _MinYUV;
#endif
#if !MANUALWIND_ON
i.uv.x = fmod(abs(lerp(i.uv.x, i.uv.x + (_GrassWind * 0.01 * windOffset), uvRect.y)), 1);
#else
i.uv.x = fmod(abs(lerp(i.uv.x, i.uv.x + (_GrassWind * 0.01 * _GrassManualAnim), uvRect.y)), 1);
windOffset = _GrassManualAnim;
#endif
half2 delta = i.uv - windCenter;
half delta2 = dot(delta.xy, delta.xy);
half2 delta_offset = delta2 * windOffset;
i.uv = i.uv + half2(delta.y, -delta.x) * delta_offset * _GrassRadialBend;
#endif
#if TEXTURESCROLL_ON && !ATLAS_ON
i.uv.x += ((_Time.y + randomSeed) * _TextureScrollXSpeed) % 1;
i.uv.y += ((_Time.y + randomSeed) * _TextureScrollYSpeed) % 1;
#endif
#if PIXELATE_ON
half aspectRatio = texelSize.x / texelSize.y;
half2 pixelSize = float2(_PixelateSize, _PixelateSize * aspectRatio);
i.uv = floor(i.uv * pixelSize) / pixelSize;
#endif
half4 col = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv);
half originalAlpha = col.a;
col *= i.color;
#if PREMULTIPLYALPHA_ON
col.rgb *= col.a;
#endif
#if GLITCH_ON
half2 uvGlitch = uvRect;
uvGlitch.y -= 0.5;
half lineNoise = pow(rand2(floor(uvGlitch * half2(24., 19.) * _GlitchSize) * 4.0, randomSeed, _GlitchSpeed), 3.0) * _GlitchAmount
* pow(rand2(floor(uvGlitch * half2(38., 14.) * _GlitchSize) * 4.0, randomSeed, _GlitchSpeed), 3.0);
col = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + half2(lineNoise * 0.02 * rand2(half2(2.0, 1), randomSeed, _GlitchSpeed), 0)) * i.color;
#endif
#if CHROMABERR_ON
half4 r = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + half2(_ChromAberrAmount/10, 0)) * i.color;
half4 b = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + half2(-_ChromAberrAmount/10, 0)) * i.color;
col = half4(r.r * r.a, col.g, b.b * b.a, max(max(r.a, b.a) * _ChromAberrAlpha, col.a));
#endif
#if BLUR_ON
#if ATLAS_ON
#if !BLURISHD_ON
col = BlurHD(i.uv, _MainTex, sampler_MainTex, _BlurIntensity, (_MaxXUV - _MinXUV), (_MaxYUV - _MinYUV)) * i.color;
#else
col = Blur(i.uv, _MainTex, sampler_MainTex, _BlurIntensity * (_MaxXUV - _MinXUV)) * i.color;
#endif
#else
#if !BLURISHD_ON
col = BlurHD(i.uv, _MainTex, sampler_MainTex, _BlurIntensity, 1, 1) * i.color;
#else
col = Blur(i.uv, _MainTex, sampler_MainTex, _BlurIntensity) * i.color;
#endif
#endif
#endif
half luminance = 0;
#if GHOST_ON
luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b;
half4 ghostResult;
ghostResult.a = saturate(luminance - _GhostTransparency) * col.a;
ghostResult.rgb = col.rgb * (luminance + _GhostColorBoost);
col = lerp(col, ghostResult, _GhostBlend);
#endif
#if OVERLAY_ON
half2 overlayUvs = i.uv;
overlayUvs.x += ((_Time.y + randomSeed) * _OverlayTextureScrollXSpeed) % 1;
overlayUvs.y += ((_Time.y + randomSeed) * _OverlayTextureScrollYSpeed) % 1;
half4 overlayCol = ALLIN1_SAMPLE_TEXTURE_2D(_OverlayTex, CUSTOM_TRANSFORM_TEX(overlayUvs, _OverlayTex_ScaleAndTiling));
overlayCol.rgb *= _OverlayColor.rgb * _OverlayGlow;
#if !OVERLAYMULT_ON
overlayCol.rgb *= overlayCol.a * _OverlayColor.rgb * _OverlayColor.a * _OverlayBlend;
col.rgb += overlayCol.rgb;
#else
overlayCol.a *= _OverlayColor.a;
col = lerp(col, col * overlayCol, _OverlayBlend);
#endif
#endif
//OUTLINE-------------------------------------------------------------
#if OUTBASE_ON
#if OUTBASEPIXELPERF_ON
half2 destUv = half2(_OutlinePixelWidth * texelSize.x, _OutlinePixelWidth * texelSize.y);
#else
half2 destUv = half2(_OutlineWidth * texelSize.x * 200, _OutlineWidth * texelSize.y * 200);
#endif
#if OUTDIST_ON
i.uvOutDistTex.x += ((_Time.x + randomSeed) * _OutlineDistortTexXSpeed) % 1;
i.uvOutDistTex.y += ((_Time.x + randomSeed) * _OutlineDistortTexYSpeed) % 1;
#if ATLAS_ON
i.uvOutDistTex = half2((i.uvOutDistTex.x - _MinXUV) / (_MaxXUV - _MinXUV), (i.uvOutDistTex.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
half outDistortAmnt = (ALLIN1_SAMPLE_TEXTURE_2D(_OutlineDistortTex, i.uvOutDistTex).r - 0.5) * 0.2 * _OutlineDistortAmount;
destUv.x += outDistortAmnt;
destUv.y += outDistortAmnt;
#endif
half spriteLeft = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + half2(destUv.x, 0)).a;
half spriteRight = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv - half2(destUv.x, 0)).a;
half spriteBottom = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + half2(0, destUv.y)).a;
half spriteTop = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv - half2(0, destUv.y)).a;
half result = spriteLeft + spriteRight + spriteBottom + spriteTop;
#if OUTBASE8DIR_ON
half spriteTopLeft = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + half2(destUv.x, destUv.y)).a;
half spriteTopRight = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + half2(-destUv.x, destUv.y)).a;
half spriteBotLeft = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + half2(destUv.x, -destUv.y)).a;
half spriteBotRight = ALLIN1_SAMPLE_TEXTURE_2D(_MainTex, i.uv + half2(-destUv.x, -destUv.y)).a;
result = result + spriteTopLeft + spriteTopRight + spriteBotLeft + spriteBotRight;
#endif
result = step(0.05, saturate(result));
#if OUTTEX_ON
i.uvOutTex.x += ((_Time.x + randomSeed) * _OutlineTexXSpeed) % 1;
i.uvOutTex.y += ((_Time.x + randomSeed) * _OutlineTexYSpeed) % 1;
#if ATLAS_ON
i.uvOutTex = half2((i.uvOutTex.x - _MinXUV) / (_MaxXUV - _MinXUV), (i.uvOutTex.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
half4 tempOutColor = ALLIN1_SAMPLE_TEXTURE_2D(_OutlineTex, i.uvOutTex);
#if OUTGREYTEXTURE_ON
luminance = 0.3 * tempOutColor.r + 0.59 * tempOutColor.g + 0.11 * tempOutColor.b;
tempOutColor = half4(luminance, luminance, luminance, 1);
#endif
tempOutColor *= _OutlineColor;
_OutlineColor = tempOutColor;
#endif
result *= (1 - originalAlpha) * _OutlineAlpha;
half4 outline = _OutlineColor * i.color.a;
outline.rgb *= _OutlineGlow;
outline.a = result;
#if ONLYOUTLINE_ON
col = outline;
#else
col = lerp(col, outline, result);
#endif
#endif
//-----------------------------------------------------------------------------
#if FADE_ON
half2 tiledUvFade1 = CUSTOM_TRANSFORM_TEX(i.uv, _FadeTex_ScaleAndTiling);
half2 tiledUvFade2 = CUSTOM_TRANSFORM_TEX(i.uv, _FadeBurnTex_ScaleAndTiling);
#if ATLAS_ON
tiledUvFade1 = half2((tiledUvFade1.x - _MinXUV) / (_MaxXUV - _MinXUV), (tiledUvFade1.y - _MinYUV) / (_MaxYUV - _MinYUV));
tiledUvFade2 = half2((tiledUvFade2.x - _MinXUV) / (_MaxXUV - _MinXUV), (tiledUvFade2.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
half fadeTemp = ALLIN1_SAMPLE_TEXTURE_2D(_FadeTex, tiledUvFade1).r;
half fade = smoothstep(_FadeAmount, _FadeAmount + _FadeBurnTransition, fadeTemp);
half fadeBurn = saturate(smoothstep(_FadeAmount - _FadeBurnWidth, _FadeAmount - _FadeBurnWidth + 0.1, fadeTemp) * _FadeAmount);
col.a *= fade;
_FadeBurnColor.rgb *= _FadeBurnGlow;
col += fadeBurn * ALLIN1_SAMPLE_TEXTURE_2D(_FadeBurnTex, tiledUvFade2) * _FadeBurnColor * originalAlpha * (1 - col.a);
#endif
#if HOLOGRAM_ON
half totalHologram = _HologramStripesAmount + _HologramUnmodAmount;
half hologramYCoord = ((uvRect.y + (((_Time.x + randomSeed) % 1) * _HologramStripesSpeed)) % totalHologram) / totalHologram;
hologramYCoord = abs(hologramYCoord);
half alpha = RemapFloat(saturate(hologramYCoord - (_HologramUnmodAmount/totalHologram)), 0.0, 1.0, _HologramMinAlpha, saturate(_HologramMaxAlpha));
half hologramMask = max(sign((_HologramUnmodAmount/totalHologram) - hologramYCoord), 0.0);
half4 hologramResult = col;
hologramResult.a *= lerp(alpha, 1, hologramMask);
hologramResult.rgb *= max(1, _HologramMaxAlpha * max(sign(hologramYCoord - (_HologramUnmodAmount/totalHologram)), 0.0));
hologramMask = 1 - step(0.01,hologramMask);
hologramResult.rgb += hologramMask * _HologramStripeColor * col.a;
col = lerp(col, hologramResult, _HologramBlend);
#endif
#if FLICKER_ON
col.a *= saturate(col.a * step(frac(0.05 + (_Time.w + randomSeed) * _FlickerFreq), 1 - _FlickerPercent) + _FlickerAlpha);
#endif
col.a *= _Alpha;
#if ALPHACUTOFF_ON
clip((1 - _AlphaCutoffValue) - (1 - col.a) - 0.01);
#endif
#if ALPHAROUND_ON
col.a = step(_AlphaRoundThreshold, col.a);
#endif
#if ALPHAOUTLINE_ON
half alphaOutlineRes = pow(1 - col.a, max(_AlphaOutlinePower, 0.0001)) * step(_AlphaOutlineMinAlpha, col.a) * _AlphaOutlineBlend;
col.rgb = lerp(col.rgb, _AlphaOutlineColor.rgb * _AlphaOutlineGlow, alphaOutlineRes);
col.a = lerp(col.a, 1, alphaOutlineRes > 1);
#endif
col *= _Color;
originalAlpha = col.a;
half4 normalSample = ALLIN1_SAMPLE_TEXTURE_2D(_NormalMap, i.uv);
#if BLUR_ON
#if !BLURISHD_ON
normalSample = BlurHD(i.uv, _NormalMap, sampler_NormalMap, _BlurIntensity, 1, 1);
#else
normalSample = Blur(i.uv, _NormalMap, sampler_NormalMap, _BlurIntensity);
#endif
#endif
#if MOTIONBLUR_ON
_MotionBlurAngle = _MotionBlurAngle * 3.1415926;
#define rot(n) mul(n, half2x2(cos(_MotionBlurAngle), -sin(_MotionBlurAngle), sin(_MotionBlurAngle), cos(_MotionBlurAngle)))
_MotionBlurDist = _MotionBlurDist * 0.005;
normalSample.rgb += ALLIN1_SAMPLE_TEXTURE_2D(_NormalMap, i.uv + rot(half2(-_MotionBlurDist, -_MotionBlurDist)));
normalSample.rgb += ALLIN1_SAMPLE_TEXTURE_2D(_NormalMap, i.uv + rot(half2(-_MotionBlurDist * 2, -_MotionBlurDist * 2)));
normalSample.rgb += ALLIN1_SAMPLE_TEXTURE_2D(_NormalMap, i.uv + rot(half2(-_MotionBlurDist * 3, -_MotionBlurDist * 3)));
normalSample.rgb += ALLIN1_SAMPLE_TEXTURE_2D(_NormalMap, i.uv + rot(half2(-_MotionBlurDist * 4, -_MotionBlurDist * 4)));
normalSample.rgb += ALLIN1_SAMPLE_TEXTURE_2D(_NormalMap, i.uv + rot(half2(_MotionBlurDist, _MotionBlurDist)));
normalSample.rgb += ALLIN1_SAMPLE_TEXTURE_2D(_NormalMap, i.uv + rot(half2(_MotionBlurDist * 2, _MotionBlurDist * 2)));
normalSample.rgb += ALLIN1_SAMPLE_TEXTURE_2D(_NormalMap, i.uv + rot(half2(_MotionBlurDist * 3, _MotionBlurDist * 3)));
normalSample.rgb += ALLIN1_SAMPLE_TEXTURE_2D(_NormalMap, i.uv + rot(half2(_MotionBlurDist * 4, _MotionBlurDist * 4)));
normalSample.rgb = normalSample.rgb / 9;
#endif
half3 normalTS = UnpackNormal(normalSample);
normalTS.xy *= _NormalStrength;
return NormalsRenderingShared(col, normalTS, i.tangentWS.xyz, i.bitangentWS.xyz, i.normalWS.xyz);
}
#endif //ALLIN1SPRITESHADER_2DRENDERER_NORMALSRENDERINGFRAGMENTPASS
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: b4b37519e6c679e49b918bbb9e1ee73a
ShaderIncludeImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 156513
packageName: All In 1 Sprite Shader
packageVersion: 4.661
assetPath: Assets/Plugins/AllIn1SpriteShader/Shaders/ShaderLibrary/2DRenderer/AllIn1SpriteShader_2DRenderer_NormalsRenderingFragmentPass.hlsl
uploadId: 857600
@@ -0,0 +1,68 @@
#ifndef ALLIN1SPRITESHADER_2DRENDERER_NORMALSRENDERINGVERTEXPASS
#define ALLIN1SPRITESHADER_2DRENDERER_NORMALSRENDERINGVERTEXPASS
FragmentDataNormalsPass NormalsRenderingVertex(VertexDataNormalsPass v)
{
#if RECTSIZE_ON
v.vertex.xyz += (v.vertex.xyz * (_RectSize - 1.0));
#endif
FragmentDataNormalsPass o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_TRANSFER_INSTANCE_ID(v, o);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
#if BILBOARD_ON
half3 camRight = mul((half3x3)unity_CameraToWorld, half3(1,0,0));
half3 camUp = half3(0,1,0);
#if BILBOARDY_ON
camUp = mul((half3x3)unity_CameraToWorld, half3(0,1,0));
#endif
half3 localPos = v.vertex.x * camRight + v.vertex.y * camUp;
o.vertex = TransformObjectToHClip(localPos);
#else
o.vertex = TransformObjectToHClip(v.vertex.xyz);
#endif
o.uv = /*TRANSFORM_TEX(v.uv, _MainTex);*/v.uv * _MainTex_ScaleAndTiling.xy + _MainTex_ScaleAndTiling.zw;
o.color = v.color;
half2 center = half2(0.5, 0.5);
#if ATLAS_ON
center = half2((_MaxXUV + _MinXUV) / 2.0, (_MaxYUV + _MinYUV) / 2.0);
#endif
#if POLARUV_ON
o.uv = v.uv - center;
#endif
#if ROTATEUV_ON
half2 uvC = v.uv;
half cosAngle = cos(_RotateUvAmount);
half sinAngle = sin(_RotateUvAmount);
half2x2 rot = half2x2(cosAngle, -sinAngle, sinAngle, cosAngle);
uvC -= center;
o.uv = mul(rot, uvC);
o.uv += center;
#endif
#if OUTTEX_ON
o.uvOutTex = CUSTOM_TRANSFORM_TEX(v.uv, _OutlineTex_ScaleAndTiling);
#endif
#if OUTDIST_ON
o.uvOutDistTex = CUSTOM_TRANSFORM_TEX(v.uv, _OutlineDistortTex_ScaleAndTiling);
#endif
#if DISTORT_ON
o.uvDistTex = CUSTOM_TRANSFORM_TEX(v.uv, _DistortTex_ScaleAndTiling);
#endif
o.normalWS = -GetViewForwardDir();
o.tangentWS = TransformObjectToWorldDir(v.tangent.xyz);
o.bitangentWS = cross(o.normalWS, o.tangentWS) * v.tangent.w;
return o;
}
#endif //ALLIN1SPRITESHADER_2DRENDERER_NORMALSRENDERINGVERTEXPASS
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: dd224f68ca07bc8428b37ddc8044f25b
ShaderIncludeImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 156513
packageName: All In 1 Sprite Shader
packageVersion: 4.661
assetPath: Assets/Plugins/AllIn1SpriteShader/Shaders/ShaderLibrary/2DRenderer/AllIn1SpriteShader_2DRenderer_NormalsRenderingVertexPass.hlsl
uploadId: 857600
@@ -0,0 +1,197 @@
#ifndef ALLIN1SPRITESHADER_2DRENDERER_PROPERTIES
#define ALLIN1SPRITESHADER_2DRENDERER_PROPERTIES
CBUFFER_START(UnityPerMaterial)
half4 /*_MainTex_ST, _MainTex_TexelSize,*/ _Color;
float4 _MainTex_ScaleAndTiling;
half _Alpha;
half _LitAmount;
half _NormalStrength;
half _MinXUV, _MaxXUV, _MinYUV, _MaxYUV;
half _RectSize;
half _OffsetUvX, _OffsetUvY;
half _ClipUvLeft, _ClipUvRight, _ClipUvUp, _ClipUvDown;
half _RadialStartAngle, _RadialClip, _RadialClip2;
half _TwistUvAmount, _TwistUvPosX, _TwistUvPosY, _TwistUvRadius;
half _RotateUvAmount;
half _FishEyeUvAmount;
half _PinchUvAmount;
half _HandDrawnAmount, _HandDrawnSpeed;
half _ShakeUvSpeed, _ShakeUvX, _ShakeUvY;
float _WaveAmount, _WaveSpeed, _WaveStrength, _WaveX, _WaveY;
half _RoundWaveStrength, _RoundWaveSpeed;
half _ZoomUvAmount;
half4 _FadeBurnColor; /*_FadeTex_ST,*/ /*_FadeBurnTex_ST*/
float4 _FadeTex_ScaleAndTiling, _FadeBurnTex_ScaleAndTiling;
half _FadeAmount, _FadeBurnWidth, _FadeBurnTransition, _FadeBurnGlow;
half _TextureScrollXSpeed, _TextureScrollYSpeed;
half4 _GlowColor;
half _Glow, _GlowGlobal;
half4 _OutlineColor;
half _OutlineAlpha, _OutlineGlow, _OutlineWidth;
int _OutlinePixelWidth;
//half4 _OutlineTex_ST;
float4 _OutlineTex_ScaleAndTiling;
half _OutlineTexXSpeed, _OutlineTexYSpeed;
//half4 _OutlineDistortTex_ST;
float4 _OutlineDistortTex_ScaleAndTiling;
half _OutlineDistortTexXSpeed, _OutlineDistortTexYSpeed, _OutlineDistortAmount;
//half4 _DistortTex_ST;
float4 _DistortTex_ScaleAndTiling;
half _DistortTexXSpeed, _DistortTexYSpeed, _DistortAmount;
half _WarpStrength, _WarpSpeed, _WarpScale;
half _GrassSpeed, _GrassWind, _GrassManualAnim, _GrassRadialBend;
half _GradBlend, _GradBoostX, _GradBoostY;
half4 _GradTopRightCol, _GradTopLeftCol, _GradBotRightCol, _GradBotLeftCol;
half4 _ColorSwapRed, _ColorSwapGreen, _ColorSwapBlue;
half _ColorSwapRedLuminosity, _ColorSwapGreenLuminosity, _ColorSwapBlueLuminosity, _ColorSwapBlend;
half _HsvShift, _HsvSaturation, _HsvBright;
half4 _HitEffectColor;
half _HitEffectGlow, _HitEffectBlend;
half _PixelateSize;
half _NegativeAmount;
half _ColorRampLuminosity, _ColorRampBlend;
half _GreyscaleLuminosity, _GreyscaleBlend;
half4 _GreyscaleTintColor;
half _PosterizeNumColors, _PosterizeGamma;
half _BlurIntensity;
half _MotionBlurAngle, _MotionBlurDist;
half _GhostColorBoost, _GhostTransparency, _GhostBlend;
half _AlphaOutlineGlow, _AlphaOutlinePower, _AlphaOutlineMinAlpha, _AlphaOutlineBlend;
half4 _AlphaOutlineColor;
half _InnerOutlineThickness, _InnerOutlineAlpha, _InnerOutlineGlow;
half4 _InnerOutlineColor;
half _HologramStripesAmount, _HologramMinAlpha, _HologramUnmodAmount, _HologramStripesSpeed, _HologramMaxAlpha, _HologramBlend;
half4 _HologramStripeColor;
half _ChromAberrAmount, _ChromAberrAlpha;
half _GlitchAmount, _GlitchSize, _GlitchSpeed;
half _FlickerFreq, _FlickerPercent, _FlickerAlpha;
half _ShadowX, _ShadowY, _ShadowAlpha;
half4 _ShadowColor;
half4 _ShineColor;
half _ShineLocation, _ShineRotate, _ShineWidth, _ShineGlow;
half _AlphaCutoffValue;
half _AlphaRoundThreshold;
half4 _ColorChangeNewCol, _ColorChangeTarget;
half _ColorChangeTolerance, _ColorChangeLuminosity;
half4 _ColorChangeNewCol2, _ColorChangeTarget2;
half _ColorChangeTolerance2;
half4 _ColorChangeNewCol3, _ColorChangeTarget3;
half _ColorChangeTolerance3;
half _Contrast, _Brightness;
//half4 _OverlayTex_ST;
float4 _OverlayTex_ScaleAndTiling;
float4 _OverlayColor;
half _OverlayGlow, _OverlayBlend, _OverlayTextureScrollXSpeed, _OverlayTextureScrollYSpeed;
float _RandomSeed;
CBUFFER_END
#define CUSTOM_TRANSFORM_TEX(uv, st) uv * st.xy + st.zw
#define GET_PIXEL(offsetX, offsetY, uv, tex, texelSize) SAMPLE_TEXTURE2D(tex, sampler##tex, uv + half2(offsetX * texelSize.x, offsetY * texelSize.y)).rgb
#define DECLARE_TEX_AND_SAMPLER(texName) \
TEXTURE2D(texName);\
SAMPLER(sampler##texName);
DECLARE_TEX_AND_SAMPLER(_MainTex)
DECLARE_TEX_AND_SAMPLER(_MaskTex)
DECLARE_TEX_AND_SAMPLER(_NormalMap)
#if FADE_ON
DECLARE_TEX_AND_SAMPLER(_FadeTex)
DECLARE_TEX_AND_SAMPLER(_FadeBurnTex)
#endif
#if GLOW_ON
DECLARE_TEX_AND_SAMPLER(_GlowTex)
//sampler2D _GlowTex;
#endif
#if OUTTEX_ON
DECLARE_TEX_AND_SAMPLER(_OutlineTex)
#endif
#if OUTDIST_ON
DECLARE_TEX_AND_SAMPLER(_OutlineDistortTex)
//sampler2D _OutlineDistortTex;
#endif
#if DISTORT_ON
DECLARE_TEX_AND_SAMPLER(_DistortTex)
//sampler2D _DistortTex;
#endif
#if COLORSWAP_ON
DECLARE_TEX_AND_SAMPLER(_ColorSwapTex)
#endif
#if COLORRAMP_ON
DECLARE_TEX_AND_SAMPLER(_ColorRampTex)
DECLARE_TEX_AND_SAMPLER(_ColorRampTexGradient)
#endif
#if SHINE_ON
DECLARE_TEX_AND_SAMPLER(_ShineMask)
#endif
#if OVERLAY_ON
DECLARE_TEX_AND_SAMPLER(_OverlayTex)
#endif
#endif //ALLIN1SPRITESHADER_2DRENDERER_PROPERTIES
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 2f5083985f9a1da43a7ce65b4add999a
ShaderIncludeImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 156513
packageName: All In 1 Sprite Shader
packageVersion: 4.661
assetPath: Assets/Plugins/AllIn1SpriteShader/Shaders/ShaderLibrary/2DRenderer/AllIn1SpriteShader_2DRenderer_Properties.hlsl
uploadId: 857600
@@ -0,0 +1,76 @@
#ifndef ALLIN1SPRITESHADER_2DRENDERER_SHADERFEATURES
#define ALLIN1SPRITESHADER_2DRENDERER_SHADERFEATURES
#pragma shader_feature_local GLOWLIGHT_ON
#pragma shader_feature_local GLOW_ON
#pragma shader_feature_local FADE_ON
#pragma shader_feature_local OUTBASE_ON
#pragma shader_feature_local ONLYOUTLINE_ON
#pragma shader_feature_local GRADIENT_ON
#pragma shader_feature_local GRADIENT2COL_ON
#pragma shader_feature_local RADIALGRADIENT_ON
#pragma shader_feature_local COLORSWAP_ON
#pragma shader_feature_local HSV_ON
#pragma shader_feature_local CHANGECOLOR_ON
#pragma shader_feature_local CHANGECOLOR2_ON
#pragma shader_feature_local CHANGECOLOR3_ON
#pragma shader_feature_local COLORRAMP_ON
#pragma shader_feature_local GRADIENTCOLORRAMP_ON
#pragma shader_feature_local HITEFFECT_ON
#pragma shader_feature_local NEGATIVE_ON
#pragma shader_feature_local PIXELATE_ON
#pragma shader_feature_local GREYSCALE_ON
#pragma shader_feature_local POSTERIZE_ON
#pragma shader_feature_local BLUR_ON
#pragma shader_feature_local MOTIONBLUR_ON
#pragma shader_feature_local GHOST_ON
#pragma shader_feature_local ALPHAOUTLINE_ON
#pragma shader_feature_local INNEROUTLINE_ON
#pragma shader_feature_local ONLYINNEROUTLINE_ON
#pragma shader_feature_local HOLOGRAM_ON
#pragma shader_feature_local CHROMABERR_ON
#pragma shader_feature_local GLITCH_ON
#pragma shader_feature_local FLICKER_ON
#pragma shader_feature_local SHADOW_ON
#pragma shader_feature_local SHINE_ON
#pragma shader_feature_local CONTRAST_ON
#pragma shader_feature_local OVERLAY_ON
#pragma shader_feature_local OVERLAYMULT_ON
#pragma shader_feature_local ALPHACUTOFF_ON
#pragma shader_feature_local ALPHAROUND_ON
#pragma shader_feature_local DOODLE_ON
#pragma shader_feature_local WIND_ON
#pragma shader_feature_local WAVEUV_ON
#pragma shader_feature_local ROUNDWAVEUV_ON
#pragma shader_feature_local RECTSIZE_ON
#pragma shader_feature_local OFFSETUV_ON
#pragma shader_feature_local CLIPPING_ON
#pragma shader_feature_local RADIALCLIPPING_ON
#pragma shader_feature_local TEXTURESCROLL_ON
#pragma shader_feature_local ZOOMUV_ON
#pragma shader_feature_local DISTORT_ON
#pragma shader_feature_local WARP_ON
#pragma shader_feature_local TWISTUV_ON
#pragma shader_feature_local ROTATEUV_ON
#pragma shader_feature_local POLARUV_ON
#pragma shader_feature_local FISHEYE_ON
#pragma shader_feature_local PINCH_ON
#pragma shader_feature_local SHAKEUV_ON
#pragma shader_feature_local GLOWTEX_ON
#pragma shader_feature_local OUTTEX_ON
#pragma shader_feature_local OUTDIST_ON
#pragma shader_feature_local OUTBASE8DIR_ON
#pragma shader_feature_local OUTBASEPIXELPERF_ON
#pragma shader_feature_local COLORRAMPOUTLINE_ON
#pragma shader_feature_local GREYSCALEOUTLINE_ON
#pragma shader_feature_local POSTERIZEOUTLINE_ON
#pragma shader_feature_local BLURISHD_ON
#pragma shader_feature_local MANUALWIND_ON
#pragma shader_feature_local ATLAS_ON
#pragma shader_feature_local PREMULTIPLYALPHA_ON
#pragma shader_feature_local BILBOARD_ON
#pragma shader_feature_local BILBOARDY_ON
#endif //ALLIN1SPRITESHADER_2DRENDERER_SHADERFEATURES
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: fa43e9272d7e9da4895de72a2c8e0331
ShaderIncludeImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 156513
packageName: All In 1 Sprite Shader
packageVersion: 4.661
assetPath: Assets/Plugins/AllIn1SpriteShader/Shaders/ShaderLibrary/2DRenderer/AllIn1SpriteShader_2DRenderer_ShaderFeatures.hlsl
uploadId: 857600
@@ -0,0 +1,63 @@
#ifndef ALLIN1SPRITESHADER_2DRENDERER_STRUCTS
#define ALLIN1SPRITESHADER_2DRENDERER_STRUCTS
struct Attributes
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
half4 color : COLOR;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
half4 color : COLOR;
float2 lightingUV : TEXCOORD1;
#if OUTTEX_ON
half2 uvOutTex : TEXCOORD2;
#endif
#if OUTDIST_ON
half2 uvOutDistTex : TEXCOORD3;
#endif
#if DISTORT_ON
half2 uvDistTex : TEXCOORD4;
#endif
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
struct VertexDataNormalsPass
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
half4 color : COLOR;
half4 tangent : TANGENT;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct FragmentDataNormalsPass
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
half4 color : COLOR;
half3 normalWS : TEXCOORD1;
half3 tangentWS : TEXCOORD2;
half3 bitangentWS : TEXCOORD3;
#if OUTTEX_ON
half2 uvOutTex : TEXCOORD4;
#endif
#if OUTDIST_ON
half2 uvOutDistTex : TEXCOORD5;
#endif
#if DISTORT_ON
half2 uvDistTex : TEXCOORD6;
#endif
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
#endif //ALLIN1SPRITESHADER_2DRENDERER_STRUCTS
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 588186a477d7f5a469575ff210c49efa
ShaderIncludeImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 156513
packageName: All In 1 Sprite Shader
packageVersion: 4.661
assetPath: Assets/Plugins/AllIn1SpriteShader/Shaders/ShaderLibrary/2DRenderer/AllIn1SpriteShader_2DRenderer_Structs.hlsl
uploadId: 857600
@@ -0,0 +1,78 @@
#ifndef ALLIN1SPRITESHADER_2DRENDERER_VERTEXPASS
#define ALLIN1SPRITESHADER_2DRENDERER_VERTEXPASS
v2f CombinedShapeLightVertex(Attributes v)
{
#if RECTSIZE_ON
v.vertex.xyz += (v.vertex.xyz * (_RectSize - 1.0));
#endif
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_TRANSFER_INSTANCE_ID(v, o);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
#if BILBOARD_ON
half3 camRight = mul((half3x3)unity_CameraToWorld, half3(1,0,0));
half3 camUp = half3(0,1,0);
#if BILBOARDY_ON
camUp = mul((half3x3)unity_CameraToWorld, half3(0,1,0));
#endif
half3 localPos = v.vertex.x * camRight + v.vertex.y * camUp;
#if UNITY_VERSION >= 60000000
localPos.xy *= unity_SpriteProps.xy;
#endif
o.vertex = TransformObjectToHClip(localPos);
#else
half3 localPos = v.vertex.xyz;
#if UNITY_VERSION >= 60000000
localPos.xy *= unity_SpriteProps.xy;
#endif
o.vertex = TransformObjectToHClip(localPos);
#endif
o.uv = /*TRANSFORM_TEX(v.uv, _MainTex);*/v.uv * _MainTex_ScaleAndTiling.xy + _MainTex_ScaleAndTiling.zw;
o.color = v.color;
#if UNITY_VERSION >= 60000000
o.color *= unity_SpriteColor;
#endif
half2 center = half2(0.5, 0.5);
#if ATLAS_ON
center = half2((_MaxXUV + _MinXUV) / 2.0, (_MaxYUV + _MinYUV) / 2.0);
#endif
#if POLARUV_ON
o.uv = v.uv - center;
#endif
#if ROTATEUV_ON
half2 uvC = v.uv;
half cosAngle = cos(_RotateUvAmount);
half sinAngle = sin(_RotateUvAmount);
half2x2 rot = half2x2(cosAngle, -sinAngle, sinAngle, cosAngle);
uvC -= center;
o.uv = mul(rot, uvC);
o.uv += center;
#endif
#if OUTTEX_ON
o.uvOutTex = CUSTOM_TRANSFORM_TEX(v.uv, _OutlineTex_ScaleAndTiling);
#endif
#if OUTDIST_ON
o.uvOutDistTex = CUSTOM_TRANSFORM_TEX(v.uv, _OutlineDistortTex_ScaleAndTiling);
#endif
#if DISTORT_ON
o.uvDistTex = CUSTOM_TRANSFORM_TEX(v.uv, _DistortTex_ScaleAndTiling);
#endif
half4 clipVertex = o.vertex / o.vertex.w;
o.lightingUV = ComputeScreenPos(clipVertex).xy;
return o;
}
#endif //ALLIN1SPRITESHADER_2DRENDERER_VERTEXPASS
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: a3d20933a82e6e5458ed3502ae2dbebb
ShaderIncludeImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 156513
packageName: All In 1 Sprite Shader
packageVersion: 4.661
assetPath: Assets/Plugins/AllIn1SpriteShader/Shaders/ShaderLibrary/2DRenderer/AllIn1SpriteShader_2DRenderer_VertexPass.hlsl
uploadId: 857600
@@ -0,0 +1,76 @@
#ifndef ALLIN1SPRITESHADERSRP_COMMONFUNCTIONS
#define ALLIN1SPRITESHADERSRP_COMMONFUNCTIONS
//Prevent Unity warnings that are not relevant for this shader-------------------
#pragma warning (disable : 3571) // pow(f, e) will not work for negative f, use abs(f) or conditionally handle negative values if you expect them
#pragma warning (disable : 4008) // floating point division by zero
#pragma warning (disable : 3206) // implicit truncation of vector type
//BLURS-------------------------------------------------------------------------
half4 Blur(half2 uv, Texture2D source, SamplerState texSampler, half Intensity)
{
const half2 texelSize = 1.0 / _ScreenParams.xy;
const half4 color = SAMPLE_TEXTURE2D(source, texSampler, uv);
const half2 offset = Intensity * texelSize;
half4 accumulatedColor = color;
half accumulatedWeight = 1.0;
for (int x = -1; x <= 1; x++)
{
for (int y = -1; y <= 1; y++)
{
const half2 sampleUV = uv + half2(x, y) * offset;
const half4 sampleColor = SAMPLE_TEXTURE2D(source, texSampler, sampleUV);
accumulatedColor += sampleColor;
accumulatedWeight += 1.0;
}
}
half4 blurredColor = accumulatedColor / accumulatedWeight;
return blurredColor;
}
half BlurHD_G(half bhqp, half x)
{
return exp(-(x * x) / (2.0 * bhqp * bhqp));
}
half4 BlurHD(half2 uv, Texture2D source, SamplerState texSampler, half BlurAmount, half xScale, half yScale)
{
int iterations = 16;
int halfIterations = iterations / 2;
half sigmaX = 0.1 + BlurAmount * 0.5;
half sigmaY = sigmaX;
half total = 0.0;
half4 ret = half4(0, 0, 0, 0);
for (int iy = 0; iy < iterations; ++iy)
{
half fy = BlurHD_G(sigmaY, half(iy) -half(halfIterations));
half offsetY = half(iy - halfIterations) * 0.00390625 * xScale;
for (int ix = 0; ix < iterations; ++ix)
{
half fx = BlurHD_G(sigmaX, half(ix) - half(halfIterations));
half offsetX = half(ix - halfIterations) * 0.00390625 * yScale;
total += fx * fy;
ret += SAMPLE_TEXTURE2D(source, texSampler, uv + half2(offsetX, offsetY)) * fx * fy;
}
}
return ret / total;
}
//-----------------------------------------------------------------------
half rand(half2 seed, half offset) {
return (frac(sin(dot(seed, half2(12.9898, 78.233))) * 43758.5453) + offset) % 1.0;
}
half rand2(half2 seed, half offset, half speed) {
return (frac(sin(dot(seed * floor(50 + (_Time.x % 1.0) * 12. * speed), half2(127.1, 311.7))) * 43758.5453123) + offset) % 1.0;
}
half rand2CustomTime(half2 seed, half offset, half customTime, half speed) {
return (frac(sin(dot(seed * floor(50 + (customTime % 1.0) * 12. * speed), half2(127.1, 311.7))) * 43758.5453123) + offset) % 1.0;
}
//-----------------------------------------------------------------------
half RemapFloat(half inValue, half inMin, half inMax, half outMin, half outMax){
return outMin + (inValue - inMin) * (outMax - outMin) / (inMax - inMin);
}
#endif
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 13806bf35145bcd46a31f91837eda276
ShaderIncludeImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 156513
packageName: All In 1 Sprite Shader
packageVersion: 4.661
assetPath: Assets/Plugins/AllIn1SpriteShader/Shaders/ShaderLibrary/AllIn1SpriteShaderSRP_CommonFunctions.hlsl
uploadId: 857600
@@ -0,0 +1,573 @@
#ifndef ALLIN1SPRITESHADERSRP_FRAGMENTPASS
#define ALLIN1SPRITESHADERSRP_FRAGMENTPASS
half4 frag(v2f i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
//half randomSeed = UNITY_ACCESS_INSTANCED_PROP(Props, _RandomSeed);
float randomSeed = _RandomSeed;
float texWidth;
float texHeight;
_MainTex.GetDimensions(texWidth, texHeight);
float4 texelSize = float4(1.0 / texWidth, 1 / texHeight, texWidth, texHeight);
float2 uvRect = i.uv;
half2 center = half2(0.5, 0.5);
#if ATLAS_ON
center = half2((_MaxXUV + _MinXUV) / 2.0, (_MaxYUV + _MinYUV) / 2.0);
uvRect = half2((i.uv.x - _MinXUV) / (_MaxXUV - _MinXUV), (i.uv.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
half2 centerTiled = half2(center.x * _MainTex_ScaleAndTiling.x, center.y * _MainTex_ScaleAndTiling.y);
#if CLIPPING_ON
half2 tiledUv = half2(i.uv.x / _MainTex_ScaleAndTiling.x, i.uv.y / _MainTex_ScaleAndTiling.y);
#if ATLAS_ON
tiledUv = half2((tiledUv.x - _MinXUV) / (_MaxXUV - _MinXUV), (tiledUv.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
clip((1 - _ClipUvUp) - tiledUv.y);
clip(tiledUv.y - _ClipUvDown);
clip((1 - _ClipUvRight) - tiledUv.x);
clip(tiledUv.x - _ClipUvLeft);
#endif
#if RADIALCLIPPING_ON
half2 tiledUv2 = half2(i.uv.x / _MainTex_ScaleAndTiling.x, i.uv.y / _MainTex_ScaleAndTiling.y);
#if ATLAS_ON
tiledUv2 = half2((tiledUv2.x - _MinXUV) / (_MaxXUV - _MinXUV), (tiledUv2.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
half startAngle = _RadialStartAngle - _RadialClip;
half endAngle = _RadialStartAngle + _RadialClip2;
half offset0 = clamp(0, 360, startAngle + 360);
half offset360 = clamp(0, 360, endAngle - 360);
half2 atan2Coord = half2(lerp(-1, 1, tiledUv2.x), lerp(-1, 1, tiledUv2.y));
half atanAngle = atan2(atan2Coord.y, atan2Coord.x) * 57.3; // angle in degrees
if(atanAngle < 0) atanAngle = 360 + atanAngle;
if(atanAngle >= startAngle && atanAngle <= endAngle) discard;
if(atanAngle <= offset360) discard;
if(atanAngle >= offset0) discard;
#endif
#if TEXTURESCROLL_ON && ATLAS_ON
i.uv = half2(_MinXUV + ((_MaxXUV - _MinXUV) * (abs(((_Time.y + randomSeed) * _TextureScrollXSpeed) + uvRect.x) % 1)),
_MinYUV + ((_MaxYUV - _MinYUV) * (abs(((_Time.y + randomSeed) * _TextureScrollYSpeed) + uvRect.y) % 1)));
#endif
#if OFFSETUV_ON
#if ATLAS_ON
i.uv = half2(_MinXUV + ((_MaxXUV - _MinXUV) * (abs((_OffsetUvX + uvRect.x) % 1))),
_MinYUV + ((_MaxYUV - _MinYUV) * (abs(_OffsetUvY + uvRect.y) % 1)));
#else
i.uv += half2(_OffsetUvX, _OffsetUvY);
#endif
#endif
#if POLARUV_ON
i.uv = half2(atan2(i.uv.y, i.uv.x) / (2.0f * 3.141592653589f), length(i.uv));
i.uv *= _MainTex_ScaleAndTiling.xy;
#endif
#if TWISTUV_ON
#if ATLAS_ON
_TwistUvPosX = ((_MaxXUV - _MinXUV) * _TwistUvPosX) + _MinXUV;
_TwistUvPosY = ((_MaxYUV - _MinYUV) * _TwistUvPosY) + _MinYUV;
#endif
half2 tempUv = i.uv - half2(_TwistUvPosX * _MainTex_ScaleAndTiling.x, _TwistUvPosY * _MainTex_ScaleAndTiling.y);
_TwistUvRadius *= (_MainTex_ScaleAndTiling.x + _MainTex_ScaleAndTiling.y) / 2;
half percent = (_TwistUvRadius - length(tempUv)) / _TwistUvRadius;
half theta = percent * percent * (2.0 * sin(_TwistUvAmount)) * 8.0;
half s = sin(theta);
half c = cos(theta);
half beta = max(sign(_TwistUvRadius - length(tempUv)), 0.0);
tempUv = half2(dot(tempUv, half2(c, -s)), dot(tempUv, half2(s, c))) * beta + tempUv * (1 - beta);
tempUv += half2(_TwistUvPosX * _MainTex_ScaleAndTiling.x, _TwistUvPosY * _MainTex_ScaleAndTiling.y);
i.uv = tempUv;
#endif
#if FISHEYE_ON
half bind = length(centerTiled);
half2 dF = i.uv - centerTiled;
half dFlen = length(dF);
half fishInt = (3.14159265359 / bind) * (_FishEyeUvAmount + 0.001);
i.uv = centerTiled + (dF / (max(0.0001, dFlen))) * tan(dFlen * fishInt) * bind / tan(bind * fishInt);
#endif
#if PINCH_ON
half2 dP = i.uv - centerTiled;
half pinchInt = (3.141592 / length(centerTiled)) * (-_PinchUvAmount + 0.001);
i.uv = centerTiled + normalize(dP) * atan(length(dP) * -pinchInt * 10.0) * 0.5 / atan(-pinchInt * 5);
#endif
#if ZOOMUV_ON
i.uv -= centerTiled;
i.uv = i.uv * _ZoomUvAmount;
i.uv += centerTiled;
#endif
#if DOODLE_ON
half2 uvCopy = uvRect;
_HandDrawnSpeed = (floor((_Time.x + randomSeed) * 20 * _HandDrawnSpeed) / _HandDrawnSpeed) * _HandDrawnSpeed;
uvCopy.x = sin((uvCopy.x * _HandDrawnAmount + _HandDrawnSpeed) * 4);
uvCopy.y = cos((uvCopy.y * _HandDrawnAmount + _HandDrawnSpeed) * 4);
i.uv = lerp(i.uv, i.uv + uvCopy, 0.0005 * _HandDrawnAmount);
#endif
#if SHAKEUV_ON
half xShake = sin((_Time.x + randomSeed) * _ShakeUvSpeed * 50) * _ShakeUvX;
half yShake = cos((_Time.x + randomSeed) * _ShakeUvSpeed * 50) * _ShakeUvY;
i.uv += half2(xShake * 0.012, yShake * 0.01);
#endif
#if RECTSIZE_ON
i.uv = i.uv.xy * (_RectSize).xx + (((-_RectSize * 0.5) + 0.5)).xx;
#endif
#if DISTORT_ON
#if ATLAS_ON
i.uvDistTex.x = i.uvDistTex.x * (1 / (_MaxXUV - _MinXUV));
i.uvDistTex.y = i.uvDistTex.y * (1 / (_MaxYUV - _MinYUV));
#endif
i.uvDistTex.x += ((_Time.x + randomSeed) * _DistortTexXSpeed) % 1;
i.uvDistTex.y += ((_Time.x + randomSeed) * _DistortTexYSpeed) % 1;
half distortAmnt = (SAMPLE_TEXTURE2D(_DistortTex, sampler_DistortTex, i.uvDistTex).r - 0.5) * 0.2 * _DistortAmount;
i.uv.x += distortAmnt;
i.uv.y += distortAmnt;
#endif
#if WARP_ON
half2 warpUv = half2(i.uv.x / _MainTex_ScaleAndTiling.x, i.uv.y / _MainTex_ScaleAndTiling.y);
#if ATLAS_ON
warpUv = half2((warpUv.x - _MinXUV) / (_MaxXUV - _MinXUV), (warpUv.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
const float tau = 6.283185307179586;
float xWarp = (_Time.y + randomSeed) * _WarpSpeed + warpUv.x * tau / _WarpScale;
float yWarp = (_Time.y + randomSeed) * _WarpSpeed + warpUv.y * tau / _WarpScale;
float2 warp = float2(sin(xWarp), sin(yWarp)) * _WarpStrength;
i.uv += warp;
#endif
#if WAVEUV_ON
float2 uvWave = half2(_WaveX * _MainTex_ScaleAndTiling.x, _WaveY * _MainTex_ScaleAndTiling.y) - i.uv;
uvWave %= 1;
#if ATLAS_ON
uvWave = half2(_WaveX, _WaveY) - uvRect;
#endif
uvWave.x *= _ScreenParams.x / _ScreenParams.y;
float waveTime = _Time.y + randomSeed;
float angWave = (sqrt(dot(uvWave, uvWave)) * _WaveAmount) - ((waveTime * _WaveSpeed));
i.uv = i.uv + uvWave * sin(angWave) * (_WaveStrength / 1000.0);
#endif
#if ROUNDWAVEUV_ON
half xWave = ((0.5 * _MainTex_ScaleAndTiling.x) - uvRect.x);
half yWave = ((0.5 * _MainTex_ScaleAndTiling.y) - uvRect.y) * (texelSize.w / texelSize.z);
half ripple = -sqrt(xWave*xWave + yWave* yWave);
i.uv += (sin((ripple + (_Time.y + randomSeed) * (_RoundWaveSpeed/10.0)) / 0.015) * (_RoundWaveStrength/10.0)) % 1;
#endif
#if WIND_ON
half windOffset = sin((_Time.x + randomSeed) * _GrassSpeed * 10);
half2 windCenter = half2(0.5, 0.1);
#if ATLAS_ON
windCenter.x = ((_MaxXUV - _MinXUV) * windCenter.x) + _MinXUV;
windCenter.y = ((_MaxYUV - _MinYUV) * windCenter.y) + _MinYUV;
#endif
#if !MANUALWIND_ON
i.uv.x = fmod(abs(lerp(i.uv.x, i.uv.x + (_GrassWind * 0.01 * windOffset), uvRect.y)), 1);
#else
i.uv.x = fmod(abs(lerp(i.uv.x, i.uv.x + (_GrassWind * 0.01 * _GrassManualAnim), uvRect.y)), 1);
windOffset = _GrassManualAnim;
#endif
half2 delta = i.uv - windCenter;
half delta2 = dot(delta.xy, delta.xy);
half2 delta_offset = delta2 * windOffset;
i.uv = i.uv + half2(delta.y, -delta.x) * delta_offset * _GrassRadialBend;
#endif
#if TEXTURESCROLL_ON && !ATLAS_ON
i.uv.x += ((_Time.y + randomSeed) * _TextureScrollXSpeed) % 1;
i.uv.y += ((_Time.y + randomSeed) * _TextureScrollYSpeed) % 1;
#endif
#if PIXELATE_ON
half aspectRatio = texelSize.x / texelSize.y;
half2 pixelSize = float2(_PixelateSize, _PixelateSize * aspectRatio);
i.uv = floor(i.uv * pixelSize) / pixelSize;
#endif
half4 col = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv);
half originalAlpha = col.a;
col *= i.color;
#if PREMULTIPLYALPHA_ON
col.rgb *= col.a;
#endif
#if GLITCH_ON
half2 uvGlitch = uvRect;
uvGlitch.y -= 0.5;
half lineNoise = pow(rand2(floor(uvGlitch * half2(24., 19.) * _GlitchSize) * 4.0, randomSeed, _GlitchSpeed), 3.0) * _GlitchAmount
* pow(rand2(floor(uvGlitch * half2(38., 14.) * _GlitchSize) * 4.0, randomSeed, _GlitchSpeed), 3.0);
col = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + half2(lineNoise * 0.02 * rand2(half2(2.0, 1), randomSeed, _GlitchSpeed), 0)) * i.color;
#endif
#if CHROMABERR_ON
half4 r = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + half2(_ChromAberrAmount/10, 0)) * i.color;
half4 b = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + half2(-_ChromAberrAmount/10, 0)) * i.color;
col = half4(r.r * r.a, col.g, b.b * b.a, max(max(r.a, b.a) * _ChromAberrAlpha, col.a));
#endif
#if BLUR_ON
#if ATLAS_ON
#if !BLURISHD_ON
col = BlurHD(i.uv, _MainTex, sampler_MainTex, _BlurIntensity, (_MaxXUV - _MinXUV), (_MaxYUV - _MinYUV)) * i.color;
#else
col = Blur(i.uv, _MainTex, sampler_MainTex, _BlurIntensity * (_MaxXUV - _MinXUV)) * i.color;
#endif
#else
#if !BLURISHD_ON
col = BlurHD(i.uv, _MainTex, sampler_MainTex, _BlurIntensity, 1, 1) * i.color;
#else
col = Blur(i.uv, _MainTex, sampler_MainTex, _BlurIntensity) * i.color;
#endif
#endif
#endif
#if MOTIONBLUR_ON
_MotionBlurAngle = _MotionBlurAngle * 3.1415926;
#define rot(n) mul(n, half2x2(cos(_MotionBlurAngle), -sin(_MotionBlurAngle), sin(_MotionBlurAngle), cos(_MotionBlurAngle)))
_MotionBlurDist = _MotionBlurDist * 0.005;
#if ATLAS_ON
_MotionBlurDist *= (_MaxXUV - _MinXUV);
#endif
col.rgb += SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + rot(half2(-_MotionBlurDist, -_MotionBlurDist)));
col.rgb += SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + rot(half2(-_MotionBlurDist * 2, -_MotionBlurDist * 2)));
col.rgb += SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + rot(half2(-_MotionBlurDist * 3, -_MotionBlurDist * 3)));
col.rgb += SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + rot(half2(-_MotionBlurDist * 4, -_MotionBlurDist * 4)));
col.rgb += SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + rot(half2(_MotionBlurDist, _MotionBlurDist)));
col.rgb += SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + rot(half2(_MotionBlurDist * 2, _MotionBlurDist * 2)));
col.rgb += SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + rot(half2(_MotionBlurDist * 3, _MotionBlurDist * 3)));
col.rgb += SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + rot(half2(_MotionBlurDist * 4, _MotionBlurDist * 4)));
col.rgb = col.rgb / 9;
#endif
#if NEGATIVE_ON
col.rgb = lerp(col.rgb, 1 - col.rgb, _NegativeAmount);
#endif
half luminance = 0;
#if GREYSCALE_ON && !GREYSCALEOUTLINE_ON
luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b;
luminance = saturate(luminance + _GreyscaleLuminosity);
col.rgb = lerp(col.rgb, half3(luminance, luminance, luminance) * _GreyscaleTintColor, _GreyscaleBlend);
#endif
#if GHOST_ON
luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b;
half4 ghostResult;
ghostResult.a = saturate(luminance - _GhostTransparency) * col.a;
ghostResult.rgb = col.rgb * (luminance + _GhostColorBoost);
col = lerp(col, ghostResult, _GhostBlend);
#endif
#if INNEROUTLINE_ON
half3 innerT = abs(GET_PIXEL(0, _InnerOutlineThickness, i.uv, _MainTex, texelSize) - GET_PIXEL(0, -_InnerOutlineThickness, i.uv, _MainTex, texelSize));
innerT += abs(GET_PIXEL(_InnerOutlineThickness, 0, i.uv, _MainTex, texelSize) - GET_PIXEL(-_InnerOutlineThickness, 0, i.uv, _MainTex, texelSize));
#if !ONLYINNEROUTLINE_ON
innerT = (innerT / 2.0) * col.a * _InnerOutlineAlpha;
col.rgb += length(innerT) * _InnerOutlineColor.rgb * _InnerOutlineGlow;
#else
innerT *= col.a * _InnerOutlineAlpha;
col.rgb = length(innerT) * _InnerOutlineColor.rgb * _InnerOutlineGlow;
col.a = step(0.3, col.r+col.g+col.b);
#endif
#endif
#if HITEFFECT_ON
col.rgb = lerp(col.rgb, _HitEffectColor.rgb * _HitEffectGlow, _HitEffectBlend);
#endif
#if GRADIENT_ON
half2 tiledUvGrad = half2(uvRect.x / _MainTex_ScaleAndTiling.x, uvRect.y / _MainTex_ScaleAndTiling.y);
#if GRADIENT2COL_ON
_GradTopRightCol = _GradTopLeftCol;
_GradBotRightCol = _GradBotLeftCol;
#endif
#if RADIALGRADIENT_ON
half radialDist = 1 - length(tiledUvGrad - half2(0.5, 0.5));
radialDist *= (texelSize.w / texelSize.z);
radialDist = saturate(_GradBoostX * radialDist);
half4 gradientResult = lerp(_GradTopLeftCol, _GradBotLeftCol, radialDist);
#else
half gradXLerpFactor = saturate(pow(tiledUvGrad.x, _GradBoostX));
half4 gradientResult = lerp(lerp(_GradBotLeftCol, _GradBotRightCol, gradXLerpFactor),
lerp(_GradTopLeftCol, _GradTopRightCol, gradXLerpFactor), saturate(pow(tiledUvGrad.y, _GradBoostY)));
#endif
gradientResult = lerp(col, gradientResult, _GradBlend);
col.rgb = gradientResult.rgb * col.a;
col.a *= gradientResult.a;
#endif
#if CONTRAST_ON
col.rgb = (col.rgb - float3(0.5, 0.5, 0.5)) * _Contrast + float3(0.5, 0.5, 0.5);
col.rgb += _Brightness;
#endif
#if COLORSWAP_ON
luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b;
half4 swapMask = SAMPLE_TEXTURE2D(_ColorSwapTex, sampler_ColorSwapTex, i.uv);
swapMask.rgb *= swapMask.a;
half3 redSwap = _ColorSwapRed * swapMask.r * saturate(luminance + _ColorSwapRedLuminosity);
half3 greenSwap = _ColorSwapGreen * swapMask.g * saturate(luminance + _ColorSwapGreenLuminosity);
half3 blueSwap = _ColorSwapBlue * swapMask.b * saturate(luminance + _ColorSwapBlueLuminosity);
swapMask.rgb = col.rgb * saturate(1 - swapMask.r - swapMask.g - swapMask.b);
col.rgb = lerp(col.rgb, swapMask.rgb + redSwap + greenSwap + blueSwap, _ColorSwapBlend);
#endif
#if COLORRAMP_ON && !COLORRAMPOUTLINE_ON
luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b;
luminance = saturate(luminance + _ColorRampLuminosity);
#if GRADIENTCOLORRAMP_ON
col.rgb = lerp(col.rgb, SAMPLE_TEXTURE2D(_ColorRampTexGradient, sampler_ColorRampTexGradient, half2(luminance, 0)).rgb, _ColorRampBlend);
#else
col.rgb = lerp(col.rgb, SAMPLE_TEXTURE2D(_ColorRampTex, sampler_ColorRampTex, half2(luminance, 0)).rgb, _ColorRampBlend);
#endif
#endif
#if CHANGECOLOR_ON
float3 currChangeColor = saturate(col.rgb);
luminance = 0.3 * currChangeColor.r + 0.59 * currChangeColor.g + 0.11 * currChangeColor.b;
luminance = saturate(luminance + _ColorChangeLuminosity);
half3 dif = abs(currChangeColor - _ColorChangeTarget.rgb);
col.rgb = lerp(col.rgb, half3(luminance, luminance, luminance) * _ColorChangeNewCol.rgb,
max(sign(1 - saturate(dif.x + dif.y + dif.z) - _ColorChangeTolerance), 0.0));
#if CHANGECOLOR2_ON
dif = abs(currChangeColor - _ColorChangeTarget2.rgb);
col.rgb = lerp(col.rgb, half3(luminance, luminance, luminance) * _ColorChangeNewCol2.rgb,
max(sign(1 - saturate(dif.x + dif.y + dif.z) - _ColorChangeTolerance2), 0.0));
#endif
#if CHANGECOLOR3_ON
dif = abs(currChangeColor - _ColorChangeTarget3.rgb);
col.rgb = lerp(col.rgb, half3(luminance, luminance, luminance) * _ColorChangeNewCol3.rgb,
max(sign(1 - saturate(dif.x + dif.y + dif.z) - _ColorChangeTolerance3), 0.0));
#endif
#endif
#if POSTERIZE_ON && !POSTERIZEOUTLINE_ON
col.rgb = pow(col.rgb, _PosterizeGamma) * _PosterizeNumColors;
col.rgb = floor(col.rgb) / _PosterizeNumColors;
col.rgb = pow(col.rgb, 1.0 / _PosterizeGamma);
#endif
#if HSV_ON
half3 resultHsv = half3(col.rgb);
half cosHsv = _HsvBright * _HsvSaturation * cos(_HsvShift * 3.14159265 / 180);
half sinHsv = _HsvBright * _HsvSaturation * sin(_HsvShift * 3.14159265 / 180);
resultHsv.x = (.299 * _HsvBright + .701 * cosHsv + .168 * sinHsv) * col.x
+ (.587 * _HsvBright - .587 * cosHsv + .330 * sinHsv) * col.y
+ (.114 * _HsvBright - .114 * cosHsv - .497 * sinHsv) * col.z;
resultHsv.y = (.299 * _HsvBright - .299 * cosHsv - .328 * sinHsv) *col.x
+ (.587 * _HsvBright + .413 * cosHsv + .035 * sinHsv) * col.y
+ (.114 * _HsvBright - .114 * cosHsv + .292 * sinHsv) * col.z;
resultHsv.z = (.299 * _HsvBright - .3 * cosHsv + 1.25 * sinHsv) * col.x
+ (.587 * _HsvBright - .588 * cosHsv - 1.05 * sinHsv) * col.y
+ (.114 * _HsvBright + .886 * cosHsv - .203 * sinHsv) * col.z;
col.rgb = resultHsv;
#endif
#if OVERLAY_ON
half2 overlayUvs = uvRect;
overlayUvs.x += ((_Time.y + randomSeed) * _OverlayTextureScrollXSpeed) % 1;
overlayUvs.y += ((_Time.y + randomSeed) * _OverlayTextureScrollYSpeed) % 1;
half4 overlayCol = SAMPLE_TEXTURE2D(_OverlayTex, sampler_OverlayTex, CUSTOM_TRANSFORM_TEX(overlayUvs, _OverlayTex_ScaleAndTiling));
overlayCol.rgb *= _OverlayColor.rgb * _OverlayGlow;
#if !OVERLAYMULT_ON
overlayCol.rgb *= overlayCol.a * _OverlayColor.rgb * _OverlayColor.a * _OverlayBlend;
col.rgb += overlayCol.rgb;
#else
overlayCol.a *= _OverlayColor.a;
col = lerp(col, col * overlayCol, _OverlayBlend);
#endif
#endif
//OUTLINE-------------------------------------------------------------
#if OUTBASE_ON
#if OUTBASEPIXELPERF_ON
//half2 destUv = _OutlinePixelWidth / unity_SpriteProps.w;
half2 destUv = half2(_OutlinePixelWidth * texelSize.x, _OutlinePixelWidth * texelSize.y);
#else
//half2 destUv = _OutlinePixelWidth / unity_SpriteProps.w;
half2 destUv = half2(_OutlineWidth * texelSize.x * 200, _OutlineWidth * texelSize.y * 200);
#endif
#if OUTDIST_ON
half2 uvOutDist = uvRect;
uvOutDist.x += ((_Time.x + randomSeed) * _OutlineDistortTexXSpeed) % 1;
uvOutDist.y += ((_Time.x + randomSeed) * _OutlineDistortTexYSpeed) % 1;
half outDistortAmnt = (SAMPLE_TEXTURE2D(_OutlineDistortTex, sampler_OutlineDistortTex, CUSTOM_TRANSFORM_TEX(uvOutDist, _OutlineDistortTex_ScaleAndTiling)).r - 0.5) * 0.2 * _OutlineDistortAmount;
destUv.x += outDistortAmnt;
destUv.y += outDistortAmnt;
#endif
half spriteLeft = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + half2(destUv.x, 0)).a;
half spriteRight = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv - half2(destUv.x, 0)).a;
half spriteBottom = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + half2(0, destUv.y)).a;
half spriteTop = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv - half2(0, destUv.y)).a;
half result = spriteLeft + spriteRight + spriteBottom + spriteTop;
#if OUTBASE8DIR_ON
half spriteTopLeft = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + half2(destUv.x, destUv.y)).a;
half spriteTopRight = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + half2(-destUv.x, destUv.y)).a;
half spriteBotLeft = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + half2(destUv.x, -destUv.y)).a;
half spriteBotRight = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + half2(-destUv.x, -destUv.y)).a;
result = result + spriteTopLeft + spriteTopRight + spriteBotLeft + spriteBotRight;
#endif
result = step(0.05, saturate(result));
#if OUTTEX_ON
i.uvOutTex.x += ((_Time.x + randomSeed) * _OutlineTexXSpeed) % 1;
i.uvOutTex.y += ((_Time.x + randomSeed) * _OutlineTexYSpeed) % 1;
#if ATLAS_ON
i.uvOutTex = half2((i.uvOutTex.x - _MinXUV) / (_MaxXUV - _MinXUV), (i.uvOutTex.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
half4 tempOutColor = SAMPLE_TEXTURE2D(_OutlineTex, sampler_OutlineTex, i.uvOutTex);
tempOutColor *= _OutlineColor;
_OutlineColor = tempOutColor;
#endif
result *= (1 - originalAlpha) * _OutlineAlpha;
half4 outline = _OutlineColor * i.color.a;
outline.rgb *= _OutlineGlow;
outline.a = result;
#if ONLYOUTLINE_ON
col = outline;
#else
col = lerp(col, outline, result);
#endif
#endif
//-----------------------------------------------------------------------------
#if FADE_ON
half2 tiledUvFade1= CUSTOM_TRANSFORM_TEX(i.uv, _FadeTex_ScaleAndTiling);
half2 tiledUvFade2 = CUSTOM_TRANSFORM_TEX(i.uv, _FadeBurnTex_ScaleAndTiling);
#if ATLAS_ON
tiledUvFade1 = half2((tiledUvFade1.x - _MinXUV) / (_MaxXUV - _MinXUV), (tiledUvFade1.y - _MinYUV) / (_MaxYUV - _MinYUV));
tiledUvFade2 = half2((tiledUvFade2.x - _MinXUV) / (_MaxXUV - _MinXUV), (tiledUvFade2.y - _MinYUV) / (_MaxYUV - _MinYUV));
#endif
half fadeTemp = SAMPLE_TEXTURE2D(_FadeTex, sampler_FadeTex, tiledUvFade1).r;
half fade = smoothstep(_FadeAmount, _FadeAmount + _FadeBurnTransition, fadeTemp);
half fadeBurn = saturate(smoothstep(_FadeAmount - _FadeBurnWidth, _FadeAmount - _FadeBurnWidth + 0.1, fadeTemp) * _FadeAmount);
col.a *= fade;
_FadeBurnColor.rgb *= _FadeBurnGlow;
col += fadeBurn * SAMPLE_TEXTURE2D(_FadeBurnTex, sampler_FadeBurnTex, tiledUvFade2) * _FadeBurnColor * originalAlpha * (1 - col.a);
#endif
#if SHADOW_ON
half shadowA = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv + half2(_ShadowX, _ShadowY)).a;
half preMultShadowMask = 1 - (saturate(shadowA - col.a) * (1 - col.a));
col.rgb *= 1 - ((shadowA - col.a) * (1 - col.a));
col.rgb += (_ShadowColor * shadowA) * (1 - col.a);
col.a = max(shadowA * _ShadowAlpha * i.color.a, col.a);
#endif
#if GLOW_ON
half4 emission;
#if GLOWTEX_ON
emission = SAMPLE_TEXTURE2D(_GlowTex, sampler_GlowTex, i.uv);
#else
emission = col;
#endif
col.rgb *= _GlowGlobal;
emission.rgb *= emission.a * col.a * _Glow * _GlowColor;
col.rgb += emission.rgb;
#endif
#if COLORRAMP_ON && COLORRAMPOUTLINE_ON
luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b;
luminance = saturate(luminance + _ColorRampLuminosity);
#if GRADIENTCOLORRAMP_ON
col.rgb = lerp(col.rgb, tex2D(_ColorRampTexGradient, half2(luminance, 0)).rgb, _ColorRampBlend);
#else
col.rgb = lerp(col.rgb, tex2D(_ColorRampTex, half2(luminance, 0)).rgb, _ColorRampBlend);
#endif
#endif
#if GREYSCALE_ON && GREYSCALEOUTLINE_ON
luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b;
luminance = saturate(luminance + _GreyscaleLuminosity);
col.rgb = lerp(col.rgb, half3(luminance, luminance, luminance) * _GreyscaleTintColor, _GreyscaleBlend);
#endif
#if POSTERIZE_ON && POSTERIZEOUTLINE_ON
col.rgb = pow(col.rgb, _PosterizeGamma) * _PosterizeNumColors;
col.rgb = floor(col.rgb) / _PosterizeNumColors;
col.rgb = pow(col.rgb, 1.0 / _PosterizeGamma);
#endif
#if SHINE_ON
half2 uvShine = uvRect;
half cosAngle = cos(_ShineRotate);
half sinAngle = sin(_ShineRotate);
half2x2 rot = half2x2(cosAngle, -sinAngle, sinAngle, cosAngle);
uvShine -= half2(0.5, 0.5);
uvShine = mul(rot, uvShine);
uvShine += half2(0.5, 0.5);
half shineMask = SAMPLE_TEXTURE2D(_ShineMask, sampler_ShineMask, i.uv).a;
half currentDistanceProjection = (uvShine.x + uvShine.y) / 2;
half whitePower = 1 - (abs(currentDistanceProjection - _ShineLocation) / _ShineWidth);
col.rgb += col.a * whitePower * _ShineGlow * max(sign(currentDistanceProjection - (_ShineLocation - _ShineWidth)), 0.0)
* max(sign((_ShineLocation + _ShineWidth) - currentDistanceProjection), 0.0) * _ShineColor * shineMask;
#endif
#if HOLOGRAM_ON
half totalHologram = _HologramStripesAmount + _HologramUnmodAmount;
half hologramYCoord = ((uvRect.y + (((_Time.x + randomSeed) % 1) * _HologramStripesSpeed)) % totalHologram) / totalHologram;
hologramYCoord = abs(hologramYCoord);
half alpha = RemapFloat(saturate(hologramYCoord - (_HologramUnmodAmount/totalHologram)), 0.0, 1.0, _HologramMinAlpha, saturate(_HologramMaxAlpha));
half hologramMask = max(sign((_HologramUnmodAmount/totalHologram) - hologramYCoord), 0.0);
half4 hologramResult = col;
hologramResult.a *= lerp(alpha, 1, hologramMask);
hologramResult.rgb *= max(1, _HologramMaxAlpha * max(sign(hologramYCoord - (_HologramUnmodAmount/totalHologram)), 0.0));
hologramMask = 1 - step(0.01,hologramMask);
hologramResult.rgb += hologramMask * _HologramStripeColor * col.a;
col = lerp(col, hologramResult, _HologramBlend);
#endif
#if FLICKER_ON
col.a *= saturate(col.a * step(frac(0.05 + (_Time.w + randomSeed) * _FlickerFreq), 1 - _FlickerPercent) + _FlickerAlpha);
#endif
col.a *= _Alpha;
#if ALPHACUTOFF_ON
clip((1 - _AlphaCutoffValue) - (1 - col.a) - 0.01);
#endif
#if ALPHAROUND_ON
col.a = step(_AlphaRoundThreshold, col.a);
#endif
#if ALPHAOUTLINE_ON
half alphaOutlineRes = pow(1 - col.a, max(_AlphaOutlinePower, 0.0001)) * step(_AlphaOutlineMinAlpha, col.a) * _AlphaOutlineBlend;
col.rgb = lerp(col.rgb, _AlphaOutlineColor.rgb * _AlphaOutlineGlow, alphaOutlineRes);
col.a = lerp(col.a, 1, alphaOutlineRes > 1);
#endif
col *= _Color;
#if !defined(HDRP_PASS) && UNITY_VERSION >= 60000000
col *= unity_SpriteColor;
#endif
#if FOG_ON
col = AllIn1MixFog(col, i.vertex, i.positionWS, i.fogCoord);
#endif
return col;
}
#endif
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: c219b648ae17310408a5f5ba5b099249
ShaderIncludeImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 156513
packageName: All In 1 Sprite Shader
packageVersion: 4.661
assetPath: Assets/Plugins/AllIn1SpriteShader/Shaders/ShaderLibrary/AllIn1SpriteShaderSRP_FragmentPass.hlsl
uploadId: 857600
@@ -0,0 +1,32 @@
#ifndef ALLIN1SPRITESHADERSRP_HDRPHELPER
#define ALLIN1SPRITESHADERSRP_HDRPHELPER
//fogCoord only used in URP. It's here to make both functions have the same parameters
float4 AllIn1MixFog(float4 inputColor, float4 clipPos, float3 positionWS, float fogCoord)
{
float4 res = inputColor;
if (_FogEnabled)
{
PositionInputs posInput = GetPositionInput(
clipPos.xy,
_ScreenSize.zw,
clipPos.z,
clipPos.w,
positionWS, //In HDRP is RWS
0
);
float3 V = GetWorldSpaceNormalizeViewDir(positionWS);
float3 fogColor;
float3 fogOpacity;
EvaluateAtmosphericScattering(posInput, V, fogColor, fogOpacity);
res.rgb = (res.rgb * fogOpacity) + fogColor;
res.a *= (1 - fogOpacity);
}
return res;
}
#endif //ALLIN1SPRITESHADERSRP_HDRPHELPER
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: c2403e765aad6494d86eaaec9cdd5385
ShaderIncludeImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 156513
packageName: All In 1 Sprite Shader
packageVersion: 4.661
assetPath: Assets/Plugins/AllIn1SpriteShader/Shaders/ShaderLibrary/AllIn1SpriteShaderSRP_HDRPHelper.hlsl
uploadId: 857600
@@ -0,0 +1,191 @@
#ifndef ALLIN1SPRITESHADERSRP_PROPERTIES
#define ALLIN1SPRITESHADERSRP_PROPERTIES
CBUFFER_START(UnityPerMaterial)
half4 /*_MainTex_ST,*/ /*_MainTex_TexelSize,*/ _Color;
float4 _MainTex_ScaleAndTiling;
half _Alpha;
half _MinXUV, _MaxXUV, _MinYUV, _MaxYUV;
half _RectSize;
half _OffsetUvX, _OffsetUvY;
half _ClipUvLeft, _ClipUvRight, _ClipUvUp, _ClipUvDown;
half _RadialStartAngle, _RadialClip, _RadialClip2;
half _TwistUvAmount, _TwistUvPosX, _TwistUvPosY, _TwistUvRadius;
half _RotateUvAmount;
half _FishEyeUvAmount;
half _PinchUvAmount;
half _HandDrawnAmount, _HandDrawnSpeed;
half _ShakeUvSpeed, _ShakeUvX, _ShakeUvY;
float _WaveAmount, _WaveSpeed, _WaveStrength, _WaveX, _WaveY;
half _RoundWaveStrength, _RoundWaveSpeed;
half _ZoomUvAmount;
half4 _FadeBurnColor; /*_FadeTex_ST,*/ /*_FadeBurnTex_ST*/
float4 _FadeTex_ScaleAndTiling, _FadeBurnTex_ScaleAndTiling;
half _FadeAmount, _FadeBurnWidth, _FadeBurnTransition, _FadeBurnGlow;
half _TextureScrollXSpeed, _TextureScrollYSpeed;
half4 _GlowColor;
half _Glow, _GlowGlobal;
half4 _OutlineColor;
half _OutlineAlpha, _OutlineGlow, _OutlineWidth;
int _OutlinePixelWidth;
//half4 _OutlineTex_ST;
float4 _OutlineTex_ScaleAndTiling;
half _OutlineTexXSpeed, _OutlineTexYSpeed;
//half4 _OutlineDistortTex_ST;
float4 _OutlineDistortTex_ScaleAndTiling;
half _OutlineDistortTexXSpeed, _OutlineDistortTexYSpeed, _OutlineDistortAmount;
//half4 _DistortTex_ST;
float4 _DistortTex_ScaleAndTiling;
half _DistortTexXSpeed, _DistortTexYSpeed, _DistortAmount;
half _WarpStrength, _WarpSpeed, _WarpScale;
half _GrassSpeed, _GrassWind, _GrassManualAnim, _GrassRadialBend;
half _GradBlend, _GradBoostX, _GradBoostY;
half4 _GradTopRightCol, _GradTopLeftCol, _GradBotRightCol, _GradBotLeftCol;
half4 _ColorSwapRed, _ColorSwapGreen, _ColorSwapBlue;
half _ColorSwapRedLuminosity, _ColorSwapGreenLuminosity, _ColorSwapBlueLuminosity, _ColorSwapBlend;
half _HsvShift, _HsvSaturation, _HsvBright;
half4 _HitEffectColor;
half _HitEffectGlow, _HitEffectBlend;
half _PixelateSize;
half _NegativeAmount;
half _ColorRampLuminosity, _ColorRampBlend;
half _GreyscaleLuminosity, _GreyscaleBlend;
half4 _GreyscaleTintColor;
half _PosterizeNumColors, _PosterizeGamma;
half _BlurIntensity;
half _MotionBlurAngle, _MotionBlurDist;
half _GhostColorBoost, _GhostTransparency, _GhostBlend;
half _AlphaOutlineGlow, _AlphaOutlinePower, _AlphaOutlineMinAlpha, _AlphaOutlineBlend;
half4 _AlphaOutlineColor;
half _InnerOutlineThickness, _InnerOutlineAlpha, _InnerOutlineGlow;
half4 _InnerOutlineColor;
half _HologramStripesAmount, _HologramMinAlpha, _HologramUnmodAmount, _HologramStripesSpeed, _HologramMaxAlpha, _HologramBlend;
half4 _HologramStripeColor;
half _ChromAberrAmount, _ChromAberrAlpha;
half _GlitchAmount, _GlitchSize, _GlitchSpeed;
half _FlickerFreq, _FlickerPercent, _FlickerAlpha;
half _ShadowX, _ShadowY, _ShadowAlpha;
half4 _ShadowColor;
half4 _ShineColor;
half _ShineLocation, _ShineRotate, _ShineWidth, _ShineGlow;
half _AlphaCutoffValue;
half _AlphaRoundThreshold;
half4 _ColorChangeNewCol, _ColorChangeTarget;
half _ColorChangeTolerance, _ColorChangeLuminosity;
half4 _ColorChangeNewCol2, _ColorChangeTarget2;
half _ColorChangeTolerance2;
half4 _ColorChangeNewCol3, _ColorChangeTarget3;
half _ColorChangeTolerance3;
half _Contrast, _Brightness;
//half4 _OverlayTex_ST;
float4 _OverlayTex_ScaleAndTiling;
float4 _OverlayColor;
half _OverlayGlow, _OverlayBlend, _OverlayTextureScrollXSpeed, _OverlayTextureScrollYSpeed;
float _RandomSeed;
CBUFFER_END
#define CUSTOM_TRANSFORM_TEX(uv, st) uv * st.xy + st.zw
#define GET_PIXEL(offsetX, offsetY, uv, tex, texelSize) SAMPLE_TEXTURE2D(tex, sampler##tex, uv + half2(offsetX * texelSize.x, offsetY * texelSize.y)).rgb
#define DECLARE_TEX_AND_SAMPLER(texName) \
TEXTURE2D(texName);\
SAMPLER(sampler##texName);
DECLARE_TEX_AND_SAMPLER(_MainTex)
#if FADE_ON
DECLARE_TEX_AND_SAMPLER(_FadeTex)
DECLARE_TEX_AND_SAMPLER(_FadeBurnTex)
#endif
#if GLOW_ON
DECLARE_TEX_AND_SAMPLER(_GlowTex)
//sampler2D _GlowTex;
#endif
#if OUTTEX_ON
DECLARE_TEX_AND_SAMPLER(_OutlineTex)
#endif
#if OUTDIST_ON
DECLARE_TEX_AND_SAMPLER(_OutlineDistortTex)
//sampler2D _OutlineDistortTex;
#endif
#if DISTORT_ON
DECLARE_TEX_AND_SAMPLER(_DistortTex)
//sampler2D _DistortTex;
#endif
#if COLORSWAP_ON
DECLARE_TEX_AND_SAMPLER(_ColorSwapTex)
#endif
#if COLORRAMP_ON
DECLARE_TEX_AND_SAMPLER(_ColorRampTex)
DECLARE_TEX_AND_SAMPLER(_ColorRampTexGradient)
#endif
#if SHINE_ON
DECLARE_TEX_AND_SAMPLER(_ShineMask)
#endif
#if OVERLAY_ON
DECLARE_TEX_AND_SAMPLER(_OverlayTex)
#endif
#endif
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 8b6109d96c9d070479a709f48fb8ccce
ShaderIncludeImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 156513
packageName: All In 1 Sprite Shader
packageVersion: 4.661
assetPath: Assets/Plugins/AllIn1SpriteShader/Shaders/ShaderLibrary/AllIn1SpriteShaderSRP_Properties.hlsl
uploadId: 857600
@@ -0,0 +1,76 @@
#ifndef ALLIN1SPRITESHADERSRP_SHADERFEATURES
#define ALLIN1SPRITESHADERSRP_SHADERFEATURES
#pragma shader_feature_local GLOW_ON
#pragma shader_feature_local FADE_ON
#pragma shader_feature_local OUTBASE_ON
#pragma shader_feature_local ONLYOUTLINE_ON
#pragma shader_feature_local GRADIENT_ON
#pragma shader_feature_local GRADIENT2COL_ON
#pragma shader_feature_local RADIALGRADIENT_ON
#pragma shader_feature_local COLORSWAP_ON
#pragma shader_feature_local HSV_ON
#pragma shader_feature_local CHANGECOLOR_ON
#pragma shader_feature_local CHANGECOLOR2_ON
#pragma shader_feature_local CHANGECOLOR3_ON
#pragma shader_feature_local COLORRAMP_ON
#pragma shader_feature_local GRADIENTCOLORRAMP_ON
#pragma shader_feature_local HITEFFECT_ON
#pragma shader_feature_local NEGATIVE_ON
#pragma shader_feature_local PIXELATE_ON
#pragma shader_feature_local GREYSCALE_ON
#pragma shader_feature_local POSTERIZE_ON
#pragma shader_feature_local BLUR_ON
#pragma shader_feature_local MOTIONBLUR_ON
#pragma shader_feature_local GHOST_ON
#pragma shader_feature_local ALPHAOUTLINE_ON
#pragma shader_feature_local INNEROUTLINE_ON
#pragma shader_feature_local ONLYINNEROUTLINE_ON
#pragma shader_feature_local HOLOGRAM_ON
#pragma shader_feature_local CHROMABERR_ON
#pragma shader_feature_local GLITCH_ON
#pragma shader_feature_local FLICKER_ON
#pragma shader_feature_local SHADOW_ON
#pragma shader_feature_local SHINE_ON
#pragma shader_feature_local CONTRAST_ON
#pragma shader_feature_local OVERLAY_ON
#pragma shader_feature_local OVERLAYMULT_ON
#pragma shader_feature_local ALPHACUTOFF_ON
#pragma shader_feature_local ALPHAROUND_ON
#pragma shader_feature_local DOODLE_ON
#pragma shader_feature_local WIND_ON
#pragma shader_feature_local WAVEUV_ON
#pragma shader_feature_local ROUNDWAVEUV_ON
#pragma shader_feature_local RECTSIZE_ON
#pragma shader_feature_local OFFSETUV_ON
#pragma shader_feature_local CLIPPING_ON
#pragma shader_feature_local RADIALCLIPPING_ON
#pragma shader_feature_local TEXTURESCROLL_ON
#pragma shader_feature_local ZOOMUV_ON
#pragma shader_feature_local DISTORT_ON
#pragma shader_feature_local WARP_ON
#pragma shader_feature_local TWISTUV_ON
#pragma shader_feature_local ROTATEUV_ON
#pragma shader_feature_local POLARUV_ON
#pragma shader_feature_local FISHEYE_ON
#pragma shader_feature_local PINCH_ON
#pragma shader_feature_local SHAKEUV_ON
#pragma shader_feature_local GLOWTEX_ON
#pragma shader_feature_local OUTTEX_ON
#pragma shader_feature_local OUTDIST_ON
#pragma shader_feature_local OUTBASE8DIR_ON
#pragma shader_feature_local OUTBASEPIXELPERF_ON
#pragma shader_feature_local COLORRAMPOUTLINE_ON
#pragma shader_feature_local GREYSCALEOUTLINE_ON
#pragma shader_feature_local POSTERIZEOUTLINE_ON
#pragma shader_feature_local BLURISHD_ON
#pragma shader_feature_local MANUALWIND_ON
#pragma shader_feature ATLAS_ON
#pragma shader_feature PREMULTIPLYALPHA_ON
#pragma shader_feature BILBOARD_ON
#pragma shader_feature BILBOARDY_ON
#pragma shader_feature FOG_ON
#endif
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: fb77b0e21e6914b448db01edf0081e34
ShaderIncludeImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 156513
packageName: All In 1 Sprite Shader
packageVersion: 4.661
assetPath: Assets/Plugins/AllIn1SpriteShader/Shaders/ShaderLibrary/AllIn1SpriteShaderSRP_ShaderFeatures.hlsl
uploadId: 857600
@@ -0,0 +1,40 @@
#ifndef ALLIN1SPRITESHADERSRP_STRUCTS
#define ALLIN1SPRITESHADERSRP_STRUCTS
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
half4 color : COLOR;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
half4 color : COLOR;
#if OUTTEX_ON
half2 uvOutTex : TEXCOORD1;
#endif
#if OUTDIST_ON
half2 uvOutDistTex : TEXCOORD2;
#endif
#if DISTORT_ON
half2 uvDistTex : TEXCOORD3;
#endif
#if FOG_ON
float fogCoord : TEXCOORD4;
#endif
float3 positionWS : TEXCOORD5;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
#endif
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 90c9bb4f3a943e54ab9fe837a2ffe287
ShaderIncludeImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 156513
packageName: All In 1 Sprite Shader
packageVersion: 4.661
assetPath: Assets/Plugins/AllIn1SpriteShader/Shaders/ShaderLibrary/AllIn1SpriteShaderSRP_Structs.hlsl
uploadId: 857600
@@ -0,0 +1,14 @@
#ifndef ALLIN1SPRITESHADERSRP_URPHELPER
#define ALLIN1SPRITESHADERSRP_URPHELPER
//clipPos and positionWS only used in HDRP. They're here to make both functions have the same parameters
float4 AllIn1MixFog(float4 inputColor, float4 clipPos, float3 positionWS, float fogCoord)
{
float4 res = inputColor;
res.rgb = MixFog(inputColor.rgb, fogCoord);
return res;
}
#endif //ALLIN1SPRITESHADERSRP_URPHELPER
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 27824951bd98b3140ba8ba40179436c4
ShaderIncludeImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 156513
packageName: All In 1 Sprite Shader
packageVersion: 4.661
assetPath: Assets/Plugins/AllIn1SpriteShader/Shaders/ShaderLibrary/AllIn1SpriteShaderSRP_URPHelper.hlsl
uploadId: 857600
@@ -0,0 +1,81 @@
#ifndef ALLIN1SPRITESHADERSRP_VERTEXPASS
#define ALLIN1SPRITESHADERSRP_VERTEXPASS
v2f vert(appdata v)
{
#if RECTSIZE_ON
v.vertex.xyz += (v.vertex.xyz * (_RectSize - 1.0));
#endif
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_TRANSFER_INSTANCE_ID(v, o);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
#if BILBOARD_ON
half3 camRight = mul((half3x3)unity_CameraToWorld, half3(1,0,0));
half3 camUp = half3(0,1,0);
#if BILBOARDY_ON
camUp = mul((half3x3)unity_CameraToWorld, half3(0,1,0));
#endif
half3 localPos = v.vertex.x * camRight + v.vertex.y * camUp;
#if UNITY_VERSION >= 60000000
localPos.xy *= unity_SpriteProps.xy;
#endif
o.vertex = TransformObjectToHClip(half4(localPos, 1).xyz);
#else
half3 localPos = v.vertex.xyz;
#if UNITY_VERSION >= 60000000 && !defined(HDRP_PASS)
localPos.xy *= unity_SpriteProps.xy;
#endif
o.vertex = TransformObjectToHClip(localPos);
#endif
o.uv = /*TRANSFORM_TEX(v.uv, _MainTex)*/v.uv * _MainTex_ScaleAndTiling.xy + _MainTex_ScaleAndTiling.zw;
o.color = v.color;
half2 center = half2(0.5, 0.5);
#if ATLAS_ON
center = half2((_MaxXUV + _MinXUV) / 2.0, (_MaxYUV + _MinYUV) / 2.0);
#endif
#if POLARUV_ON
o.uv = v.uv - center;
#endif
#if ROTATEUV_ON
half2 uvC = v.uv;
half cosAngle = cos(_RotateUvAmount);
half sinAngle = sin(_RotateUvAmount);
half2x2 rot = half2x2(cosAngle, -sinAngle, sinAngle, cosAngle);
uvC -= center;
o.uv = mul(rot, uvC);
o.uv += center;
#endif
#if OUTTEX_ON
o.uvOutTex = CUSTOM_TRANSFORM_TEX(v.uv, _OutlineTex_ScaleAndTiling);
#endif
#if OUTDIST_ON
o.uvOutDistTex = CUSTOM_TRANSFORM_TEX(v.uv, _OutlineDistortTex_ScaleAndTiling);
#endif
#if DISTORT_ON
o.uvDistTex = CUSTOM_TRANSFORM_TEX(v.uv, _DistortTex_ScaleAndTiling);
#endif
#if FOG_ON
o.fogCoord = 0;
#if defined(FOG_LINEAR) || defined(FOG_EXP) || defined(FOG_EXP2)
o.fogCoord = ComputeFogFactor(o.vertex.z);
#endif
#endif
o.positionWS = TransformObjectToWorld(v.vertex.xyz);
return o;
}
#endif
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 5b28c43114df6394c8e01e077af6cae9
ShaderIncludeImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 156513
packageName: All In 1 Sprite Shader
packageVersion: 4.661
assetPath: Assets/Plugins/AllIn1SpriteShader/Shaders/ShaderLibrary/AllIn1SpriteShaderSRP_VertexPass.hlsl
uploadId: 857600