yum-archive/Tooner
A toon shader for Unity's BIRP.
git clone https://git.yummers.dev/yum-archive/Tooner
bcadf1d
master
1#include "math.cginc" 2 3#ifndef __NOISE_INC 4#define __NOISE_INC 5 6float cubic_interp(float x) 7{ 8 return x * x * (3.0 - 2.0 * x); 9} 10 11float2 cubic_interp(float2 x) 12{ 13 return x * x * (3.0 - 2.0 * x); 14} 15 16float3 cubic_interp(float3 x) 17{ 18 return x * x * (3.0 - 2.0 * x); 19} 20 21float quintic_interp(float x) 22{ 23 return x * x * x * (x * (x * 6 - 15) + 10); 24} 25 26float2 quintic_interp(float2 x) 27{ 28 return x * x * x * (x * (x * 6 - 15) + 10); 29} 30 31float perlin_noise(float2 p) 32{ 33 float2 sq = floor(p); 34 float2 sqi = frac(p); 35 36 float r0 = rand2(sq + float2(0,0)); 37 float r1 = rand2(sq + float2(1,0)); 38 float r2 = rand2(sq + float2(0,1)); 39 float r3 = rand2(sq + float2(1,1)); 40 41 float2 u = cubic_interp(sqi); 42 43 return lerp(r0, r1, u.x) + 44 (r2 - r0) * u.y * (1.0 - u.x) + 45 (r3 - r1) * u.x * u.y; 46} 47 48float perlin_noise_3d(float3 p) 49{ 50 float3 sq = floor(p); 51 float3 sqi = frac(p); 52 53 float r0 = rand3(sq + float3(0,0,0)); 54 float r1 = rand3(sq + float3(1,0,0)); 55 float r2 = rand3(sq + float3(0,1,0)); 56 float r3 = rand3(sq + float3(1,1,0)); 57 float r4 = rand3(sq + float3(0,0,1)); 58 float r5 = rand3(sq + float3(1,0,1)); 59 float r6 = rand3(sq + float3(0,1,1)); 60 float r7 = rand3(sq + float3(1,1,1)); 61 62 float3 u = cubic_interp(sqi); 63 64 return lerp( 65 lerp(r0, r1, u.x) + 66 (r2 - r0) * u.y * (1.0 - u.x) + 67 (r3 - r1) * u.x * u.y, 68 lerp(r4, r5, u.x) + 69 (r6 - r4) * u.y * (1.0 - u.x) + 70 (r7 - r5) * u.x * u.y, 71 u.z); 72} 73 74float simplex_noise(float2 p) 75{ 76 float2 sq = floor(p); 77 float2 sqi = frac(p); 78 79 float r0 = rand2(sq + float2(0,0)); 80 float r1 = rand2(sq + float2(1,0)); 81 float r2 = rand2(sq + float2(0,1)); 82 float r3 = rand2(sq + float2(1,1)); 83 84 float2 u = quintic_interp(sqi); 85 86 return lerp(r0, r1, u.x) + 87 (r2 - r0) * u.y * (1.0 - u.x) + 88 (r3 - r1) * u.x * u.y; 89} 90 91#endif // __NOISE_INC 92