super-three 0.144.0 → 0.147.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 +737 -388
- package/build/three.js +737 -388
- package/build/three.min.js +1 -1
- package/build/three.module.js +911 -409
- package/examples/js/animation/AnimationClipCreator.js +0 -8
- package/examples/js/animation/CCDIKSolver.js +50 -67
- 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 +125 -99
- package/examples/js/controls/PointerLockControls.js +5 -14
- package/examples/js/controls/TrackballControls.js +33 -86
- package/examples/js/controls/TransformControls.js +85 -170
- 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 +141 -317
- 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 +113 -27
- 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 +25 -39
- package/examples/js/interactive/InteractiveGroup.js +9 -14
- 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 +40 -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 +228 -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 +287 -441
- package/examples/js/loaders/FontLoader.js +6 -15
- package/examples/js/loaders/GCodeLoader.js +15 -16
- package/examples/js/loaders/GLTFLoader.js +409 -706
- 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/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 +62 -48
- 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 +185 -141
- 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 +26 -16
- 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/RenderPixelatedPass.js +215 -0
- 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 -8
- 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 +236 -170
- 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 +27 -3
- package/examples/jsm/animation/MMDPhysics.js +25 -0
- package/examples/jsm/capabilities/WebGPU.js +3 -1
- package/examples/jsm/controls/FirstPersonControls.js +20 -20
- package/examples/jsm/controls/FlyControls.js +16 -17
- package/examples/jsm/controls/OrbitControls.js +44 -4
- package/examples/jsm/controls/TrackballControls.js +14 -2
- package/examples/jsm/controls/TransformControls.js +1 -1
- package/examples/jsm/csm/CSM.js +1 -0
- package/examples/jsm/csm/CSMHelper.js +30 -0
- package/examples/jsm/exporters/GLTFExporter.js +0 -79
- package/examples/jsm/exporters/USDZExporter.js +93 -1
- package/examples/jsm/helpers/OctreeHelper.js +22 -8
- package/examples/jsm/helpers/VertexNormalsHelper.js +7 -1
- package/examples/jsm/helpers/VertexTangentsHelper.js +7 -0
- package/examples/jsm/helpers/ViewHelper.js +24 -0
- package/examples/jsm/interactive/HTMLMesh.js +5 -6
- package/examples/jsm/interactive/InteractiveGroup.js +4 -2
- package/examples/jsm/libs/flow.module.js +610 -160
- package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
- package/examples/jsm/lines/LineSegments2.js +4 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -2
- package/examples/jsm/loaders/ColladaLoader.js +28 -0
- package/examples/jsm/loaders/FBXLoader.js +18 -2
- package/examples/jsm/loaders/GLTFLoader.js +269 -428
- 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 +351 -111
- package/examples/jsm/loaders/VRMLLoader.js +13 -1
- package/examples/jsm/math/ConvexHull.js +4 -4
- package/examples/jsm/math/Octree.js +1 -1
- package/examples/jsm/node-editor/NodeEditor.js +91 -12
- package/examples/jsm/node-editor/core/BaseNode.js +10 -3
- package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +6 -9
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +6 -9
- package/examples/jsm/node-editor/math/AngleEditor.js +3 -3
- package/examples/jsm/node-editor/math/InvertEditor.js +2 -2
- package/examples/jsm/node-editor/scene/MeshEditor.js +11 -8
- package/examples/jsm/node-editor/utils/PreviewEditor.js +4 -0
- package/examples/jsm/nodes/Nodes.js +30 -3
- package/examples/jsm/nodes/accessors/BitangentNode.js +62 -0
- package/examples/jsm/nodes/accessors/NormalNode.js +6 -6
- 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 +8 -1
- package/examples/jsm/nodes/accessors/TangentNode.js +95 -0
- package/examples/jsm/nodes/core/AttributeNode.js +31 -8
- package/examples/jsm/nodes/core/Node.js +1 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +55 -6
- 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/BlendModeNode.js +85 -0
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -12
- package/examples/jsm/nodes/display/NormalMapNode.js +19 -12
- package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
- package/examples/jsm/nodes/display/ViewportNode.js +106 -0
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +5 -5
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +3 -3
- package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +2 -2
- 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/{Disclaimer.md → DISCLAIMER.md} +1 -1
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +59 -0
- package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_hsv.js +1 -1
- package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_noise.js +13 -3
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
- package/examples/jsm/nodes/math/MathNode.js +5 -5
- package/examples/jsm/nodes/math/OperatorNode.js +16 -3
- package/examples/jsm/nodes/shadernode/ShaderNode.js +35 -20
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +87 -63
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +29 -0
- package/examples/jsm/nodes/utils/ConvertNode.js +15 -14
- 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/OscNode.js +2 -2
- package/examples/jsm/nodes/utils/RemapNode.js +34 -0
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
- package/examples/jsm/nodes/utils/TimerNode.js +21 -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 +21 -1
- 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 +56 -35
- 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 +41 -9
- package/examples/jsm/shaders/MMDToonShader.js +0 -2
- package/examples/jsm/shaders/VelocityShader.js +128 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +174 -42
- package/examples/jsm/utils/SceneUtils.js +129 -4
- package/examples/jsm/webxr/OculusHandModel.js +3 -2
- package/examples/jsm/webxr/XRHandMeshModel.js +8 -3
- package/package.json +13 -13
- package/src/Three.js +1 -0
- package/src/animation/PropertyBinding.js +7 -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/core/InterleavedBufferAttribute.js +4 -4
- package/src/extras/Earcut.js +67 -67
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/ShapeGeometry.js +1 -1
- package/src/helpers/ArrowHelper.js +9 -0
- package/src/helpers/Box3Helper.js +7 -0
- package/src/helpers/BoxHelper.js +7 -1
- package/src/helpers/DirectionalLightHelper.js +5 -1
- package/src/helpers/GridHelper.js +7 -0
- package/src/helpers/HemisphereLightHelper.js +4 -1
- package/src/helpers/PlaneHelper.js +9 -0
- package/src/helpers/PointLightHelper.js +2 -1
- package/src/helpers/PolarGridHelper.js +7 -0
- package/src/helpers/SkeletonHelper.js +7 -0
- package/src/helpers/SpotLightHelper.js +4 -2
- package/src/lights/LightShadow.js +1 -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/materials/MeshPhysicalMaterial.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 +36 -21
- 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/normal_fragment_begin.glsl.js +2 -4
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +2 -2
- 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/vsm.glsl.js +0 -3
- 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/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 +78 -41
- package/src/renderers/webgl/WebGLTextures.js +94 -39
- package/src/renderers/webgl/WebGLUniforms.js +152 -24
- package/src/renderers/webgl/WebGLUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +46 -13
- package/src/renderers/webxr/WebXRManager.js +71 -3
- package/src/scenes/Scene.js +8 -0
- package/src/textures/CompressedArrayTexture.js +18 -0
- package/src/textures/Texture.js +2 -1
- 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
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import {
|
|
2
|
+
UniformsLib,
|
|
3
|
+
UniformsUtils,
|
|
4
|
+
Matrix4
|
|
5
|
+
} from 'three';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Mesh Velocity Shader @bhouston
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const VelocityShader = {
|
|
12
|
+
|
|
13
|
+
uniforms: UniformsUtils.merge( [
|
|
14
|
+
UniformsLib.common,
|
|
15
|
+
UniformsLib.displacementmap,
|
|
16
|
+
{
|
|
17
|
+
modelMatrixPrev: { value: new Matrix4() },
|
|
18
|
+
currentProjectionViewMatrix: { value: new Matrix4() },
|
|
19
|
+
previousProjectionViewMatrix: { value: new Matrix4() }
|
|
20
|
+
}
|
|
21
|
+
] ),
|
|
22
|
+
|
|
23
|
+
vertexShader: /* glsl */`
|
|
24
|
+
#define NORMAL
|
|
25
|
+
|
|
26
|
+
#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )
|
|
27
|
+
|
|
28
|
+
varying vec3 vViewPosition;
|
|
29
|
+
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
#include <common>
|
|
33
|
+
#include <packing>
|
|
34
|
+
#include <uv_pars_vertex>
|
|
35
|
+
#include <displacementmap_pars_vertex>
|
|
36
|
+
#include <normal_pars_vertex>
|
|
37
|
+
#include <morphtarget_pars_vertex>
|
|
38
|
+
#include <skinning_pars_vertex>
|
|
39
|
+
#include <logdepthbuf_pars_vertex>
|
|
40
|
+
#include <clipping_planes_pars_vertex>
|
|
41
|
+
|
|
42
|
+
uniform mat4 previousProjectionViewMatrix;
|
|
43
|
+
uniform mat4 currentProjectionViewMatrix;
|
|
44
|
+
|
|
45
|
+
uniform mat4 modelMatrixPrev;
|
|
46
|
+
|
|
47
|
+
varying vec4 clipPositionCurrent;
|
|
48
|
+
varying vec4 clipPositionPrevious;
|
|
49
|
+
|
|
50
|
+
void main() {
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
#include <uv_vertex>
|
|
54
|
+
|
|
55
|
+
#include <beginnormal_vertex>
|
|
56
|
+
#include <morphnormal_vertex>
|
|
57
|
+
#include <skinbase_vertex>
|
|
58
|
+
#include <skinnormal_vertex>
|
|
59
|
+
#include <defaultnormal_vertex>
|
|
60
|
+
#include <normal_vertex>
|
|
61
|
+
|
|
62
|
+
#include <begin_vertex>
|
|
63
|
+
#include <morphtarget_vertex>
|
|
64
|
+
#include <displacementmap_vertex>
|
|
65
|
+
#include <morphtarget_vertex>
|
|
66
|
+
#include <skinning_vertex>
|
|
67
|
+
|
|
68
|
+
#ifdef USE_SKINNING
|
|
69
|
+
|
|
70
|
+
vec4 mvPosition = modelViewMatrix * skinned;
|
|
71
|
+
clipPositionCurrent = currentProjectionViewMatrix * modelMatrix * skinned;
|
|
72
|
+
clipPositionPrevious = previousProjectionViewMatrix * modelMatrixPrev * skinned;
|
|
73
|
+
|
|
74
|
+
#else
|
|
75
|
+
|
|
76
|
+
vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );
|
|
77
|
+
clipPositionCurrent = currentProjectionViewMatrix * modelMatrix * vec4( transformed, 1.0 );
|
|
78
|
+
clipPositionPrevious = previousProjectionViewMatrix * modelMatrixPrev * vec4( transformed, 1.0 );
|
|
79
|
+
|
|
80
|
+
#endif
|
|
81
|
+
|
|
82
|
+
gl_Position = projectionMatrix * mvPosition;
|
|
83
|
+
|
|
84
|
+
#include <logdepthbuf_vertex>
|
|
85
|
+
#include <clipping_planes_vertex>
|
|
86
|
+
}
|
|
87
|
+
`,
|
|
88
|
+
fragmentShader: /* glsl */`
|
|
89
|
+
#define NORMAL
|
|
90
|
+
|
|
91
|
+
uniform float opacity;
|
|
92
|
+
|
|
93
|
+
#include <packing>
|
|
94
|
+
#include <uv_pars_fragment>
|
|
95
|
+
#include <map_pars_fragment>
|
|
96
|
+
#include <alphamap_pars_fragment>
|
|
97
|
+
#include <alphatest_pars_fragment>
|
|
98
|
+
#include <logdepthbuf_pars_fragment>
|
|
99
|
+
#include <clipping_planes_pars_fragment>
|
|
100
|
+
|
|
101
|
+
varying vec4 clipPositionCurrent;
|
|
102
|
+
varying vec4 clipPositionPrevious;
|
|
103
|
+
|
|
104
|
+
void main() {
|
|
105
|
+
|
|
106
|
+
vec4 diffuseColor = vec4( 1.0 );
|
|
107
|
+
diffuseColor.a = opacity;
|
|
108
|
+
|
|
109
|
+
#include <map_fragment>
|
|
110
|
+
#include <alphamap_fragment>
|
|
111
|
+
#include <alphatest_fragment>
|
|
112
|
+
|
|
113
|
+
vec2 ndcPositionCurrent = clipPositionCurrent.xy/clipPositionCurrent.w;
|
|
114
|
+
vec2 ndcPositionPrevious = clipPositionPrevious.xy/clipPositionPrevious.w;
|
|
115
|
+
vec2 vel = ( ndcPositionCurrent - ndcPositionPrevious ) * 0.5;
|
|
116
|
+
vel = vel * 0.5 + 0.5;
|
|
117
|
+
vec2 v1 = packDepthToRG(vel.x);
|
|
118
|
+
vec2 v2 = packDepthToRG(vel.y);
|
|
119
|
+
gl_FragColor = vec4(v1.x, v1.y, v2.x, v2.y);
|
|
120
|
+
|
|
121
|
+
#include <logdepthbuf_fragment>
|
|
122
|
+
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
`
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
export { VelocityShader };
|
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
InstancedBufferAttribute,
|
|
6
6
|
InterleavedBuffer,
|
|
7
7
|
InterleavedBufferAttribute,
|
|
8
|
-
MathUtils,
|
|
9
8
|
TriangleFanDrawMode,
|
|
10
9
|
TriangleStripDrawMode,
|
|
11
10
|
TrianglesDrawMode,
|
|
@@ -36,17 +35,16 @@ function computeMikkTSpaceTangents( geometry, MikkTSpace, negateSign = true ) {
|
|
|
36
35
|
|
|
37
36
|
if ( attribute.normalized || attribute.isInterleavedBufferAttribute ) {
|
|
38
37
|
|
|
39
|
-
const srcArray = attribute.isInterleavedBufferAttribute ? attribute.data.array : attribute.array;
|
|
40
38
|
const dstArray = new Float32Array( attribute.getCount() * attribute.itemSize );
|
|
41
39
|
|
|
42
40
|
for ( let i = 0, j = 0; i < attribute.getCount(); i ++ ) {
|
|
43
41
|
|
|
44
|
-
dstArray[ j ++ ] =
|
|
45
|
-
dstArray[ j ++ ] =
|
|
42
|
+
dstArray[ j ++ ] = attribute.getX( i );
|
|
43
|
+
dstArray[ j ++ ] = attribute.getY( i );
|
|
46
44
|
|
|
47
45
|
if ( attribute.itemSize > 2 ) {
|
|
48
46
|
|
|
49
|
-
dstArray[ j ++ ] =
|
|
47
|
+
dstArray[ j ++ ] = attribute.getZ( i );
|
|
50
48
|
|
|
51
49
|
}
|
|
52
50
|
|
|
@@ -194,11 +192,6 @@ function mergeBufferGeometries( geometries, useGroups = false ) {
|
|
|
194
192
|
|
|
195
193
|
}
|
|
196
194
|
|
|
197
|
-
// gather .userData
|
|
198
|
-
|
|
199
|
-
mergedGeometry.userData.mergedUserData = mergedGeometry.userData.mergedUserData || [];
|
|
200
|
-
mergedGeometry.userData.mergedUserData.push( geometry.userData );
|
|
201
|
-
|
|
202
195
|
if ( useGroups ) {
|
|
203
196
|
|
|
204
197
|
let count;
|
|
@@ -373,6 +366,28 @@ function mergeBufferAttributes( attributes ) {
|
|
|
373
366
|
|
|
374
367
|
}
|
|
375
368
|
|
|
369
|
+
/**
|
|
370
|
+
* @param {BufferAttribute}
|
|
371
|
+
* @return {BufferAttribute}
|
|
372
|
+
*/
|
|
373
|
+
export function deepCloneAttribute( attribute ) {
|
|
374
|
+
|
|
375
|
+
if ( attribute.isInstancedInterleavedBufferAttribute || attribute.isInterleavedBufferAttribute ) {
|
|
376
|
+
|
|
377
|
+
return deinterleaveAttribute( attribute );
|
|
378
|
+
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
if ( attribute.isInstancedBufferAttribute ) {
|
|
382
|
+
|
|
383
|
+
return new InstancedBufferAttribute().copy( attribute );
|
|
384
|
+
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
return new BufferAttribute().copy( attribute );
|
|
388
|
+
|
|
389
|
+
}
|
|
390
|
+
|
|
376
391
|
/**
|
|
377
392
|
* @param {Array<BufferAttribute>} attributes
|
|
378
393
|
* @return {Array<InterleavedBufferAttribute>}
|
|
@@ -385,7 +400,7 @@ function interleaveAttributes( attributes ) {
|
|
|
385
400
|
let arrayLength = 0;
|
|
386
401
|
let stride = 0;
|
|
387
402
|
|
|
388
|
-
// calculate the
|
|
403
|
+
// calculate the length and type of the interleavedBuffer
|
|
389
404
|
for ( let i = 0, l = attributes.length; i < l; ++ i ) {
|
|
390
405
|
|
|
391
406
|
const attribute = attributes[ i ];
|
|
@@ -555,7 +570,7 @@ function estimateBytesUsed( geometry ) {
|
|
|
555
570
|
/**
|
|
556
571
|
* @param {BufferGeometry} geometry
|
|
557
572
|
* @param {number} tolerance
|
|
558
|
-
* @return {BufferGeometry
|
|
573
|
+
* @return {BufferGeometry}
|
|
559
574
|
*/
|
|
560
575
|
function mergeVertices( geometry, tolerance = 1e-4 ) {
|
|
561
576
|
|
|
@@ -573,22 +588,33 @@ function mergeVertices( geometry, tolerance = 1e-4 ) {
|
|
|
573
588
|
|
|
574
589
|
// attributes and new attribute arrays
|
|
575
590
|
const attributeNames = Object.keys( geometry.attributes );
|
|
576
|
-
const
|
|
577
|
-
const
|
|
591
|
+
const tmpAttributes = {};
|
|
592
|
+
const tmpMorphAttributes = {};
|
|
578
593
|
const newIndices = [];
|
|
579
594
|
const getters = [ 'getX', 'getY', 'getZ', 'getW' ];
|
|
595
|
+
const setters = [ 'setX', 'setY', 'setZ', 'setW' ];
|
|
580
596
|
|
|
581
|
-
//
|
|
597
|
+
// Initialize the arrays, allocating space conservatively. Extra
|
|
598
|
+
// space will be trimmed in the last step.
|
|
582
599
|
for ( let i = 0, l = attributeNames.length; i < l; i ++ ) {
|
|
583
600
|
|
|
584
601
|
const name = attributeNames[ i ];
|
|
602
|
+
const attr = geometry.attributes[ name ];
|
|
585
603
|
|
|
586
|
-
|
|
604
|
+
tmpAttributes[ name ] = new BufferAttribute(
|
|
605
|
+
new attr.array.constructor( attr.count * attr.itemSize ),
|
|
606
|
+
attr.itemSize,
|
|
607
|
+
attr.normalized
|
|
608
|
+
);
|
|
587
609
|
|
|
588
610
|
const morphAttr = geometry.morphAttributes[ name ];
|
|
589
611
|
if ( morphAttr ) {
|
|
590
612
|
|
|
591
|
-
|
|
613
|
+
tmpMorphAttributes[ name ] = new BufferAttribute(
|
|
614
|
+
new morphAttr.array.constructor( morphAttr.count * morphAttr.itemSize ),
|
|
615
|
+
morphAttr.itemSize,
|
|
616
|
+
morphAttr.normalized
|
|
617
|
+
);
|
|
592
618
|
|
|
593
619
|
}
|
|
594
620
|
|
|
@@ -626,26 +652,27 @@ function mergeVertices( geometry, tolerance = 1e-4 ) {
|
|
|
626
652
|
|
|
627
653
|
} else {
|
|
628
654
|
|
|
629
|
-
// copy data to the new index in the
|
|
655
|
+
// copy data to the new index in the temporary attributes
|
|
630
656
|
for ( let j = 0, l = attributeNames.length; j < l; j ++ ) {
|
|
631
657
|
|
|
632
658
|
const name = attributeNames[ j ];
|
|
633
659
|
const attribute = geometry.getAttribute( name );
|
|
634
660
|
const morphAttr = geometry.morphAttributes[ name ];
|
|
635
661
|
const itemSize = attribute.itemSize;
|
|
636
|
-
const newarray =
|
|
637
|
-
const newMorphArrays =
|
|
662
|
+
const newarray = tmpAttributes[ name ];
|
|
663
|
+
const newMorphArrays = tmpMorphAttributes[ name ];
|
|
638
664
|
|
|
639
665
|
for ( let k = 0; k < itemSize; k ++ ) {
|
|
640
666
|
|
|
641
667
|
const getterFunc = getters[ k ];
|
|
642
|
-
|
|
668
|
+
const setterFunc = setters[ k ];
|
|
669
|
+
newarray[ setterFunc ]( nextIndex, attribute[ getterFunc ]( index ) );
|
|
643
670
|
|
|
644
671
|
if ( morphAttr ) {
|
|
645
672
|
|
|
646
673
|
for ( let m = 0, ml = morphAttr.length; m < ml; m ++ ) {
|
|
647
674
|
|
|
648
|
-
newMorphArrays[ m ]
|
|
675
|
+
newMorphArrays[ m ][ setterFunc ]( nextIndex, morphAttr[ m ][ getterFunc ]( index ) );
|
|
649
676
|
|
|
650
677
|
}
|
|
651
678
|
|
|
@@ -663,31 +690,29 @@ function mergeVertices( geometry, tolerance = 1e-4 ) {
|
|
|
663
690
|
|
|
664
691
|
}
|
|
665
692
|
|
|
666
|
-
//
|
|
667
|
-
// the attributeBuffers
|
|
693
|
+
// generate result BufferGeometry
|
|
668
694
|
const result = geometry.clone();
|
|
669
|
-
for (
|
|
670
|
-
|
|
671
|
-
const name = attributeNames[ i ];
|
|
672
|
-
const oldAttribute = geometry.getAttribute( name );
|
|
673
|
-
|
|
674
|
-
const buffer = new oldAttribute.array.constructor( attrArrays[ name ] );
|
|
675
|
-
const attribute = new BufferAttribute( buffer, oldAttribute.itemSize, oldAttribute.normalized );
|
|
695
|
+
for ( const name in geometry.attributes ) {
|
|
676
696
|
|
|
677
|
-
|
|
697
|
+
const tmpAttribute = tmpAttributes[ name ];
|
|
678
698
|
|
|
679
|
-
|
|
680
|
-
|
|
699
|
+
result.setAttribute( name, new BufferAttribute(
|
|
700
|
+
tmpAttribute.array.slice( 0, nextIndex * tmpAttribute.itemSize ),
|
|
701
|
+
tmpAttribute.itemSize,
|
|
702
|
+
tmpAttribute.normalized,
|
|
703
|
+
) );
|
|
681
704
|
|
|
682
|
-
|
|
705
|
+
if ( ! ( name in tmpMorphAttributes ) ) continue;
|
|
683
706
|
|
|
684
|
-
|
|
707
|
+
for ( let j = 0; j < tmpMorphAttributes[ name ].length; j ++ ) {
|
|
685
708
|
|
|
686
|
-
|
|
687
|
-
const morphAttribute = new BufferAttribute( buffer, oldMorphAttribute.itemSize, oldMorphAttribute.normalized );
|
|
688
|
-
result.morphAttributes[ name ][ j ] = morphAttribute;
|
|
709
|
+
const tmpMorphAttribute = tmpMorphAttributes[ name ][ j ];
|
|
689
710
|
|
|
690
|
-
|
|
711
|
+
result.morphAttributes[ name ][ j ] = new BufferAttribute(
|
|
712
|
+
tmpMorphAttribute.array.slice( 0, nextIndex * tmpMorphAttribute.itemSize ),
|
|
713
|
+
tmpMorphAttribute.itemSize,
|
|
714
|
+
tmpMorphAttribute.normalized,
|
|
715
|
+
);
|
|
691
716
|
|
|
692
717
|
}
|
|
693
718
|
|
|
@@ -704,7 +729,7 @@ function mergeVertices( geometry, tolerance = 1e-4 ) {
|
|
|
704
729
|
/**
|
|
705
730
|
* @param {BufferGeometry} geometry
|
|
706
731
|
* @param {number} drawMode
|
|
707
|
-
* @return {BufferGeometry
|
|
732
|
+
* @return {BufferGeometry}
|
|
708
733
|
*/
|
|
709
734
|
function toTrianglesDrawMode( geometry, drawMode ) {
|
|
710
735
|
|
|
@@ -1200,6 +1225,112 @@ function mergeGroups( geometry ) {
|
|
|
1200
1225
|
|
|
1201
1226
|
}
|
|
1202
1227
|
|
|
1228
|
+
|
|
1229
|
+
// Creates a new, non-indexed geometry with smooth normals everywhere except faces that meet at
|
|
1230
|
+
// an angle greater than the crease angle.
|
|
1231
|
+
function toCreasedNormals( geometry, creaseAngle = Math.PI / 3 /* 60 degrees */ ) {
|
|
1232
|
+
|
|
1233
|
+
const creaseDot = Math.cos( creaseAngle );
|
|
1234
|
+
const hashMultiplier = ( 1 + 1e-10 ) * 1e2;
|
|
1235
|
+
|
|
1236
|
+
// reusable vertors
|
|
1237
|
+
const verts = [ new Vector3(), new Vector3(), new Vector3() ];
|
|
1238
|
+
const tempVec1 = new Vector3();
|
|
1239
|
+
const tempVec2 = new Vector3();
|
|
1240
|
+
const tempNorm = new Vector3();
|
|
1241
|
+
const tempNorm2 = new Vector3();
|
|
1242
|
+
|
|
1243
|
+
// hashes a vector
|
|
1244
|
+
function hashVertex( v ) {
|
|
1245
|
+
|
|
1246
|
+
const x = ~ ~ ( v.x * hashMultiplier );
|
|
1247
|
+
const y = ~ ~ ( v.y * hashMultiplier );
|
|
1248
|
+
const z = ~ ~ ( v.z * hashMultiplier );
|
|
1249
|
+
return `${x},${y},${z}`;
|
|
1250
|
+
|
|
1251
|
+
}
|
|
1252
|
+
|
|
1253
|
+
const resultGeometry = geometry.toNonIndexed();
|
|
1254
|
+
const posAttr = resultGeometry.attributes.position;
|
|
1255
|
+
const vertexMap = {};
|
|
1256
|
+
|
|
1257
|
+
// find all the normals shared by commonly located vertices
|
|
1258
|
+
for ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {
|
|
1259
|
+
|
|
1260
|
+
const i3 = 3 * i;
|
|
1261
|
+
const a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );
|
|
1262
|
+
const b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );
|
|
1263
|
+
const c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );
|
|
1264
|
+
|
|
1265
|
+
tempVec1.subVectors( c, b );
|
|
1266
|
+
tempVec2.subVectors( a, b );
|
|
1267
|
+
|
|
1268
|
+
// add the normal to the map for all vertices
|
|
1269
|
+
const normal = new Vector3().crossVectors( tempVec1, tempVec2 ).normalize();
|
|
1270
|
+
for ( let n = 0; n < 3; n ++ ) {
|
|
1271
|
+
|
|
1272
|
+
const vert = verts[ n ];
|
|
1273
|
+
const hash = hashVertex( vert );
|
|
1274
|
+
if ( ! ( hash in vertexMap ) ) {
|
|
1275
|
+
|
|
1276
|
+
vertexMap[ hash ] = [];
|
|
1277
|
+
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
vertexMap[ hash ].push( normal );
|
|
1281
|
+
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
}
|
|
1285
|
+
|
|
1286
|
+
// average normals from all vertices that share a common location if they are within the
|
|
1287
|
+
// provided crease threshold
|
|
1288
|
+
const normalArray = new Float32Array( posAttr.count * 3 );
|
|
1289
|
+
const normAttr = new BufferAttribute( normalArray, 3, false );
|
|
1290
|
+
for ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {
|
|
1291
|
+
|
|
1292
|
+
// get the face normal for this vertex
|
|
1293
|
+
const i3 = 3 * i;
|
|
1294
|
+
const a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );
|
|
1295
|
+
const b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );
|
|
1296
|
+
const c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );
|
|
1297
|
+
|
|
1298
|
+
tempVec1.subVectors( c, b );
|
|
1299
|
+
tempVec2.subVectors( a, b );
|
|
1300
|
+
|
|
1301
|
+
tempNorm.crossVectors( tempVec1, tempVec2 ).normalize();
|
|
1302
|
+
|
|
1303
|
+
// average all normals that meet the threshold and set the normal value
|
|
1304
|
+
for ( let n = 0; n < 3; n ++ ) {
|
|
1305
|
+
|
|
1306
|
+
const vert = verts[ n ];
|
|
1307
|
+
const hash = hashVertex( vert );
|
|
1308
|
+
const otherNormals = vertexMap[ hash ];
|
|
1309
|
+
tempNorm2.set( 0, 0, 0 );
|
|
1310
|
+
|
|
1311
|
+
for ( let k = 0, lk = otherNormals.length; k < lk; k ++ ) {
|
|
1312
|
+
|
|
1313
|
+
const otherNorm = otherNormals[ k ];
|
|
1314
|
+
if ( tempNorm.dot( otherNorm ) > creaseDot ) {
|
|
1315
|
+
|
|
1316
|
+
tempNorm2.add( otherNorm );
|
|
1317
|
+
|
|
1318
|
+
}
|
|
1319
|
+
|
|
1320
|
+
}
|
|
1321
|
+
|
|
1322
|
+
tempNorm2.normalize();
|
|
1323
|
+
normAttr.setXYZ( i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z );
|
|
1324
|
+
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1327
|
+
}
|
|
1328
|
+
|
|
1329
|
+
resultGeometry.setAttribute( 'normal', normAttr );
|
|
1330
|
+
return resultGeometry;
|
|
1331
|
+
|
|
1332
|
+
}
|
|
1333
|
+
|
|
1203
1334
|
export {
|
|
1204
1335
|
computeTangents,
|
|
1205
1336
|
computeMikkTSpaceTangents,
|
|
@@ -1210,5 +1341,6 @@ export {
|
|
|
1210
1341
|
mergeVertices,
|
|
1211
1342
|
toTrianglesDrawMode,
|
|
1212
1343
|
computeMorphedAttributes,
|
|
1213
|
-
mergeGroups
|
|
1344
|
+
mergeGroups,
|
|
1345
|
+
toCreasedNormals
|
|
1214
1346
|
};
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
|
+
BufferAttribute,
|
|
3
|
+
BufferGeometry,
|
|
4
|
+
Color,
|
|
2
5
|
Group,
|
|
6
|
+
Matrix4,
|
|
3
7
|
Mesh,
|
|
4
|
-
|
|
5
|
-
BufferGeometry
|
|
8
|
+
Vector3
|
|
6
9
|
} from 'three';
|
|
7
10
|
|
|
8
|
-
import { mergeGroups } from './BufferGeometryUtils.js';
|
|
11
|
+
import { mergeGroups, deepCloneAttribute } from './BufferGeometryUtils.js';
|
|
12
|
+
|
|
13
|
+
const _color = /*@__PURE__*/new Color();
|
|
14
|
+
const _matrix = /*@__PURE__*/new Matrix4();
|
|
9
15
|
|
|
10
16
|
function createMeshesFromInstancedMesh( instancedMesh ) {
|
|
11
17
|
|
|
@@ -118,8 +124,127 @@ function createMultiMaterialObject( geometry, materials ) {
|
|
|
118
124
|
|
|
119
125
|
}
|
|
120
126
|
|
|
127
|
+
function reduceVertices( object, func, initialValue ) {
|
|
128
|
+
|
|
129
|
+
let value = initialValue;
|
|
130
|
+
const vertex = new Vector3();
|
|
131
|
+
|
|
132
|
+
object.updateWorldMatrix( true, true );
|
|
133
|
+
|
|
134
|
+
object.traverseVisible( ( child ) => {
|
|
135
|
+
|
|
136
|
+
const { geometry } = child;
|
|
137
|
+
|
|
138
|
+
if ( geometry !== undefined ) {
|
|
139
|
+
|
|
140
|
+
const { position } = geometry.attributes;
|
|
141
|
+
|
|
142
|
+
if ( position !== undefined ) {
|
|
143
|
+
|
|
144
|
+
for ( let i = 0, l = position.count; i < l; i ++ ) {
|
|
145
|
+
|
|
146
|
+
vertex.fromBufferAttribute( position, i );
|
|
147
|
+
|
|
148
|
+
if ( child.isSkinnedMesh ) {
|
|
149
|
+
|
|
150
|
+
child.boneTransform( i, vertex );
|
|
151
|
+
|
|
152
|
+
} else {
|
|
153
|
+
|
|
154
|
+
vertex.applyMatrix4( child.matrixWorld );
|
|
155
|
+
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
value = func( value, vertex );
|
|
159
|
+
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
} );
|
|
167
|
+
|
|
168
|
+
return value;
|
|
169
|
+
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* @param {InstancedMesh}
|
|
174
|
+
* @param {function(int, int):int}
|
|
175
|
+
*/
|
|
176
|
+
function sortInstancedMesh( mesh, compareFn ) {
|
|
177
|
+
|
|
178
|
+
// store copy of instanced attributes for lookups
|
|
179
|
+
|
|
180
|
+
const instanceMatrixRef = deepCloneAttribute( mesh.instanceMatrix );
|
|
181
|
+
const instanceColorRef = mesh.instanceColor ? deepCloneAttribute( mesh.instanceColor ) : null;
|
|
182
|
+
|
|
183
|
+
const attributeRefs = new Map();
|
|
184
|
+
|
|
185
|
+
for ( const name in mesh.geometry.attributes ) {
|
|
186
|
+
|
|
187
|
+
const attribute = mesh.geometry.attributes[ name ];
|
|
188
|
+
|
|
189
|
+
if ( attribute.isInstancedBufferAttribute ) {
|
|
190
|
+
|
|
191
|
+
attributeRefs.set( attribute, deepCloneAttribute( attribute ) );
|
|
192
|
+
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
// compute sort order
|
|
199
|
+
|
|
200
|
+
const tokens = [];
|
|
201
|
+
|
|
202
|
+
for ( let i = 0; i < mesh.count; i ++ ) tokens.push( i );
|
|
203
|
+
|
|
204
|
+
tokens.sort( compareFn );
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
// apply sort order
|
|
208
|
+
|
|
209
|
+
for ( let i = 0; i < tokens.length; i ++ ) {
|
|
210
|
+
|
|
211
|
+
const refIndex = tokens[ i ];
|
|
212
|
+
|
|
213
|
+
_matrix.fromArray( instanceMatrixRef.array, refIndex * mesh.instanceMatrix.itemSize );
|
|
214
|
+
_matrix.toArray( mesh.instanceMatrix.array, i * mesh.instanceMatrix.itemSize );
|
|
215
|
+
|
|
216
|
+
if ( mesh.instanceColor ) {
|
|
217
|
+
|
|
218
|
+
_color.fromArray( instanceColorRef.array, refIndex * mesh.instanceColor.itemSize );
|
|
219
|
+
_color.toArray( mesh.instanceColor.array, i * mesh.instanceColor.itemSize );
|
|
220
|
+
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
for ( const name in mesh.geometry.attributes ) {
|
|
224
|
+
|
|
225
|
+
const attribute = mesh.geometry.attributes[ name ];
|
|
226
|
+
|
|
227
|
+
if ( attribute.isInstancedBufferAttribute ) {
|
|
228
|
+
|
|
229
|
+
const attributeRef = attributeRefs.get( attribute );
|
|
230
|
+
|
|
231
|
+
attribute.setX( i, attributeRef.getX( refIndex ) );
|
|
232
|
+
if ( attribute.itemSize > 1 ) attribute.setY( i, attributeRef.getY( refIndex ) );
|
|
233
|
+
if ( attribute.itemSize > 2 ) attribute.setZ( i, attributeRef.getZ( refIndex ) );
|
|
234
|
+
if ( attribute.itemSize > 3 ) attribute.setW( i, attributeRef.getW( refIndex ) );
|
|
235
|
+
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
}
|
|
243
|
+
|
|
121
244
|
export {
|
|
122
245
|
createMeshesFromInstancedMesh,
|
|
123
246
|
createMeshesFromMultiMaterialMesh,
|
|
124
|
-
createMultiMaterialObject
|
|
247
|
+
createMultiMaterialObject,
|
|
248
|
+
reduceVertices,
|
|
249
|
+
sortInstancedMesh
|
|
125
250
|
};
|
|
@@ -6,13 +6,14 @@ const POINTING_JOINT = 'index-finger-tip';
|
|
|
6
6
|
|
|
7
7
|
class OculusHandModel extends Object3D {
|
|
8
8
|
|
|
9
|
-
constructor( controller ) {
|
|
9
|
+
constructor( controller, loader = null ) {
|
|
10
10
|
|
|
11
11
|
super();
|
|
12
12
|
|
|
13
13
|
this.controller = controller;
|
|
14
14
|
this.motionController = null;
|
|
15
15
|
this.envMap = null;
|
|
16
|
+
this.loader = loader;
|
|
16
17
|
|
|
17
18
|
this.mesh = null;
|
|
18
19
|
|
|
@@ -24,7 +25,7 @@ class OculusHandModel extends Object3D {
|
|
|
24
25
|
|
|
25
26
|
this.xrInputSource = xrInputSource;
|
|
26
27
|
|
|
27
|
-
this.motionController = new XRHandMeshModel( this, controller, this.path, xrInputSource.handedness );
|
|
28
|
+
this.motionController = new XRHandMeshModel( this, controller, this.path, xrInputSource.handedness, this.loader );
|
|
28
29
|
|
|
29
30
|
}
|
|
30
31
|
|
|
@@ -4,15 +4,20 @@ const DEFAULT_HAND_PROFILE_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-pro
|
|
|
4
4
|
|
|
5
5
|
class XRHandMeshModel {
|
|
6
6
|
|
|
7
|
-
constructor( handModel, controller, path, handedness ) {
|
|
7
|
+
constructor( handModel, controller, path, handedness, loader = null ) {
|
|
8
8
|
|
|
9
9
|
this.controller = controller;
|
|
10
10
|
this.handModel = handModel;
|
|
11
11
|
|
|
12
12
|
this.bones = [];
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
if ( loader === null ) {
|
|
15
|
+
|
|
16
|
+
loader = new GLTFLoader();
|
|
17
|
+
loader.setPath( path || DEFAULT_HAND_PROFILE_PATH );
|
|
18
|
+
|
|
19
|
+
}
|
|
20
|
+
|
|
16
21
|
loader.load( `${handedness}.glb`, gltf => {
|
|
17
22
|
|
|
18
23
|
const object = gltf.scene.children[ 0 ];
|