@needle-tools/three 0.145.2 → 0.146.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/three.cjs +3559 -6924
- package/build/three.js +3559 -6924
- package/build/three.min.js +1 -2
- package/build/three.module.js +732 -339
- package/examples/js/animation/AnimationClipCreator.js +0 -8
- package/examples/js/animation/CCDIKSolver.js +49 -66
- package/examples/js/animation/MMDAnimationHelper.js +66 -137
- package/examples/js/animation/MMDPhysics.js +70 -134
- package/examples/js/cameras/CinematicCamera.js +33 -22
- package/examples/js/controls/ArcballControls.js +138 -405
- package/examples/js/controls/DragControls.js +8 -33
- package/examples/js/controls/FirstPersonControls.js +32 -54
- package/examples/js/controls/FlyControls.js +29 -55
- package/examples/js/controls/OrbitControls.js +85 -95
- package/examples/js/controls/PointerLockControls.js +5 -14
- package/examples/js/controls/TrackballControls.js +33 -86
- package/examples/js/controls/TransformControls.js +84 -169
- package/examples/js/csm/CSM.js +4 -39
- package/examples/js/csm/CSMFrustum.js +3 -9
- package/examples/js/csm/CSMHelper.js +24 -4
- package/examples/js/csm/CSMShader.js +2 -6
- package/examples/js/curves/CurveExtras.js +27 -27
- package/examples/js/curves/NURBSCurve.js +4 -16
- package/examples/js/curves/NURBSSurface.js +3 -9
- package/examples/js/curves/NURBSUtils.js +8 -45
- package/examples/js/effects/AnaglyphEffect.js +4 -18
- package/examples/js/effects/AsciiEffect.js +32 -31
- package/examples/js/effects/OutlineEffect.js +26 -30
- package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
- package/examples/js/effects/PeppersGhostEffect.js +12 -39
- package/examples/js/effects/StereoEffect.js +0 -4
- package/examples/js/environments/RoomEnvironment.js +12 -10
- package/examples/js/exporters/ColladaExporter.js +48 -65
- package/examples/js/exporters/DRACOExporter.js +22 -22
- package/examples/js/exporters/EXRExporter.js +15 -18
- package/examples/js/exporters/GLTFExporter.js +143 -261
- package/examples/js/exporters/MMDExporter.js +5 -12
- package/examples/js/exporters/OBJExporter.js +42 -33
- package/examples/js/exporters/PLYExporter.js +38 -33
- package/examples/js/exporters/STLExporter.js +5 -7
- package/examples/js/exporters/USDZExporter.js +110 -25
- package/examples/js/geometries/BoxLineGeometry.js +0 -1
- package/examples/js/geometries/ConvexGeometry.js +11 -6
- package/examples/js/geometries/DecalGeometry.js +53 -20
- package/examples/js/geometries/LightningStrike.js +54 -67
- package/examples/js/geometries/ParametricGeometries.js +8 -7
- package/examples/js/geometries/ParametricGeometry.js +25 -12
- package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
- package/examples/js/geometries/TeapotGeometry.js +54 -50
- package/examples/js/geometries/TextGeometry.js +6 -4
- package/examples/js/helpers/LightProbeHelper.js +1 -2
- package/examples/js/helpers/OctreeHelper.js +22 -20
- package/examples/js/helpers/PositionalAudioHelper.js +8 -6
- package/examples/js/helpers/RectAreaLightHelper.js +6 -7
- package/examples/js/helpers/VertexNormalsHelper.js +15 -13
- package/examples/js/helpers/VertexTangentsHelper.js +15 -9
- package/examples/js/helpers/ViewHelper.js +31 -16
- package/examples/js/interactive/HTMLMesh.js +22 -33
- package/examples/js/interactive/InteractiveGroup.js +6 -12
- package/examples/js/interactive/SelectionBox.js +3 -70
- package/examples/js/interactive/SelectionHelper.js +0 -8
- package/examples/js/lights/LightProbeGenerator.js +32 -39
- package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
- package/examples/js/lines/LineGeometry.js +3 -5
- package/examples/js/lines/LineMaterial.js +4 -11
- package/examples/js/lines/LineSegments2.js +38 -89
- package/examples/js/lines/LineSegmentsGeometry.js +7 -28
- package/examples/js/lines/Wireframe.js +2 -7
- package/examples/js/lines/WireframeGeometry2.js +3 -1
- package/examples/js/loaders/3DMLoader.js +58 -155
- package/examples/js/loaders/3MFLoader.js +72 -106
- package/examples/js/loaders/AMFLoader.js +0 -25
- package/examples/js/loaders/BVHLoader.js +44 -43
- package/examples/js/loaders/BasisTextureLoader.js +16 -46
- package/examples/js/loaders/ColladaLoader.js +201 -359
- package/examples/js/loaders/DDSLoader.js +24 -25
- package/examples/js/loaders/DRACOLoader.js +29 -66
- package/examples/js/loaders/EXRLoader.js +67 -164
- package/examples/js/loaders/FBXLoader.js +286 -441
- package/examples/js/loaders/FontLoader.js +6 -15
- package/examples/js/loaders/GCodeLoader.js +15 -16
- package/examples/js/loaders/GLTFLoader.js +354 -405
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
- package/examples/js/loaders/KMZLoader.js +3 -7
- package/examples/js/loaders/KTXLoader.js +12 -30
- package/examples/js/loaders/LDrawLoader.js +178 -289
- package/examples/js/loaders/LUT3dlLoader.js +7 -11
- package/examples/js/loaders/LUTCubeLoader.js +0 -8
- package/examples/js/loaders/LWOLoader.js +59 -124
- package/examples/js/loaders/LogLuvLoader.js +27 -77
- package/examples/js/loaders/LottieLoader.js +4 -4
- package/examples/js/loaders/MD2Loader.js +26 -27
- package/examples/js/loaders/MDDLoader.js +6 -10
- package/examples/js/loaders/MMDLoader.js +180 -189
- package/examples/js/loaders/MTLLoader.js +18 -47
- package/examples/js/loaders/MaterialXLoader.js +392 -0
- package/examples/js/loaders/NRRDLoader.js +44 -84
- package/examples/js/loaders/OBJLoader.js +50 -65
- package/examples/js/loaders/PCDLoader.js +34 -29
- package/examples/js/loaders/PDBLoader.js +17 -13
- package/examples/js/loaders/PLYLoader.js +9 -39
- package/examples/js/loaders/PRWMLoader.js +11 -22
- package/examples/js/loaders/PVRLoader.js +7 -16
- package/examples/js/loaders/RGBELoader.js +36 -61
- package/examples/js/loaders/RGBMLoader.js +26 -87
- package/examples/js/loaders/STLLoader.js +20 -27
- package/examples/js/loaders/SVGLoader.js +361 -233
- package/examples/js/loaders/TDSLoader.js +81 -118
- package/examples/js/loaders/TGALoader.js +39 -41
- package/examples/js/loaders/TIFFLoader.js +0 -1
- package/examples/js/loaders/TTFLoader.js +0 -8
- package/examples/js/loaders/TiltLoader.js +14 -15
- package/examples/js/loaders/VOXLoader.js +8 -16
- package/examples/js/loaders/VRMLLoader.js +243 -340
- package/examples/js/loaders/VTKLoader.js +101 -118
- package/examples/js/loaders/XYZLoader.js +2 -4
- package/examples/js/loaders/lwo/IFFParser.js +55 -136
- package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
- package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
- package/examples/js/materials/MeshGouraudMaterial.js +15 -13
- package/examples/js/math/Capsule.js +0 -17
- package/examples/js/math/ColorConverter.js +3 -3
- package/examples/js/math/ConvexHull.js +183 -139
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/math/Lut.js +8 -15
- package/examples/js/math/MeshSurfaceSampler.js +6 -28
- package/examples/js/math/OBB.js +90 -49
- package/examples/js/math/Octree.js +2 -57
- package/examples/js/math/SimplexNoise.js +74 -88
- package/examples/js/misc/ConvexObjectBreaker.js +37 -48
- package/examples/js/misc/GPUComputationRenderer.js +14 -18
- package/examples/js/misc/Gyroscope.js +5 -9
- package/examples/js/misc/MD2Character.js +14 -23
- package/examples/js/misc/MD2CharacterComplex.js +73 -54
- package/examples/js/misc/MorphAnimMesh.js +0 -6
- package/examples/js/misc/MorphBlendMesh.js +3 -30
- package/examples/js/misc/ProgressiveLightMap.js +47 -43
- package/examples/js/misc/RollerCoaster.js +17 -24
- package/examples/js/misc/TubePainter.js +18 -12
- package/examples/js/misc/Volume.js +16 -45
- package/examples/js/misc/VolumeSlice.js +14 -24
- package/examples/js/modifiers/CurveModifier.js +19 -21
- package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
- package/examples/js/modifiers/SimplifyModifier.js +56 -59
- package/examples/js/modifiers/TessellateModifier.js +2 -9
- package/examples/js/objects/GroundProjectedEnv.js +2 -14
- package/examples/js/objects/Lensflare.js +47 -38
- package/examples/js/objects/LightningStorm.js +10 -13
- package/examples/js/objects/MarchingCubes.js +80 -59
- package/examples/js/objects/Reflector.js +22 -20
- package/examples/js/objects/ReflectorForSSRPass.js +19 -23
- package/examples/js/objects/Refractor.js +52 -30
- package/examples/js/objects/ShadowMesh.js +1 -2
- package/examples/js/objects/Sky.js +2 -7
- package/examples/js/objects/Water.js +23 -18
- package/examples/js/objects/Water2.js +20 -19
- package/examples/js/physics/AmmoPhysics.js +23 -20
- package/examples/js/physics/OimoPhysics.js +19 -17
- package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
- package/examples/js/postprocessing/AfterimagePass.js +19 -12
- package/examples/js/postprocessing/BloomPass.js +38 -17
- package/examples/js/postprocessing/BokehPass.js +29 -12
- package/examples/js/postprocessing/ClearPass.js +1 -6
- package/examples/js/postprocessing/CubeTexturePass.js +12 -9
- package/examples/js/postprocessing/DotScreenPass.js +7 -5
- package/examples/js/postprocessing/EffectComposer.js +25 -32
- package/examples/js/postprocessing/FilmPass.js +7 -5
- package/examples/js/postprocessing/GlitchPass.js +10 -11
- package/examples/js/postprocessing/HalftonePass.js +9 -9
- package/examples/js/postprocessing/LUTPass.js +2 -15
- package/examples/js/postprocessing/MaskPass.js +20 -17
- package/examples/js/postprocessing/OutlinePass.js +45 -36
- package/examples/js/postprocessing/Pass.js +11 -14
- package/examples/js/postprocessing/RenderPass.js +3 -7
- package/examples/js/postprocessing/SAOPass.js +40 -32
- package/examples/js/postprocessing/SMAAPass.js +34 -17
- package/examples/js/postprocessing/SSAARenderPass.js +14 -14
- package/examples/js/postprocessing/SSAOPass.js +56 -42
- package/examples/js/postprocessing/SSRPass.js +78 -61
- package/examples/js/postprocessing/SavePass.js +14 -6
- package/examples/js/postprocessing/ShaderPass.js +9 -8
- package/examples/js/postprocessing/TAARenderPass.js +11 -9
- package/examples/js/postprocessing/TexturePass.js +7 -4
- package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
- package/examples/js/renderers/CSS2DRenderer.js +2 -21
- package/examples/js/renderers/CSS3DRenderer.js +3 -24
- package/examples/js/renderers/Projector.js +29 -85
- package/examples/js/renderers/SVGRenderer.js +4 -50
- package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
- package/examples/js/shaders/AfterimageShader.js +3 -6
- package/examples/js/shaders/BasicShader.js +3 -6
- package/examples/js/shaders/BleachBypassShader.js +3 -6
- package/examples/js/shaders/BlendShader.js +3 -6
- package/examples/js/shaders/BokehShader.js +3 -6
- package/examples/js/shaders/BokehShader2.js +4 -13
- package/examples/js/shaders/BrightnessContrastShader.js +3 -6
- package/examples/js/shaders/ColorCorrectionShader.js +2 -6
- package/examples/js/shaders/ColorifyShader.js +2 -6
- package/examples/js/shaders/ConvolutionShader.js +5 -10
- package/examples/js/shaders/CopyShader.js +3 -6
- package/examples/js/shaders/DOFMipMapShader.js +3 -6
- package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
- package/examples/js/shaders/DigitalGlitch.js +3 -6
- package/examples/js/shaders/DotScreenShader.js +2 -6
- package/examples/js/shaders/FXAAShader.js +1 -3
- package/examples/js/shaders/FilmShader.js +3 -6
- package/examples/js/shaders/FocusShader.js +3 -6
- package/examples/js/shaders/FreiChenShader.js +2 -6
- package/examples/js/shaders/GammaCorrectionShader.js +3 -6
- package/examples/js/shaders/GodRaysShader.js +11 -24
- package/examples/js/shaders/HalftoneShader.js +3 -6
- package/examples/js/shaders/HorizontalBlurShader.js +3 -6
- package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
- package/examples/js/shaders/HueSaturationShader.js +3 -6
- package/examples/js/shaders/KaleidoShader.js +3 -6
- package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
- package/examples/js/shaders/LuminosityShader.js +3 -6
- package/examples/js/shaders/MMDToonShader.js +2 -6
- package/examples/js/shaders/MirrorShader.js +3 -6
- package/examples/js/shaders/NormalMapShader.js +2 -6
- package/examples/js/shaders/RGBShiftShader.js +3 -6
- package/examples/js/shaders/SAOShader.js +2 -6
- package/examples/js/shaders/SMAAShader.js +6 -18
- package/examples/js/shaders/SSAOShader.js +2 -6
- package/examples/js/shaders/SSRShader.js +6 -18
- package/examples/js/shaders/SepiaShader.js +3 -6
- package/examples/js/shaders/SobelOperatorShader.js +2 -6
- package/examples/js/shaders/TechnicolorShader.js +3 -6
- package/examples/js/shaders/ToneMapShader.js +3 -6
- package/examples/js/shaders/ToonShader.js +8 -24
- package/examples/js/shaders/TriangleBlurShader.js +2 -6
- package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
- package/examples/js/shaders/VelocityShader.js +126 -0
- package/examples/js/shaders/VerticalBlurShader.js +3 -6
- package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
- package/examples/js/shaders/VignetteShader.js +3 -6
- package/examples/js/shaders/VolumeShader.js +2 -6
- package/examples/js/shaders/WaterRefractionShader.js +2 -6
- package/examples/js/textures/FlakesTexture.js +0 -1
- package/examples/js/utils/BufferGeometryUtils.js +234 -168
- package/examples/js/utils/CameraUtils.js +5 -20
- package/examples/js/utils/GPUStatsPanel.js +3 -12
- package/examples/js/utils/GeometryCompressionUtils.js +19 -44
- package/examples/js/utils/GeometryUtils.js +13 -18
- package/examples/js/utils/LDrawUtils.js +8 -11
- package/examples/js/utils/PackedPhongMaterial.js +6 -4
- package/examples/js/utils/SceneUtils.js +117 -6
- package/examples/js/utils/ShadowMapViewer.js +17 -14
- package/examples/js/utils/SkeletonUtils.js +13 -27
- package/examples/js/utils/UVsDebug.js +20 -12
- package/examples/js/utils/WorkerPool.js +1 -11
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGPU.js +3 -1
- package/examples/jsm/controls/OrbitControls.js +44 -4
- package/examples/jsm/exporters/GLTFExporter.js +17 -131
- package/examples/jsm/exporters/USDZExporter.js +94 -28
- package/examples/jsm/interactive/HTMLMesh.js +2 -0
- package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -2
- package/examples/jsm/loaders/ColladaLoader.js +28 -0
- package/examples/jsm/loaders/FBXLoader.js +16 -2
- package/examples/jsm/loaders/GLTFLoader.js +204 -377
- package/examples/jsm/loaders/KTX2Loader.js +68 -29
- package/examples/jsm/loaders/LDrawLoader.js +14 -13
- package/examples/jsm/loaders/LottieLoader.js +4 -2
- package/examples/jsm/loaders/MaterialXLoader.js +728 -0
- package/examples/jsm/loaders/PCDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +68 -16
- package/examples/jsm/loaders/SVGLoader.js +227 -14
- package/examples/jsm/loaders/USDZLoader.js +31 -16
- package/examples/jsm/nodes/Nodes.js +14 -2
- package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
- package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/SkinningNode.js +1 -1
- package/examples/jsm/nodes/core/Node.js +1 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +36 -4
- package/examples/jsm/nodes/core/NodeFrame.js +2 -2
- package/examples/jsm/nodes/core/NodeVarying.js +7 -4
- package/examples/jsm/nodes/core/VaryingNode.js +6 -4
- package/examples/jsm/nodes/core/constants.js +13 -13
- package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
- package/examples/jsm/nodes/display/ViewportNode.js +106 -0
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
- package/examples/jsm/nodes/materials/Materials.js +9 -7
- package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +6 -2
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
- package/examples/jsm/nodes/math/MathNode.js +5 -0
- package/examples/jsm/nodes/math/OperatorNode.js +6 -1
- package/examples/jsm/nodes/shadernode/ShaderNode.js +26 -13
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +2 -0
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +18 -0
- package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
- package/examples/jsm/nodes/utils/JoinNode.js +8 -2
- package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
- package/examples/jsm/nodes/utils/TimerNode.js +1 -1
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
- package/examples/jsm/postprocessing/BloomPass.js +22 -3
- package/examples/jsm/postprocessing/BokehPass.js +18 -4
- package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
- package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
- package/examples/jsm/postprocessing/EffectComposer.js +9 -0
- package/examples/jsm/postprocessing/FilmPass.js +8 -0
- package/examples/jsm/postprocessing/GlitchPass.js +13 -1
- package/examples/jsm/postprocessing/HalftonePass.js +8 -0
- package/examples/jsm/postprocessing/OutlinePass.js +10 -0
- package/examples/jsm/postprocessing/Pass.js +2 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
- package/examples/jsm/postprocessing/SAOPass.js +20 -0
- package/examples/jsm/postprocessing/SMAAPass.js +16 -0
- package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
- package/examples/jsm/postprocessing/SavePass.js +17 -1
- package/examples/jsm/postprocessing/ShaderPass.js +8 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
- package/examples/jsm/postprocessing/TexturePass.js +8 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +39 -16
- package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
- package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +35 -5
- package/examples/jsm/shaders/MMDToonShader.js +0 -2
- package/examples/jsm/shaders/VelocityShader.js +128 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +130 -6
- package/examples/jsm/utils/SceneUtils.js +129 -4
- package/examples/jsm/utils/TextureUtils.js +85 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +6 -3
- package/package.json +11 -12
- package/src/Three.js +1 -0
- package/src/audio/AudioContext.js +5 -5
- package/src/cameras/CubeCamera.js +14 -14
- package/src/constants.js +1 -1
- package/src/core/InstancedBufferGeometry.js +1 -7
- package/src/extras/Earcut.js +67 -67
- package/src/helpers/DirectionalLightHelper.js +5 -1
- package/src/helpers/HemisphereLightHelper.js +4 -1
- package/src/helpers/PointLightHelper.js +2 -1
- package/src/helpers/SpotLightHelper.js +4 -2
- package/src/lights/PointLight.js +2 -2
- package/src/lights/SpotLight.js +2 -2
- package/src/loaders/FileLoader.js +4 -1
- package/src/loaders/ObjectLoader.js +5 -1
- package/src/materials/Material.js +1 -1
- package/src/math/Color.js +5 -5
- package/src/math/Matrix3.js +53 -18
- package/src/math/Ray.js +2 -5
- package/src/math/Sphere.js +19 -26
- package/src/objects/InstancedMesh.js +7 -0
- package/src/objects/LOD.js +25 -6
- package/src/renderers/WebGL3DRenderTarget.js +1 -1
- package/src/renderers/WebGLArrayRenderTarget.js +1 -1
- package/src/renderers/WebGLCubeRenderTarget.js +1 -1
- package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
- package/src/renderers/WebGLRenderTarget.js +1 -1
- package/src/renderers/WebGLRenderer.js +36 -62
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk.js +3 -0
- package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
- package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +20 -6
- package/src/renderers/shaders/UniformsLib.js +1 -1
- package/src/renderers/shaders/UniformsUtils.js +15 -0
- package/src/renderers/webgl/WebGLAttributes.js +2 -0
- package/src/renderers/webgl/WebGLBackground.js +15 -7
- package/src/renderers/webgl/WebGLCubeUVMaps.js +1 -1
- package/src/renderers/webgl/WebGLLights.js +0 -4
- package/src/renderers/webgl/WebGLMaterials.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -1
- package/src/renderers/webgl/WebGLState.js +31 -1
- package/src/renderers/webgl/WebGLTextures.js +71 -18
- package/src/renderers/webgl/WebGLUniforms.js +116 -20
- package/src/renderers/webgl/WebGLUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +46 -13
- package/src/renderers/webxr/WebXRManager.js +85 -3
- package/src/scenes/Scene.js +8 -0
- package/src/textures/CompressedArrayTexture.js +18 -0
- package/examples/js/libs/lottie_canvas.js +0 -12751
- package/examples/js/shaders/PixelShader.js +0 -51
- package/examples/jsm/shaders/PixelShader.js +0 -44
|
@@ -18,11 +18,15 @@
|
|
|
18
18
|
const solver = new AmmoLib.btSequentialImpulseConstraintSolver();
|
|
19
19
|
const world = new AmmoLib.btDiscreteDynamicsWorld( dispatcher, broadphase, solver, collisionConfiguration );
|
|
20
20
|
world.setGravity( new AmmoLib.btVector3( 0, - 9.8, 0 ) );
|
|
21
|
-
const worldTransform = new AmmoLib.btTransform();
|
|
21
|
+
const worldTransform = new AmmoLib.btTransform();
|
|
22
|
+
|
|
23
|
+
//
|
|
22
24
|
|
|
23
25
|
function getShape( geometry ) {
|
|
24
26
|
|
|
25
|
-
const parameters = geometry.parameters;
|
|
27
|
+
const parameters = geometry.parameters;
|
|
28
|
+
|
|
29
|
+
// TODO change type to is*
|
|
26
30
|
|
|
27
31
|
if ( geometry.type === 'BoxGeometry' ) {
|
|
28
32
|
|
|
@@ -48,11 +52,9 @@
|
|
|
48
52
|
|
|
49
53
|
const meshes = [];
|
|
50
54
|
const meshMap = new WeakMap();
|
|
51
|
-
|
|
52
55
|
function addMesh( mesh, mass = 0 ) {
|
|
53
56
|
|
|
54
57
|
const shape = getShape( mesh.geometry );
|
|
55
|
-
|
|
56
58
|
if ( shape !== null ) {
|
|
57
59
|
|
|
58
60
|
if ( mesh.isInstancedMesh ) {
|
|
@@ -81,10 +83,9 @@
|
|
|
81
83
|
const localInertia = new AmmoLib.btVector3( 0, 0, 0 );
|
|
82
84
|
shape.calculateLocalInertia( mass, localInertia );
|
|
83
85
|
const rbInfo = new AmmoLib.btRigidBodyConstructionInfo( mass, motionState, shape, localInertia );
|
|
84
|
-
const body = new AmmoLib.btRigidBody( rbInfo );
|
|
85
|
-
|
|
86
|
+
const body = new AmmoLib.btRigidBody( rbInfo );
|
|
87
|
+
// body.setFriction( 4 );
|
|
86
88
|
world.addRigidBody( body );
|
|
87
|
-
|
|
88
89
|
if ( mass > 0 ) {
|
|
89
90
|
|
|
90
91
|
meshes.push( mesh );
|
|
@@ -98,7 +99,6 @@
|
|
|
98
99
|
|
|
99
100
|
const array = mesh.instanceMatrix.array;
|
|
100
101
|
const bodies = [];
|
|
101
|
-
|
|
102
102
|
for ( let i = 0; i < mesh.count; i ++ ) {
|
|
103
103
|
|
|
104
104
|
const index = i * 16;
|
|
@@ -121,8 +121,9 @@
|
|
|
121
121
|
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
-
}
|
|
124
|
+
}
|
|
125
125
|
|
|
126
|
+
//
|
|
126
127
|
|
|
127
128
|
function setMeshPosition( mesh, position, index = 0 ) {
|
|
128
129
|
|
|
@@ -147,34 +148,35 @@
|
|
|
147
148
|
|
|
148
149
|
}
|
|
149
150
|
|
|
150
|
-
}
|
|
151
|
+
}
|
|
151
152
|
|
|
153
|
+
//
|
|
152
154
|
|
|
153
155
|
let lastTime = 0;
|
|
154
|
-
|
|
155
156
|
function step() {
|
|
156
157
|
|
|
157
158
|
const time = performance.now();
|
|
158
|
-
|
|
159
159
|
if ( lastTime > 0 ) {
|
|
160
160
|
|
|
161
|
-
const delta = ( time - lastTime ) / 1000;
|
|
161
|
+
const delta = ( time - lastTime ) / 1000;
|
|
162
162
|
|
|
163
|
-
|
|
163
|
+
// console.time( 'world.step' );
|
|
164
|
+
world.stepSimulation( delta, 10 );
|
|
165
|
+
// console.timeEnd( 'world.step' );
|
|
164
166
|
|
|
165
167
|
}
|
|
166
168
|
|
|
167
|
-
lastTime = time;
|
|
169
|
+
lastTime = time;
|
|
170
|
+
|
|
171
|
+
//
|
|
168
172
|
|
|
169
173
|
for ( let i = 0, l = meshes.length; i < l; i ++ ) {
|
|
170
174
|
|
|
171
175
|
const mesh = meshes[ i ];
|
|
172
|
-
|
|
173
176
|
if ( mesh.isInstancedMesh ) {
|
|
174
177
|
|
|
175
178
|
const array = mesh.instanceMatrix.array;
|
|
176
179
|
const bodies = meshMap.get( mesh );
|
|
177
|
-
|
|
178
180
|
for ( let j = 0; j < bodies.length; j ++ ) {
|
|
179
181
|
|
|
180
182
|
const body = bodies[ j ];
|
|
@@ -202,14 +204,15 @@
|
|
|
202
204
|
|
|
203
205
|
}
|
|
204
206
|
|
|
205
|
-
}
|
|
207
|
+
}
|
|
206
208
|
|
|
209
|
+
// animate
|
|
207
210
|
|
|
208
211
|
setInterval( step, 1000 / frameRate );
|
|
209
212
|
return {
|
|
210
213
|
addMesh: addMesh,
|
|
211
|
-
setMeshPosition: setMeshPosition
|
|
212
|
-
|
|
214
|
+
setMeshPosition: setMeshPosition
|
|
215
|
+
// addCompoundMesh
|
|
213
216
|
};
|
|
214
217
|
|
|
215
218
|
}
|
|
@@ -3,11 +3,15 @@
|
|
|
3
3
|
async function OimoPhysics() {
|
|
4
4
|
|
|
5
5
|
const frameRate = 60;
|
|
6
|
-
const world = new OIMO.World( 2, new OIMO.Vec3( 0, - 9.8, 0 ) );
|
|
6
|
+
const world = new OIMO.World( 2, new OIMO.Vec3( 0, - 9.8, 0 ) );
|
|
7
|
+
|
|
8
|
+
//
|
|
7
9
|
|
|
8
10
|
function getShape( geometry ) {
|
|
9
11
|
|
|
10
|
-
const parameters = geometry.parameters;
|
|
12
|
+
const parameters = geometry.parameters;
|
|
13
|
+
|
|
14
|
+
// TODO change type to is*
|
|
11
15
|
|
|
12
16
|
if ( geometry.type === 'BoxGeometry' ) {
|
|
13
17
|
|
|
@@ -29,11 +33,9 @@
|
|
|
29
33
|
|
|
30
34
|
const meshes = [];
|
|
31
35
|
const meshMap = new WeakMap();
|
|
32
|
-
|
|
33
36
|
function addMesh( mesh, mass = 0 ) {
|
|
34
37
|
|
|
35
38
|
const shape = getShape( mesh.geometry );
|
|
36
|
-
|
|
37
39
|
if ( shape !== null ) {
|
|
38
40
|
|
|
39
41
|
if ( mesh.isInstancedMesh ) {
|
|
@@ -60,7 +62,6 @@
|
|
|
60
62
|
const body = new OIMO.RigidBody( bodyConfig );
|
|
61
63
|
body.addShape( new OIMO.Shape( shapeConfig ) );
|
|
62
64
|
world.addRigidBody( body );
|
|
63
|
-
|
|
64
65
|
if ( mass > 0 ) {
|
|
65
66
|
|
|
66
67
|
meshes.push( mesh );
|
|
@@ -74,7 +75,6 @@
|
|
|
74
75
|
|
|
75
76
|
const array = mesh.instanceMatrix.array;
|
|
76
77
|
const bodies = [];
|
|
77
|
-
|
|
78
78
|
for ( let i = 0; i < mesh.count; i ++ ) {
|
|
79
79
|
|
|
80
80
|
const index = i * 16;
|
|
@@ -97,8 +97,9 @@
|
|
|
97
97
|
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
}
|
|
100
|
+
}
|
|
101
101
|
|
|
102
|
+
//
|
|
102
103
|
|
|
103
104
|
function setMeshPosition( mesh, position, index = 0 ) {
|
|
104
105
|
|
|
@@ -115,33 +116,33 @@
|
|
|
115
116
|
|
|
116
117
|
}
|
|
117
118
|
|
|
118
|
-
}
|
|
119
|
+
}
|
|
119
120
|
|
|
121
|
+
//
|
|
120
122
|
|
|
121
123
|
let lastTime = 0;
|
|
122
|
-
|
|
123
124
|
function step() {
|
|
124
125
|
|
|
125
126
|
const time = performance.now();
|
|
126
|
-
|
|
127
127
|
if ( lastTime > 0 ) {
|
|
128
128
|
|
|
129
129
|
// console.time( 'world.step' );
|
|
130
|
-
world.step( 1 / frameRate );
|
|
130
|
+
world.step( 1 / frameRate );
|
|
131
|
+
// console.timeEnd( 'world.step' );
|
|
131
132
|
|
|
132
133
|
}
|
|
133
134
|
|
|
134
|
-
lastTime = time;
|
|
135
|
+
lastTime = time;
|
|
136
|
+
|
|
137
|
+
//
|
|
135
138
|
|
|
136
139
|
for ( let i = 0, l = meshes.length; i < l; i ++ ) {
|
|
137
140
|
|
|
138
141
|
const mesh = meshes[ i ];
|
|
139
|
-
|
|
140
142
|
if ( mesh.isInstancedMesh ) {
|
|
141
143
|
|
|
142
144
|
const array = mesh.instanceMatrix.array;
|
|
143
145
|
const bodies = meshMap.get( mesh );
|
|
144
|
-
|
|
145
146
|
for ( let j = 0; j < bodies.length; j ++ ) {
|
|
146
147
|
|
|
147
148
|
const body = bodies[ j ];
|
|
@@ -161,14 +162,15 @@
|
|
|
161
162
|
|
|
162
163
|
}
|
|
163
164
|
|
|
164
|
-
}
|
|
165
|
+
}
|
|
165
166
|
|
|
167
|
+
// animate
|
|
166
168
|
|
|
167
169
|
setInterval( step, 1000 / frameRate );
|
|
168
170
|
return {
|
|
169
171
|
addMesh: addMesh,
|
|
170
|
-
setMeshPosition: setMeshPosition
|
|
171
|
-
|
|
172
|
+
setMeshPosition: setMeshPosition
|
|
173
|
+
// addCompoundMesh
|
|
172
174
|
};
|
|
173
175
|
|
|
174
176
|
}
|
|
@@ -108,10 +108,7 @@
|
|
|
108
108
|
this.fsQuad = new THREE.FullScreenQuad( null );
|
|
109
109
|
|
|
110
110
|
}
|
|
111
|
-
|
|
112
|
-
render( renderer, writeBuffer, readBuffer, deltaTime
|
|
113
|
-
/*, maskActive*/
|
|
114
|
-
) {
|
|
111
|
+
render( renderer, writeBuffer, readBuffer, deltaTime /*, maskActive*/ ) {
|
|
115
112
|
|
|
116
113
|
if ( this.needsInit ) {
|
|
117
114
|
|
|
@@ -129,16 +126,18 @@
|
|
|
129
126
|
this.fsQuad.material = this.materialLuminance;
|
|
130
127
|
this.materialLuminance.uniforms.tDiffuse.value = readBuffer.texture;
|
|
131
128
|
renderer.setRenderTarget( this.currentLuminanceRT );
|
|
132
|
-
this.fsQuad.render( renderer );
|
|
133
|
-
//adapt the luminance over time.
|
|
129
|
+
this.fsQuad.render( renderer );
|
|
134
130
|
|
|
131
|
+
//Use the new luminance values, the previous luminance and the frame delta to
|
|
132
|
+
//adapt the luminance over time.
|
|
135
133
|
this.fsQuad.material = this.materialAdaptiveLum;
|
|
136
134
|
this.materialAdaptiveLum.uniforms.delta.value = deltaTime;
|
|
137
135
|
this.materialAdaptiveLum.uniforms.lastLum.value = this.previousLuminanceRT.texture;
|
|
138
136
|
this.materialAdaptiveLum.uniforms.currentLum.value = this.currentLuminanceRT.texture;
|
|
139
137
|
renderer.setRenderTarget( this.luminanceRT );
|
|
140
|
-
this.fsQuad.render( renderer );
|
|
138
|
+
this.fsQuad.render( renderer );
|
|
141
139
|
|
|
140
|
+
//Copy the new adapted luminance value so that it can be used by the next frame.
|
|
142
141
|
this.fsQuad.material = this.materialCopy;
|
|
143
142
|
this.copyUniforms.tDiffuse.value = this.luminanceRT.texture;
|
|
144
143
|
renderer.setRenderTarget( this.previousLuminanceRT );
|
|
@@ -148,7 +147,6 @@
|
|
|
148
147
|
|
|
149
148
|
this.fsQuad.material = this.materialToneMap;
|
|
150
149
|
this.materialToneMap.uniforms.tDiffuse.value = readBuffer.texture;
|
|
151
|
-
|
|
152
150
|
if ( this.renderToScreen ) {
|
|
153
151
|
|
|
154
152
|
renderer.setRenderTarget( null );
|
|
@@ -163,7 +161,6 @@
|
|
|
163
161
|
}
|
|
164
162
|
|
|
165
163
|
}
|
|
166
|
-
|
|
167
164
|
reset() {
|
|
168
165
|
|
|
169
166
|
// render targets
|
|
@@ -190,7 +187,9 @@
|
|
|
190
187
|
this.luminanceRT.texture.generateMipmaps = false;
|
|
191
188
|
this.previousLuminanceRT = new THREE.WebGLRenderTarget( this.resolution, this.resolution );
|
|
192
189
|
this.previousLuminanceRT.texture.name = 'AdaptiveToneMappingPass.pl';
|
|
193
|
-
this.previousLuminanceRT.texture.generateMipmaps = false;
|
|
190
|
+
this.previousLuminanceRT.texture.generateMipmaps = false;
|
|
191
|
+
|
|
192
|
+
// We only need mipmapping for the current luminosity because we want a down-sampled version to sample in our adaptive shader
|
|
194
193
|
|
|
195
194
|
const pars = {
|
|
196
195
|
minFilter: THREE.LinearMipmapLinearFilter,
|
|
@@ -198,21 +197,21 @@
|
|
|
198
197
|
};
|
|
199
198
|
this.currentLuminanceRT = new THREE.WebGLRenderTarget( this.resolution, this.resolution, pars );
|
|
200
199
|
this.currentLuminanceRT.texture.name = 'AdaptiveToneMappingPass.cl';
|
|
201
|
-
|
|
202
200
|
if ( this.adaptive ) {
|
|
203
201
|
|
|
204
202
|
this.materialToneMap.defines[ 'ADAPTED_LUMINANCE' ] = '';
|
|
205
203
|
this.materialToneMap.uniforms.luminanceMap.value = this.luminanceRT.texture;
|
|
206
204
|
|
|
207
|
-
}
|
|
208
|
-
|
|
205
|
+
}
|
|
209
206
|
|
|
207
|
+
//Put something in the adaptive luminance texture so that the scene can render initially
|
|
210
208
|
this.fsQuad.material = new THREE.MeshBasicMaterial( {
|
|
211
209
|
color: 0x777777
|
|
212
210
|
} );
|
|
213
211
|
this.materialLuminance.needsUpdate = true;
|
|
214
212
|
this.materialAdaptiveLum.needsUpdate = true;
|
|
215
|
-
this.materialToneMap.needsUpdate = true;
|
|
213
|
+
this.materialToneMap.needsUpdate = true;
|
|
214
|
+
// renderer.render( this.scene, this.camera, this.luminanceRT );
|
|
216
215
|
// renderer.render( this.scene, this.camera, this.previousLuminanceRT );
|
|
217
216
|
// renderer.render( this.scene, this.camera, this.currentLuminanceRT );
|
|
218
217
|
|
|
@@ -237,7 +236,6 @@
|
|
|
237
236
|
this.materialToneMap.needsUpdate = true;
|
|
238
237
|
|
|
239
238
|
}
|
|
240
|
-
|
|
241
239
|
setAdaptionRate( rate ) {
|
|
242
240
|
|
|
243
241
|
if ( rate ) {
|
|
@@ -247,7 +245,6 @@
|
|
|
247
245
|
}
|
|
248
246
|
|
|
249
247
|
}
|
|
250
|
-
|
|
251
248
|
setMinLuminance( minLum ) {
|
|
252
249
|
|
|
253
250
|
if ( minLum ) {
|
|
@@ -258,7 +255,6 @@
|
|
|
258
255
|
}
|
|
259
256
|
|
|
260
257
|
}
|
|
261
|
-
|
|
262
258
|
setMaxLuminance( maxLum ) {
|
|
263
259
|
|
|
264
260
|
if ( maxLum ) {
|
|
@@ -268,7 +264,6 @@
|
|
|
268
264
|
}
|
|
269
265
|
|
|
270
266
|
}
|
|
271
|
-
|
|
272
267
|
setAverageLuminance( avgLum ) {
|
|
273
268
|
|
|
274
269
|
if ( avgLum ) {
|
|
@@ -278,7 +273,6 @@
|
|
|
278
273
|
}
|
|
279
274
|
|
|
280
275
|
}
|
|
281
|
-
|
|
282
276
|
setMiddleGrey( middleGrey ) {
|
|
283
277
|
|
|
284
278
|
if ( middleGrey ) {
|
|
@@ -288,7 +282,6 @@
|
|
|
288
282
|
}
|
|
289
283
|
|
|
290
284
|
}
|
|
291
|
-
|
|
292
285
|
dispose() {
|
|
293
286
|
|
|
294
287
|
if ( this.luminanceRT ) {
|
|
@@ -15,27 +15,23 @@
|
|
|
15
15
|
this.textureOld = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, {
|
|
16
16
|
magFilter: THREE.NearestFilter
|
|
17
17
|
} );
|
|
18
|
-
this.
|
|
18
|
+
this.compFsMaterial = new THREE.ShaderMaterial( {
|
|
19
19
|
uniforms: this.uniforms,
|
|
20
20
|
vertexShader: this.shader.vertexShader,
|
|
21
21
|
fragmentShader: this.shader.fragmentShader
|
|
22
22
|
} );
|
|
23
|
-
this.compFsQuad = new THREE.FullScreenQuad( this.
|
|
24
|
-
|
|
25
|
-
this.copyFsQuad = new THREE.FullScreenQuad(
|
|
23
|
+
this.compFsQuad = new THREE.FullScreenQuad( this.compFsMaterial );
|
|
24
|
+
this.copyFsMaterial = new THREE.MeshBasicMaterial();
|
|
25
|
+
this.copyFsQuad = new THREE.FullScreenQuad( this.copyFsMaterial );
|
|
26
26
|
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
render( renderer, writeBuffer, readBuffer
|
|
30
|
-
/*, deltaTime, maskActive*/
|
|
31
|
-
) {
|
|
28
|
+
render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive*/ ) {
|
|
32
29
|
|
|
33
30
|
this.uniforms[ 'tOld' ].value = this.textureOld.texture;
|
|
34
31
|
this.uniforms[ 'tNew' ].value = readBuffer.texture;
|
|
35
32
|
renderer.setRenderTarget( this.textureComp );
|
|
36
33
|
this.compFsQuad.render( renderer );
|
|
37
34
|
this.copyFsQuad.material.map = this.textureComp.texture;
|
|
38
|
-
|
|
39
35
|
if ( this.renderToScreen ) {
|
|
40
36
|
|
|
41
37
|
renderer.setRenderTarget( null );
|
|
@@ -47,12 +43,13 @@
|
|
|
47
43
|
if ( this.clear ) renderer.clear();
|
|
48
44
|
this.copyFsQuad.render( renderer );
|
|
49
45
|
|
|
50
|
-
}
|
|
51
|
-
|
|
46
|
+
}
|
|
52
47
|
|
|
48
|
+
// Swap buffers.
|
|
53
49
|
const temp = this.textureOld;
|
|
54
50
|
this.textureOld = this.textureComp;
|
|
55
|
-
this.textureComp = temp;
|
|
51
|
+
this.textureComp = temp;
|
|
52
|
+
// Now textureOld contains the latest image, ready for the next frame.
|
|
56
53
|
|
|
57
54
|
}
|
|
58
55
|
|
|
@@ -62,6 +59,16 @@
|
|
|
62
59
|
this.textureOld.setSize( width, height );
|
|
63
60
|
|
|
64
61
|
}
|
|
62
|
+
dispose() {
|
|
63
|
+
|
|
64
|
+
this.textureComp.dispose();
|
|
65
|
+
this.textureOld.dispose();
|
|
66
|
+
this.compFsMaterial.dispose();
|
|
67
|
+
this.copyFsMaterial.dispose();
|
|
68
|
+
this.compFsQuad.dispose();
|
|
69
|
+
this.copyFsQuad.dispose();
|
|
70
|
+
|
|
71
|
+
}
|
|
65
72
|
|
|
66
73
|
}
|
|
67
74
|
|
|
@@ -2,14 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
class BloomPass extends THREE.Pass {
|
|
4
4
|
|
|
5
|
-
constructor( strength = 1, kernelSize = 25, sigma = 4
|
|
5
|
+
constructor( strength = 1, kernelSize = 25, sigma = 4 ) {
|
|
6
6
|
|
|
7
|
-
super();
|
|
7
|
+
super();
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
// render targets
|
|
10
|
+
|
|
11
|
+
this.renderTargetX = new THREE.WebGLRenderTarget(); // will be resized later
|
|
10
12
|
this.renderTargetX.texture.name = 'BloomPass.x';
|
|
11
|
-
this.renderTargetY = new THREE.WebGLRenderTarget(
|
|
12
|
-
this.renderTargetY.texture.name = 'BloomPass.y';
|
|
13
|
+
this.renderTargetY = new THREE.WebGLRenderTarget(); // will be resized later
|
|
14
|
+
this.renderTargetY.texture.name = 'BloomPass.y';
|
|
15
|
+
|
|
16
|
+
// combine material
|
|
13
17
|
|
|
14
18
|
this.combineUniforms = THREE.UniformsUtils.clone( CombineShader.uniforms );
|
|
15
19
|
this.combineUniforms[ 'strength' ].value = strength;
|
|
@@ -19,7 +23,9 @@
|
|
|
19
23
|
fragmentShader: CombineShader.fragmentShader,
|
|
20
24
|
blending: THREE.AdditiveBlending,
|
|
21
25
|
transparent: true
|
|
22
|
-
} );
|
|
26
|
+
} );
|
|
27
|
+
|
|
28
|
+
// convolution material
|
|
23
29
|
|
|
24
30
|
if ( THREE.ConvolutionShader === undefined ) console.error( 'THREE.BloomPass relies on THREE.ConvolutionShader' );
|
|
25
31
|
const convolutionShader = THREE.ConvolutionShader;
|
|
@@ -39,23 +45,28 @@
|
|
|
39
45
|
this.fsQuad = new THREE.FullScreenQuad( null );
|
|
40
46
|
|
|
41
47
|
}
|
|
42
|
-
|
|
43
48
|
render( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {
|
|
44
49
|
|
|
45
|
-
if ( maskActive ) renderer.state.buffers.stencil.setTest( false );
|
|
50
|
+
if ( maskActive ) renderer.state.buffers.stencil.setTest( false );
|
|
51
|
+
|
|
52
|
+
// Render quad with blured scene into texture (convolution pass 1)
|
|
46
53
|
|
|
47
54
|
this.fsQuad.material = this.materialConvolution;
|
|
48
55
|
this.convolutionUniforms[ 'tDiffuse' ].value = readBuffer.texture;
|
|
49
56
|
this.convolutionUniforms[ 'uImageIncrement' ].value = BloomPass.blurX;
|
|
50
57
|
renderer.setRenderTarget( this.renderTargetX );
|
|
51
58
|
renderer.clear();
|
|
52
|
-
this.fsQuad.render( renderer );
|
|
59
|
+
this.fsQuad.render( renderer );
|
|
60
|
+
|
|
61
|
+
// Render quad with blured scene into texture (convolution pass 2)
|
|
53
62
|
|
|
54
63
|
this.convolutionUniforms[ 'tDiffuse' ].value = this.renderTargetX.texture;
|
|
55
64
|
this.convolutionUniforms[ 'uImageIncrement' ].value = BloomPass.blurY;
|
|
56
65
|
renderer.setRenderTarget( this.renderTargetY );
|
|
57
66
|
renderer.clear();
|
|
58
|
-
this.fsQuad.render( renderer );
|
|
67
|
+
this.fsQuad.render( renderer );
|
|
68
|
+
|
|
69
|
+
// Render original scene with superimposed blur to texture
|
|
59
70
|
|
|
60
71
|
this.fsQuad.material = this.materialCombine;
|
|
61
72
|
this.combineUniforms[ 'tDiffuse' ].value = this.renderTargetY.texture;
|
|
@@ -65,9 +76,23 @@
|
|
|
65
76
|
this.fsQuad.render( renderer );
|
|
66
77
|
|
|
67
78
|
}
|
|
79
|
+
setSize( width, height ) {
|
|
68
80
|
|
|
69
|
-
|
|
81
|
+
this.renderTargetX.setSize( width, height );
|
|
82
|
+
this.renderTargetY.setSize( width, height );
|
|
83
|
+
|
|
84
|
+
}
|
|
85
|
+
dispose() {
|
|
70
86
|
|
|
87
|
+
this.renderTargetX.dispose();
|
|
88
|
+
this.renderTargetY.dispose();
|
|
89
|
+
this.materialCombine.dispose();
|
|
90
|
+
this.materialConvolution.dispose();
|
|
91
|
+
this.fsQuad.dispose();
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
}
|
|
71
96
|
const CombineShader = {
|
|
72
97
|
uniforms: {
|
|
73
98
|
'tDiffuse': {
|
|
@@ -77,9 +102,7 @@
|
|
|
77
102
|
value: 1.0
|
|
78
103
|
}
|
|
79
104
|
},
|
|
80
|
-
vertexShader:
|
|
81
|
-
/* glsl */
|
|
82
|
-
`
|
|
105
|
+
vertexShader: /* glsl */`
|
|
83
106
|
|
|
84
107
|
varying vec2 vUv;
|
|
85
108
|
|
|
@@ -89,9 +112,7 @@
|
|
|
89
112
|
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
90
113
|
|
|
91
114
|
}`,
|
|
92
|
-
fragmentShader:
|
|
93
|
-
/* glsl */
|
|
94
|
-
`
|
|
115
|
+
fragmentShader: /* glsl */`
|
|
95
116
|
|
|
96
117
|
uniform float strength;
|
|
97
118
|
|
|
@@ -14,19 +14,24 @@
|
|
|
14
14
|
const focus = params.focus !== undefined ? params.focus : 1.0;
|
|
15
15
|
const aspect = params.aspect !== undefined ? params.aspect : camera.aspect;
|
|
16
16
|
const aperture = params.aperture !== undefined ? params.aperture : 0.025;
|
|
17
|
-
const maxblur = params.maxblur !== undefined ? params.maxblur : 1.0;
|
|
17
|
+
const maxblur = params.maxblur !== undefined ? params.maxblur : 1.0;
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
this.renderTargetDepth = new THREE.WebGLRenderTarget(
|
|
19
|
+
// render targets
|
|
20
|
+
|
|
21
|
+
this.renderTargetDepth = new THREE.WebGLRenderTarget( 1, 1, {
|
|
22
|
+
// will be resized later
|
|
22
23
|
minFilter: THREE.NearestFilter,
|
|
23
24
|
magFilter: THREE.NearestFilter
|
|
24
25
|
} );
|
|
25
|
-
this.renderTargetDepth.texture.name = 'BokehPass.depth';
|
|
26
|
+
this.renderTargetDepth.texture.name = 'BokehPass.depth';
|
|
27
|
+
|
|
28
|
+
// depth material
|
|
26
29
|
|
|
27
30
|
this.materialDepth = new THREE.MeshDepthMaterial();
|
|
28
31
|
this.materialDepth.depthPacking = THREE.RGBADepthPacking;
|
|
29
|
-
this.materialDepth.blending = THREE.NoBlending;
|
|
32
|
+
this.materialDepth.blending = THREE.NoBlending;
|
|
33
|
+
|
|
34
|
+
// bokeh material
|
|
30
35
|
|
|
31
36
|
if ( THREE.BokehShader === undefined ) {
|
|
32
37
|
|
|
@@ -55,12 +60,10 @@
|
|
|
55
60
|
this._oldClearColor = new THREE.Color();
|
|
56
61
|
|
|
57
62
|
}
|
|
58
|
-
|
|
59
|
-
render( renderer, writeBuffer, readBuffer
|
|
60
|
-
/*, deltaTime, maskActive*/
|
|
61
|
-
) {
|
|
63
|
+
render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive*/ ) {
|
|
62
64
|
|
|
63
65
|
// Render depth into texture
|
|
66
|
+
|
|
64
67
|
this.scene.overrideMaterial = this.materialDepth;
|
|
65
68
|
renderer.getClearColor( this._oldClearColor );
|
|
66
69
|
const oldClearAlpha = renderer.getClearAlpha();
|
|
@@ -70,12 +73,13 @@
|
|
|
70
73
|
renderer.setClearAlpha( 1.0 );
|
|
71
74
|
renderer.setRenderTarget( this.renderTargetDepth );
|
|
72
75
|
renderer.clear();
|
|
73
|
-
renderer.render( this.scene, this.camera );
|
|
76
|
+
renderer.render( this.scene, this.camera );
|
|
77
|
+
|
|
78
|
+
// Render bokeh composite
|
|
74
79
|
|
|
75
80
|
this.uniforms[ 'tColor' ].value = readBuffer.texture;
|
|
76
81
|
this.uniforms[ 'nearClip' ].value = this.camera.near;
|
|
77
82
|
this.uniforms[ 'farClip' ].value = this.camera.far;
|
|
78
|
-
|
|
79
83
|
if ( this.renderToScreen ) {
|
|
80
84
|
|
|
81
85
|
renderer.setRenderTarget( null );
|
|
@@ -95,6 +99,19 @@
|
|
|
95
99
|
renderer.autoClear = oldAutoClear;
|
|
96
100
|
|
|
97
101
|
}
|
|
102
|
+
setSize( width, height ) {
|
|
103
|
+
|
|
104
|
+
this.renderTargetDepth.setSize( width, height );
|
|
105
|
+
|
|
106
|
+
}
|
|
107
|
+
dispose() {
|
|
108
|
+
|
|
109
|
+
this.renderTargetDepth.dispose();
|
|
110
|
+
this.materialDepth.dispose();
|
|
111
|
+
this.materialBokeh.dispose();
|
|
112
|
+
this.fsQuad.dispose();
|
|
113
|
+
|
|
114
|
+
}
|
|
98
115
|
|
|
99
116
|
}
|
|
100
117
|
|
|
@@ -11,13 +11,9 @@
|
|
|
11
11
|
this._oldClearColor = new THREE.Color();
|
|
12
12
|
|
|
13
13
|
}
|
|
14
|
-
|
|
15
|
-
render( renderer, writeBuffer, readBuffer
|
|
16
|
-
/*, deltaTime, maskActive */
|
|
17
|
-
) {
|
|
14
|
+
render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
|
|
18
15
|
|
|
19
16
|
let oldClearAlpha;
|
|
20
|
-
|
|
21
17
|
if ( this.clearColor ) {
|
|
22
18
|
|
|
23
19
|
renderer.getClearColor( this._oldClearColor );
|
|
@@ -28,7 +24,6 @@
|
|
|
28
24
|
|
|
29
25
|
renderer.setRenderTarget( this.renderToScreen ? null : readBuffer );
|
|
30
26
|
renderer.clear();
|
|
31
|
-
|
|
32
27
|
if ( this.clearColor ) {
|
|
33
28
|
|
|
34
29
|
renderer.setClearColor( this._oldClearColor, oldClearAlpha );
|