@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
|
@@ -16,7 +16,9 @@
|
|
|
16
16
|
const useDepthTexture = options.useDepthTexture === true;
|
|
17
17
|
const yAxis = new THREE.Vector3( 0, 1, 0 );
|
|
18
18
|
const vecTemp0 = new THREE.Vector3();
|
|
19
|
-
const vecTemp1 = new THREE.Vector3();
|
|
19
|
+
const vecTemp1 = new THREE.Vector3();
|
|
20
|
+
|
|
21
|
+
//
|
|
20
22
|
|
|
21
23
|
scope.needsUpdate = false;
|
|
22
24
|
scope.maxDistance = ReflectorForSSRPass.ReflectorShader.uniforms.maxDistance.value;
|
|
@@ -30,7 +32,6 @@
|
|
|
30
32
|
return scope._distanceAttenuation;
|
|
31
33
|
|
|
32
34
|
},
|
|
33
|
-
|
|
34
35
|
set( val ) {
|
|
35
36
|
|
|
36
37
|
if ( scope._distanceAttenuation === val ) return;
|
|
@@ -39,7 +40,6 @@
|
|
|
39
40
|
scope.material.needsUpdate = true;
|
|
40
41
|
|
|
41
42
|
}
|
|
42
|
-
|
|
43
43
|
} );
|
|
44
44
|
scope._fresnel = ReflectorForSSRPass.ReflectorShader.defines.FRESNEL;
|
|
45
45
|
Object.defineProperty( scope, 'fresnel', {
|
|
@@ -48,7 +48,6 @@
|
|
|
48
48
|
return scope._fresnel;
|
|
49
49
|
|
|
50
50
|
},
|
|
51
|
-
|
|
52
51
|
set( val ) {
|
|
53
52
|
|
|
54
53
|
if ( scope._fresnel === val ) return;
|
|
@@ -57,7 +56,6 @@
|
|
|
57
56
|
scope.material.needsUpdate = true;
|
|
58
57
|
|
|
59
58
|
}
|
|
60
|
-
|
|
61
59
|
} );
|
|
62
60
|
const normal = new THREE.Vector3();
|
|
63
61
|
const reflectorWorldPosition = new THREE.Vector3();
|
|
@@ -69,7 +67,6 @@
|
|
|
69
67
|
const textureMatrix = new THREE.Matrix4();
|
|
70
68
|
const virtualCamera = new THREE.PerspectiveCamera();
|
|
71
69
|
let depthTexture;
|
|
72
|
-
|
|
73
70
|
if ( useDepthTexture ) {
|
|
74
71
|
|
|
75
72
|
depthTexture = new THREE.DepthTexture();
|
|
@@ -96,7 +93,6 @@
|
|
|
96
93
|
material.uniforms[ 'tDiffuse' ].value = renderTarget.texture;
|
|
97
94
|
material.uniforms[ 'color' ].value = scope.color;
|
|
98
95
|
material.uniforms[ 'textureMatrix' ].value = textureMatrix;
|
|
99
|
-
|
|
100
96
|
if ( useDepthTexture ) {
|
|
101
97
|
|
|
102
98
|
material.uniforms[ 'tDepth' ].value = renderTarget.depthTexture;
|
|
@@ -106,7 +102,6 @@
|
|
|
106
102
|
this.material = material;
|
|
107
103
|
const globalPlane = new THREE.Plane( new THREE.Vector3( 0, 1, 0 ), clipBias );
|
|
108
104
|
const globalPlanes = [ globalPlane ];
|
|
109
|
-
|
|
110
105
|
this.doRender = function ( renderer, scene, camera ) {
|
|
111
106
|
|
|
112
107
|
material.uniforms[ 'maxDistance' ].value = scope.maxDistance;
|
|
@@ -121,7 +116,9 @@
|
|
|
121
116
|
rotationMatrix.extractRotation( scope.matrixWorld );
|
|
122
117
|
normal.set( 0, 0, 1 );
|
|
123
118
|
normal.applyMatrix4( rotationMatrix );
|
|
124
|
-
view.subVectors( reflectorWorldPosition, cameraWorldPosition );
|
|
119
|
+
view.subVectors( reflectorWorldPosition, cameraWorldPosition );
|
|
120
|
+
|
|
121
|
+
// Avoid rendering when reflector is facing away
|
|
125
122
|
|
|
126
123
|
if ( view.dot( normal ) > 0 ) return;
|
|
127
124
|
view.reflect( normal ).negate();
|
|
@@ -147,21 +144,22 @@
|
|
|
147
144
|
material.uniforms[ 'virtualCameraMatrixWorld' ].value = virtualCamera.matrixWorld;
|
|
148
145
|
material.uniforms[ 'virtualCameraProjectionMatrix' ].value = camera.projectionMatrix;
|
|
149
146
|
material.uniforms[ 'virtualCameraProjectionMatrixInverse' ].value = camera.projectionMatrixInverse;
|
|
150
|
-
material.uniforms[ 'resolution' ].value = scope.resolution;
|
|
147
|
+
material.uniforms[ 'resolution' ].value = scope.resolution;
|
|
151
148
|
|
|
149
|
+
// Update the texture matrix
|
|
152
150
|
textureMatrix.set( 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0 );
|
|
153
151
|
textureMatrix.multiply( virtualCamera.projectionMatrix );
|
|
154
152
|
textureMatrix.multiply( virtualCamera.matrixWorldInverse );
|
|
155
|
-
textureMatrix.multiply( scope.matrixWorld );
|
|
153
|
+
textureMatrix.multiply( scope.matrixWorld );
|
|
154
|
+
|
|
155
|
+
// scope.visible = false;
|
|
156
156
|
|
|
157
157
|
const currentRenderTarget = renderer.getRenderTarget();
|
|
158
158
|
const currentXrEnabled = renderer.xr.enabled;
|
|
159
159
|
const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
|
|
160
160
|
const currentClippingPlanes = renderer.clippingPlanes;
|
|
161
161
|
renderer.xr.enabled = false; // Avoid camera modification
|
|
162
|
-
|
|
163
162
|
renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
|
|
164
|
-
|
|
165
163
|
renderer.clippingPlanes = globalPlanes;
|
|
166
164
|
renderer.setRenderTarget( renderTarget );
|
|
167
165
|
renderer.state.buffers.depth.setMask( true ); // make sure the depth buffer is writable so it can be properly cleared, see #18897
|
|
@@ -171,15 +169,18 @@
|
|
|
171
169
|
renderer.xr.enabled = currentXrEnabled;
|
|
172
170
|
renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
|
|
173
171
|
renderer.clippingPlanes = currentClippingPlanes;
|
|
174
|
-
renderer.setRenderTarget( currentRenderTarget );
|
|
172
|
+
renderer.setRenderTarget( currentRenderTarget );
|
|
175
173
|
|
|
176
|
-
|
|
174
|
+
// Restore viewport
|
|
177
175
|
|
|
176
|
+
const viewport = camera.viewport;
|
|
178
177
|
if ( viewport !== undefined ) {
|
|
179
178
|
|
|
180
179
|
renderer.state.viewport( viewport );
|
|
181
180
|
|
|
182
|
-
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// scope.visible = true;
|
|
183
184
|
|
|
184
185
|
};
|
|
185
186
|
|
|
@@ -192,7 +193,6 @@
|
|
|
192
193
|
}
|
|
193
194
|
|
|
194
195
|
}
|
|
195
|
-
|
|
196
196
|
ReflectorForSSRPass.ReflectorShader = {
|
|
197
197
|
defines: {
|
|
198
198
|
DISTANCE_ATTENUATION: true,
|
|
@@ -239,9 +239,7 @@
|
|
|
239
239
|
value: new THREE.Vector2()
|
|
240
240
|
}
|
|
241
241
|
},
|
|
242
|
-
vertexShader:
|
|
243
|
-
/* glsl */
|
|
244
|
-
`
|
|
242
|
+
vertexShader: /* glsl */`
|
|
245
243
|
uniform mat4 textureMatrix;
|
|
246
244
|
varying vec4 vUv;
|
|
247
245
|
|
|
@@ -252,9 +250,7 @@
|
|
|
252
250
|
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
253
251
|
|
|
254
252
|
}`,
|
|
255
|
-
fragmentShader:
|
|
256
|
-
/* glsl */
|
|
257
|
-
`
|
|
253
|
+
fragmentShader: /* glsl */`
|
|
258
254
|
uniform vec3 color;
|
|
259
255
|
uniform sampler2D tDiffuse;
|
|
260
256
|
uniform sampler2D tDepth;
|
|
@@ -14,30 +14,40 @@
|
|
|
14
14
|
const textureHeight = options.textureHeight || 512;
|
|
15
15
|
const clipBias = options.clipBias || 0;
|
|
16
16
|
const shader = options.shader || Refractor.RefractorShader;
|
|
17
|
-
const multisample = options.multisample !== undefined ? options.multisample : 4;
|
|
17
|
+
const multisample = options.multisample !== undefined ? options.multisample : 4;
|
|
18
|
+
|
|
19
|
+
//
|
|
18
20
|
|
|
19
21
|
const virtualCamera = this.camera;
|
|
20
22
|
virtualCamera.matrixAutoUpdate = false;
|
|
21
|
-
virtualCamera.userData.refractor = true;
|
|
23
|
+
virtualCamera.userData.refractor = true;
|
|
24
|
+
|
|
25
|
+
//
|
|
22
26
|
|
|
23
27
|
const refractorPlane = new THREE.Plane();
|
|
24
|
-
const textureMatrix = new THREE.Matrix4();
|
|
28
|
+
const textureMatrix = new THREE.Matrix4();
|
|
29
|
+
|
|
30
|
+
// render target
|
|
25
31
|
|
|
26
32
|
const renderTarget = new THREE.WebGLRenderTarget( textureWidth, textureHeight, {
|
|
27
33
|
samples: multisample,
|
|
28
34
|
type: THREE.HalfFloatType
|
|
29
|
-
} );
|
|
35
|
+
} );
|
|
36
|
+
|
|
37
|
+
// material
|
|
30
38
|
|
|
31
39
|
this.material = new THREE.ShaderMaterial( {
|
|
32
40
|
uniforms: THREE.UniformsUtils.clone( shader.uniforms ),
|
|
33
41
|
vertexShader: shader.vertexShader,
|
|
34
42
|
fragmentShader: shader.fragmentShader,
|
|
35
43
|
transparent: true // ensures, refractors are drawn from farthest to closest
|
|
36
|
-
|
|
37
44
|
} );
|
|
45
|
+
|
|
38
46
|
this.material.uniforms[ 'color' ].value = color;
|
|
39
47
|
this.material.uniforms[ 'tDiffuse' ].value = renderTarget.texture;
|
|
40
|
-
this.material.uniforms[ 'textureMatrix' ].value = textureMatrix;
|
|
48
|
+
this.material.uniforms[ 'textureMatrix' ].value = textureMatrix;
|
|
49
|
+
|
|
50
|
+
// functions
|
|
41
51
|
|
|
42
52
|
const visible = function () {
|
|
43
53
|
|
|
@@ -59,7 +69,6 @@
|
|
|
59
69
|
};
|
|
60
70
|
|
|
61
71
|
}();
|
|
62
|
-
|
|
63
72
|
const updateRefractorPlane = function () {
|
|
64
73
|
|
|
65
74
|
const normal = new THREE.Vector3();
|
|
@@ -69,7 +78,9 @@
|
|
|
69
78
|
return function updateRefractorPlane() {
|
|
70
79
|
|
|
71
80
|
scope.matrixWorld.decompose( position, quaternion, scale );
|
|
72
|
-
normal.set( 0, 0, 1 ).applyQuaternion( quaternion ).normalize();
|
|
81
|
+
normal.set( 0, 0, 1 ).applyQuaternion( quaternion ).normalize();
|
|
82
|
+
|
|
83
|
+
// flip the normal because we want to cull everything above the plane
|
|
73
84
|
|
|
74
85
|
normal.negate();
|
|
75
86
|
refractorPlane.setFromNormalAndCoplanarPoint( normal, position );
|
|
@@ -77,7 +88,6 @@
|
|
|
77
88
|
};
|
|
78
89
|
|
|
79
90
|
}();
|
|
80
|
-
|
|
81
91
|
const updateVirtualCamera = function () {
|
|
82
92
|
|
|
83
93
|
const clipPlane = new THREE.Plane();
|
|
@@ -89,22 +99,29 @@
|
|
|
89
99
|
virtualCamera.matrixWorldInverse.copy( virtualCamera.matrixWorld ).invert();
|
|
90
100
|
virtualCamera.projectionMatrix.copy( camera.projectionMatrix );
|
|
91
101
|
virtualCamera.far = camera.far; // used in WebGLBackground
|
|
102
|
+
|
|
92
103
|
// The following code creates an oblique view frustum for clipping.
|
|
93
104
|
// see: Lengyel, Eric. “Oblique View Frustum Depth Projection and Clipping”.
|
|
94
105
|
// Journal of Game Development, Vol. 1, No. 2 (2005), Charles River Media, pp. 5–16
|
|
95
106
|
|
|
96
107
|
clipPlane.copy( refractorPlane );
|
|
97
108
|
clipPlane.applyMatrix4( virtualCamera.matrixWorldInverse );
|
|
98
|
-
clipVector.set( clipPlane.normal.x, clipPlane.normal.y, clipPlane.normal.z, clipPlane.constant );
|
|
109
|
+
clipVector.set( clipPlane.normal.x, clipPlane.normal.y, clipPlane.normal.z, clipPlane.constant );
|
|
110
|
+
|
|
111
|
+
// calculate the clip-space corner point opposite the clipping plane and
|
|
99
112
|
// transform it into camera space by multiplying it by the inverse of the projection matrix
|
|
100
113
|
|
|
101
114
|
const projectionMatrix = virtualCamera.projectionMatrix;
|
|
102
115
|
q.x = ( Math.sign( clipVector.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];
|
|
103
116
|
q.y = ( Math.sign( clipVector.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];
|
|
104
117
|
q.z = - 1.0;
|
|
105
|
-
q.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];
|
|
118
|
+
q.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];
|
|
119
|
+
|
|
120
|
+
// calculate the scaled plane vector
|
|
121
|
+
|
|
122
|
+
clipVector.multiplyScalar( 2.0 / clipVector.dot( q ) );
|
|
106
123
|
|
|
107
|
-
|
|
124
|
+
// replacing the third row of the projection matrix
|
|
108
125
|
|
|
109
126
|
projectionMatrix.elements[ 2 ] = clipVector.x;
|
|
110
127
|
projectionMatrix.elements[ 6 ] = clipVector.y;
|
|
@@ -113,14 +130,18 @@
|
|
|
113
130
|
|
|
114
131
|
};
|
|
115
132
|
|
|
116
|
-
}();
|
|
117
|
-
// see: http://developer.download.nvidia.com/assets/gamedev/docs/projective_texture_mapping.pdf
|
|
133
|
+
}();
|
|
118
134
|
|
|
135
|
+
// This will update the texture matrix that is used for projective texture mapping in the shader.
|
|
136
|
+
// see: http://developer.download.nvidia.com/assets/gamedev/docs/projective_texture_mapping.pdf
|
|
119
137
|
|
|
120
138
|
function updateTextureMatrix( camera ) {
|
|
121
139
|
|
|
122
140
|
// this matrix does range mapping to [ 0, 1 ]
|
|
123
|
-
|
|
141
|
+
|
|
142
|
+
textureMatrix.set( 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0 );
|
|
143
|
+
|
|
144
|
+
// we use "Object Linear Texgen", so we need to multiply the texture matrix T
|
|
124
145
|
// (matrix above) with the projection and view matrix of the virtual camera
|
|
125
146
|
// and the model matrix of the refractor
|
|
126
147
|
|
|
@@ -128,8 +149,9 @@
|
|
|
128
149
|
textureMatrix.multiply( camera.matrixWorldInverse );
|
|
129
150
|
textureMatrix.multiply( scope.matrixWorld );
|
|
130
151
|
|
|
131
|
-
}
|
|
152
|
+
}
|
|
132
153
|
|
|
154
|
+
//
|
|
133
155
|
|
|
134
156
|
function render( renderer, scene, camera ) {
|
|
135
157
|
|
|
@@ -140,9 +162,7 @@
|
|
|
140
162
|
const currentOutputEncoding = renderer.outputEncoding;
|
|
141
163
|
const currentToneMapping = renderer.toneMapping;
|
|
142
164
|
renderer.xr.enabled = false; // avoid camera modification
|
|
143
|
-
|
|
144
165
|
renderer.shadowMap.autoUpdate = false; // avoid re-computing shadows
|
|
145
|
-
|
|
146
166
|
renderer.outputEncoding = THREE.LinearEncoding;
|
|
147
167
|
renderer.toneMapping = THREE.NoToneMapping;
|
|
148
168
|
renderer.setRenderTarget( renderTarget );
|
|
@@ -152,10 +172,11 @@
|
|
|
152
172
|
renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
|
|
153
173
|
renderer.outputEncoding = currentOutputEncoding;
|
|
154
174
|
renderer.toneMapping = currentToneMapping;
|
|
155
|
-
renderer.setRenderTarget( currentRenderTarget );
|
|
175
|
+
renderer.setRenderTarget( currentRenderTarget );
|
|
156
176
|
|
|
157
|
-
|
|
177
|
+
// restore viewport
|
|
158
178
|
|
|
179
|
+
const viewport = camera.viewport;
|
|
159
180
|
if ( viewport !== undefined ) {
|
|
160
181
|
|
|
161
182
|
renderer.state.viewport( viewport );
|
|
@@ -164,15 +185,21 @@
|
|
|
164
185
|
|
|
165
186
|
scope.visible = true;
|
|
166
187
|
|
|
167
|
-
}
|
|
188
|
+
}
|
|
168
189
|
|
|
190
|
+
//
|
|
169
191
|
|
|
170
192
|
this.onBeforeRender = function ( renderer, scene, camera ) {
|
|
171
193
|
|
|
172
194
|
// ensure refractors are rendered only once per frame
|
|
173
|
-
if ( camera.userData.refractor === true ) return; // avoid rendering when the refractor is viewed from behind
|
|
174
195
|
|
|
175
|
-
if (
|
|
196
|
+
if ( camera.userData.refractor === true ) return;
|
|
197
|
+
|
|
198
|
+
// avoid rendering when the refractor is viewed from behind
|
|
199
|
+
|
|
200
|
+
if ( ! visible( camera ) === true ) return;
|
|
201
|
+
|
|
202
|
+
// update
|
|
176
203
|
|
|
177
204
|
updateRefractorPlane();
|
|
178
205
|
updateTextureMatrix( camera );
|
|
@@ -197,7 +224,6 @@
|
|
|
197
224
|
}
|
|
198
225
|
|
|
199
226
|
}
|
|
200
|
-
|
|
201
227
|
Refractor.RefractorShader = {
|
|
202
228
|
uniforms: {
|
|
203
229
|
'color': {
|
|
@@ -210,9 +236,7 @@
|
|
|
210
236
|
value: null
|
|
211
237
|
}
|
|
212
238
|
},
|
|
213
|
-
vertexShader:
|
|
214
|
-
/* glsl */
|
|
215
|
-
`
|
|
239
|
+
vertexShader: /* glsl */`
|
|
216
240
|
|
|
217
241
|
uniform mat4 textureMatrix;
|
|
218
242
|
|
|
@@ -224,9 +248,7 @@
|
|
|
224
248
|
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
225
249
|
|
|
226
250
|
}`,
|
|
227
|
-
fragmentShader:
|
|
228
|
-
/* glsl */
|
|
229
|
-
`
|
|
251
|
+
fragmentShader: /* glsl */`
|
|
230
252
|
|
|
231
253
|
uniform vec3 color;
|
|
232
254
|
uniform sampler2D tDiffuse;
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
const _shadowMatrix = new THREE.Matrix4();
|
|
8
|
-
|
|
9
8
|
class ShadowMesh extends THREE.Mesh {
|
|
10
9
|
|
|
11
10
|
constructor( mesh ) {
|
|
@@ -27,10 +26,10 @@
|
|
|
27
26
|
this.matrixAutoUpdate = false;
|
|
28
27
|
|
|
29
28
|
}
|
|
30
|
-
|
|
31
29
|
update( plane, lightPosition4D ) {
|
|
32
30
|
|
|
33
31
|
// based on https://www.opengl.org/archives/resources/features/StencilTalk/tsld021.htm
|
|
32
|
+
|
|
34
33
|
const dot = plane.normal.x * lightPosition4D.x + plane.normal.y * lightPosition4D.y + plane.normal.z * lightPosition4D.z + - plane.constant * lightPosition4D.w;
|
|
35
34
|
const sme = _shadowMatrix.elements;
|
|
36
35
|
sme[ 0 ] = dot - lightPosition4D.x * plane.normal.x;
|
|
@@ -33,7 +33,6 @@
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
}
|
|
36
|
-
|
|
37
36
|
Sky.SkyShader = {
|
|
38
37
|
uniforms: {
|
|
39
38
|
'turbidity': {
|
|
@@ -55,9 +54,7 @@
|
|
|
55
54
|
value: new THREE.Vector3( 0, 1, 0 )
|
|
56
55
|
}
|
|
57
56
|
},
|
|
58
|
-
vertexShader:
|
|
59
|
-
/* glsl */
|
|
60
|
-
`
|
|
57
|
+
vertexShader: /* glsl */`
|
|
61
58
|
uniform vec3 sunPosition;
|
|
62
59
|
uniform float rayleigh;
|
|
63
60
|
uniform float turbidity;
|
|
@@ -128,9 +125,7 @@
|
|
|
128
125
|
vBetaM = totalMie( turbidity ) * mieCoefficient;
|
|
129
126
|
|
|
130
127
|
}`,
|
|
131
|
-
fragmentShader:
|
|
132
|
-
/* glsl */
|
|
133
|
-
`
|
|
128
|
+
fragmentShader: /* glsl */`
|
|
134
129
|
varying vec3 vWorldPosition;
|
|
135
130
|
varying vec3 vSunDirection;
|
|
136
131
|
varying float vSunfade;
|
|
@@ -26,7 +26,9 @@
|
|
|
26
26
|
const eye = options.eye !== undefined ? options.eye : new THREE.Vector3( 0, 0, 0 );
|
|
27
27
|
const distortionScale = options.distortionScale !== undefined ? options.distortionScale : 20.0;
|
|
28
28
|
const side = options.side !== undefined ? options.side : THREE.FrontSide;
|
|
29
|
-
const fog = options.fog !== undefined ? options.fog : false;
|
|
29
|
+
const fog = options.fog !== undefined ? options.fog : false;
|
|
30
|
+
|
|
31
|
+
//
|
|
30
32
|
|
|
31
33
|
const mirrorPlane = new THREE.Plane();
|
|
32
34
|
const normal = new THREE.Vector3();
|
|
@@ -77,9 +79,7 @@
|
|
|
77
79
|
value: new THREE.Color( 0x555555 )
|
|
78
80
|
}
|
|
79
81
|
} ] ),
|
|
80
|
-
vertexShader:
|
|
81
|
-
/* glsl */
|
|
82
|
-
`
|
|
82
|
+
vertexShader: /* glsl */`
|
|
83
83
|
uniform mat4 textureMatrix;
|
|
84
84
|
uniform float time;
|
|
85
85
|
|
|
@@ -104,9 +104,7 @@
|
|
|
104
104
|
#include <fog_vertex>
|
|
105
105
|
#include <shadowmap_vertex>
|
|
106
106
|
}`,
|
|
107
|
-
fragmentShader:
|
|
108
|
-
/* glsl */
|
|
109
|
-
`
|
|
107
|
+
fragmentShader: /* glsl */`
|
|
110
108
|
uniform sampler2D mirrorSampler;
|
|
111
109
|
uniform float alpha;
|
|
112
110
|
uniform float time;
|
|
@@ -198,7 +196,6 @@
|
|
|
198
196
|
material.uniforms[ 'distortionScale' ].value = distortionScale;
|
|
199
197
|
material.uniforms[ 'eye' ].value = eye;
|
|
200
198
|
scope.material = material;
|
|
201
|
-
|
|
202
199
|
scope.onBeforeRender = function ( renderer, scene, camera ) {
|
|
203
200
|
|
|
204
201
|
mirrorWorldPosition.setFromMatrixPosition( scope.matrixWorld );
|
|
@@ -206,7 +203,9 @@
|
|
|
206
203
|
rotationMatrix.extractRotation( scope.matrixWorld );
|
|
207
204
|
normal.set( 0, 0, 1 );
|
|
208
205
|
normal.applyMatrix4( rotationMatrix );
|
|
209
|
-
view.subVectors( mirrorWorldPosition, cameraWorldPosition );
|
|
206
|
+
view.subVectors( mirrorWorldPosition, cameraWorldPosition );
|
|
207
|
+
|
|
208
|
+
// Avoid rendering when mirror is facing away
|
|
210
209
|
|
|
211
210
|
if ( view.dot( normal ) > 0 ) return;
|
|
212
211
|
view.reflect( normal ).negate();
|
|
@@ -226,13 +225,15 @@
|
|
|
226
225
|
mirrorCamera.far = camera.far; // Used in WebGLBackground
|
|
227
226
|
|
|
228
227
|
mirrorCamera.updateMatrixWorld();
|
|
229
|
-
mirrorCamera.projectionMatrix.copy( camera.projectionMatrix );
|
|
228
|
+
mirrorCamera.projectionMatrix.copy( camera.projectionMatrix );
|
|
230
229
|
|
|
230
|
+
// Update the texture matrix
|
|
231
231
|
textureMatrix.set( 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0 );
|
|
232
232
|
textureMatrix.multiply( mirrorCamera.projectionMatrix );
|
|
233
|
-
textureMatrix.multiply( mirrorCamera.matrixWorldInverse );
|
|
234
|
-
// Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
|
|
233
|
+
textureMatrix.multiply( mirrorCamera.matrixWorldInverse );
|
|
235
234
|
|
|
235
|
+
// Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html
|
|
236
|
+
// Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
|
|
236
237
|
mirrorPlane.setFromNormalAndCoplanarPoint( normal, mirrorWorldPosition );
|
|
237
238
|
mirrorPlane.applyMatrix4( mirrorCamera.matrixWorldInverse );
|
|
238
239
|
clipPlane.set( mirrorPlane.normal.x, mirrorPlane.normal.y, mirrorPlane.normal.z, mirrorPlane.constant );
|
|
@@ -240,22 +241,25 @@
|
|
|
240
241
|
q.x = ( Math.sign( clipPlane.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];
|
|
241
242
|
q.y = ( Math.sign( clipPlane.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];
|
|
242
243
|
q.z = - 1.0;
|
|
243
|
-
q.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];
|
|
244
|
+
q.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];
|
|
244
245
|
|
|
245
|
-
|
|
246
|
+
// Calculate the scaled plane vector
|
|
247
|
+
clipPlane.multiplyScalar( 2.0 / clipPlane.dot( q ) );
|
|
246
248
|
|
|
249
|
+
// Replacing the third row of the projection matrix
|
|
247
250
|
projectionMatrix.elements[ 2 ] = clipPlane.x;
|
|
248
251
|
projectionMatrix.elements[ 6 ] = clipPlane.y;
|
|
249
252
|
projectionMatrix.elements[ 10 ] = clipPlane.z + 1.0 - clipBias;
|
|
250
253
|
projectionMatrix.elements[ 14 ] = clipPlane.w;
|
|
251
|
-
eye.setFromMatrixPosition( camera.matrixWorld );
|
|
254
|
+
eye.setFromMatrixPosition( camera.matrixWorld );
|
|
255
|
+
|
|
256
|
+
// Render
|
|
252
257
|
|
|
253
258
|
const currentRenderTarget = renderer.getRenderTarget();
|
|
254
259
|
const currentXrEnabled = renderer.xr.enabled;
|
|
255
260
|
const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
|
|
256
261
|
scope.visible = false;
|
|
257
262
|
renderer.xr.enabled = false; // Avoid camera modification and recursion
|
|
258
|
-
|
|
259
263
|
renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
|
|
260
264
|
|
|
261
265
|
renderer.setRenderTarget( renderTarget );
|
|
@@ -266,10 +270,11 @@
|
|
|
266
270
|
scope.visible = true;
|
|
267
271
|
renderer.xr.enabled = currentXrEnabled;
|
|
268
272
|
renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
|
|
269
|
-
renderer.setRenderTarget( currentRenderTarget );
|
|
273
|
+
renderer.setRenderTarget( currentRenderTarget );
|
|
270
274
|
|
|
271
|
-
|
|
275
|
+
// Restore viewport
|
|
272
276
|
|
|
277
|
+
const viewport = camera.viewport;
|
|
273
278
|
if ( viewport !== undefined ) {
|
|
274
279
|
|
|
275
280
|
renderer.state.viewport( viewport );
|
|
@@ -29,10 +29,11 @@
|
|
|
29
29
|
const normalMap0 = options.normalMap0 || textureLoader.load( 'textures/water/Water_1_M_Normal.jpg' );
|
|
30
30
|
const normalMap1 = options.normalMap1 || textureLoader.load( 'textures/water/Water_2_M_Normal.jpg' );
|
|
31
31
|
const cycle = 0.15; // a cycle of a flow map phase
|
|
32
|
-
|
|
33
32
|
const halfCycle = cycle * 0.5;
|
|
34
33
|
const textureMatrix = new THREE.Matrix4();
|
|
35
|
-
const clock = new THREE.Clock();
|
|
34
|
+
const clock = new THREE.Clock();
|
|
35
|
+
|
|
36
|
+
// internal components
|
|
36
37
|
|
|
37
38
|
if ( THREE.Reflector === undefined ) {
|
|
38
39
|
|
|
@@ -59,7 +60,9 @@
|
|
|
59
60
|
clipBias: clipBias
|
|
60
61
|
} );
|
|
61
62
|
reflector.matrixAutoUpdate = false;
|
|
62
|
-
refractor.matrixAutoUpdate = false;
|
|
63
|
+
refractor.matrixAutoUpdate = false;
|
|
64
|
+
|
|
65
|
+
// material
|
|
63
66
|
|
|
64
67
|
this.material = new THREE.ShaderMaterial( {
|
|
65
68
|
uniforms: THREE.UniformsUtils.merge( [ THREE.UniformsLib[ 'fog' ], shader.uniforms ] ),
|
|
@@ -68,7 +71,6 @@
|
|
|
68
71
|
transparent: true,
|
|
69
72
|
fog: true
|
|
70
73
|
} );
|
|
71
|
-
|
|
72
74
|
if ( flowMap !== undefined ) {
|
|
73
75
|
|
|
74
76
|
this.material.defines.USE_FLOWMAP = '';
|
|
@@ -84,27 +86,30 @@
|
|
|
84
86
|
value: flowDirection
|
|
85
87
|
};
|
|
86
88
|
|
|
87
|
-
}
|
|
89
|
+
}
|
|
88
90
|
|
|
91
|
+
// maps
|
|
89
92
|
|
|
90
93
|
normalMap0.wrapS = normalMap0.wrapT = THREE.RepeatWrapping;
|
|
91
94
|
normalMap1.wrapS = normalMap1.wrapT = THREE.RepeatWrapping;
|
|
92
95
|
this.material.uniforms[ 'tReflectionMap' ].value = reflector.getRenderTarget().texture;
|
|
93
96
|
this.material.uniforms[ 'tRefractionMap' ].value = refractor.getRenderTarget().texture;
|
|
94
97
|
this.material.uniforms[ 'tNormalMap0' ].value = normalMap0;
|
|
95
|
-
this.material.uniforms[ 'tNormalMap1' ].value = normalMap1;
|
|
98
|
+
this.material.uniforms[ 'tNormalMap1' ].value = normalMap1;
|
|
99
|
+
|
|
100
|
+
// water
|
|
96
101
|
|
|
97
102
|
this.material.uniforms[ 'color' ].value = color;
|
|
98
103
|
this.material.uniforms[ 'reflectivity' ].value = reflectivity;
|
|
99
|
-
this.material.uniforms[ 'textureMatrix' ].value = textureMatrix;
|
|
104
|
+
this.material.uniforms[ 'textureMatrix' ].value = textureMatrix;
|
|
100
105
|
|
|
101
|
-
|
|
106
|
+
// inital values
|
|
102
107
|
|
|
108
|
+
this.material.uniforms[ 'config' ].value.x = 0; // flowMapOffset0
|
|
103
109
|
this.material.uniforms[ 'config' ].value.y = halfCycle; // flowMapOffset1
|
|
104
|
-
|
|
105
110
|
this.material.uniforms[ 'config' ].value.z = halfCycle; // halfCycle
|
|
106
|
-
|
|
107
111
|
this.material.uniforms[ 'config' ].value.w = scale; // scale
|
|
112
|
+
|
|
108
113
|
// functions
|
|
109
114
|
|
|
110
115
|
function updateTextureMatrix( camera ) {
|
|
@@ -121,8 +126,8 @@
|
|
|
121
126
|
const delta = clock.getDelta();
|
|
122
127
|
const config = scope.material.uniforms[ 'config' ];
|
|
123
128
|
config.value.x += flowSpeed * delta; // flowMapOffset0
|
|
124
|
-
|
|
125
129
|
config.value.y = config.value.x + halfCycle; // flowMapOffset1
|
|
130
|
+
|
|
126
131
|
// Important: The distance between offsets should be always the value of "halfCycle".
|
|
127
132
|
// Moreover, both offsets should be in the range of [ 0, cycle ].
|
|
128
133
|
// This approach ensures a smooth water flow and avoids "reset" effects.
|
|
@@ -138,8 +143,9 @@
|
|
|
138
143
|
|
|
139
144
|
}
|
|
140
145
|
|
|
141
|
-
}
|
|
146
|
+
}
|
|
142
147
|
|
|
148
|
+
//
|
|
143
149
|
|
|
144
150
|
this.onBeforeRender = function ( renderer, scene, camera ) {
|
|
145
151
|
|
|
@@ -157,7 +163,6 @@
|
|
|
157
163
|
}
|
|
158
164
|
|
|
159
165
|
}
|
|
160
|
-
|
|
161
166
|
Water.WaterShader = {
|
|
162
167
|
uniforms: {
|
|
163
168
|
'color': {
|
|
@@ -193,9 +198,7 @@
|
|
|
193
198
|
value: new THREE.Vector4()
|
|
194
199
|
}
|
|
195
200
|
},
|
|
196
|
-
vertexShader:
|
|
197
|
-
/* glsl */
|
|
198
|
-
`
|
|
201
|
+
vertexShader: /* glsl */`
|
|
199
202
|
|
|
200
203
|
#include <common>
|
|
201
204
|
#include <fog_pars_vertex>
|
|
@@ -222,9 +225,7 @@
|
|
|
222
225
|
#include <fog_vertex>
|
|
223
226
|
|
|
224
227
|
}`,
|
|
225
|
-
fragmentShader:
|
|
226
|
-
/* glsl */
|
|
227
|
-
`
|
|
228
|
+
fragmentShader: /* glsl */`
|
|
228
229
|
|
|
229
230
|
#include <common>
|
|
230
231
|
#include <fog_pars_fragment>
|