|
1 | 1 | /** |
2 | | - * postprocessing v4.3.0 build Feb 17 2018 |
| 2 | + * postprocessing v4.3.1 build Feb 24 2018 |
3 | 3 | * https://github.com/vanruesc/postprocessing |
4 | 4 | * Copyright 2018 Raoul van Rüschen, Zlib |
5 | 5 | */ |
|
391 | 391 | return CopyMaterial; |
392 | 392 | }(three.ShaderMaterial); |
393 | 393 |
|
394 | | - var fragment$6 = "#include <packing>\r\n\r\nuniform sampler2D tDepth;\r\nuniform float cameraNear;\r\nuniform float cameraFar;\r\n\r\nvarying float vViewZ;\r\nvarying vec4 vProjTexCoord;\r\n\r\nvoid main() {\r\n\r\n\t// Transform into Cartesian coordinate (not mirrored).\r\n\tvec2 projTexCoord = (vProjTexCoord.xy / vProjTexCoord.w) * 0.5 + 0.5;\r\n\tprojTexCoord = clamp(projTexCoord, 0.002, 0.998);\r\n\r\n\tfloat fragCoordZ = unpackRGBAToDepth(texture2D(tDepth, projTexCoord));\r\n\r\n\t#ifdef PERSPECTIVE_CAMERA\r\n\r\n\t\tfloat viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar);\r\n\r\n\t#else\r\n\r\n\t\tfloat viewZ = orthographicDepthToViewZ(fragCoordZ, cameraNear, cameraFar);\r\n\r\n\t#endif\r\n\r\n\tfloat depthTest = (vViewZ <= viewZ) ? 1.0 : 0.0;\r\n\r\n\tgl_FragColor.rgb = vec3(0.0, depthTest, 1.0);\r\n\r\n}\r\n"; |
| 394 | + var fragment$6 = "#include <packing>\r\n#include <clipping_planes_pars_fragment>\r\n\r\nuniform sampler2D tDepth;\r\nuniform float cameraNear;\r\nuniform float cameraFar;\r\n\r\nvarying float vViewZ;\r\nvarying vec4 vProjTexCoord;\r\n\r\nvoid main() {\r\n\r\n\t#include <clipping_planes_fragment>\r\n\r\n\t// Transform into Cartesian coordinate (not mirrored).\r\n\tvec2 projTexCoord = (vProjTexCoord.xy / vProjTexCoord.w) * 0.5 + 0.5;\r\n\tprojTexCoord = clamp(projTexCoord, 0.002, 0.998);\r\n\r\n\tfloat fragCoordZ = unpackRGBAToDepth(texture2D(tDepth, projTexCoord));\r\n\r\n\t#ifdef PERSPECTIVE_CAMERA\r\n\r\n\t\tfloat viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar);\r\n\r\n\t#else\r\n\r\n\t\tfloat viewZ = orthographicDepthToViewZ(fragCoordZ, cameraNear, cameraFar);\r\n\r\n\t#endif\r\n\r\n\tfloat depthTest = (vViewZ <= viewZ) ? 1.0 : 0.0;\r\n\r\n\tgl_FragColor.rgb = vec3(0.0, depthTest, 1.0);\r\n\r\n}\r\n"; |
395 | 395 |
|
396 | | - var vertex$6 = "varying float vViewZ;\r\nvarying vec4 vProjTexCoord;\r\n\r\nvoid main() {\r\n\r\n\tvec4 mvPosition = modelViewMatrix * vec4(position, 1.0);\r\n\tvProjTexCoord = projectionMatrix * mvPosition;\r\n\tvViewZ = mvPosition.z;\r\n\r\n\tgl_Position = vProjTexCoord;\r\n\r\n}\r\n"; |
| 396 | + var vertex$6 = "#include <common>\r\n#include <morphtarget_pars_vertex>\r\n#include <skinning_pars_vertex>\r\n#include <clipping_planes_pars_vertex>\r\n\r\nvarying float vViewZ;\r\nvarying vec4 vProjTexCoord;\r\n\r\nvoid main() {\r\n\r\n\t#include <skinbase_vertex>\r\n\r\n\t#include <begin_vertex>\r\n\t#include <morphtarget_vertex>\r\n\t#include <skinning_vertex>\r\n\t#include <project_vertex>\r\n\r\n\tvViewZ = mvPosition.z;\r\n\tvProjTexCoord = gl_Position;\r\n\r\n\t#include <clipping_planes_vertex>\r\n\r\n}\r\n"; |
397 | 397 |
|
398 | 398 | var DepthComparisonMaterial = function (_ShaderMaterial) { |
399 | 399 | inherits(DepthComparisonMaterial, _ShaderMaterial); |
|
419 | 419 | vertexShader: vertex$6, |
420 | 420 |
|
421 | 421 | depthWrite: false, |
422 | | - depthTest: false |
| 422 | + depthTest: false, |
| 423 | + |
| 424 | + morphTargets: true, |
| 425 | + skinning: true |
423 | 426 |
|
424 | 427 | })); |
425 | 428 |
|
|
862 | 865 | return LuminosityMaterial; |
863 | 866 | }(three.ShaderMaterial); |
864 | 867 |
|
865 | | - var fragment$12 = "uniform sampler2D tDiffuse;\r\nuniform sampler2D tMask;\r\nuniform sampler2D tOutline;\r\n\r\nuniform vec3 visibleEdgeColor;\r\nuniform vec3 hiddenEdgeColor;\r\nuniform float pulse;\r\nuniform float edgeStrength;\r\n\r\n#ifdef USE_PATTERN\r\n\r\n\tuniform sampler2D tPattern;\r\n\tvarying vec2 vPatternCoord;\r\n\r\n#endif\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvec4 color = texture2D(tDiffuse, vUv);\r\n\tvec2 outline = texture2D(tOutline, vUv).rg;\r\n\tvec2 mask = texture2D(tMask, vUv).rg;\r\n\r\n\t#ifndef X_RAY\r\n\r\n\t\toutline.y = 0.0;\r\n\r\n\t#endif\r\n\r\n\toutline *= (edgeStrength * mask.x * pulse);\r\n\tvec3 outlineColor = outline.x * visibleEdgeColor + outline.y * hiddenEdgeColor;\r\n\r\n\t#ifdef ALPHA_BLENDING\r\n\r\n\t\tcolor.rgb = mix(color.rgb, outlineColor, max(outline.x, outline.y));\r\n\r\n\t#else\r\n\r\n\t\tcolor.rgb += outlineColor;\r\n\r\n\t#endif\r\n\r\n\t#ifdef USE_PATTERN\r\n\r\n\t\tvec3 patternColor = texture2D(tPattern, vPatternCoord).rgb;\r\n\r\n\t\t#ifdef X_RAY\r\n\r\n\t\t\tfloat hiddenFactor = 0.5;\r\n\r\n\t\t#else\r\n\r\n\t\t\tfloat hiddenFactor = 0.0;\r\n\r\n\t\t#endif\r\n\r\n\t\tfloat visibilityFactor = (1.0 - mask.y > 0.0) ? 1.0 : hiddenFactor;\r\n\r\n\t\tcolor.rgb += visibilityFactor * (1.0 - mask.x) * (1.0 - patternColor);\r\n\r\n\t#endif\r\n\r\n\tgl_FragColor = color;\r\n\r\n}\r\n"; |
| 868 | + var fragment$12 = "uniform sampler2D tDiffuse;\r\nuniform sampler2D tMask;\r\nuniform sampler2D tEdges;\r\n\r\nuniform vec3 visibleEdgeColor;\r\nuniform vec3 hiddenEdgeColor;\r\nuniform float pulse;\r\nuniform float edgeStrength;\r\n\r\n#ifdef USE_PATTERN\r\n\r\n\tuniform sampler2D tPattern;\r\n\tvarying vec2 vPatternCoord;\r\n\r\n#endif\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvec4 color = texture2D(tDiffuse, vUv);\r\n\tvec2 edge = texture2D(tEdges, vUv).rg;\r\n\tvec2 mask = texture2D(tMask, vUv).rg;\r\n\r\n\t#ifndef X_RAY\r\n\r\n\t\toutline.y = 0.0;\r\n\r\n\t#endif\r\n\r\n\tedge *= (edgeStrength * mask.x * pulse);\r\n\tvec3 outlineColor = edge.x * visibleEdgeColor + edge.y * hiddenEdgeColor;\r\n\r\n\t#ifdef ALPHA_BLENDING\r\n\r\n\t\tcolor.rgb = mix(color.rgb, outlineColor, max(edge.x, edge.y));\r\n\r\n\t#else\r\n\r\n\t\tcolor.rgb += outlineColor;\r\n\r\n\t#endif\r\n\r\n\t#ifdef USE_PATTERN\r\n\r\n\t\tvec3 patternColor = texture2D(tPattern, vPatternCoord).rgb;\r\n\r\n\t\t#ifdef X_RAY\r\n\r\n\t\t\tfloat hiddenFactor = 0.5;\r\n\r\n\t\t#else\r\n\r\n\t\t\tfloat hiddenFactor = 0.0;\r\n\r\n\t\t#endif\r\n\r\n\t\tfloat visibilityFactor = (1.0 - mask.y > 0.0) ? 1.0 : hiddenFactor;\r\n\r\n\t\tcolor.rgb += visibilityFactor * (1.0 - mask.x) * (1.0 - patternColor);\r\n\r\n\t#endif\r\n\r\n\tgl_FragColor = color;\r\n\r\n}\r\n"; |
866 | 869 |
|
867 | 870 | var vertex$12 = "#ifdef USE_PATTERN\r\n\r\n\tuniform float aspect;\r\n\tuniform float patternScale;\r\n\tvarying vec2 vPatternCoord;\r\n\r\n#endif\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\t#ifdef USE_PATTERN\r\n\r\n\t\tvec2 aspectCorrection = vec2(aspect, 1.0);\r\n\t\tvPatternCoord = uv * aspectCorrection * patternScale;\r\n\r\n\t#endif\r\n\r\n\tvUv = uv;\r\n\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n"; |
868 | 871 |
|
|
894 | 897 |
|
895 | 898 | tDiffuse: new three.Uniform(null), |
896 | 899 | tMask: new three.Uniform(null), |
897 | | - tOutline: new three.Uniform(null), |
| 900 | + tEdges: new three.Uniform(null), |
898 | 901 | tPattern: new three.Uniform(null), |
899 | 902 |
|
900 | 903 | edgeStrength: new three.Uniform(settings.edgeStrength), |
|
968 | 971 | return OutlineBlendMaterial; |
969 | 972 | }(three.ShaderMaterial); |
970 | 973 |
|
971 | | - var fragment$13 = "uniform sampler2D tMask;\r\n\r\nvarying vec2 vUv0;\r\nvarying vec2 vUv1;\r\nvarying vec2 vUv2;\r\nvarying vec2 vUv3;\r\n\r\nvoid main() {\r\n\r\n\tvec2 c0 = texture2D(tMask, vUv0).rg;\r\n\tvec2 c1 = texture2D(tMask, vUv1).rg;\r\n\tvec2 c2 = texture2D(tMask, vUv2).rg;\r\n\tvec2 c3 = texture2D(tMask, vUv3).rg;\r\n\r\n\tfloat d0 = (c0.x - c1.x) * 0.5;\r\n\tfloat d1 = (c2.x - c3.x) * 0.5;\r\n\tfloat d = length(vec2(d0, d1));\r\n\r\n\tfloat a0 = min(c0.y, c1.y);\r\n\tfloat a1 = min(c2.y, c3.y);\r\n\tfloat visibilityFactor = min(a0, a1);\r\n\r\n\tvec3 edgeColor = (1.0 - visibilityFactor > 0.001) ? vec3(1.0, 0.0, 0.0) : vec3(0.0, 1.0, 0.0);\r\n\r\n\tgl_FragColor = vec4(edgeColor * d, d);\r\n\r\n}\r\n"; |
| 974 | + var fragment$13 = "uniform sampler2D tMask;\r\n\r\nvarying vec2 vUv0;\r\nvarying vec2 vUv1;\r\nvarying vec2 vUv2;\r\nvarying vec2 vUv3;\r\n\r\nvoid main() {\r\n\r\n\tvec2 c0 = texture2D(tMask, vUv0).rg;\r\n\tvec2 c1 = texture2D(tMask, vUv1).rg;\r\n\tvec2 c2 = texture2D(tMask, vUv2).rg;\r\n\tvec2 c3 = texture2D(tMask, vUv3).rg;\r\n\r\n\tfloat d0 = (c0.x - c1.x) * 0.5;\r\n\tfloat d1 = (c2.x - c3.x) * 0.5;\r\n\tfloat d = length(vec2(d0, d1));\r\n\r\n\tfloat a0 = min(c0.y, c1.y);\r\n\tfloat a1 = min(c2.y, c3.y);\r\n\tfloat visibilityFactor = min(a0, a1);\r\n\r\n\tgl_FragColor.rg = (1.0 - visibilityFactor > 0.001) ? vec2(d, 0.0) : vec2(0.0, d);\r\n\r\n}\r\n"; |
972 | 975 |
|
973 | 976 | var vertex$13 = "uniform vec2 texelSize;\r\n\r\nvarying vec2 vUv0;\r\nvarying vec2 vUv1;\r\nvarying vec2 vUv2;\r\nvarying vec2 vUv3;\r\n\r\nvoid main() {\r\n\r\n\tvUv0 = vec2(uv.x + texelSize.x, uv.y);\r\n\tvUv1 = vec2(uv.x - texelSize.x, uv.y);\r\n\tvUv2 = vec2(uv.x, uv.y + texelSize.y);\r\n\tvUv3 = vec2(uv.x, uv.y - texelSize.y);\r\n\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n"; |
974 | 977 |
|
|
2539 | 2542 |
|
2540 | 2543 | _this.renderTargetDepth = new three.WebGLRenderTarget(1, 1, { |
2541 | 2544 | minFilter: three.LinearFilter, |
2542 | | - magFilter: three.LinearFilter |
| 2545 | + magFilter: three.LinearFilter, |
| 2546 | + format: three.RGBFormat |
2543 | 2547 | }); |
2544 | 2548 |
|
2545 | | - _this.renderTargetDepth.texture.name = "GodRays.Depth"; |
| 2549 | + _this.renderTargetDepth.texture.name = "Outline.Depth"; |
2546 | 2550 | _this.renderTargetDepth.texture.generateMipmaps = false; |
2547 | 2551 |
|
2548 | 2552 | _this.renderTargetMask = _this.renderTargetDepth.clone(); |
2549 | 2553 |
|
2550 | | - _this.renderTargetMask.texture.name = "GodRays.Mask"; |
| 2554 | + _this.renderTargetMask.texture.name = "Outline.Mask"; |
2551 | 2555 |
|
2552 | 2556 | _this.renderTargetEdges = new three.WebGLRenderTarget(1, 1, { |
2553 | 2557 | minFilter: three.LinearFilter, |
2554 | 2558 | magFilter: three.LinearFilter, |
2555 | 2559 | stencilBuffer: false, |
2556 | | - depthBuffer: false |
| 2560 | + depthBuffer: false, |
| 2561 | + format: three.RGBFormat |
2557 | 2562 | }); |
2558 | 2563 |
|
2559 | | - _this.renderTargetEdges.texture.name = "GodRays.Edges"; |
| 2564 | + _this.renderTargetEdges.texture.name = "Outline.Edges"; |
2560 | 2565 | _this.renderTargetEdges.texture.generateMipmaps = false; |
2561 | 2566 |
|
2562 | | - _this.renderTargetOutline = _this.renderTargetEdges.clone(); |
| 2567 | + _this.renderTargetBlurredEdges = _this.renderTargetEdges.clone(); |
2563 | 2568 |
|
2564 | | - _this.renderTargetOutline.texture.name = "GodRays.Outline"; |
| 2569 | + _this.renderTargetBlurredEdges.texture.name = "Outline.BlurredEdges"; |
2565 | 2570 |
|
2566 | 2571 | _this.renderPassDepth = new RenderPass(_this.mainScene, _this.mainCamera, { |
2567 | | - overrideMaterial: new three.MeshDepthMaterial({ depthPacking: three.RGBADepthPacking }), |
| 2572 | + overrideMaterial: new three.MeshDepthMaterial({ |
| 2573 | + depthPacking: three.RGBADepthPacking, |
| 2574 | + morphTargets: true, |
| 2575 | + skinning: true |
| 2576 | + }), |
2568 | 2577 | clearColor: new three.Color(0xffffff), |
2569 | 2578 | clearAlpha: 1.0 |
2570 | 2579 | }); |
|
2590 | 2599 |
|
2591 | 2600 | _this.outlineBlendMaterial = new OutlineBlendMaterial(options); |
2592 | 2601 | _this.outlineBlendMaterial.uniforms.tMask.value = _this.renderTargetMask.texture; |
2593 | | - _this.outlineBlendMaterial.uniforms.tOutline.value = _this.renderTargetOutline.texture; |
| 2602 | + |
| 2603 | + _this.blur = options.blur !== undefined ? options.blur : true; |
2594 | 2604 |
|
2595 | 2605 | _this.selection = []; |
2596 | 2606 |
|
|
2743 | 2753 | renderer.render(this.scene, this.camera, this.renderTargetEdges); |
2744 | 2754 |
|
2745 | 2755 | if (this.blurPass.enabled) { |
2746 | | - this.blurPass.render(renderer, this.renderTargetEdges, this.renderTargetOutline); |
| 2756 | + this.blurPass.render(renderer, this.renderTargetEdges, this.renderTargetBlurredEdges); |
2747 | 2757 | } |
2748 | 2758 |
|
2749 | 2759 | this.quad.material = this.outlineBlendMaterial; |
|
2760 | 2770 | this.renderPassDepth.initialize(renderer, alpha); |
2761 | 2771 | this.renderPassMask.initialize(renderer, alpha); |
2762 | 2772 | this.blurPass.initialize(renderer, alpha); |
2763 | | - |
2764 | | - if (!alpha) { |
2765 | | - |
2766 | | - this.renderTargetMask.texture.format = three.RGBFormat; |
2767 | | - this.renderTargetEdges.texture.format = three.RGBFormat; |
2768 | | - this.renderTargetOutline.texture.format = three.RGBFormat; |
2769 | | - } |
2770 | 2773 | } |
2771 | 2774 | }, { |
2772 | 2775 | key: "setSize", |
|
2783 | 2786 | height = this.blurPass.height; |
2784 | 2787 |
|
2785 | 2788 | this.renderTargetEdges.setSize(width, height); |
2786 | | - this.renderTargetOutline.setSize(width, height); |
| 2789 | + this.renderTargetBlurredEdges.setSize(width, height); |
2787 | 2790 |
|
2788 | 2791 | this.outlineBlendMaterial.uniforms.aspect.value = width / height; |
2789 | 2792 | this.outlineEdgesMaterial.setTexelSize(1.0 / width, 1.0 / height); |
|
2822 | 2825 |
|
2823 | 2826 | this.blurPass.enabled = value; |
2824 | 2827 |
|
2825 | | - this.outlineBlendMaterial.uniforms.tOutline.value = value ? this.renderTargetOutline.texture : this.renderTargetEdges.texture; |
| 2828 | + this.outlineBlendMaterial.uniforms.tEdges.value = value ? this.renderTargetBlurredEdges.texture : this.renderTargetEdges.texture; |
2826 | 2829 | } |
2827 | 2830 | }, { |
2828 | 2831 | key: "dithering", |
|
0 commit comments