source: trunk/tutorial/03_noise.lolfx @ 1827

Last change on this file since 1827 was 1827, checked in by sam, 8 years ago

tutorial: port noise demo to PS3 and Xbox360.

File size: 5.9 KB
Line 
1-- GLSL.Vert --
2
3#version 120
4
5attribute vec2 in_Position;
6
7void main(void)
8{
9    gl_Position = vec4(in_Position, 0.0, 1.0);
10}
11
12-- GLSL.Frag --
13
14#version 120
15
16uniform float u_Time;
17
18vec3 noise2d(vec2 p)
19{
20    return vec3(fract(sin(dot(p, vec2(12.3453, -54.3353432))) * 8433.235443),
21                fract(sin(dot(p, vec2(34.23232, 98.03537))) * 8294.5345433),
22                fract(sin(dot(p, vec2(82.91234, -19.243533))) * 2912.454369));
23}
24
25vec3 noise3d(vec3 p)
26{
27    return vec3(fract(sin(54.343909 + dot(p, vec3(12.3453, -54.3353432, 34.3490432))) * 8433.235443),
28                fract(sin(93.329945 - dot(p, vec3(34.23232, 98.0353743, 90.2390984))) * 8294.5345433),
29                fract(sin(32.039284 + dot(p, vec3(82.91234, -19.243533, 22.3294090))) * 2912.454369));
30}
31
32vec3 perlin2d(vec2 p)
33{
34    vec2 a = floor(p);
35    vec2 d = p - a;
36    d = d * d * (3.0 - 2.0 * d);
37
38    vec3 n1 = noise2d(a);
39    vec3 n2 = noise2d(a + vec2(1.0, 0.0));
40    vec3 n3 = noise2d(a + vec2(0.0, 1.0));
41    vec3 n4 = noise2d(a + vec2(1.0, 1.0));
42
43    vec3 q1 = n2 * d.x + n1 * (1.0 - d.x);
44    vec3 q2 = n4 * d.x + n3 * (1.0 - d.x);
45
46    vec3 q3 = q2 * d.y + q1 * (1.0 - d.y);
47
48    return q3;
49}
50
51vec3 perlin3d(vec3 p)
52{
53    mat3 r = mat3(0.36, 0.48, -0.8, -0.8, 0.60, 0.0, 0.48, 0.64, 0.60);
54    p = r * p;
55
56    vec3 a = floor(p);
57    vec3 d = p - a;
58    d = d * d * (3.0 - 2.0 * d);
59
60    vec3 o1 = noise3d(a);
61    vec3 o2 = noise3d(a + vec3(1.0, 0.0, 0.0));
62    vec3 o3 = noise3d(a + vec3(0.0, 1.0, 0.0));
63    vec3 o4 = noise3d(a + vec3(1.0, 1.0, 0.0));
64    vec3 o5 = noise3d(a + vec3(0.0, 0.0, 1.0));
65    vec3 o6 = noise3d(a + vec3(1.0, 0.0, 1.0));
66    vec3 o7 = noise3d(a + vec3(0.0, 1.0, 1.0));
67    vec3 o8 = noise3d(a + vec3(1.0, 1.0, 1.0));
68
69    vec3 n1 = o2 * d.x + o1 * (1.0 - d.x);
70    vec3 n2 = o4 * d.x + o3 * (1.0 - d.x);
71    vec3 n3 = o6 * d.x + o5 * (1.0 - d.x);
72    vec3 n4 = o8 * d.x + o7 * (1.0 - d.x);
73
74    vec3 q1 = n2 * d.y + n1 * (1.0 - d.y);
75    vec3 q2 = n4 * d.y + n3 * (1.0 - d.y);
76
77    vec3 q3 = q2 * d.z + q1 * (1.0 - d.z);
78
79    return q3;
80}
81
82void main(void)
83{
84    vec2 xy = gl_FragCoord.xy * 2.0;
85    xy.y -= u_Time * 400.0;
86    float z = u_Time * 2.0;
87
88    vec3 p = perlin3d(vec3(xy / 160.0, z)) / 2.0
89           + perlin3d(vec3(xy / 80.0, z + 1.5)) / 4.0
90           + perlin3d(vec3(xy / 40.0, z + 0.3)) / 8.0
91           + perlin3d(vec3(xy / 20.0, z + 3.3)) / 16.0
92           + perlin3d(vec3(xy / 10.0, z + 2.0)) / 32.0
93           + perlin3d(vec3(xy / 5.0, z + 1.7)) / 64.0
94           + perlin3d(vec3(xy / 2.5, z + 4.2)) / 128.0;
95
96    /* Scroll by adding [-.5,.5] */
97    p -= gl_FragCoord.y / 720.0 - 0.5;
98    p = max(p, 0.0);
99    p = min(p, 1.0);
100
101    p = p * p * (3.0 - 2.0 * p);
102    p = p * p * (3.0 - 2.0 * p);
103    gl_FragColor = vec4(min(p.x * 2.0, 1.0), max(p.x * 1.5 - 0.5, 0.0), 0.0, 1.0);
104}
105
106-- HLSL.Vert --
107
108void main(float2 in_Position : POSITION,
109          uniform float2 u_WinSize,
110          out float4 out_Position : POSITION,
111          out float2 pass_Position : TEXCOORD0)
112{
113    //pass_Position = in_Position * u_WinSize;
114    pass_Position = in_Position * float2(1280.0, 720.0);
115    out_Position = float4(in_Position, 0.0, 1.0);
116}
117
118-- HLSL.Frag --
119
120float3 noise2d(float2 p)
121{
122    return float3(frac(sin(dot(p, float2(12.3453, -54.3353432))) * 8433.235443),
123                  frac(sin(dot(p, float2(34.23232, 98.03537))) * 8294.5345433),
124                  frac(sin(dot(p, float2(82.91234, -19.243533))) * 2912.454369));
125}
126
127float3 noise3d(float3 p)
128{
129    return float3(frac(sin(54.343909 + dot(p, float3(12.3453, -54.3353432, 34.3490432))) * 8433.235443),
130                  frac(sin(93.329945 - dot(p, float3(34.23232, 98.0353743, 90.2390984))) * 8294.5345433),
131                  frac(sin(32.039284 + dot(p, float3(82.91234, -19.243533, 22.3294090))) * 2912.454369));
132}
133
134float3 perlin2d(float2 p)
135{
136    float2 a = floor(p);
137    float2 d = p - a;
138    d = d * d * (3.0 - 2.0 * d);
139
140    float3 n1 = noise2d(a);
141    float3 n2 = noise2d(a + float2(1.0, 0.0));
142    float3 n3 = noise2d(a + float2(0.0, 1.0));
143    float3 n4 = noise2d(a + float2(1.0, 1.0));
144
145    float3 q1 = n2 * d.x + n1 * (1.0 - d.x);
146    float3 q2 = n4 * d.x + n3 * (1.0 - d.x);
147
148    float3 q3 = q2 * d.y + q1 * (1.0 - d.y);
149
150    return q3;
151}
152
153float3 perlin3d(float3 p)
154{
155    float3x3 r = float3x3(0.36, 0.48, -0.8, -0.8, 0.60, 0.0, 0.48, 0.64, 0.60);
156    p = mul(r, p);
157
158    float3 a = floor(p);
159    float3 d = p - a;
160    d = d * d * (3.0 - 2.0 * d);
161
162    float3 o1 = noise3d(a);
163    float3 o2 = noise3d(a + float3(1.0, 0.0, 0.0));
164    float3 o3 = noise3d(a + float3(0.0, 1.0, 0.0));
165    float3 o4 = noise3d(a + float3(1.0, 1.0, 0.0));
166    float3 o5 = noise3d(a + float3(0.0, 0.0, 1.0));
167    float3 o6 = noise3d(a + float3(1.0, 0.0, 1.0));
168    float3 o7 = noise3d(a + float3(0.0, 1.0, 1.0));
169    float3 o8 = noise3d(a + float3(1.0, 1.0, 1.0));
170
171    float3 n1 = o2 * d.x + o1 * (1.0 - d.x);
172    float3 n2 = o4 * d.x + o3 * (1.0 - d.x);
173    float3 n3 = o6 * d.x + o5 * (1.0 - d.x);
174    float3 n4 = o8 * d.x + o7 * (1.0 - d.x);
175
176    float3 q1 = n2 * d.y + n1 * (1.0 - d.y);
177    float3 q2 = n4 * d.y + n3 * (1.0 - d.y);
178
179    float3 q3 = q2 * d.z + q1 * (1.0 - d.z);
180
181    return q3;
182}
183
184void main(in float2 pass_Position : TEXCOORD0,
185          uniform float u_Time,
186          out float4 out_FragColor : COLOR)
187{
188    float2 xy = pass_Position;
189    xy.y -= u_Time * 400.0;
190    float z = u_Time * 2.0;
191
192    float3 p = perlin3d(float3(xy / 160.0, z)) / 2.0
193             + perlin3d(float3(xy / 80.0, z + 1.5)) / 4.0
194             + perlin3d(float3(xy / 40.0, z + 0.3)) / 8.0
195             + perlin3d(float3(xy / 20.0, z + 3.3)) / 16.0
196             + perlin3d(float3(xy / 10.0, z + 2.0)) / 32.0
197             + perlin3d(float3(xy / 5.0, z + 1.7)) / 64.0
198             + perlin3d(float3(xy / 2.5, z + 4.2)) / 128.0;
199
200    /* Scroll by adding [-.5,.5] */
201    p -= pass_Position.y / 1440.0;
202    p = max(p, 0.0);
203    p = min(p, 1.0);
204
205    p = p * p * (3.0 - 2.0 * p);
206    p = p * p * (3.0 - 2.0 * p);
207    out_FragColor = float4(min(p.x * 2.0, 1.0), max(p.x * 1.5 - 0.5, 0.0), 0.0, 1.0);
208}
Note: See TracBrowser for help on using the repository browser.