@needle-tools/three 0.145.4 → 0.146.2
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 +32586 -35951
- package/build/three.js +32600 -35965
- package/build/three.min.js +6 -7
- package/build/three.module.js +1547 -1154
- 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 +75 -19
- 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/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
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
( function () {
|
|
2
2
|
|
|
3
3
|
const _A = new THREE.Vector3();
|
|
4
|
-
|
|
5
4
|
const _B = new THREE.Vector3();
|
|
6
|
-
|
|
7
5
|
const _C = new THREE.Vector3();
|
|
8
|
-
|
|
9
6
|
class EdgeSplitModifier {
|
|
10
7
|
|
|
11
8
|
modify( geometry, cutOffAngle, tryKeepNormals = true ) {
|
|
@@ -13,27 +10,17 @@
|
|
|
13
10
|
function computeNormals() {
|
|
14
11
|
|
|
15
12
|
normals = new Float32Array( indexes.length * 3 );
|
|
16
|
-
|
|
17
13
|
for ( let i = 0; i < indexes.length; i += 3 ) {
|
|
18
14
|
|
|
19
15
|
let index = indexes[ i ];
|
|
20
|
-
|
|
21
16
|
_A.set( positions[ 3 * index ], positions[ 3 * index + 1 ], positions[ 3 * index + 2 ] );
|
|
22
|
-
|
|
23
17
|
index = indexes[ i + 1 ];
|
|
24
|
-
|
|
25
18
|
_B.set( positions[ 3 * index ], positions[ 3 * index + 1 ], positions[ 3 * index + 2 ] );
|
|
26
|
-
|
|
27
19
|
index = indexes[ i + 2 ];
|
|
28
|
-
|
|
29
20
|
_C.set( positions[ 3 * index ], positions[ 3 * index + 1 ], positions[ 3 * index + 2 ] );
|
|
30
|
-
|
|
31
21
|
_C.sub( _B );
|
|
32
|
-
|
|
33
22
|
_A.sub( _B );
|
|
34
|
-
|
|
35
23
|
const normal = _C.cross( _A ).normalize();
|
|
36
|
-
|
|
37
24
|
for ( let j = 0; j < 3; j ++ ) {
|
|
38
25
|
|
|
39
26
|
normals[ 3 * ( i + j ) ] = normal.x;
|
|
@@ -49,11 +36,9 @@
|
|
|
49
36
|
function mapPositionsToIndexes() {
|
|
50
37
|
|
|
51
38
|
pointToIndexMap = Array( positions.length / 3 );
|
|
52
|
-
|
|
53
39
|
for ( let i = 0; i < indexes.length; i ++ ) {
|
|
54
40
|
|
|
55
41
|
const index = indexes[ i ];
|
|
56
|
-
|
|
57
42
|
if ( pointToIndexMap[ index ] == null ) {
|
|
58
43
|
|
|
59
44
|
pointToIndexMap[ index ] = [];
|
|
@@ -69,18 +54,15 @@
|
|
|
69
54
|
function edgeSplitToGroups( indexes, cutOff, firstIndex ) {
|
|
70
55
|
|
|
71
56
|
_A.set( normals[ 3 * firstIndex ], normals[ 3 * firstIndex + 1 ], normals[ 3 * firstIndex + 2 ] ).normalize();
|
|
72
|
-
|
|
73
57
|
const result = {
|
|
74
58
|
splitGroup: [],
|
|
75
59
|
currentGroup: [ firstIndex ]
|
|
76
60
|
};
|
|
77
|
-
|
|
78
61
|
for ( const j of indexes ) {
|
|
79
62
|
|
|
80
63
|
if ( j !== firstIndex ) {
|
|
81
64
|
|
|
82
65
|
_B.set( normals[ 3 * j ], normals[ 3 * j + 1 ], normals[ 3 * j + 2 ] ).normalize();
|
|
83
|
-
|
|
84
66
|
if ( _B.dot( _A ) < cutOff ) {
|
|
85
67
|
|
|
86
68
|
result.splitGroup.push( j );
|
|
@@ -103,7 +85,6 @@
|
|
|
103
85
|
|
|
104
86
|
if ( indexes.length === 0 ) return;
|
|
105
87
|
const groupResults = [];
|
|
106
|
-
|
|
107
88
|
for ( const index of indexes ) {
|
|
108
89
|
|
|
109
90
|
groupResults.push( edgeSplitToGroups( indexes, cutOff, index ) );
|
|
@@ -111,7 +92,6 @@
|
|
|
111
92
|
}
|
|
112
93
|
|
|
113
94
|
let result = groupResults[ 0 ];
|
|
114
|
-
|
|
115
95
|
for ( const groupResult of groupResults ) {
|
|
116
96
|
|
|
117
97
|
if ( groupResult.currentGroup.length > result.currentGroup.length ) {
|
|
@@ -141,12 +121,10 @@
|
|
|
141
121
|
|
|
142
122
|
let hadNormals = false;
|
|
143
123
|
let oldNormals = null;
|
|
144
|
-
|
|
145
124
|
if ( geometry.attributes.normal ) {
|
|
146
125
|
|
|
147
126
|
hadNormals = true;
|
|
148
127
|
geometry = geometry.clone();
|
|
149
|
-
|
|
150
128
|
if ( tryKeepNormals === true && geometry.index !== null ) {
|
|
151
129
|
|
|
152
130
|
oldNormals = geometry.attributes.normal.array;
|
|
@@ -170,7 +148,6 @@
|
|
|
170
148
|
computeNormals();
|
|
171
149
|
mapPositionsToIndexes();
|
|
172
150
|
const splitIndexes = [];
|
|
173
|
-
|
|
174
151
|
for ( const vertexIndexes of pointToIndexMap ) {
|
|
175
152
|
|
|
176
153
|
edgeSplit( vertexIndexes, Math.cos( cutOffAngle ) - 0.001 );
|
|
@@ -178,7 +155,6 @@
|
|
|
178
155
|
}
|
|
179
156
|
|
|
180
157
|
const newAttributes = {};
|
|
181
|
-
|
|
182
158
|
for ( const name of Object.keys( geometry.attributes ) ) {
|
|
183
159
|
|
|
184
160
|
const oldAttribute = geometry.attributes[ name ];
|
|
@@ -190,12 +166,10 @@
|
|
|
190
166
|
|
|
191
167
|
const newIndexes = new Uint32Array( indexes.length );
|
|
192
168
|
newIndexes.set( indexes );
|
|
193
|
-
|
|
194
169
|
for ( let i = 0; i < splitIndexes.length; i ++ ) {
|
|
195
170
|
|
|
196
171
|
const split = splitIndexes[ i ];
|
|
197
172
|
const index = indexes[ split.original ];
|
|
198
|
-
|
|
199
173
|
for ( const attribute of Object.values( newAttributes ) ) {
|
|
200
174
|
|
|
201
175
|
for ( let j = 0; j < attribute.itemSize; j ++ ) {
|
|
@@ -216,7 +190,6 @@
|
|
|
216
190
|
|
|
217
191
|
geometry = new THREE.BufferGeometry();
|
|
218
192
|
geometry.setIndex( new THREE.BufferAttribute( newIndexes, 1 ) );
|
|
219
|
-
|
|
220
193
|
for ( const name of Object.keys( newAttributes ) ) {
|
|
221
194
|
|
|
222
195
|
geometry.setAttribute( name, newAttributes[ name ] );
|
|
@@ -226,13 +199,10 @@
|
|
|
226
199
|
if ( hadNormals ) {
|
|
227
200
|
|
|
228
201
|
geometry.computeVertexNormals();
|
|
229
|
-
|
|
230
202
|
if ( oldNormals !== null ) {
|
|
231
203
|
|
|
232
204
|
const changedNormals = new Array( oldNormals.length / 3 ).fill( false );
|
|
233
|
-
|
|
234
205
|
for ( const splitData of splitIndexes ) changedNormals[ splitData.original ] = true;
|
|
235
|
-
|
|
236
206
|
for ( let i = 0; i < changedNormals.length; i ++ ) {
|
|
237
207
|
|
|
238
208
|
if ( changedNormals[ i ] === false ) {
|
|
@@ -10,13 +10,14 @@
|
|
|
10
10
|
|
|
11
11
|
const _cb = new THREE.Vector3(),
|
|
12
12
|
_ab = new THREE.Vector3();
|
|
13
|
-
|
|
14
13
|
class SimplifyModifier {
|
|
15
14
|
|
|
16
15
|
modify( geometry, count ) {
|
|
17
16
|
|
|
18
17
|
geometry = geometry.clone();
|
|
19
|
-
const attributes = geometry.attributes;
|
|
18
|
+
const attributes = geometry.attributes;
|
|
19
|
+
|
|
20
|
+
// this modifier can only process indexed and non-indexed geomtries with a position attribute
|
|
20
21
|
|
|
21
22
|
for ( const name in attributes ) {
|
|
22
23
|
|
|
@@ -24,26 +25,29 @@
|
|
|
24
25
|
|
|
25
26
|
}
|
|
26
27
|
|
|
27
|
-
geometry = THREE.BufferGeometryUtils.mergeVertices( geometry );
|
|
28
|
+
geometry = THREE.BufferGeometryUtils.mergeVertices( geometry );
|
|
29
|
+
|
|
30
|
+
//
|
|
28
31
|
// put data of original geometry in different data structures
|
|
29
32
|
//
|
|
30
33
|
|
|
31
34
|
const vertices = [];
|
|
32
|
-
const faces = [];
|
|
35
|
+
const faces = [];
|
|
33
36
|
|
|
34
|
-
|
|
37
|
+
// add vertices
|
|
35
38
|
|
|
39
|
+
const positionAttribute = geometry.getAttribute( 'position' );
|
|
36
40
|
for ( let i = 0; i < positionAttribute.count; i ++ ) {
|
|
37
41
|
|
|
38
42
|
const v = new THREE.Vector3().fromBufferAttribute( positionAttribute, i );
|
|
39
43
|
const vertex = new Vertex( v );
|
|
40
44
|
vertices.push( vertex );
|
|
41
45
|
|
|
42
|
-
}
|
|
46
|
+
}
|
|
43
47
|
|
|
48
|
+
// add faces
|
|
44
49
|
|
|
45
50
|
let index = geometry.getIndex();
|
|
46
|
-
|
|
47
51
|
if ( index !== null ) {
|
|
48
52
|
|
|
49
53
|
for ( let i = 0; i < index.count; i += 3 ) {
|
|
@@ -68,8 +72,9 @@
|
|
|
68
72
|
|
|
69
73
|
}
|
|
70
74
|
|
|
71
|
-
}
|
|
75
|
+
}
|
|
72
76
|
|
|
77
|
+
// compute all edge collapse costs
|
|
73
78
|
|
|
74
79
|
for ( let i = 0, il = vertices.length; i < il; i ++ ) {
|
|
75
80
|
|
|
@@ -79,11 +84,9 @@
|
|
|
79
84
|
|
|
80
85
|
let nextVertex;
|
|
81
86
|
let z = count;
|
|
82
|
-
|
|
83
87
|
while ( z -- ) {
|
|
84
88
|
|
|
85
89
|
nextVertex = minimumCostEdge( vertices );
|
|
86
|
-
|
|
87
90
|
if ( ! nextVertex ) {
|
|
88
91
|
|
|
89
92
|
console.log( 'THREE.SimplifyModifier: No next vertex' );
|
|
@@ -93,30 +96,35 @@
|
|
|
93
96
|
|
|
94
97
|
collapse( vertices, faces, nextVertex, nextVertex.collapseNeighbor );
|
|
95
98
|
|
|
96
|
-
}
|
|
99
|
+
}
|
|
97
100
|
|
|
101
|
+
//
|
|
98
102
|
|
|
99
103
|
const simplifiedGeometry = new THREE.BufferGeometry();
|
|
100
104
|
const position = [];
|
|
101
|
-
index = [];
|
|
105
|
+
index = [];
|
|
106
|
+
|
|
107
|
+
//
|
|
102
108
|
|
|
103
109
|
for ( let i = 0; i < vertices.length; i ++ ) {
|
|
104
110
|
|
|
105
111
|
const vertex = vertices[ i ].position;
|
|
106
|
-
position.push( vertex.x, vertex.y, vertex.z );
|
|
107
|
-
|
|
112
|
+
position.push( vertex.x, vertex.y, vertex.z );
|
|
113
|
+
// cache final index to GREATLY speed up faces reconstruction
|
|
108
114
|
vertices[ i ].id = i;
|
|
109
115
|
|
|
110
|
-
}
|
|
116
|
+
}
|
|
111
117
|
|
|
118
|
+
//
|
|
112
119
|
|
|
113
120
|
for ( let i = 0; i < faces.length; i ++ ) {
|
|
114
121
|
|
|
115
122
|
const face = faces[ i ];
|
|
116
123
|
index.push( face.v1.id, face.v2.id, face.v3.id );
|
|
117
124
|
|
|
118
|
-
}
|
|
125
|
+
}
|
|
119
126
|
|
|
127
|
+
//
|
|
120
128
|
|
|
121
129
|
simplifiedGeometry.setAttribute( 'position', new THREE.Float32BufferAttribute( position, 3 ) );
|
|
122
130
|
simplifiedGeometry.setIndex( index );
|
|
@@ -125,7 +133,6 @@
|
|
|
125
133
|
}
|
|
126
134
|
|
|
127
135
|
}
|
|
128
|
-
|
|
129
136
|
function pushIfUnique( array, object ) {
|
|
130
137
|
|
|
131
138
|
if ( array.indexOf( object ) === - 1 ) array.push( object );
|
|
@@ -143,33 +150,33 @@
|
|
|
143
150
|
|
|
144
151
|
// if we collapse edge uv by moving u to v then how
|
|
145
152
|
// much different will the model change, i.e. the "error".
|
|
153
|
+
|
|
146
154
|
const edgelength = v.position.distanceTo( u.position );
|
|
147
155
|
let curvature = 0;
|
|
148
|
-
const sideFaces = [];
|
|
156
|
+
const sideFaces = [];
|
|
149
157
|
|
|
158
|
+
// find the "sides" triangles that are on the edge uv
|
|
150
159
|
for ( let i = 0, il = u.faces.length; i < il; i ++ ) {
|
|
151
160
|
|
|
152
161
|
const face = u.faces[ i ];
|
|
153
|
-
|
|
154
162
|
if ( face.hasVertex( v ) ) {
|
|
155
163
|
|
|
156
164
|
sideFaces.push( face );
|
|
157
165
|
|
|
158
166
|
}
|
|
159
167
|
|
|
160
|
-
}
|
|
161
|
-
// to determine our curvature term
|
|
162
|
-
|
|
168
|
+
}
|
|
163
169
|
|
|
170
|
+
// use the triangle facing most away from the sides
|
|
171
|
+
// to determine our curvature term
|
|
164
172
|
for ( let i = 0, il = u.faces.length; i < il; i ++ ) {
|
|
165
173
|
|
|
166
174
|
let minCurvature = 1;
|
|
167
175
|
const face = u.faces[ i ];
|
|
168
|
-
|
|
169
176
|
for ( let j = 0; j < sideFaces.length; j ++ ) {
|
|
170
177
|
|
|
171
|
-
const sideFace = sideFaces[ j ];
|
|
172
|
-
|
|
178
|
+
const sideFace = sideFaces[ j ];
|
|
179
|
+
// use dot product of face normals.
|
|
173
180
|
const dotProd = face.normal.dot( sideFace.normal );
|
|
174
181
|
minCurvature = Math.min( minCurvature, ( 1.001 - dotProd ) / 2 );
|
|
175
182
|
|
|
@@ -177,12 +184,11 @@
|
|
|
177
184
|
|
|
178
185
|
curvature = Math.max( curvature, minCurvature );
|
|
179
186
|
|
|
180
|
-
}
|
|
181
|
-
// though it seems not to be totally correct
|
|
182
|
-
|
|
187
|
+
}
|
|
183
188
|
|
|
189
|
+
// crude approach in attempt to preserve borders
|
|
190
|
+
// though it seems not to be totally correct
|
|
184
191
|
const borders = 0;
|
|
185
|
-
|
|
186
192
|
if ( sideFaces.length < 2 ) {
|
|
187
193
|
|
|
188
194
|
// we add some arbitrary cost for borders,
|
|
@@ -204,6 +210,7 @@
|
|
|
204
210
|
// only cache the cost of the least cost edge at this vertex
|
|
205
211
|
// (in member variable collapse) as well as the value of the
|
|
206
212
|
// cost (in member variable collapseCost).
|
|
213
|
+
|
|
207
214
|
if ( v.neighbors.length === 0 ) {
|
|
208
215
|
|
|
209
216
|
// collapse if no neighbors.
|
|
@@ -214,12 +221,12 @@
|
|
|
214
221
|
}
|
|
215
222
|
|
|
216
223
|
v.collapseCost = 100000;
|
|
217
|
-
v.collapseNeighbor = null;
|
|
224
|
+
v.collapseNeighbor = null;
|
|
218
225
|
|
|
226
|
+
// search all neighboring edges for "least cost" edge
|
|
219
227
|
for ( let i = 0; i < v.neighbors.length; i ++ ) {
|
|
220
228
|
|
|
221
229
|
const collapseCost = computeEdgeCollapseCost( v, v.neighbors[ i ] );
|
|
222
|
-
|
|
223
230
|
if ( ! v.collapseNeighbor ) {
|
|
224
231
|
|
|
225
232
|
v.collapseNeighbor = v.neighbors[ i ];
|
|
@@ -232,7 +239,6 @@
|
|
|
232
239
|
|
|
233
240
|
v.costCount ++;
|
|
234
241
|
v.totalCost += collapseCost;
|
|
235
|
-
|
|
236
242
|
if ( collapseCost < v.minCost ) {
|
|
237
243
|
|
|
238
244
|
v.collapseNeighbor = v.neighbors[ i ];
|
|
@@ -240,17 +246,17 @@
|
|
|
240
246
|
|
|
241
247
|
}
|
|
242
248
|
|
|
243
|
-
}
|
|
244
|
-
|
|
249
|
+
}
|
|
245
250
|
|
|
246
|
-
|
|
251
|
+
// we average the cost of collapsing at this vertex
|
|
252
|
+
v.collapseCost = v.totalCost / v.costCount;
|
|
253
|
+
// v.collapseCost = v.minCost;
|
|
247
254
|
|
|
248
255
|
}
|
|
249
256
|
|
|
250
257
|
function removeVertex( v, vertices ) {
|
|
251
258
|
|
|
252
259
|
console.assert( v.faces.length === 0 );
|
|
253
|
-
|
|
254
260
|
while ( v.neighbors.length ) {
|
|
255
261
|
|
|
256
262
|
const n = v.neighbors.pop();
|
|
@@ -267,10 +273,10 @@
|
|
|
267
273
|
removeFromArray( faces, f );
|
|
268
274
|
if ( f.v1 ) removeFromArray( f.v1.faces, f );
|
|
269
275
|
if ( f.v2 ) removeFromArray( f.v2.faces, f );
|
|
270
|
-
if ( f.v3 ) removeFromArray( f.v3.faces, f );
|
|
276
|
+
if ( f.v3 ) removeFromArray( f.v3.faces, f );
|
|
271
277
|
|
|
278
|
+
// TODO optimize this!
|
|
272
279
|
const vs = [ f.v1, f.v2, f.v3 ];
|
|
273
|
-
|
|
274
280
|
for ( let i = 0; i < 3; i ++ ) {
|
|
275
281
|
|
|
276
282
|
const v1 = vs[ i ];
|
|
@@ -286,7 +292,9 @@
|
|
|
286
292
|
function collapse( vertices, faces, u, v ) {
|
|
287
293
|
|
|
288
294
|
// u and v are pointers to vertices of an edge
|
|
295
|
+
|
|
289
296
|
// Collapse the edge uv by moving vertex u onto v
|
|
297
|
+
|
|
290
298
|
if ( ! v ) {
|
|
291
299
|
|
|
292
300
|
// u is a vertex all by itself so just delete it..
|
|
@@ -296,14 +304,13 @@
|
|
|
296
304
|
}
|
|
297
305
|
|
|
298
306
|
const tmpVertices = [];
|
|
299
|
-
|
|
300
307
|
for ( let i = 0; i < u.neighbors.length; i ++ ) {
|
|
301
308
|
|
|
302
309
|
tmpVertices.push( u.neighbors[ i ] );
|
|
303
310
|
|
|
304
|
-
}
|
|
305
|
-
|
|
311
|
+
}
|
|
306
312
|
|
|
313
|
+
// delete triangles on edge uv:
|
|
307
314
|
for ( let i = u.faces.length - 1; i >= 0; i -- ) {
|
|
308
315
|
|
|
309
316
|
if ( u.faces[ i ] && u.faces[ i ].hasVertex( v ) ) {
|
|
@@ -312,17 +319,18 @@
|
|
|
312
319
|
|
|
313
320
|
}
|
|
314
321
|
|
|
315
|
-
}
|
|
316
|
-
|
|
322
|
+
}
|
|
317
323
|
|
|
324
|
+
// update remaining triangles to have v instead of u
|
|
318
325
|
for ( let i = u.faces.length - 1; i >= 0; i -- ) {
|
|
319
326
|
|
|
320
327
|
u.faces[ i ].replaceVertex( u, v );
|
|
321
328
|
|
|
322
329
|
}
|
|
323
330
|
|
|
324
|
-
removeVertex( u, vertices );
|
|
331
|
+
removeVertex( u, vertices );
|
|
325
332
|
|
|
333
|
+
// recompute the edge collapse costs in neighborhood
|
|
326
334
|
for ( let i = 0; i < tmpVertices.length; i ++ ) {
|
|
327
335
|
|
|
328
336
|
computeEdgeCostAtVertex( tmpVertices[ i ] );
|
|
@@ -334,8 +342,8 @@
|
|
|
334
342
|
function minimumCostEdge( vertices ) {
|
|
335
343
|
|
|
336
344
|
// O(n * n) approach. TODO optimize this
|
|
337
|
-
let least = vertices[ 0 ];
|
|
338
345
|
|
|
346
|
+
let least = vertices[ 0 ];
|
|
339
347
|
for ( let i = 0; i < vertices.length; i ++ ) {
|
|
340
348
|
|
|
341
349
|
if ( vertices[ i ].collapseCost < least.collapseCost ) {
|
|
@@ -348,8 +356,9 @@
|
|
|
348
356
|
|
|
349
357
|
return least;
|
|
350
358
|
|
|
351
|
-
}
|
|
359
|
+
}
|
|
352
360
|
|
|
361
|
+
// we use a triangle class to represent structure of face slightly differently
|
|
353
362
|
|
|
354
363
|
class Triangle {
|
|
355
364
|
|
|
@@ -374,29 +383,22 @@
|
|
|
374
383
|
v3.addUniqueNeighbor( v2 );
|
|
375
384
|
|
|
376
385
|
}
|
|
377
|
-
|
|
378
386
|
computeNormal() {
|
|
379
387
|
|
|
380
388
|
const vA = this.v1.position;
|
|
381
389
|
const vB = this.v2.position;
|
|
382
390
|
const vC = this.v3.position;
|
|
383
|
-
|
|
384
391
|
_cb.subVectors( vC, vB );
|
|
385
|
-
|
|
386
392
|
_ab.subVectors( vA, vB );
|
|
387
|
-
|
|
388
393
|
_cb.cross( _ab ).normalize();
|
|
389
|
-
|
|
390
394
|
this.normal.copy( _cb );
|
|
391
395
|
|
|
392
396
|
}
|
|
393
|
-
|
|
394
397
|
hasVertex( v ) {
|
|
395
398
|
|
|
396
399
|
return v === this.v1 || v === this.v2 || v === this.v3;
|
|
397
400
|
|
|
398
401
|
}
|
|
399
|
-
|
|
400
402
|
replaceVertex( oldv, newv ) {
|
|
401
403
|
|
|
402
404
|
if ( oldv === this.v1 ) this.v1 = newv; else if ( oldv === this.v2 ) this.v2 = newv; else if ( oldv === this.v3 ) this.v3 = newv;
|
|
@@ -419,7 +421,6 @@
|
|
|
419
421
|
}
|
|
420
422
|
|
|
421
423
|
}
|
|
422
|
-
|
|
423
424
|
class Vertex {
|
|
424
425
|
|
|
425
426
|
constructor( v ) {
|
|
@@ -428,12 +429,10 @@
|
|
|
428
429
|
this.id = - 1; // external use position in vertices list (for e.g. face generation)
|
|
429
430
|
|
|
430
431
|
this.faces = []; // faces vertex is connected
|
|
431
|
-
|
|
432
432
|
this.neighbors = []; // neighbouring vertices aka "adjacentVertices"
|
|
433
|
-
// these will be computed in computeEdgeCostAtVertex()
|
|
434
433
|
|
|
434
|
+
// these will be computed in computeEdgeCostAtVertex()
|
|
435
435
|
this.collapseCost = 0; // cost of collapsing this vertex, the less the better. aka objdist
|
|
436
|
-
|
|
437
436
|
this.collapseNeighbor = null; // best candinate for collapsing
|
|
438
437
|
|
|
439
438
|
}
|
|
@@ -443,14 +442,12 @@
|
|
|
443
442
|
pushIfUnique( this.neighbors, vertex );
|
|
444
443
|
|
|
445
444
|
}
|
|
446
|
-
|
|
447
445
|
removeIfNonNeighbor( n ) {
|
|
448
446
|
|
|
449
447
|
const neighbors = this.neighbors;
|
|
450
448
|
const faces = this.faces;
|
|
451
449
|
const offset = neighbors.indexOf( n );
|
|
452
450
|
if ( offset === - 1 ) return;
|
|
453
|
-
|
|
454
451
|
for ( let i = 0; i < faces.length; i ++ ) {
|
|
455
452
|
|
|
456
453
|
if ( faces[ i ].hasVertex( n ) ) return;
|
|
@@ -12,15 +12,15 @@
|
|
|
12
12
|
this.maxIterations = maxIterations;
|
|
13
13
|
|
|
14
14
|
}
|
|
15
|
-
|
|
16
15
|
modify( geometry ) {
|
|
17
16
|
|
|
18
17
|
if ( geometry.index !== null ) {
|
|
19
18
|
|
|
20
19
|
geometry = geometry.toNonIndexed();
|
|
21
20
|
|
|
22
|
-
}
|
|
21
|
+
}
|
|
23
22
|
|
|
23
|
+
//
|
|
24
24
|
|
|
25
25
|
const maxIterations = this.maxIterations;
|
|
26
26
|
const maxEdgeLengthSquared = this.maxEdgeLength * this.maxEdgeLength;
|
|
@@ -66,7 +66,6 @@
|
|
|
66
66
|
let uv2s2 = uv2s;
|
|
67
67
|
let iteration = 0;
|
|
68
68
|
let tessellating = true;
|
|
69
|
-
|
|
70
69
|
function addTriangle( a, b, c ) {
|
|
71
70
|
|
|
72
71
|
const v1 = vs[ a ];
|
|
@@ -75,7 +74,6 @@
|
|
|
75
74
|
positions2.push( v1.x, v1.y, v1.z );
|
|
76
75
|
positions2.push( v2.x, v2.y, v2.z );
|
|
77
76
|
positions2.push( v3.x, v3.y, v3.z );
|
|
78
|
-
|
|
79
77
|
if ( hasNormals ) {
|
|
80
78
|
|
|
81
79
|
const n1 = ns[ a ];
|
|
@@ -128,7 +126,6 @@
|
|
|
128
126
|
tessellating = false;
|
|
129
127
|
positions = positions2;
|
|
130
128
|
positions2 = [];
|
|
131
|
-
|
|
132
129
|
if ( hasNormals ) {
|
|
133
130
|
|
|
134
131
|
normals = normals2;
|
|
@@ -162,7 +159,6 @@
|
|
|
162
159
|
va.fromArray( positions, i + 0 );
|
|
163
160
|
vb.fromArray( positions, i + 3 );
|
|
164
161
|
vc.fromArray( positions, i + 6 );
|
|
165
|
-
|
|
166
162
|
if ( hasNormals ) {
|
|
167
163
|
|
|
168
164
|
na.fromArray( normals, i + 0 );
|
|
@@ -198,11 +194,9 @@
|
|
|
198
194
|
const dab = va.distanceToSquared( vb );
|
|
199
195
|
const dbc = vb.distanceToSquared( vc );
|
|
200
196
|
const dac = va.distanceToSquared( vc );
|
|
201
|
-
|
|
202
197
|
if ( dab > maxEdgeLengthSquared || dbc > maxEdgeLengthSquared || dac > maxEdgeLengthSquared ) {
|
|
203
198
|
|
|
204
199
|
tessellating = true;
|
|
205
|
-
|
|
206
200
|
if ( dab >= dbc && dab >= dac ) {
|
|
207
201
|
|
|
208
202
|
vm.lerpVectors( va, vb, 0.5 );
|
|
@@ -247,7 +241,6 @@
|
|
|
247
241
|
|
|
248
242
|
const geometry2 = new THREE.BufferGeometry();
|
|
249
243
|
geometry2.setAttribute( 'position', new THREE.Float32BufferAttribute( positions2, 3 ) );
|
|
250
|
-
|
|
251
244
|
if ( hasNormals ) {
|
|
252
245
|
|
|
253
246
|
geometry2.setAttribute( 'normal', new THREE.Float32BufferAttribute( normals2, 3 ) );
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Ground projected env map adapted from @react-three/drei.
|
|
5
5
|
* https://github.com/pmndrs/drei/blob/master/src/core/Environment.tsx
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
7
|
class GroundProjectedEnv extends THREE.Mesh {
|
|
9
8
|
|
|
10
9
|
constructor( texture, options ) {
|
|
@@ -12,17 +11,12 @@
|
|
|
12
11
|
const isCubeMap = texture.isCubeTexture;
|
|
13
12
|
const w = ( isCubeMap ? texture.image[ 0 ]?.width : texture.image.width ) ?? 1024;
|
|
14
13
|
const cubeSize = w / 4;
|
|
15
|
-
|
|
16
14
|
const _lodMax = Math.floor( Math.log2( cubeSize ) );
|
|
17
|
-
|
|
18
15
|
const _cubeSize = Math.pow( 2, _lodMax );
|
|
19
|
-
|
|
20
16
|
const width = 3 * Math.max( _cubeSize, 16 * 7 );
|
|
21
17
|
const height = 4 * _cubeSize;
|
|
22
18
|
const defines = [ isCubeMap ? '#define ENVMAP_TYPE_CUBE' : '', `#define CUBEUV_TEXEL_WIDTH ${1.0 / width}`, `#define CUBEUV_TEXEL_HEIGHT ${1.0 / height}`, `#define CUBEUV_MAX_MIP ${_lodMax}.0` ];
|
|
23
|
-
const vertexShader =
|
|
24
|
-
/* glsl */
|
|
25
|
-
`
|
|
19
|
+
const vertexShader = /* glsl */`
|
|
26
20
|
varying vec3 vWorldPosition;
|
|
27
21
|
|
|
28
22
|
void main()
|
|
@@ -35,9 +29,7 @@
|
|
|
35
29
|
|
|
36
30
|
}
|
|
37
31
|
`;
|
|
38
|
-
const fragmentShader = defines.join( '\n' ) +
|
|
39
|
-
/* glsl */
|
|
40
|
-
`
|
|
32
|
+
const fragmentShader = defines.join( '\n' ) + /* glsl */`
|
|
41
33
|
#define ENVMAP_TYPE_CUBE_UV
|
|
42
34
|
|
|
43
35
|
varying vec3 vWorldPosition;
|
|
@@ -161,25 +153,21 @@
|
|
|
161
153
|
super( geometry, material );
|
|
162
154
|
|
|
163
155
|
}
|
|
164
|
-
|
|
165
156
|
set radius( radius ) {
|
|
166
157
|
|
|
167
158
|
this.material.uniforms.radius.value = radius;
|
|
168
159
|
|
|
169
160
|
}
|
|
170
|
-
|
|
171
161
|
get radius() {
|
|
172
162
|
|
|
173
163
|
return this.material.uniforms.radius.value;
|
|
174
164
|
|
|
175
165
|
}
|
|
176
|
-
|
|
177
166
|
set height( height ) {
|
|
178
167
|
|
|
179
168
|
this.material.uniforms.height.value = height;
|
|
180
169
|
|
|
181
170
|
}
|
|
182
|
-
|
|
183
171
|
get height() {
|
|
184
172
|
|
|
185
173
|
return this.material.uniforms.height.value;
|