@plastic-software/three 0.174.0 → 0.175.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/build/three.cjs +10744 -1476
- package/build/three.core.js +9633 -1096
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +918 -189
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +4 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +2658 -1697
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +2654 -1709
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/AnimationClipCreator.js +57 -6
- package/examples/jsm/animation/CCDIKSolver.js +93 -39
- package/examples/jsm/capabilities/WebGL.js +28 -3
- package/examples/jsm/capabilities/WebGPU.js +16 -6
- package/examples/jsm/controls/ArcballControls.js +424 -154
- package/examples/jsm/controls/DragControls.js +93 -2
- package/examples/jsm/controls/FirstPersonControls.js +113 -4
- package/examples/jsm/controls/FlyControls.js +49 -2
- package/examples/jsm/controls/MapControls.js +42 -9
- package/examples/jsm/controls/OrbitControls.js +345 -42
- package/examples/jsm/controls/PointerLockControls.js +111 -9
- package/examples/jsm/controls/TrackballControls.js +159 -8
- package/examples/jsm/controls/TransformControls.js +252 -6
- package/examples/jsm/csm/CSM.js +226 -15
- package/examples/jsm/csm/CSMFrustum.js +52 -0
- package/examples/jsm/csm/CSMHelper.js +47 -0
- package/examples/jsm/csm/CSMShader.js +10 -1
- package/examples/jsm/csm/CSMShadowNode.js +156 -13
- package/examples/jsm/curves/CurveExtras.js +289 -31
- package/examples/jsm/curves/NURBSCurve.js +57 -14
- package/examples/jsm/curves/NURBSSurface.js +50 -6
- package/examples/jsm/curves/NURBSUtils.js +96 -112
- package/examples/jsm/curves/NURBSVolume.js +22 -4
- package/examples/jsm/effects/AnaglyphEffect.js +30 -0
- package/examples/jsm/effects/AsciiEffect.js +60 -15
- package/examples/jsm/effects/OutlineEffect.js +59 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
- package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
- package/examples/jsm/effects/StereoEffect.js +29 -0
- package/examples/jsm/environments/DebugEnvironment.js +49 -0
- package/examples/jsm/environments/RoomEnvironment.js +23 -4
- package/examples/jsm/exporters/DRACOExporter.js +53 -13
- package/examples/jsm/exporters/EXRExporter.js +37 -8
- package/examples/jsm/exporters/GLTFExporter.js +171 -48
- package/examples/jsm/exporters/KTX2Exporter.js +20 -0
- package/examples/jsm/exporters/OBJExporter.js +18 -0
- package/examples/jsm/exporters/PLYExporter.js +39 -9
- package/examples/jsm/exporters/STLExporter.js +25 -5
- package/examples/jsm/exporters/USDZExporter.js +70 -3
- package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
- package/examples/jsm/geometries/ConvexGeometry.js +18 -0
- package/examples/jsm/geometries/DecalGeometry.js +20 -9
- package/examples/jsm/geometries/ParametricFunctions.js +97 -0
- package/examples/jsm/geometries/ParametricGeometry.js +37 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
- package/examples/jsm/geometries/TeapotGeometry.js +22 -38
- package/examples/jsm/geometries/TextGeometry.js +44 -16
- package/examples/jsm/helpers/LightProbeHelper.js +35 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
- package/examples/jsm/helpers/OctreeHelper.js +35 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
- package/examples/jsm/helpers/TextureHelper.js +27 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
- package/examples/jsm/helpers/ViewHelper.js +75 -1
- package/examples/jsm/interactive/HTMLMesh.js +25 -0
- package/examples/jsm/interactive/InteractiveGroup.js +65 -5
- package/examples/jsm/interactive/SelectionBox.js +74 -9
- package/examples/jsm/interactive/SelectionHelper.js +71 -29
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +23 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
- package/examples/jsm/lines/Line2.js +36 -0
- package/examples/jsm/lines/LineGeometry.js +52 -0
- package/examples/jsm/lines/LineMaterial.js +95 -0
- package/examples/jsm/lines/LineSegments2.js +51 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
- package/examples/jsm/lines/Wireframe.js +38 -2
- package/examples/jsm/lines/WireframeGeometry2.js +24 -0
- package/examples/jsm/lines/webgpu/Line2.js +25 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
- package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
- package/examples/jsm/loaders/3DMLoader.js +71 -2
- package/examples/jsm/loaders/3MFLoader.js +41 -3
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +35 -0
- package/examples/jsm/loaders/DDSLoader.js +24 -0
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +42 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +218 -5
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
- package/examples/jsm/loaders/IESLoader.js +41 -0
- package/examples/jsm/loaders/KMZLoader.js +32 -0
- package/examples/jsm/loaders/KTX2Loader.js +86 -18
- package/examples/jsm/loaders/KTXLoader.js +26 -6
- package/examples/jsm/loaders/LDrawLoader.js +115 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
- package/examples/jsm/loaders/LUTImageLoader.js +78 -38
- package/examples/jsm/loaders/LWOLoader.js +46 -7
- package/examples/jsm/loaders/LottieLoader.js +37 -0
- package/examples/jsm/loaders/MD2Loader.js +36 -1
- package/examples/jsm/loaders/MDDLoader.js +56 -12
- package/examples/jsm/loaders/MTLLoader.js +38 -33
- package/examples/jsm/loaders/MaterialXLoader.js +33 -0
- package/examples/jsm/loaders/NRRDLoader.js +36 -5
- package/examples/jsm/loaders/OBJLoader.js +48 -1
- package/examples/jsm/loaders/PCDLoader.js +47 -0
- package/examples/jsm/loaders/PDBLoader.js +40 -2
- package/examples/jsm/loaders/PLYLoader.js +62 -32
- package/examples/jsm/loaders/PVRLoader.js +23 -5
- package/examples/jsm/loaders/RGBELoader.js +38 -5
- package/examples/jsm/loaders/RGBMLoader.js +67 -1
- package/examples/jsm/loaders/STLLoader.js +47 -38
- package/examples/jsm/loaders/SVGLoader.js +113 -20
- package/examples/jsm/loaders/TDSLoader.js +81 -61
- package/examples/jsm/loaders/TGALoader.js +22 -0
- package/examples/jsm/loaders/TIFFLoader.js +22 -0
- package/examples/jsm/loaders/TTFLoader.js +36 -2
- package/examples/jsm/loaders/USDZLoader.js +34 -1
- package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
- package/examples/jsm/loaders/VOXLoader.js +57 -0
- package/examples/jsm/loaders/VRMLLoader.js +32 -1
- package/examples/jsm/loaders/VTKLoader.js +38 -0
- package/examples/jsm/loaders/XYZLoader.js +35 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
- package/examples/jsm/math/Capsule.js +89 -14
- package/examples/jsm/math/ColorConverter.js +21 -0
- package/examples/jsm/math/ColorSpaces.js +53 -0
- package/examples/jsm/math/ConvexHull.js +514 -92
- package/examples/jsm/math/ImprovedNoise.js +14 -2
- package/examples/jsm/math/Lut.js +111 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
- package/examples/jsm/math/OBB.js +139 -46
- package/examples/jsm/math/Octree.js +132 -5
- package/examples/jsm/math/SimplexNoise.js +66 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
- package/examples/jsm/misc/Gyroscope.js +11 -0
- package/examples/jsm/misc/MD2Character.js +115 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
- package/examples/jsm/misc/MorphAnimMesh.js +43 -0
- package/examples/jsm/misc/MorphBlendMesh.js +102 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
- package/examples/jsm/misc/RollerCoaster.js +52 -0
- package/examples/jsm/misc/Timer.js +79 -2
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +108 -72
- package/examples/jsm/misc/VolumeSlice.js +88 -45
- package/examples/jsm/modifiers/CurveModifier.js +57 -34
- package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
- package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
- package/examples/jsm/modifiers/TessellateModifier.js +33 -2
- package/examples/jsm/objects/GroundedSkybox.js +23 -5
- package/examples/jsm/objects/Lensflare.js +91 -2
- package/examples/jsm/objects/LensflareMesh.js +53 -2
- package/examples/jsm/objects/MarchingCubes.js +88 -5
- package/examples/jsm/objects/Reflector.js +70 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
- package/examples/jsm/objects/Refractor.js +61 -0
- package/examples/jsm/objects/ShadowMesh.js +53 -4
- package/examples/jsm/objects/Sky.js +26 -9
- package/examples/jsm/objects/SkyMesh.js +60 -9
- package/examples/jsm/objects/Water.js +44 -5
- package/examples/jsm/objects/Water2.js +42 -3
- package/examples/jsm/objects/Water2Mesh.js +38 -3
- package/examples/jsm/objects/WaterMesh.js +94 -7
- package/examples/jsm/physics/AmmoPhysics.js +47 -0
- package/examples/jsm/physics/JoltPhysics.js +48 -0
- package/examples/jsm/physics/RapierPhysics.js +56 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
- package/examples/jsm/postprocessing/BloomPass.js +125 -24
- package/examples/jsm/postprocessing/BokehPass.js +98 -22
- package/examples/jsm/postprocessing/ClearPass.js +53 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
- package/examples/jsm/postprocessing/EffectComposer.js +131 -0
- package/examples/jsm/postprocessing/FilmPass.js +53 -5
- package/examples/jsm/postprocessing/GTAOPass.js +191 -48
- package/examples/jsm/postprocessing/GlitchPass.js +84 -33
- package/examples/jsm/postprocessing/HalftonePass.js +64 -10
- package/examples/jsm/postprocessing/LUTPass.js +37 -8
- package/examples/jsm/postprocessing/MaskPass.js +90 -0
- package/examples/jsm/postprocessing/OutlinePass.js +266 -133
- package/examples/jsm/postprocessing/OutputPass.js +53 -14
- package/examples/jsm/postprocessing/Pass.js +98 -4
- package/examples/jsm/postprocessing/RenderPass.js +83 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
- package/examples/jsm/postprocessing/SAOPass.js +126 -53
- package/examples/jsm/postprocessing/SMAAPass.js +103 -71
- package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
- package/examples/jsm/postprocessing/SSAOPass.js +160 -47
- package/examples/jsm/postprocessing/SSRPass.js +230 -49
- package/examples/jsm/postprocessing/SavePass.js +68 -16
- package/examples/jsm/postprocessing/ShaderPass.js +64 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
- package/examples/jsm/postprocessing/TexturePass.js +71 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
- package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
- package/examples/jsm/renderers/Projector.js +18 -2
- package/examples/jsm/renderers/SVGRenderer.js +124 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
- package/examples/jsm/shaders/AfterimageShader.js +6 -4
- package/examples/jsm/shaders/BasicShader.js +6 -2
- package/examples/jsm/shaders/BleachBypassShader.js +8 -4
- package/examples/jsm/shaders/BlendShader.js +6 -2
- package/examples/jsm/shaders/BokehShader.js +7 -4
- package/examples/jsm/shaders/BokehShader2.js +7 -3
- package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
- package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
- package/examples/jsm/shaders/ColorifyShader.js +6 -2
- package/examples/jsm/shaders/ConvolutionShader.js +7 -39
- package/examples/jsm/shaders/CopyShader.js +6 -2
- package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
- package/examples/jsm/shaders/DigitalGlitch.js +7 -7
- package/examples/jsm/shaders/DotScreenShader.js +6 -4
- package/examples/jsm/shaders/ExposureShader.js +6 -2
- package/examples/jsm/shaders/FXAAShader.js +15 -7
- package/examples/jsm/shaders/FilmShader.js +10 -0
- package/examples/jsm/shaders/FocusShader.js +6 -4
- package/examples/jsm/shaders/FreiChenShader.js +7 -3
- package/examples/jsm/shaders/GTAOShader.js +33 -39
- package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
- package/examples/jsm/shaders/GodRaysShader.js +14 -5
- package/examples/jsm/shaders/HalftoneShader.js +11 -5
- package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
- package/examples/jsm/shaders/HueSaturationShader.js +7 -3
- package/examples/jsm/shaders/KaleidoShader.js +8 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
- package/examples/jsm/shaders/LuminosityShader.js +6 -3
- package/examples/jsm/shaders/MirrorShader.js +7 -4
- package/examples/jsm/shaders/NormalMapShader.js +5 -3
- package/examples/jsm/shaders/OutputShader.js +11 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
- package/examples/jsm/shaders/RGBShiftShader.js +5 -1
- package/examples/jsm/shaders/SAOShader.js +8 -2
- package/examples/jsm/shaders/SMAAShader.js +23 -1
- package/examples/jsm/shaders/SSAOShader.js +23 -5
- package/examples/jsm/shaders/SSRShader.js +25 -1
- package/examples/jsm/shaders/SepiaShader.js +6 -4
- package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
- package/examples/jsm/shaders/TechnicolorShader.js +7 -4
- package/examples/jsm/shaders/ToonShader.js +29 -7
- package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
- package/examples/jsm/shaders/VelocityShader.js +6 -2
- package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
- package/examples/jsm/shaders/VignetteShader.js +6 -4
- package/examples/jsm/shaders/VolumeShader.js +7 -1
- package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
- package/examples/jsm/textures/FlakesTexture.js +12 -0
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +1 -1
- package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -1
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
- package/examples/jsm/tsl/math/Bayer.js +14 -1
- package/examples/jsm/tsl/utils/Raymarching.js +4 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
- package/examples/jsm/utils/CameraUtils.js +10 -7
- package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
- package/examples/jsm/utils/GeometryUtils.js +12 -13
- package/examples/jsm/utils/LDrawUtils.js +11 -4
- package/examples/jsm/utils/SceneOptimizer.js +66 -20
- package/examples/jsm/utils/SceneUtils.js +50 -3
- package/examples/jsm/utils/ShadowMapViewer.js +47 -24
- package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
- package/examples/jsm/utils/SkeletonUtils.js +45 -0
- package/examples/jsm/utils/SortUtils.js +14 -5
- package/examples/jsm/utils/UVsDebug.js +9 -4
- package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
- package/examples/jsm/utils/WorkerPool.js +65 -2
- package/examples/jsm/webxr/ARButton.js +18 -0
- package/examples/jsm/webxr/OculusHandModel.js +83 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
- package/examples/jsm/webxr/Text2D.js +11 -0
- package/examples/jsm/webxr/VRButton.js +30 -0
- package/examples/jsm/webxr/XRButton.js +22 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
- package/examples/jsm/webxr/XREstimatedLight.js +33 -3
- package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
- package/examples/jsm/webxr/XRPlanes.js +17 -0
- package/package.json +1 -1
- package/src/Three.TSL.js +3 -1
- package/src/animation/AnimationAction.js +262 -30
- package/src/animation/AnimationClip.js +141 -2
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +41 -18
- package/src/animation/AnimationUtils.js +168 -18
- package/src/animation/KeyframeTrack.js +144 -10
- package/src/animation/PropertyBinding.js +77 -3
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/AudioAnalyser.js +1 -1
- package/src/audio/AudioListener.js +2 -2
- package/src/audio/PositionalAudio.js +5 -5
- package/src/constants.js +1432 -5
- package/src/core/BufferAttribute.js +413 -3
- package/src/core/BufferGeometry.js +337 -1
- package/src/core/Clock.js +60 -0
- package/src/core/GLBufferAttribute.js +99 -0
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +137 -3
- package/src/core/InterleavedBufferAttribute.js +197 -0
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +23 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +166 -7
- package/src/core/RenderTarget3D.js +25 -0
- package/src/core/RenderTargetArray.js +18 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +16 -1
- package/src/extras/Earcut.js +3 -781
- package/src/extras/ImageUtils.js +3 -2
- package/src/extras/PMREMGenerator.js +22 -17
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +1 -1
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/ConeGeometry.js +2 -2
- package/src/geometries/CylinderGeometry.js +2 -2
- package/src/geometries/ExtrudeGeometry.js +71 -39
- package/src/geometries/LatheGeometry.js +1 -1
- package/src/lights/LightShadow.js +1 -1
- package/src/lights/webgpu/IESSpotLight.js +1 -1
- package/src/loaders/AnimationLoader.js +31 -0
- package/src/loaders/AudioLoader.js +31 -0
- package/src/loaders/BufferGeometryLoader.js +34 -0
- package/src/loaders/Cache.js +45 -0
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +44 -3
- package/src/loaders/FileLoader.js +57 -1
- package/src/loaders/ImageBitmapLoader.js +57 -0
- package/src/loaders/ImageLoader.js +30 -0
- package/src/loaders/Loader.js +4 -6
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +142 -0
- package/src/loaders/MaterialLoader.js +57 -0
- package/src/loaders/ObjectLoader.js +58 -1
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +6 -2
- package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
- package/src/loaders/nodes/NodeObjectLoader.js +3 -3
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +165 -0
- package/src/materials/MeshDepthMaterial.js +93 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +273 -0
- package/src/materials/MeshMatcapMaterial.js +142 -0
- package/src/materials/MeshNormalMaterial.js +113 -0
- package/src/materials/MeshPhongMaterial.js +288 -0
- package/src/materials/MeshPhysicalMaterial.js +292 -1
- package/src/materials/MeshStandardMaterial.js +297 -0
- package/src/materials/MeshToonMaterial.js +218 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +215 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +1 -1
- package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +7 -3
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
- package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
- package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
- package/src/math/Color.js +1 -1
- package/src/math/MathUtils.js +223 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/accessors/BatchNode.js +8 -8
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +1 -1
- package/src/nodes/accessors/InstanceNode.js +5 -5
- package/src/nodes/accessors/InstancedMeshNode.js +1 -1
- package/src/nodes/accessors/MorphNode.js +27 -23
- package/src/nodes/accessors/Normal.js +1 -1
- package/src/nodes/accessors/Object3DNode.js +12 -12
- package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +46 -37
- package/src/nodes/accessors/StorageBufferNode.js +1 -1
- package/src/nodes/accessors/StorageTextureNode.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +25 -5
- package/src/nodes/accessors/TextureSizeNode.js +1 -1
- package/src/nodes/accessors/UniformArrayNode.js +2 -2
- package/src/nodes/code/CodeNode.js +4 -4
- package/src/nodes/code/ExpressionNode.js +4 -4
- package/src/nodes/code/FunctionCallNode.js +23 -3
- package/src/nodes/code/ScriptableNode.js +4 -4
- package/src/nodes/code/ScriptableValueNode.js +2 -2
- package/src/nodes/core/AssignNode.js +1 -1
- package/src/nodes/core/AttributeNode.js +1 -1
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/CacheNode.js +1 -1
- package/src/nodes/core/ContextNode.js +1 -1
- package/src/nodes/core/InputNode.js +2 -2
- package/src/nodes/core/Node.js +14 -2
- package/src/nodes/core/NodeBuilder.js +86 -14
- package/src/nodes/core/StackNode.js +5 -5
- package/src/nodes/core/StructNode.js +1 -1
- package/src/nodes/core/StructTypeNode.js +2 -2
- package/src/nodes/core/VarNode.js +2 -8
- package/src/nodes/core/VaryingNode.js +3 -3
- package/src/nodes/display/BlendModes.js +4 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PosterizeNode.js +1 -1
- package/src/nodes/display/ScreenNode.js +3 -3
- package/src/nodes/display/ViewportDepthNode.js +2 -2
- package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
- package/src/nodes/display/ViewportTextureNode.js +4 -4
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
- package/src/nodes/geometry/RangeNode.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +30 -2
- package/src/nodes/lighting/AnalyticLightNode.js +9 -1
- package/src/nodes/lighting/LightsNode.js +3 -3
- package/src/nodes/lighting/ShadowNode.js +1 -1
- package/src/nodes/math/ConditionalNode.js +20 -3
- package/src/nodes/math/MathNode.js +83 -78
- package/src/nodes/math/OperatorNode.js +171 -82
- package/src/nodes/pmrem/PMREMNode.js +4 -4
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +115 -12
- package/src/nodes/utils/ArrayElementNode.js +3 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/EquirectUVNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +27 -2
- package/src/nodes/utils/LoopNode.js +58 -28
- package/src/nodes/utils/MaxMipLevelNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -2
- package/src/nodes/utils/RemapNode.js +6 -6
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/src/objects/BatchedMesh.js +4 -4
- package/src/objects/InstancedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Skeleton.js +1 -1
- package/src/renderers/WebGL3DRenderTarget.js +25 -0
- package/src/renderers/WebGLArrayRenderTarget.js +25 -0
- package/src/renderers/WebGLCubeRenderTarget.js +39 -1
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +617 -79
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Attributes.js +2 -2
- package/src/renderers/common/Backend.js +12 -3
- package/src/renderers/common/Background.js +1 -0
- package/src/renderers/common/Color4.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/PostProcessing.js +2 -0
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderList.js +2 -2
- package/src/renderers/common/RenderObject.js +1 -1
- package/src/renderers/common/RenderObjects.js +2 -2
- package/src/renderers/common/Renderer.js +52 -31
- package/src/renderers/common/XRManager.js +333 -10
- package/src/renderers/common/extras/PMREMGenerator.js +6 -0
- package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
- package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +10 -1
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
- package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
- package/src/renderers/shaders/ShaderChunk.js +2 -0
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
- package/src/renderers/shaders/UniformsLib.js +6 -5
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLProgram.js +25 -5
- package/src/renderers/webgl/WebGLPrograms.js +21 -7
- package/src/renderers/webgl/WebGLState.js +9 -9
- package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +128 -87
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
- package/src/renderers/webgpu/WebGPURenderer.js +17 -11
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +173 -1
- package/src/scenes/Scene.js +2 -1
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +77 -0
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +5 -5
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -14,28 +14,86 @@ import { CopyShader } from '../shaders/CopyShader.js';
|
|
|
14
14
|
import { LuminosityHighPassShader } from '../shaders/LuminosityHighPassShader.js';
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* This pass is inspired by the bloom pass of Unreal Engine. It creates a
|
|
18
18
|
* mip map chain of bloom textures and blurs them with different radii. Because
|
|
19
19
|
* of the weighted combination of mips, and because larger blurs are done on
|
|
20
20
|
* higher mips, this effect provides good quality and performance.
|
|
21
21
|
*
|
|
22
|
+
* When using this pass, tone mapping must be enabled in the renderer settings.
|
|
23
|
+
*
|
|
22
24
|
* Reference:
|
|
23
|
-
* - https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/Bloom/
|
|
25
|
+
* - [Bloom in Unreal Engine]{@link https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/Bloom/}
|
|
26
|
+
*
|
|
27
|
+
* ```js
|
|
28
|
+
* const resolution = new THREE.Vector2( window.innerWidth, window.innerHeight );
|
|
29
|
+
* const bloomPass = new UnrealBloomPass( resolution, 1.5, 0.4, 0.85 );
|
|
30
|
+
* composer.addPass( bloomPass );
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @augments Pass
|
|
24
34
|
*/
|
|
25
35
|
class UnrealBloomPass extends Pass {
|
|
26
36
|
|
|
27
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Constructs a new Unreal Bloom pass.
|
|
39
|
+
*
|
|
40
|
+
* @param {Vector2} [resolution] - The effect's resolution.
|
|
41
|
+
* @param {number} [strength=1] - The Bloom strength.
|
|
42
|
+
* @param {number} radius - The Bloom radius.
|
|
43
|
+
* @param {number} threshold - The luminance threshold limits which bright areas contribute to the Bloom effect.
|
|
44
|
+
*/
|
|
45
|
+
constructor( resolution, strength = 1, radius, threshold ) {
|
|
28
46
|
|
|
29
47
|
super();
|
|
30
48
|
|
|
31
|
-
|
|
49
|
+
/**
|
|
50
|
+
* The Bloom strength.
|
|
51
|
+
*
|
|
52
|
+
* @type {number}
|
|
53
|
+
* @default 1
|
|
54
|
+
*/
|
|
55
|
+
this.strength = strength;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The Bloom radius.
|
|
59
|
+
*
|
|
60
|
+
* @type {number}
|
|
61
|
+
*/
|
|
32
62
|
this.radius = radius;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The luminance threshold limits which bright areas contribute to the Bloom effect.
|
|
66
|
+
*
|
|
67
|
+
* @type {number}
|
|
68
|
+
*/
|
|
33
69
|
this.threshold = threshold;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The effect's resolution.
|
|
73
|
+
*
|
|
74
|
+
* @type {Vector2}
|
|
75
|
+
* @default (256,256)
|
|
76
|
+
*/
|
|
34
77
|
this.resolution = ( resolution !== undefined ) ? new Vector2( resolution.x, resolution.y ) : new Vector2( 256, 256 );
|
|
35
78
|
|
|
36
|
-
|
|
79
|
+
/**
|
|
80
|
+
* The effect's clear color
|
|
81
|
+
*
|
|
82
|
+
* @type {Color}
|
|
83
|
+
* @default (0,0,0)
|
|
84
|
+
*/
|
|
37
85
|
this.clearColor = new Color( 0, 0, 0 );
|
|
38
86
|
|
|
87
|
+
/**
|
|
88
|
+
* Overwritten to disable the swap.
|
|
89
|
+
*
|
|
90
|
+
* @type {boolean}
|
|
91
|
+
* @default false
|
|
92
|
+
*/
|
|
93
|
+
this.needsSwap = false;
|
|
94
|
+
|
|
95
|
+
// internals
|
|
96
|
+
|
|
39
97
|
// render targets
|
|
40
98
|
this.renderTargetsHorizontal = [];
|
|
41
99
|
this.renderTargetsVertical = [];
|
|
@@ -92,7 +150,7 @@ class UnrealBloomPass extends Pass {
|
|
|
92
150
|
|
|
93
151
|
for ( let i = 0; i < this.nMips; i ++ ) {
|
|
94
152
|
|
|
95
|
-
this.separableBlurMaterials.push( this.
|
|
153
|
+
this.separableBlurMaterials.push( this._getSeparableBlurMaterial( kernelSizeArray[ i ] ) );
|
|
96
154
|
|
|
97
155
|
this.separableBlurMaterials[ i ].uniforms[ 'invSize' ].value = new Vector2( 1 / resx, 1 / resy );
|
|
98
156
|
|
|
@@ -104,7 +162,7 @@ class UnrealBloomPass extends Pass {
|
|
|
104
162
|
|
|
105
163
|
// composite material
|
|
106
164
|
|
|
107
|
-
this.compositeMaterial = this.
|
|
165
|
+
this.compositeMaterial = this._getCompositeMaterial( this.nMips );
|
|
108
166
|
this.compositeMaterial.uniforms[ 'blurTexture1' ].value = this.renderTargetsVertical[ 0 ].texture;
|
|
109
167
|
this.compositeMaterial.uniforms[ 'blurTexture2' ].value = this.renderTargetsVertical[ 1 ].texture;
|
|
110
168
|
this.compositeMaterial.uniforms[ 'blurTexture3' ].value = this.renderTargetsVertical[ 2 ].texture;
|
|
@@ -120,32 +178,31 @@ class UnrealBloomPass extends Pass {
|
|
|
120
178
|
|
|
121
179
|
// blend material
|
|
122
180
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
this.copyUniforms = UniformsUtils.clone( copyShader.uniforms );
|
|
181
|
+
this.copyUniforms = UniformsUtils.clone( CopyShader.uniforms );
|
|
126
182
|
|
|
127
183
|
this.blendMaterial = new ShaderMaterial( {
|
|
128
184
|
uniforms: this.copyUniforms,
|
|
129
|
-
vertexShader:
|
|
130
|
-
fragmentShader:
|
|
185
|
+
vertexShader: CopyShader.vertexShader,
|
|
186
|
+
fragmentShader: CopyShader.fragmentShader,
|
|
131
187
|
blending: AdditiveBlending,
|
|
132
188
|
depthTest: false,
|
|
133
189
|
depthWrite: false,
|
|
134
190
|
transparent: true
|
|
135
191
|
} );
|
|
136
192
|
|
|
137
|
-
this.enabled = true;
|
|
138
|
-
this.needsSwap = false;
|
|
139
|
-
|
|
140
193
|
this._oldClearColor = new Color();
|
|
141
|
-
this.
|
|
194
|
+
this._oldClearAlpha = 1;
|
|
142
195
|
|
|
143
|
-
this.
|
|
196
|
+
this._basic = new MeshBasicMaterial();
|
|
144
197
|
|
|
145
|
-
this.
|
|
198
|
+
this._fsQuad = new FullScreenQuad( null );
|
|
146
199
|
|
|
147
200
|
}
|
|
148
201
|
|
|
202
|
+
/**
|
|
203
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
204
|
+
* method whenever the pass is no longer used in your app.
|
|
205
|
+
*/
|
|
149
206
|
dispose() {
|
|
150
207
|
|
|
151
208
|
for ( let i = 0; i < this.renderTargetsHorizontal.length; i ++ ) {
|
|
@@ -172,14 +229,20 @@ class UnrealBloomPass extends Pass {
|
|
|
172
229
|
|
|
173
230
|
this.compositeMaterial.dispose();
|
|
174
231
|
this.blendMaterial.dispose();
|
|
175
|
-
this.
|
|
232
|
+
this._basic.dispose();
|
|
176
233
|
|
|
177
234
|
//
|
|
178
235
|
|
|
179
|
-
this.
|
|
236
|
+
this._fsQuad.dispose();
|
|
180
237
|
|
|
181
238
|
}
|
|
182
239
|
|
|
240
|
+
/**
|
|
241
|
+
* Sets the size of the pass.
|
|
242
|
+
*
|
|
243
|
+
* @param {number} width - The width to set.
|
|
244
|
+
* @param {number} height - The width to set.
|
|
245
|
+
*/
|
|
183
246
|
setSize( width, height ) {
|
|
184
247
|
|
|
185
248
|
let resx = Math.round( width / 2 );
|
|
@@ -201,10 +264,21 @@ class UnrealBloomPass extends Pass {
|
|
|
201
264
|
|
|
202
265
|
}
|
|
203
266
|
|
|
267
|
+
/**
|
|
268
|
+
* Performs the Bloom pass.
|
|
269
|
+
*
|
|
270
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
271
|
+
* @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
|
|
272
|
+
* destination for the pass.
|
|
273
|
+
* @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
|
|
274
|
+
* previous pass from this buffer.
|
|
275
|
+
* @param {number} deltaTime - The delta time in seconds.
|
|
276
|
+
* @param {boolean} maskActive - Whether masking is active or not.
|
|
277
|
+
*/
|
|
204
278
|
render( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {
|
|
205
279
|
|
|
206
280
|
renderer.getClearColor( this._oldClearColor );
|
|
207
|
-
this.
|
|
281
|
+
this._oldClearAlpha = renderer.getClearAlpha();
|
|
208
282
|
const oldAutoClear = renderer.autoClear;
|
|
209
283
|
renderer.autoClear = false;
|
|
210
284
|
|
|
@@ -216,12 +290,12 @@ class UnrealBloomPass extends Pass {
|
|
|
216
290
|
|
|
217
291
|
if ( this.renderToScreen ) {
|
|
218
292
|
|
|
219
|
-
this.
|
|
220
|
-
this.
|
|
293
|
+
this._fsQuad.material = this._basic;
|
|
294
|
+
this._basic.map = readBuffer.texture;
|
|
221
295
|
|
|
222
296
|
renderer.setRenderTarget( null );
|
|
223
297
|
renderer.clear();
|
|
224
|
-
this.
|
|
298
|
+
this._fsQuad.render( renderer );
|
|
225
299
|
|
|
226
300
|
}
|
|
227
301
|
|
|
@@ -229,11 +303,11 @@ class UnrealBloomPass extends Pass {
|
|
|
229
303
|
|
|
230
304
|
this.highPassUniforms[ 'tDiffuse' ].value = readBuffer.texture;
|
|
231
305
|
this.highPassUniforms[ 'luminosityThreshold' ].value = this.threshold;
|
|
232
|
-
this.
|
|
306
|
+
this._fsQuad.material = this.materialHighPassFilter;
|
|
233
307
|
|
|
234
308
|
renderer.setRenderTarget( this.renderTargetBright );
|
|
235
309
|
renderer.clear();
|
|
236
|
-
this.
|
|
310
|
+
this._fsQuad.render( renderer );
|
|
237
311
|
|
|
238
312
|
// 2. Blur All the mips progressively
|
|
239
313
|
|
|
@@ -241,19 +315,19 @@ class UnrealBloomPass extends Pass {
|
|
|
241
315
|
|
|
242
316
|
for ( let i = 0; i < this.nMips; i ++ ) {
|
|
243
317
|
|
|
244
|
-
this.
|
|
318
|
+
this._fsQuad.material = this.separableBlurMaterials[ i ];
|
|
245
319
|
|
|
246
320
|
this.separableBlurMaterials[ i ].uniforms[ 'colorTexture' ].value = inputRenderTarget.texture;
|
|
247
321
|
this.separableBlurMaterials[ i ].uniforms[ 'direction' ].value = UnrealBloomPass.BlurDirectionX;
|
|
248
322
|
renderer.setRenderTarget( this.renderTargetsHorizontal[ i ] );
|
|
249
323
|
renderer.clear();
|
|
250
|
-
this.
|
|
324
|
+
this._fsQuad.render( renderer );
|
|
251
325
|
|
|
252
326
|
this.separableBlurMaterials[ i ].uniforms[ 'colorTexture' ].value = this.renderTargetsHorizontal[ i ].texture;
|
|
253
327
|
this.separableBlurMaterials[ i ].uniforms[ 'direction' ].value = UnrealBloomPass.BlurDirectionY;
|
|
254
328
|
renderer.setRenderTarget( this.renderTargetsVertical[ i ] );
|
|
255
329
|
renderer.clear();
|
|
256
|
-
this.
|
|
330
|
+
this._fsQuad.render( renderer );
|
|
257
331
|
|
|
258
332
|
inputRenderTarget = this.renderTargetsVertical[ i ];
|
|
259
333
|
|
|
@@ -261,18 +335,18 @@ class UnrealBloomPass extends Pass {
|
|
|
261
335
|
|
|
262
336
|
// Composite All the mips
|
|
263
337
|
|
|
264
|
-
this.
|
|
338
|
+
this._fsQuad.material = this.compositeMaterial;
|
|
265
339
|
this.compositeMaterial.uniforms[ 'bloomStrength' ].value = this.strength;
|
|
266
340
|
this.compositeMaterial.uniforms[ 'bloomRadius' ].value = this.radius;
|
|
267
341
|
this.compositeMaterial.uniforms[ 'bloomTintColors' ].value = this.bloomTintColors;
|
|
268
342
|
|
|
269
343
|
renderer.setRenderTarget( this.renderTargetsHorizontal[ 0 ] );
|
|
270
344
|
renderer.clear();
|
|
271
|
-
this.
|
|
345
|
+
this._fsQuad.render( renderer );
|
|
272
346
|
|
|
273
347
|
// Blend it additively over the input texture
|
|
274
348
|
|
|
275
|
-
this.
|
|
349
|
+
this._fsQuad.material = this.blendMaterial;
|
|
276
350
|
this.copyUniforms[ 'tDiffuse' ].value = this.renderTargetsHorizontal[ 0 ].texture;
|
|
277
351
|
|
|
278
352
|
if ( maskActive ) renderer.state.buffers.stencil.setTest( true );
|
|
@@ -280,23 +354,25 @@ class UnrealBloomPass extends Pass {
|
|
|
280
354
|
if ( this.renderToScreen ) {
|
|
281
355
|
|
|
282
356
|
renderer.setRenderTarget( null );
|
|
283
|
-
this.
|
|
357
|
+
this._fsQuad.render( renderer );
|
|
284
358
|
|
|
285
359
|
} else {
|
|
286
360
|
|
|
287
361
|
renderer.setRenderTarget( readBuffer );
|
|
288
|
-
this.
|
|
362
|
+
this._fsQuad.render( renderer );
|
|
289
363
|
|
|
290
364
|
}
|
|
291
365
|
|
|
292
366
|
// Restore renderer settings
|
|
293
367
|
|
|
294
|
-
renderer.setClearColor( this._oldClearColor, this.
|
|
368
|
+
renderer.setClearColor( this._oldClearColor, this._oldClearAlpha );
|
|
295
369
|
renderer.autoClear = oldAutoClear;
|
|
296
370
|
|
|
297
371
|
}
|
|
298
372
|
|
|
299
|
-
|
|
373
|
+
// internals
|
|
374
|
+
|
|
375
|
+
_getSeparableBlurMaterial( kernelRadius ) {
|
|
300
376
|
|
|
301
377
|
const coefficients = [];
|
|
302
378
|
|
|
@@ -352,7 +428,7 @@ class UnrealBloomPass extends Pass {
|
|
|
352
428
|
|
|
353
429
|
}
|
|
354
430
|
|
|
355
|
-
|
|
431
|
+
_getCompositeMaterial( nMips ) {
|
|
356
432
|
|
|
357
433
|
return new ShaderMaterial( {
|
|
358
434
|
|
|
@@ -5,14 +5,38 @@ import {
|
|
|
5
5
|
Vector3
|
|
6
6
|
} from 'three';
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* The only type of 3D object that is supported by {@link CSS2DRenderer}.
|
|
10
|
+
*
|
|
11
|
+
* @augments Object3D
|
|
12
|
+
*/
|
|
8
13
|
class CSS2DObject extends Object3D {
|
|
9
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Constructs a new CSS2D object.
|
|
17
|
+
*
|
|
18
|
+
* @param {DOMElement} [element] - The DOM element.
|
|
19
|
+
*/
|
|
10
20
|
constructor( element = document.createElement( 'div' ) ) {
|
|
11
21
|
|
|
12
22
|
super();
|
|
13
23
|
|
|
24
|
+
/**
|
|
25
|
+
* This flag can be used for type testing.
|
|
26
|
+
*
|
|
27
|
+
* @type {boolean}
|
|
28
|
+
* @readonly
|
|
29
|
+
* @default true
|
|
30
|
+
*/
|
|
14
31
|
this.isCSS2DObject = true;
|
|
15
32
|
|
|
33
|
+
/**
|
|
34
|
+
* The DOM element which defines the appearance of this 3D object.
|
|
35
|
+
*
|
|
36
|
+
* @type {DOMElement}
|
|
37
|
+
* @readonly
|
|
38
|
+
* @default true
|
|
39
|
+
*/
|
|
16
40
|
this.element = element;
|
|
17
41
|
|
|
18
42
|
this.element.style.position = 'absolute';
|
|
@@ -20,7 +44,14 @@ class CSS2DObject extends Object3D {
|
|
|
20
44
|
|
|
21
45
|
this.element.setAttribute( 'draggable', false );
|
|
22
46
|
|
|
23
|
-
|
|
47
|
+
/**
|
|
48
|
+
* The 3D objects center point.
|
|
49
|
+
* `( 0, 0 )` is the lower left, `( 1, 1 )` is the top right.
|
|
50
|
+
*
|
|
51
|
+
* @type {Vector2}
|
|
52
|
+
* @default (0.5,0.5)
|
|
53
|
+
*/
|
|
54
|
+
this.center = new Vector2( 0.5, 0.5 );
|
|
24
55
|
|
|
25
56
|
this.addEventListener( 'removed', function () {
|
|
26
57
|
|
|
@@ -63,8 +94,23 @@ const _viewProjectionMatrix = new Matrix4();
|
|
|
63
94
|
const _a = new Vector3();
|
|
64
95
|
const _b = new Vector3();
|
|
65
96
|
|
|
97
|
+
/**
|
|
98
|
+
* This renderer is a simplified version of {@link CSS3DRenderer}. The only transformation that is
|
|
99
|
+
* supported is translation.
|
|
100
|
+
*
|
|
101
|
+
* The renderer is very useful if you want to combine HTML based labels with 3D objects. Here too,
|
|
102
|
+
* the respective DOM elements are wrapped into an instance of {@link CSS2DObject} and added to the
|
|
103
|
+
* scene graph. All other types of renderable 3D objects (like meshes or point clouds) are ignored.
|
|
104
|
+
*
|
|
105
|
+
* `CSS2DRenderer` only supports 100% browser and display zoom.
|
|
106
|
+
*/
|
|
66
107
|
class CSS2DRenderer {
|
|
67
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Constructs a new CSS2D renderer.
|
|
111
|
+
*
|
|
112
|
+
* @param {CSS2DRenderer~Parameters} [parameters] - The parameters.
|
|
113
|
+
*/
|
|
68
114
|
constructor( parameters = {} ) {
|
|
69
115
|
|
|
70
116
|
const _this = this;
|
|
@@ -80,8 +126,18 @@ class CSS2DRenderer {
|
|
|
80
126
|
|
|
81
127
|
domElement.style.overflow = 'hidden';
|
|
82
128
|
|
|
129
|
+
/**
|
|
130
|
+
* The DOM where the renderer appends its child-elements.
|
|
131
|
+
*
|
|
132
|
+
* @type {DOMElement}
|
|
133
|
+
*/
|
|
83
134
|
this.domElement = domElement;
|
|
84
135
|
|
|
136
|
+
/**
|
|
137
|
+
* Returns an object containing the width and height of the renderer.
|
|
138
|
+
*
|
|
139
|
+
* @return {{width:number,height:number}} The size of the renderer.
|
|
140
|
+
*/
|
|
85
141
|
this.getSize = function () {
|
|
86
142
|
|
|
87
143
|
return {
|
|
@@ -91,6 +147,12 @@ class CSS2DRenderer {
|
|
|
91
147
|
|
|
92
148
|
};
|
|
93
149
|
|
|
150
|
+
/**
|
|
151
|
+
* Renders the given scene using the given camera.
|
|
152
|
+
*
|
|
153
|
+
* @param {Object3D} scene - A scene or any other type of 3D object.
|
|
154
|
+
* @param {Camera} camera - The camera.
|
|
155
|
+
*/
|
|
94
156
|
this.render = function ( scene, camera ) {
|
|
95
157
|
|
|
96
158
|
if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
|
|
@@ -104,6 +166,12 @@ class CSS2DRenderer {
|
|
|
104
166
|
|
|
105
167
|
};
|
|
106
168
|
|
|
169
|
+
/**
|
|
170
|
+
* Resizes the renderer to the given width and height.
|
|
171
|
+
*
|
|
172
|
+
* @param {number} width - The width of the renderer.
|
|
173
|
+
* @param {number} height - The height of the renderer.
|
|
174
|
+
*/
|
|
107
175
|
this.setSize = function ( width, height ) {
|
|
108
176
|
|
|
109
177
|
_width = width;
|
|
@@ -235,4 +303,12 @@ class CSS2DRenderer {
|
|
|
235
303
|
|
|
236
304
|
}
|
|
237
305
|
|
|
306
|
+
/**
|
|
307
|
+
* Constructor parameters of `CSS2DRenderer`.
|
|
308
|
+
*
|
|
309
|
+
* @typedef {Object} CSS2DRenderer~Parameters
|
|
310
|
+
* @property {DOMElement} [element] - A DOM element where the renderer appends its child-elements.
|
|
311
|
+
* If not passed in here, a new div element will be created.
|
|
312
|
+
**/
|
|
313
|
+
|
|
238
314
|
export { CSS2DObject, CSS2DRenderer };
|
|
@@ -5,22 +5,44 @@ import {
|
|
|
5
5
|
Vector3
|
|
6
6
|
} from 'three';
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
* Based on http://www.emagix.net/academic/mscs-project/item/camera-sync-with-css3-and-webgl-threejs
|
|
10
|
-
*/
|
|
8
|
+
// Based on http://www.emagix.net/academic/mscs-project/item/camera-sync-with-css3-and-webgl-threejs
|
|
11
9
|
|
|
12
10
|
const _position = new Vector3();
|
|
13
11
|
const _quaternion = new Quaternion();
|
|
14
12
|
const _scale = new Vector3();
|
|
15
13
|
|
|
14
|
+
/**
|
|
15
|
+
* The base 3D object that is supported by {@link CSS3DRenderer}.
|
|
16
|
+
*
|
|
17
|
+
* @augments Object3D
|
|
18
|
+
*/
|
|
16
19
|
class CSS3DObject extends Object3D {
|
|
17
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Constructs a new CSS3D object.
|
|
23
|
+
*
|
|
24
|
+
* @param {DOMElement} [element] - The DOM element.
|
|
25
|
+
*/
|
|
18
26
|
constructor( element = document.createElement( 'div' ) ) {
|
|
19
27
|
|
|
20
28
|
super();
|
|
21
29
|
|
|
30
|
+
/**
|
|
31
|
+
* This flag can be used for type testing.
|
|
32
|
+
*
|
|
33
|
+
* @type {boolean}
|
|
34
|
+
* @readonly
|
|
35
|
+
* @default true
|
|
36
|
+
*/
|
|
22
37
|
this.isCSS3DObject = true;
|
|
23
38
|
|
|
39
|
+
/**
|
|
40
|
+
* The DOM element which defines the appearance of this 3D object.
|
|
41
|
+
*
|
|
42
|
+
* @type {DOMElement}
|
|
43
|
+
* @readonly
|
|
44
|
+
* @default true
|
|
45
|
+
*/
|
|
24
46
|
this.element = element;
|
|
25
47
|
this.element.style.position = 'absolute';
|
|
26
48
|
this.element.style.pointerEvents = 'auto';
|
|
@@ -59,14 +81,38 @@ class CSS3DObject extends Object3D {
|
|
|
59
81
|
|
|
60
82
|
}
|
|
61
83
|
|
|
84
|
+
/**
|
|
85
|
+
* A specialized version of {@link CSS3DObject} that represents
|
|
86
|
+
* DOM elements as sprites.
|
|
87
|
+
*
|
|
88
|
+
* @augments CSS3DObject
|
|
89
|
+
*/
|
|
62
90
|
class CSS3DSprite extends CSS3DObject {
|
|
63
91
|
|
|
92
|
+
/**
|
|
93
|
+
* Constructs a new CSS3D sprite object.
|
|
94
|
+
*
|
|
95
|
+
* @param {DOMElement} [element] - The DOM element.
|
|
96
|
+
*/
|
|
64
97
|
constructor( element ) {
|
|
65
98
|
|
|
66
99
|
super( element );
|
|
67
100
|
|
|
101
|
+
/**
|
|
102
|
+
* This flag can be used for type testing.
|
|
103
|
+
*
|
|
104
|
+
* @type {boolean}
|
|
105
|
+
* @readonly
|
|
106
|
+
* @default true
|
|
107
|
+
*/
|
|
68
108
|
this.isCSS3DSprite = true;
|
|
69
109
|
|
|
110
|
+
/**
|
|
111
|
+
* The sprite's rotation in radians.
|
|
112
|
+
*
|
|
113
|
+
* @type {number}
|
|
114
|
+
* @default 0
|
|
115
|
+
*/
|
|
70
116
|
this.rotation2D = 0;
|
|
71
117
|
|
|
72
118
|
}
|
|
@@ -88,8 +134,28 @@ class CSS3DSprite extends CSS3DObject {
|
|
|
88
134
|
const _matrix = new Matrix4();
|
|
89
135
|
const _matrix2 = new Matrix4();
|
|
90
136
|
|
|
137
|
+
/**
|
|
138
|
+
* This renderer can be used to apply hierarchical 3D transformations to DOM elements
|
|
139
|
+
* via the CSS3 [transform]{@link https://www.w3schools.com/cssref/css3_pr_transform.asp} property.
|
|
140
|
+
* `CSS3DRenderer` is particularly interesting if you want to apply 3D effects to a website without
|
|
141
|
+
* canvas based rendering. It can also be used in order to combine DOM elements with WebGLcontent.
|
|
142
|
+
*
|
|
143
|
+
* There are, however, some important limitations:
|
|
144
|
+
*
|
|
145
|
+
* - It's not possible to use the material system of *three.js*.
|
|
146
|
+
* - It's also not possible to use geometries.
|
|
147
|
+
* - The renderer only supports 100% browser and display zoom.
|
|
148
|
+
*
|
|
149
|
+
* So `CSS3DRenderer` is just focused on ordinary DOM elements. These elements are wrapped into special
|
|
150
|
+
* 3D objects ({@link CSS3DObject} or {@link CSS3DSprite}) and then added to the scene graph.
|
|
151
|
+
*/
|
|
91
152
|
class CSS3DRenderer {
|
|
92
153
|
|
|
154
|
+
/**
|
|
155
|
+
* Constructs a new CSS3D renderer.
|
|
156
|
+
*
|
|
157
|
+
* @param {CSS3DRenderer~Parameters} [parameters] - The parameters.
|
|
158
|
+
*/
|
|
93
159
|
constructor( parameters = {} ) {
|
|
94
160
|
|
|
95
161
|
const _this = this;
|
|
@@ -106,6 +172,11 @@ class CSS3DRenderer {
|
|
|
106
172
|
|
|
107
173
|
domElement.style.overflow = 'hidden';
|
|
108
174
|
|
|
175
|
+
/**
|
|
176
|
+
* The DOM where the renderer appends its child-elements.
|
|
177
|
+
*
|
|
178
|
+
* @type {DOMElement}
|
|
179
|
+
*/
|
|
109
180
|
this.domElement = domElement;
|
|
110
181
|
|
|
111
182
|
const viewElement = document.createElement( 'div' );
|
|
@@ -119,6 +190,11 @@ class CSS3DRenderer {
|
|
|
119
190
|
|
|
120
191
|
viewElement.appendChild( cameraElement );
|
|
121
192
|
|
|
193
|
+
/**
|
|
194
|
+
* Returns an object containing the width and height of the renderer.
|
|
195
|
+
*
|
|
196
|
+
* @return {{width:number,height:number}} The size of the renderer.
|
|
197
|
+
*/
|
|
122
198
|
this.getSize = function () {
|
|
123
199
|
|
|
124
200
|
return {
|
|
@@ -128,6 +204,12 @@ class CSS3DRenderer {
|
|
|
128
204
|
|
|
129
205
|
};
|
|
130
206
|
|
|
207
|
+
/**
|
|
208
|
+
* Renders the given scene using the given camera.
|
|
209
|
+
*
|
|
210
|
+
* @param {Object3D} scene - A scene or any other type of 3D object.
|
|
211
|
+
* @param {Camera} camera - The camera.
|
|
212
|
+
*/
|
|
131
213
|
this.render = function ( scene, camera ) {
|
|
132
214
|
|
|
133
215
|
const fov = camera.projectionMatrix.elements[ 5 ] * _heightHalf;
|
|
@@ -179,6 +261,12 @@ class CSS3DRenderer {
|
|
|
179
261
|
|
|
180
262
|
};
|
|
181
263
|
|
|
264
|
+
/**
|
|
265
|
+
* Resizes the renderer to the given width and height.
|
|
266
|
+
*
|
|
267
|
+
* @param {number} width - The width of the renderer.
|
|
268
|
+
* @param {number} height - The height of the renderer.
|
|
269
|
+
*/
|
|
182
270
|
this.setSize = function ( width, height ) {
|
|
183
271
|
|
|
184
272
|
_width = width;
|
|
@@ -350,4 +438,12 @@ class CSS3DRenderer {
|
|
|
350
438
|
|
|
351
439
|
}
|
|
352
440
|
|
|
441
|
+
/**
|
|
442
|
+
* Constructor parameters of `CSS3DRenderer`.
|
|
443
|
+
*
|
|
444
|
+
* @typedef {Object} CSS3DRenderer~Parameters
|
|
445
|
+
* @property {DOMElement} [element] - A DOM element where the renderer appends its child-elements.
|
|
446
|
+
* If not passed in here, a new div element will be created.
|
|
447
|
+
**/
|
|
448
|
+
|
|
353
449
|
export { CSS3DObject, CSS3DSprite, CSS3DRenderer };
|
|
@@ -120,10 +120,16 @@ class RenderableSprite {
|
|
|
120
120
|
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
|
|
124
|
-
|
|
123
|
+
/**
|
|
124
|
+
* This class can project a given scene in 3D space into a 2D representation
|
|
125
|
+
* used for rendering with a 2D API. `Projector` is currently used by {@link SVGRenderer}
|
|
126
|
+
* and was previously used by the legacy `CanvasRenderer`.
|
|
127
|
+
*/
|
|
125
128
|
class Projector {
|
|
126
129
|
|
|
130
|
+
/**
|
|
131
|
+
* Constructs a new projector.
|
|
132
|
+
*/
|
|
127
133
|
constructor() {
|
|
128
134
|
|
|
129
135
|
let _object, _objectCount, _objectPoolLength = 0,
|
|
@@ -403,6 +409,16 @@ class Projector {
|
|
|
403
409
|
|
|
404
410
|
}
|
|
405
411
|
|
|
412
|
+
/**
|
|
413
|
+
* Projects the given scene in 3D space into a 2D representation. The result
|
|
414
|
+
* is an object with renderable items.
|
|
415
|
+
*
|
|
416
|
+
* @param {Object3D} scene - A scene or any other type of 3D object.
|
|
417
|
+
* @param {Camera} camera - The camera.
|
|
418
|
+
* @param {boolean} sortObjects - Whether to sort objects or not.
|
|
419
|
+
* @param {boolean} sortElements - Whether to sort elements (faces, lines and sprites) or not.
|
|
420
|
+
* @return {{objects:Array<Objects>,lights:Array<Objects>,elements:Array<Objects>}} The projected scene as renderable objects.
|
|
421
|
+
*/
|
|
406
422
|
this.projectScene = function ( scene, camera, sortObjects, sortElements ) {
|
|
407
423
|
|
|
408
424
|
_faceCount = 0;
|