diff --git a/shaders/glsl/rainPass.intro.frag.glsl b/shaders/glsl/rainPass.intro.frag.glsl index b09bc9f..410d50c 100644 --- a/shaders/glsl/rainPass.intro.frag.glsl +++ b/shaders/glsl/rainPass.intro.frag.glsl @@ -41,8 +41,16 @@ vec4 computeResult(float simTime, bool isFirstFrame, vec2 glyphPos, vec2 screenP return vec4(1., 0., 0., 0.); } - float columnTimeOffset = randomFloat(vec2(glyphPos.x, 0.)) * -10.; - columnTimeOffset += sin(glyphPos.x / numColumns * PI) - 1.; + float columnTimeOffset; + int column = int(glyphPos.x); + if (column == int(numColumns / 2.)) { + columnTimeOffset = -1.; + } else if (column == int(numColumns * 0.75)) { + columnTimeOffset = -2.; + } else { + columnTimeOffset = randomFloat(vec2(glyphPos.x, 0.)) * -4.; + columnTimeOffset += (sin(glyphPos.x / numColumns * PI) - 1.) * 2. - 2.5; + } float introTime = (simTime + columnTimeOffset) * fallSpeed / numRows * 100.; vec4 result = vec4(introTime, 0., 0., 0.); diff --git a/shaders/wgsl/rainPass.wgsl b/shaders/wgsl/rainPass.wgsl index eb42d09..9935ca2 100644 --- a/shaders/wgsl/rainPass.wgsl +++ b/shaders/wgsl/rainPass.wgsl @@ -221,8 +221,16 @@ fn computeIntro (simTime : f32, isFirstFrame : bool, glyphPos : vec2, scree return vec4(1.0, 0.0, 0.0, 0.0); } - var columnTimeOffset = randomFloat(glyphPos) * -10.0; - columnTimeOffset += sin(glyphPos.x / config.gridSize.x * PI) - 1.0; + var columnTimeOffset = 0.0; + var column = i32(glyphPos.x); + if (column == i32(config.gridSize.y / 2.0)) { + columnTimeOffset = -1.0; + } else if (column == i32(config.gridSize.y * 0.75)) { + columnTimeOffset = -2.0; + } else { + columnTimeOffset = randomFloat(vec2(glyphPos.x, 0.)) * -4.; + columnTimeOffset += (sin(glyphPos.x / config.gridSize.y * PI) - 1.) * 2. - 2.5; + } var introTime = (simTime + columnTimeOffset) * config.fallSpeed / config.gridSize.y * 100.0; var result = vec4(introTime, 0.0, 0.0, 0.0);