yum-archive/Tooner

A toon shader for Unity's BIRP.

git clone https://git.yummers.dev/yum-archive/Tooner

yumAdd fog gimmickbcadf1d

master
1.8 KiB92 linesraw
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