Skip to content

Commit bbdef72

Browse files
committed
Added simple tilt-shift effect to ShaderExtras.
1 parent d7c99de commit bbdef72

File tree

1 file changed

+121
-0
lines changed

1 file changed

+121
-0
lines changed

examples/js/ShaderExtras.js

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -962,6 +962,127 @@ THREE.ShaderExtras = {
962962

963963
},
964964

965+
/* --------------------------------------------------------------------------------------------------
966+
// Simple fake tilt-shift effect, modulating two pass Gaussian blur (see above) by vertical position
967+
//
968+
// - 9 samples per pass
969+
// - standard deviation 2.7
970+
// - "h" and "v" parameters should be set to "1 / width" and "1 / height"
971+
// - "r" parameter control where "focused" horizontal line lies
972+
-------------------------------------------------------------------------------------------------- */
973+
974+
'horizontalTiltShift': {
975+
976+
uniforms: {
977+
978+
"tDiffuse": { type: "t", value: 0, texture: null },
979+
"h": { type: "f", value: 1.0 / 512.0 },
980+
"r": { type: "f", value: 0.35 }
981+
982+
},
983+
984+
vertexShader: [
985+
986+
"varying vec2 vUv;",
987+
988+
"void main() {",
989+
990+
"vUv = vec2( uv.x, 1.0 - uv.y );",
991+
"gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
992+
993+
"}"
994+
995+
].join("\n"),
996+
997+
fragmentShader: [
998+
999+
"uniform sampler2D tDiffuse;",
1000+
"uniform float h;",
1001+
"uniform float r;",
1002+
1003+
"varying vec2 vUv;",
1004+
1005+
"void main() {",
1006+
1007+
"vec4 sum = vec4( 0.0 );",
1008+
1009+
"float hh = h * abs( r - vUv.y );",
1010+
1011+
"sum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * hh, vUv.y ) ) * 0.051;",
1012+
"sum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * hh, vUv.y ) ) * 0.0918;",
1013+
"sum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * hh, vUv.y ) ) * 0.12245;",
1014+
"sum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * hh, vUv.y ) ) * 0.1531;",
1015+
"sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;",
1016+
"sum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * hh, vUv.y ) ) * 0.1531;",
1017+
"sum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * hh, vUv.y ) ) * 0.12245;",
1018+
"sum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * hh, vUv.y ) ) * 0.0918;",
1019+
"sum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * hh, vUv.y ) ) * 0.051;",
1020+
1021+
"gl_FragColor = sum;",
1022+
1023+
"}"
1024+
1025+
1026+
].join("\n")
1027+
1028+
},
1029+
1030+
'verticalTiltShift': {
1031+
1032+
uniforms: {
1033+
1034+
"tDiffuse": { type: "t", value: 0, texture: null },
1035+
"v": { type: "f", value: 1.0 / 512.0 },
1036+
"r": { type: "f", value: 0.35 }
1037+
1038+
},
1039+
1040+
vertexShader: [
1041+
1042+
"varying vec2 vUv;",
1043+
1044+
"void main() {",
1045+
1046+
"vUv = vec2( uv.x, 1.0 - uv.y );",
1047+
"gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
1048+
1049+
"}"
1050+
1051+
].join("\n"),
1052+
1053+
fragmentShader: [
1054+
1055+
"uniform sampler2D tDiffuse;",
1056+
"uniform float v;",
1057+
"uniform float r;",
1058+
1059+
"varying vec2 vUv;",
1060+
1061+
"void main() {",
1062+
1063+
"vec4 sum = vec4( 0.0 );",
1064+
1065+
"float vv = v * abs( r - vUv.y );",
1066+
1067+
"sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * vv ) ) * 0.051;",
1068+
"sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * vv ) ) * 0.0918;",
1069+
"sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * vv ) ) * 0.12245;",
1070+
"sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * vv ) ) * 0.1531;",
1071+
"sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;",
1072+
"sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * vv ) ) * 0.1531;",
1073+
"sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * vv ) ) * 0.12245;",
1074+
"sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * vv ) ) * 0.0918;",
1075+
"sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * vv ) ) * 0.051;",
1076+
1077+
"gl_FragColor = sum;",
1078+
1079+
"}"
1080+
1081+
1082+
].join("\n")
1083+
1084+
},
1085+
9651086
// METHODS
9661087

9671088
buildKernel: function( sigma ) {

0 commit comments

Comments
 (0)