Skip to content

Commit 0b87556

Browse files
paramatest31
authored andcommittedSep 7, 2015
Shaders: use triple-frequency waving for leaves and plants
1 parent 4967e48 commit 0b87556

File tree

1 file changed

+23
-25
lines changed

1 file changed

+23
-25
lines changed
 

Diff for: ‎client/shaders/nodes_shader/opengl_vertex.glsl

+23-25
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,30 @@ varying vec3 lightVec;
1515
varying vec3 tsEyeVec;
1616
varying vec3 tsLightVec;
1717
varying float area_enable_parallax;
18+
varying float disp;
1819

1920
const float e = 2.718281828459;
2021
const float BS = 10.0;
2122

23+
2224
float smoothCurve(float x)
2325
{
2426
return x * x * (3.0 - 2.0 * x);
2527
}
28+
29+
2630
float triangleWave(float x)
2731
{
2832
return abs(fract(x + 0.5) * 2.0 - 1.0);
2933
}
34+
35+
3036
float smoothTriangleWave(float x)
3137
{
3238
return smoothCurve(triangleWave(x)) * 2.0 - 1.0;
3339
}
3440

41+
3542
void main(void)
3643
{
3744
gl_TexCoord[0] = gl_MultiTexCoord0;
@@ -47,48 +54,39 @@ void main(void)
4754
area_enable_parallax = 0.0;
4855
#endif
4956

50-
#if ((MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER)
57+
58+
#if (MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES) || (MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS)
59+
vec4 pos2 = mWorld * gl_Vertex;
60+
float tOffset = (pos2.x + pos2.y) * 0.001 + pos2.z * 0.002;
61+
disp = (smoothTriangleWave(animationTimer * 31.0 + tOffset) +
62+
smoothTriangleWave(animationTimer * 29.0 + tOffset) +
63+
smoothTriangleWave(animationTimer * 13.0 + tOffset)) - 0.9;
64+
#endif
65+
66+
67+
#if (MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER
5168
vec4 pos = gl_Vertex;
5269
pos.y -= 2.0;
53-
5470
float posYbuf = (pos.z / WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH);
55-
5671
pos.y -= sin(posYbuf) * WATER_WAVE_HEIGHT + sin(posYbuf / 7.0) * WATER_WAVE_HEIGHT;
5772
gl_Position = mWorldViewProj * pos;
5873
#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES
5974
vec4 pos = gl_Vertex;
60-
vec4 pos2 = mWorld * gl_Vertex;
61-
62-
/*
63-
* Mathematic optimization: pos2.x * A + pos2.z * A (2 multiplications + 1 addition)
64-
* replaced with: (pos2.x + pos2.z) * A (1 addition + 1 multiplication)
65-
* And bufferize calcul to a float
66-
*/
67-
float pos2XpZ = pos2.x + pos2.z;
68-
69-
pos.x += (smoothTriangleWave(animationTimer*10.0 + pos2XpZ * 0.01) * 2.0 - 1.0) * 0.4;
70-
pos.y += (smoothTriangleWave(animationTimer*15.0 + pos2XpZ * -0.01) * 2.0 - 1.0) * 0.2;
71-
pos.z += (smoothTriangleWave(animationTimer*10.0 + pos2XpZ * -0.01) * 2.0 - 1.0) * 0.4;
75+
pos.x += disp * 0.1;
76+
pos.y += disp * 0.1;
77+
pos.z += disp;
7278
gl_Position = mWorldViewProj * pos;
7379
#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS
7480
vec4 pos = gl_Vertex;
75-
vec4 pos2 = mWorld * gl_Vertex;
7681
if (gl_TexCoord[0].y < 0.05) {
77-
/*
78-
* Mathematic optimization: pos2.x * A + pos2.z * A (2 multiplications + 1 addition)
79-
* replaced with: (pos2.x + pos2.z) * A (1 addition + 1 multiplication)
80-
* And bufferize calcul to a float
81-
*/
82-
float pos2XpZ = pos2.x + pos2.z;
83-
84-
pos.x += (smoothTriangleWave(animationTimer * 20.0 + pos2XpZ * 0.1) * 2.0 - 1.0) * 0.8;
85-
pos.y -= (smoothTriangleWave(animationTimer * 10.0 + pos2XpZ * -0.5) * 2.0 - 1.0) * 0.4;
82+
pos.z += disp;
8683
}
8784
gl_Position = mWorldViewProj * pos;
8885
#else
8986
gl_Position = mWorldViewProj * gl_Vertex;
9087
#endif
9188

89+
9290
vPosition = gl_Position.xyz;
9391
worldPosition = (mWorld * gl_Vertex).xyz;
9492

0 commit comments

Comments
 (0)
Please sign in to comment.