[Add] All in one shader
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
Shader "AllIn13DShader/Noises/AllIn13DShaderFractalNoise"
|
||||
{
|
||||
Properties
|
||||
{
|
||||
_ScaleX("Scale X", Range(0.1, 100)) = 4
|
||||
_ScaleY("Scale Y", Range(0.1, 100)) = 4
|
||||
_StartBand("Start Band", Range(0.1, 10)) = 1
|
||||
_EndBand("End Band", Range(0.1, 10)) = 8
|
||||
_Offset("Offset", Range(-100, 100)) = 1
|
||||
_Contrast("Contrast", Range (0, 10)) = 1
|
||||
_Brightness("Brightness", Range (-1, 1)) = 0
|
||||
[MaterialToggle] _Invert("Invert?", Float) = 0
|
||||
[MaterialToggle] _Fractal("Fractal?", Float) = 0
|
||||
}
|
||||
SubShader
|
||||
{
|
||||
Cull Off
|
||||
|
||||
Pass
|
||||
{
|
||||
CGPROGRAM
|
||||
#pragma vertex vert
|
||||
#pragma fragment frag
|
||||
|
||||
#include "UnityCG.cginc"
|
||||
|
||||
struct appdata
|
||||
{
|
||||
float4 vertex : POSITION;
|
||||
float2 uv : TEXCOORD0;
|
||||
};
|
||||
|
||||
struct v2f
|
||||
{
|
||||
float2 uv : TEXCOORD0;
|
||||
float4 vertex : SV_POSITION;
|
||||
};
|
||||
|
||||
v2f vert(appdata v)
|
||||
{
|
||||
v2f o;
|
||||
o.vertex = UnityObjectToClipPos(v.vertex);
|
||||
o.uv = v.uv;
|
||||
return o;
|
||||
}
|
||||
|
||||
float4 Mod289(float4 x)
|
||||
{
|
||||
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
||||
}
|
||||
|
||||
float4 PermuteFloat4(float4 x)
|
||||
{
|
||||
return Mod289(((x * 34.0) + 1.0) * x);
|
||||
}
|
||||
|
||||
float4 TaylorInvSqrt(float4 r)
|
||||
{
|
||||
return 1.79284291400159 - 0.85373472095314 * r;
|
||||
}
|
||||
|
||||
float2 FadeFloat2(float2 t)
|
||||
{
|
||||
return t * t * t * (t * (t * 6.0 - 15.0) + 10.0);
|
||||
}
|
||||
|
||||
float3 FadeFloat3(float3 t)
|
||||
{
|
||||
return t * t * t * (t * (t * 6.0 - 15.0) + 10.0);
|
||||
}
|
||||
|
||||
float PerlinNoise(float2 P, float2 rep)
|
||||
{
|
||||
float4 Pi = floor(P.xyxy) + float4(0.0, 0.0, 1.0, 1.0);
|
||||
float4 Pf = frac(P.xyxy) - float4(0.0, 0.0, 1.0, 1.0);
|
||||
Pi = fmod(Pi, rep.xyxy);
|
||||
Pi = Mod289(Pi);
|
||||
float4 ix = Pi.xzxz;
|
||||
float4 iy = Pi.yyww;
|
||||
float4 fx = Pf.xzxz;
|
||||
float4 fy = Pf.yyww;
|
||||
|
||||
float4 i = PermuteFloat4(PermuteFloat4(ix) + iy);
|
||||
|
||||
float4 gx = frac(i * (1.0 / 41.0)) * 2.0 - 1.0;
|
||||
float4 gy = abs(gx) - 0.5;
|
||||
float4 tx = floor(gx + 0.5);
|
||||
gx = gx - tx;
|
||||
|
||||
float2 g00 = float2(gx.x, gy.x);
|
||||
float2 g10 = float2(gx.y, gy.y);
|
||||
float2 g01 = float2(gx.z, gy.z);
|
||||
float2 g11 = float2(gx.w, gy.w);
|
||||
|
||||
float4 norm = TaylorInvSqrt(float4(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11)));
|
||||
g00 *= norm.x;
|
||||
g01 *= norm.y;
|
||||
g10 *= norm.z;
|
||||
g11 *= norm.w;
|
||||
|
||||
float n00 = dot(g00, float2(fx.x, fy.x));
|
||||
float n10 = dot(g10, float2(fx.y, fy.y));
|
||||
float n01 = dot(g01, float2(fx.z, fy.z));
|
||||
float n11 = dot(g11, float2(fx.w, fy.w));
|
||||
|
||||
float2 fade_xy = FadeFloat2(Pf.xy);
|
||||
float2 n_x = lerp(float2(n00, n01), float2(n10, n11), fade_xy.x);
|
||||
float n_xy = lerp(n_x.x, n_x.y, fade_xy.y);
|
||||
return 2.3 * n_xy;
|
||||
}
|
||||
|
||||
float NoiseManger(float2 st, int scale_x, int scale_y, float seed, float scale_value, int start_band, int end_band, float persistance, int type)
|
||||
{
|
||||
float accum = 0.0;
|
||||
float sx = scale_x;
|
||||
float sy = scale_y;
|
||||
float sv = scale_value;
|
||||
for (int i = 1; i <= 16; i += 1)
|
||||
{
|
||||
if (i >= start_band && i <= end_band)
|
||||
{
|
||||
if (type == 0)
|
||||
accum += (PerlinNoise(float3(st.x * sx, st.y * sy, seed), float3(sx, sy, 1000.)) * 0.5 + 0.5) * sv;
|
||||
else
|
||||
accum += abs(PerlinNoise(float3(st.x * sx, st.y * sy, seed), float3(sx, sy, 1000.))) * sv;
|
||||
sv *= persistance;
|
||||
seed += 1.;
|
||||
}
|
||||
sx *= 2.0;
|
||||
sy *= 2.0;
|
||||
}
|
||||
|
||||
if (type == 2)
|
||||
accum = 1 - accum;
|
||||
|
||||
return accum;
|
||||
}
|
||||
|
||||
half _ScaleX, _ScaleY, _Offset, _StartBand, _EndBand, _Fractal, _Invert, _Contrast, _Brightness;
|
||||
|
||||
fixed4 frag(v2f i) : SV_Target
|
||||
{
|
||||
i.uv.x += _Offset * 1.3234;
|
||||
i.uv.y += _Offset * 0.8734;
|
||||
|
||||
float result = NoiseManger(i.uv, _ScaleX, _ScaleY, _Offset * 9745, 0.7, _StartBand, _EndBand, 0.5, 1 - _Fractal);
|
||||
if(_Invert) result = 1 - result;
|
||||
result = saturate((result - 0.5) * _Contrast + 0.5 + _Brightness);
|
||||
|
||||
return half4(result, result, result, 1);
|
||||
}
|
||||
ENDCG
|
||||
}
|
||||
}
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5ad3a3d3df8cd5747b9956fe00a3ed7b
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 316173
|
||||
packageName: All In 1 3D-Shader
|
||||
packageVersion: 2.72
|
||||
assetPath: Assets/Plugins/AllIn13DShader/Editor/Tools/Shaders/AllIn13DShaderFractalNoise.shader
|
||||
uploadId: 865720
|
||||
@@ -0,0 +1,234 @@
|
||||
Shader "AllIn13DShader/Noises/AllIn13DShaderWorleyNoise"
|
||||
{
|
||||
Properties
|
||||
{
|
||||
_ScaleX("Scale X", Range(0.1, 100)) = 10
|
||||
_ScaleY("Scale Y", Range(0.1, 100)) = 10
|
||||
_Jitter("Jitter", Range(0.0, 2.0)) = 1
|
||||
_NoiseType("Noise Type", Range(0.0, 4.0)) = 0
|
||||
_Offset("Offset", Range(-100, 100)) = 1
|
||||
_Contrast("Contrast", Range (0, 10)) = 1
|
||||
_Brightness("Brightness", Range (-1, 1)) = 0
|
||||
[MaterialToggle] _Invert("Invert?", Float) = 0
|
||||
}
|
||||
SubShader
|
||||
{
|
||||
Cull Off
|
||||
|
||||
Pass
|
||||
{
|
||||
CGPROGRAM
|
||||
#pragma vertex vert
|
||||
#pragma fragment frag
|
||||
|
||||
#include "UnityCG.cginc"
|
||||
|
||||
struct appdata
|
||||
{
|
||||
float4 vertex : POSITION;
|
||||
float2 uv : TEXCOORD0;
|
||||
};
|
||||
|
||||
struct v2f
|
||||
{
|
||||
float2 uv : TEXCOORD0;
|
||||
float4 vertex : SV_POSITION;
|
||||
};
|
||||
|
||||
v2f vert(appdata v)
|
||||
{
|
||||
v2f o;
|
||||
o.vertex = UnityObjectToClipPos(v.vertex);
|
||||
o.uv = v.uv;
|
||||
return o;
|
||||
}
|
||||
|
||||
float3 Mod(float3 x, float y)
|
||||
{
|
||||
return x - y * floor(x / y);
|
||||
}
|
||||
|
||||
float3 Mod3(float3 x, float3 y)
|
||||
{
|
||||
return x - y * floor(x / y);
|
||||
}
|
||||
|
||||
float3 Permute(float3 x)
|
||||
{
|
||||
return Mod((34.0 * x + 1.0) * x, 289.0);
|
||||
}
|
||||
|
||||
float3 Distance(float3 x, float3 y, float3 z, bool manhattanDistance)
|
||||
{
|
||||
return manhattanDistance ? abs(x) + abs(y) + abs(z) : (x * x + y * y + z * z);
|
||||
}
|
||||
|
||||
float2 WorleyNoise(float3 P, float3 rep, float jitter, bool manhattanDistance)
|
||||
{
|
||||
float K = 0.142857142857;
|
||||
float Ko = 0.428571428571;
|
||||
float K2 = 0.020408163265306;
|
||||
float Kz = 0.166666666667;
|
||||
float Kzo = 0.416666666667;
|
||||
|
||||
float3 Pi = Mod3(floor(P), rep);
|
||||
float3 Pf = frac(P) - 0.5;
|
||||
|
||||
float3 Pfx = Pf.x + float3(1.0, 0.0, -1.0);
|
||||
float3 Pfy = Pf.y + float3(1.0, 0.0, -1.0);
|
||||
float3 Pfz = Pf.z + float3(1.0, 0.0, -1.0);
|
||||
|
||||
float3 p = Permute(Mod(Pi.x + float3(-1.0, 0.0, 1.0), rep.x));
|
||||
float3 p1 = Permute(Mod(p + Pi.y - 1.0, rep.y));
|
||||
float3 p2 = Permute(Mod(p + Pi.y, rep.y));
|
||||
float3 p3 = Permute(Mod(p + Pi.y + 1.0, rep.y));
|
||||
|
||||
float3 p11 = Permute(p1 + Pi.z - 1.0);
|
||||
float3 p12 = Permute(p1 + Pi.z);
|
||||
float3 p13 = Permute(p1 + Pi.z + 1.0);
|
||||
|
||||
float3 p21 = Permute(p2 + Pi.z - 1.0);
|
||||
float3 p22 = Permute(p2 + Pi.z);
|
||||
float3 p23 = Permute(p2 + Pi.z + 1.0);
|
||||
|
||||
float3 p31 = Permute(p3 + Pi.z - 1.0);
|
||||
float3 p32 = Permute(p3 + Pi.z);
|
||||
float3 p33 = Permute(p3 + Pi.z + 1.0);
|
||||
|
||||
float3 ox11 = frac(p11 * K) - Ko;
|
||||
float3 oy11 = Mod(floor(p11 * K), 7.0) * K - Ko;
|
||||
float3 oz11 = floor(p11 * K2) * Kz - Kzo;
|
||||
|
||||
float3 ox12 = frac(p12 * K) - Ko;
|
||||
float3 oy12 = Mod(floor(p12 * K), 7.0) * K - Ko;
|
||||
float3 oz12 = floor(p12 * K2) * Kz - Kzo;
|
||||
|
||||
float3 ox13 = frac(p13 * K) - Ko;
|
||||
float3 oy13 = Mod(floor(p13 * K), 7.0) * K - Ko;
|
||||
float3 oz13 = floor(p13 * K2) * Kz - Kzo;
|
||||
|
||||
float3 ox21 = frac(p21 * K) - Ko;
|
||||
float3 oy21 = Mod(floor(p21 * K), 7.0) * K - Ko;
|
||||
float3 oz21 = floor(p21 * K2) * Kz - Kzo;
|
||||
|
||||
float3 ox22 = frac(p22 * K) - Ko;
|
||||
float3 oy22 = Mod(floor(p22 * K), 7.0) * K - Ko;
|
||||
float3 oz22 = floor(p22 * K2) * Kz - Kzo;
|
||||
|
||||
float3 ox23 = frac(p23 * K) - Ko;
|
||||
float3 oy23 = Mod(floor(p23 * K), 7.0) * K - Ko;
|
||||
float3 oz23 = floor(p23 * K2) * Kz - Kzo;
|
||||
|
||||
float3 ox31 = frac(p31 * K) - Ko;
|
||||
float3 oy31 = Mod(floor(p31 * K), 7.0) * K - Ko;
|
||||
float3 oz31 = floor(p31 * K2) * Kz - Kzo;
|
||||
|
||||
float3 ox32 = frac(p32 * K) - Ko;
|
||||
float3 oy32 = Mod(floor(p32 * K), 7.0) * K - Ko;
|
||||
float3 oz32 = floor(p32 * K2) * Kz - Kzo;
|
||||
|
||||
float3 ox33 = frac(p33 * K) - Ko;
|
||||
float3 oy33 = Mod(floor(p33 * K), 7.0) * K - Ko;
|
||||
float3 oz33 = floor(p33 * K2) * Kz - Kzo;
|
||||
|
||||
float3 dx11 = Pfx + jitter * ox11;
|
||||
float3 dy11 = Pfy.x + jitter * oy11;
|
||||
float3 dz11 = Pfz.x + jitter * oz11;
|
||||
|
||||
float3 dx12 = Pfx + jitter * ox12;
|
||||
float3 dy12 = Pfy.x + jitter * oy12;
|
||||
float3 dz12 = Pfz.y + jitter * oz12;
|
||||
|
||||
float3 dx13 = Pfx + jitter * ox13;
|
||||
float3 dy13 = Pfy.x + jitter * oy13;
|
||||
float3 dz13 = Pfz.z + jitter * oz13;
|
||||
|
||||
float3 dx21 = Pfx + jitter * ox21;
|
||||
float3 dy21 = Pfy.y + jitter * oy21;
|
||||
float3 dz21 = Pfz.x + jitter * oz21;
|
||||
|
||||
float3 dx22 = Pfx + jitter * ox22;
|
||||
float3 dy22 = Pfy.y + jitter * oy22;
|
||||
float3 dz22 = Pfz.y + jitter * oz22;
|
||||
|
||||
float3 dx23 = Pfx + jitter * ox23;
|
||||
float3 dy23 = Pfy.y + jitter * oy23;
|
||||
float3 dz23 = Pfz.z + jitter * oz23;
|
||||
|
||||
float3 dx31 = Pfx + jitter * ox31;
|
||||
float3 dy31 = Pfy.z + jitter * oy31;
|
||||
float3 dz31 = Pfz.x + jitter * oz31;
|
||||
|
||||
float3 dx32 = Pfx + jitter * ox32;
|
||||
float3 dy32 = Pfy.z + jitter * oy32;
|
||||
float3 dz32 = Pfz.y + jitter * oz32;
|
||||
|
||||
float3 dx33 = Pfx + jitter * ox33;
|
||||
float3 dy33 = Pfy.z + jitter * oy33;
|
||||
float3 dz33 = Pfz.z + jitter * oz33;
|
||||
|
||||
float3 d11 = Distance(dx11, dy11, dz11, manhattanDistance);
|
||||
float3 d12 = Distance(dx12, dy12, dz12, manhattanDistance);
|
||||
float3 d13 = Distance(dx13, dy13, dz13, manhattanDistance);
|
||||
float3 d21 = Distance(dx21, dy21, dz21, manhattanDistance);
|
||||
float3 d22 = Distance(dx22, dy22, dz22, manhattanDistance);
|
||||
float3 d23 = Distance(dx23, dy23, dz23, manhattanDistance);
|
||||
float3 d31 = Distance(dx31, dy31, dz31, manhattanDistance);
|
||||
float3 d32 = Distance(dx32, dy32, dz32, manhattanDistance);
|
||||
float3 d33 = Distance(dx33, dy33, dz33, manhattanDistance);
|
||||
|
||||
float3 d1a = min(d11, d12);
|
||||
d12 = max(d11, d12);
|
||||
d11 = min(d1a, d13);
|
||||
d13 = max(d1a, d13);
|
||||
d12 = min(d12, d13);
|
||||
float3 d2a = min(d21, d22);
|
||||
d22 = max(d21, d22);
|
||||
d21 = min(d2a, d23);
|
||||
d23 = max(d2a, d23);
|
||||
d22 = min(d22, d23);
|
||||
float3 d3a = min(d31, d32);
|
||||
d32 = max(d31, d32);
|
||||
d31 = min(d3a, d33);
|
||||
d33 = max(d3a, d33);
|
||||
d32 = min(d32, d33);
|
||||
float3 da = min(d11, d21);
|
||||
d21 = max(d11, d21);
|
||||
d11 = min(da, d31);
|
||||
d31 = max(da, d31);
|
||||
d11.xy = (d11.x < d11.y) ? d11.xy : d11.yx;
|
||||
d11.xz = (d11.x < d11.z) ? d11.xz : d11.zx;
|
||||
d12 = min(d12, d21);
|
||||
d12 = min(d12, d22);
|
||||
d12 = min(d12, d31);
|
||||
d12 = min(d12, d32);
|
||||
d11.yz = min(d11.yz, d12.xy);
|
||||
d11.y = min(d11.y, d12.z);
|
||||
d11.y = min(d11.y, d11.z);
|
||||
return sqrt(d11.xy);
|
||||
}
|
||||
|
||||
half _ScaleX, _ScaleY, _Jitter, _NoiseType, _Offset, _Fractal, _Invert, _Contrast, _Brightness;
|
||||
|
||||
fixed4 frag(v2f i) : SV_Target
|
||||
{
|
||||
float2 s = float2(_ScaleX, _ScaleY);
|
||||
float2 f = WorleyNoise(float3(i.uv * s, _Offset), float3(s, 1000), _Jitter, false) * 0.5;
|
||||
|
||||
//Add if for each Type
|
||||
float result = 0;
|
||||
if (_NoiseType < 0.1) result = f.x; //F1 - Voronoi
|
||||
else if (_NoiseType < 1.1) result = f.y; //F2 - Cells 1
|
||||
else if (_NoiseType < 2.1) result = f.y - f.x; //Distance Sub - Cells 2
|
||||
else if (_NoiseType < 3.1) result = f.x * f.y; //Distance Mul - Water Voronoi
|
||||
else if (_NoiseType < 4.1) result = 1 - f.x; //One Minus F - Cellular Noise
|
||||
|
||||
if (_Invert) result = 1 - result;
|
||||
result = saturate((result - 0.5) * _Contrast + 0.5 + _Brightness);
|
||||
|
||||
return half4(result, result, result, 1);
|
||||
}
|
||||
ENDCG
|
||||
}
|
||||
}
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e8cc5605d565f314e941622c9473162a
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 316173
|
||||
packageName: All In 1 3D-Shader
|
||||
packageVersion: 2.72
|
||||
assetPath: Assets/Plugins/AllIn13DShader/Editor/Tools/Shaders/AllIn13DShaderWorleyNoise.shader
|
||||
uploadId: 865720
|
||||
Reference in New Issue
Block a user