@@ -962,6 +962,127 @@ THREE.ShaderExtras = {
962
962
963
963
} ,
964
964
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
+
965
1086
// METHODS
966
1087
967
1088
buildKernel : function ( sigma ) {
0 commit comments