three-stdlib 2.35.2 → 2.35.4
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/_polyfill/CapsuleGeometry.cjs +20 -17
- package/_polyfill/CapsuleGeometry.cjs.map +1 -1
- package/_polyfill/CapsuleGeometry.js +20 -17
- package/_polyfill/CapsuleGeometry.js.map +1 -1
- package/_polyfill/constants.cjs +1 -1
- package/_polyfill/constants.cjs.map +1 -1
- package/_polyfill/constants.js +1 -1
- package/_polyfill/constants.js.map +1 -1
- package/animation/AnimationClipCreator.cjs +13 -13
- package/animation/AnimationClipCreator.cjs.map +1 -1
- package/animation/AnimationClipCreator.js +13 -13
- package/animation/AnimationClipCreator.js.map +1 -1
- package/animation/CCDIKSolver.cjs +11 -11
- package/animation/CCDIKSolver.cjs.map +1 -1
- package/animation/CCDIKSolver.js +12 -12
- package/animation/CCDIKSolver.js.map +1 -1
- package/animation/MMDAnimationHelper.cjs +1 -1
- package/animation/MMDAnimationHelper.cjs.map +1 -1
- package/animation/MMDAnimationHelper.js +1 -1
- package/animation/MMDAnimationHelper.js.map +1 -1
- package/animation/MMDPhysics.cjs +4 -4
- package/animation/MMDPhysics.cjs.map +1 -1
- package/animation/MMDPhysics.js +4 -4
- package/animation/MMDPhysics.js.map +1 -1
- package/controls/ArcballControls.cjs +2 -2
- package/controls/ArcballControls.cjs.map +1 -1
- package/controls/ArcballControls.js +3 -3
- package/controls/ArcballControls.js.map +1 -1
- package/controls/FirstPersonControls.cjs +1 -1
- package/controls/FirstPersonControls.cjs.map +1 -1
- package/controls/FirstPersonControls.js +1 -1
- package/controls/FirstPersonControls.js.map +1 -1
- package/controls/OrbitControls.cjs +2 -2
- package/controls/OrbitControls.cjs.map +1 -1
- package/controls/OrbitControls.js +3 -3
- package/controls/OrbitControls.js.map +1 -1
- package/controls/PointerLockControls.cjs +2 -2
- package/controls/PointerLockControls.cjs.map +1 -1
- package/controls/PointerLockControls.js +3 -3
- package/controls/PointerLockControls.js.map +1 -1
- package/csm/CSM.cjs +4 -4
- package/csm/CSM.cjs.map +1 -1
- package/csm/CSM.js +5 -5
- package/csm/CSM.js.map +1 -1
- package/csm/CSMFrustum.cjs +1 -1
- package/csm/CSMFrustum.cjs.map +1 -1
- package/csm/CSMFrustum.js +2 -2
- package/csm/CSMFrustum.js.map +1 -1
- package/deprecated/Geometry.cjs +722 -715
- package/deprecated/Geometry.cjs.map +1 -1
- package/deprecated/Geometry.js +723 -716
- package/deprecated/Geometry.js.map +1 -1
- package/effects/AnaglyphEffect.cjs +2 -1
- package/effects/AnaglyphEffect.cjs.map +1 -1
- package/effects/AnaglyphEffect.js +3 -2
- package/effects/AnaglyphEffect.js.map +1 -1
- package/effects/OutlineEffect.cjs +2 -1
- package/effects/OutlineEffect.cjs.map +1 -1
- package/effects/OutlineEffect.js +3 -2
- package/effects/OutlineEffect.js.map +1 -1
- package/effects/ParallaxBarrierEffect.cjs +2 -1
- package/effects/ParallaxBarrierEffect.cjs.map +1 -1
- package/effects/ParallaxBarrierEffect.js +3 -2
- package/effects/ParallaxBarrierEffect.js.map +1 -1
- package/exporters/DRACOExporter.cjs +133 -122
- package/exporters/DRACOExporter.cjs.map +1 -1
- package/exporters/DRACOExporter.d.ts +23 -21
- package/exporters/DRACOExporter.js +133 -122
- package/exporters/DRACOExporter.js.map +1 -1
- package/exporters/GLTFExporter.cjs +170 -167
- package/exporters/GLTFExporter.cjs.map +1 -1
- package/exporters/GLTFExporter.js +170 -167
- package/exporters/GLTFExporter.js.map +1 -1
- package/geometries/LightningStrike.cjs +524 -515
- package/geometries/LightningStrike.cjs.map +1 -1
- package/geometries/LightningStrike.js +524 -515
- package/geometries/LightningStrike.js.map +1 -1
- package/geometries/RoundedBoxGeometry.cjs +1 -1
- package/geometries/RoundedBoxGeometry.cjs.map +1 -1
- package/geometries/RoundedBoxGeometry.js +2 -2
- package/geometries/RoundedBoxGeometry.js.map +1 -1
- package/helpers/RaycasterHelper.cjs +2 -2
- package/helpers/RaycasterHelper.cjs.map +1 -1
- package/helpers/RaycasterHelper.js +3 -3
- package/helpers/RaycasterHelper.js.map +1 -1
- package/helpers/VertexNormalsHelper.cjs +3 -3
- package/helpers/VertexNormalsHelper.cjs.map +1 -1
- package/helpers/VertexNormalsHelper.js +4 -4
- package/helpers/VertexNormalsHelper.js.map +1 -1
- package/helpers/VertexTangentsHelper.cjs +2 -2
- package/helpers/VertexTangentsHelper.cjs.map +1 -1
- package/helpers/VertexTangentsHelper.js +3 -3
- package/helpers/VertexTangentsHelper.js.map +1 -1
- package/interactive/InteractiveGroup.cjs +1 -1
- package/interactive/InteractiveGroup.cjs.map +1 -1
- package/interactive/InteractiveGroup.js +2 -2
- package/interactive/InteractiveGroup.js.map +1 -1
- package/interactive/SelectionBox.cjs +15 -15
- package/interactive/SelectionBox.cjs.map +1 -1
- package/interactive/SelectionBox.js +16 -16
- package/interactive/SelectionBox.js.map +1 -1
- package/libs/chevrotain.cjs +1 -1
- package/libs/chevrotain.cjs.map +1 -1
- package/libs/chevrotain.js +1 -1
- package/libs/chevrotain.js.map +1 -1
- package/libs/lottie.cjs +1 -1
- package/libs/lottie.cjs.map +1 -1
- package/libs/lottie.js +1 -1
- package/libs/lottie.js.map +1 -1
- package/libs/opentype.cjs +1 -1
- package/libs/opentype.cjs.map +1 -1
- package/libs/opentype.js +1 -1
- package/libs/opentype.js.map +1 -1
- package/lights/LightProbeGenerator.cjs +5 -5
- package/lights/LightProbeGenerator.cjs.map +1 -1
- package/lights/LightProbeGenerator.js +5 -5
- package/lights/LightProbeGenerator.js.map +1 -1
- package/lights/RectAreaLightUniformsLib.cjs +3 -3
- package/lights/RectAreaLightUniformsLib.cjs.map +1 -1
- package/lights/RectAreaLightUniformsLib.js +3 -3
- package/lights/RectAreaLightUniformsLib.js.map +1 -1
- package/lines/LineMaterial.cjs +2 -1
- package/lines/LineMaterial.cjs.map +1 -1
- package/lines/LineMaterial.js +3 -2
- package/lines/LineMaterial.js.map +1 -1
- package/lines/LineSegments2.cjs +13 -13
- package/lines/LineSegments2.cjs.map +1 -1
- package/lines/LineSegments2.js +14 -14
- package/lines/LineSegments2.js.map +1 -1
- package/lines/LineSegmentsGeometry.cjs +2 -2
- package/lines/LineSegmentsGeometry.cjs.map +1 -1
- package/lines/LineSegmentsGeometry.js +3 -3
- package/lines/LineSegmentsGeometry.js.map +1 -1
- package/lines/Wireframe.cjs +3 -3
- package/lines/Wireframe.cjs.map +1 -1
- package/lines/Wireframe.js +4 -4
- package/lines/Wireframe.js.map +1 -1
- package/loaders/BasisTextureLoader.cjs +441 -435
- package/loaders/BasisTextureLoader.cjs.map +1 -1
- package/loaders/BasisTextureLoader.js +441 -435
- package/loaders/BasisTextureLoader.js.map +1 -1
- package/loaders/EXRLoader.cjs +2 -1
- package/loaders/EXRLoader.cjs.map +1 -1
- package/loaders/EXRLoader.js +3 -2
- package/loaders/EXRLoader.js.map +1 -1
- package/loaders/FBXLoader.cjs +2 -2
- package/loaders/FBXLoader.cjs.map +1 -1
- package/loaders/FBXLoader.js +2 -2
- package/loaders/FBXLoader.js.map +1 -1
- package/loaders/FontLoader.cjs +2 -2
- package/loaders/FontLoader.cjs.map +1 -1
- package/loaders/FontLoader.d.ts +2 -2
- package/loaders/FontLoader.js +2 -2
- package/loaders/FontLoader.js.map +1 -1
- package/loaders/GLTFLoader.cjs +2 -2
- package/loaders/GLTFLoader.cjs.map +1 -1
- package/loaders/GLTFLoader.js +2 -2
- package/loaders/GLTFLoader.js.map +1 -1
- package/loaders/KTX2Loader.cjs +377 -374
- package/loaders/KTX2Loader.cjs.map +1 -1
- package/loaders/KTX2Loader.js +377 -374
- package/loaders/KTX2Loader.js.map +1 -1
- package/loaders/LDrawLoader.cjs +5 -4
- package/loaders/LDrawLoader.cjs.map +1 -1
- package/loaders/LDrawLoader.js +6 -5
- package/loaders/LDrawLoader.js.map +1 -1
- package/loaders/OBJLoader.cjs +5 -5
- package/loaders/OBJLoader.cjs.map +1 -1
- package/loaders/OBJLoader.js +6 -6
- package/loaders/OBJLoader.js.map +1 -1
- package/loaders/PRWMLoader.cjs +46 -43
- package/loaders/PRWMLoader.cjs.map +1 -1
- package/loaders/PRWMLoader.js +46 -43
- package/loaders/PRWMLoader.js.map +1 -1
- package/loaders/SVGLoader.cjs +1694 -1688
- package/loaders/SVGLoader.cjs.map +1 -1
- package/loaders/SVGLoader.js +1694 -1688
- package/loaders/SVGLoader.js.map +1 -1
- package/loaders/XLoader.cjs +1 -1
- package/loaders/XLoader.cjs.map +1 -1
- package/loaders/XLoader.js +1 -1
- package/loaders/XLoader.js.map +1 -1
- package/math/Capsule.cjs +3 -3
- package/math/Capsule.cjs.map +1 -1
- package/math/Capsule.js +3 -3
- package/math/Capsule.js.map +1 -1
- package/math/ColorConverter.cjs +9 -9
- package/math/ColorConverter.cjs.map +1 -1
- package/math/ColorConverter.js +9 -9
- package/math/ColorConverter.js.map +1 -1
- package/math/ConvexHull.cjs +53 -50
- package/math/ConvexHull.cjs.map +1 -1
- package/math/ConvexHull.js +53 -50
- package/math/ConvexHull.js.map +1 -1
- package/math/ImprovedNoise.cjs +1 -1
- package/math/ImprovedNoise.cjs.map +1 -1
- package/math/ImprovedNoise.js +1 -1
- package/math/ImprovedNoise.js.map +1 -1
- package/math/MeshSurfaceSampler.cjs +2 -2
- package/math/MeshSurfaceSampler.cjs.map +1 -1
- package/math/MeshSurfaceSampler.js +2 -2
- package/math/MeshSurfaceSampler.js.map +1 -1
- package/math/OBB.cjs +14 -14
- package/math/OBB.cjs.map +1 -1
- package/math/OBB.js +15 -15
- package/math/OBB.js.map +1 -1
- package/math/Octree.cjs +7 -7
- package/math/Octree.cjs.map +1 -1
- package/math/Octree.js +8 -8
- package/math/Octree.js.map +1 -1
- package/misc/ConvexObjectBreaker.cjs +271 -268
- package/misc/ConvexObjectBreaker.cjs.map +1 -1
- package/misc/ConvexObjectBreaker.js +272 -269
- package/misc/ConvexObjectBreaker.js.map +1 -1
- package/misc/Gyroscope.cjs +6 -6
- package/misc/Gyroscope.cjs.map +1 -1
- package/misc/Gyroscope.js +7 -7
- package/misc/Gyroscope.js.map +1 -1
- package/modifiers/CurveModifier.cjs +1 -1
- package/modifiers/CurveModifier.cjs.map +1 -1
- package/modifiers/CurveModifier.js +2 -2
- package/modifiers/CurveModifier.js.map +1 -1
- package/modifiers/SimplifyModifier.cjs +2 -2
- package/modifiers/SimplifyModifier.cjs.map +1 -1
- package/modifiers/SimplifyModifier.js +2 -2
- package/modifiers/SimplifyModifier.js.map +1 -1
- package/objects/BatchedMesh.cjs +2 -2
- package/objects/BatchedMesh.cjs.map +1 -1
- package/objects/BatchedMesh.js +3 -3
- package/objects/BatchedMesh.js.map +1 -1
- package/objects/GroundProjectedEnv.cjs +2 -1
- package/objects/GroundProjectedEnv.cjs.map +1 -1
- package/objects/GroundProjectedEnv.js +3 -2
- package/objects/GroundProjectedEnv.js.map +1 -1
- package/objects/Lensflare.cjs +209 -206
- package/objects/Lensflare.cjs.map +1 -1
- package/objects/Lensflare.js +209 -206
- package/objects/Lensflare.js.map +1 -1
- package/objects/Reflector.cjs +154 -146
- package/objects/Reflector.cjs.map +1 -1
- package/objects/Reflector.js +154 -146
- package/objects/Reflector.js.map +1 -1
- package/objects/ReflectorForSSRPass.cjs +183 -180
- package/objects/ReflectorForSSRPass.cjs.map +1 -1
- package/objects/ReflectorForSSRPass.js +183 -180
- package/objects/ReflectorForSSRPass.js.map +1 -1
- package/objects/Refractor.cjs +164 -161
- package/objects/Refractor.cjs.map +1 -1
- package/objects/Refractor.js +164 -161
- package/objects/Refractor.js.map +1 -1
- package/objects/ShadowMesh.cjs +1 -1
- package/objects/ShadowMesh.cjs.map +1 -1
- package/objects/ShadowMesh.js +2 -2
- package/objects/ShadowMesh.js.map +1 -1
- package/objects/Sky.cjs +35 -32
- package/objects/Sky.cjs.map +1 -1
- package/objects/Sky.d.ts +100 -6
- package/objects/Sky.js +35 -32
- package/objects/Sky.js.map +1 -1
- package/objects/Water.cjs +2 -1
- package/objects/Water.cjs.map +1 -1
- package/objects/Water.js +3 -2
- package/objects/Water.js.map +1 -1
- package/objects/Water2.cjs +143 -140
- package/objects/Water2.cjs.map +1 -1
- package/objects/Water2.js +143 -140
- package/objects/Water2.js.map +1 -1
- package/package.json +1 -1
- package/postprocessing/Pass.cjs.map +1 -1
- package/postprocessing/Pass.d.ts +2 -2
- package/postprocessing/Pass.js.map +1 -1
- package/postprocessing/SAOPass.cjs +267 -264
- package/postprocessing/SAOPass.cjs.map +1 -1
- package/postprocessing/SAOPass.js +267 -264
- package/postprocessing/SAOPass.js.map +1 -1
- package/postprocessing/SSAOPass.cjs +253 -250
- package/postprocessing/SSAOPass.cjs.map +1 -1
- package/postprocessing/SSAOPass.js +253 -250
- package/postprocessing/SSAOPass.js.map +1 -1
- package/postprocessing/SSRPass.cjs +379 -376
- package/postprocessing/SSRPass.cjs.map +1 -1
- package/postprocessing/SSRPass.js +379 -376
- package/postprocessing/SSRPass.js.map +1 -1
- package/postprocessing/UnrealBloomPass.cjs +205 -202
- package/postprocessing/UnrealBloomPass.cjs.map +1 -1
- package/postprocessing/UnrealBloomPass.js +205 -202
- package/postprocessing/UnrealBloomPass.js.map +1 -1
- package/renderers/CSS2DRenderer.cjs +5 -5
- package/renderers/CSS2DRenderer.cjs.map +1 -1
- package/renderers/CSS2DRenderer.js +5 -5
- package/renderers/CSS2DRenderer.js.map +1 -1
- package/renderers/CSS3DRenderer.cjs +5 -5
- package/renderers/CSS3DRenderer.cjs.map +1 -1
- package/renderers/CSS3DRenderer.js +6 -6
- package/renderers/CSS3DRenderer.js.map +1 -1
- package/shaders/ACESFilmicToneMappingShader.cjs +71 -46
- package/shaders/ACESFilmicToneMappingShader.cjs.map +1 -1
- package/shaders/ACESFilmicToneMappingShader.js +71 -46
- package/shaders/ACESFilmicToneMappingShader.js.map +1 -1
- package/shaders/AfterimageShader.cjs +41 -22
- package/shaders/AfterimageShader.cjs.map +1 -1
- package/shaders/AfterimageShader.js +41 -22
- package/shaders/AfterimageShader.js.map +1 -1
- package/shaders/BasicShader.cjs +20 -6
- package/shaders/BasicShader.cjs.map +1 -1
- package/shaders/BasicShader.js +20 -6
- package/shaders/BasicShader.js.map +1 -1
- package/shaders/BleachBypassShader.cjs +46 -26
- package/shaders/BleachBypassShader.cjs.map +1 -1
- package/shaders/BleachBypassShader.js +46 -26
- package/shaders/BleachBypassShader.js.map +1 -1
- package/shaders/BlendShader.cjs +33 -19
- package/shaders/BlendShader.cjs.map +1 -1
- package/shaders/BlendShader.js +33 -19
- package/shaders/BlendShader.js.map +1 -1
- package/shaders/BokehShader.cjs +117 -90
- package/shaders/BokehShader.cjs.map +1 -1
- package/shaders/BokehShader.js +117 -90
- package/shaders/BokehShader.js.map +1 -1
- package/shaders/BokehShader2.cjs +333 -232
- package/shaders/BokehShader2.cjs.map +1 -1
- package/shaders/BokehShader2.js +333 -232
- package/shaders/BokehShader2.js.map +1 -1
- package/shaders/BrightnessContrastShader.cjs +38 -22
- package/shaders/BrightnessContrastShader.cjs.map +1 -1
- package/shaders/BrightnessContrastShader.js +38 -22
- package/shaders/BrightnessContrastShader.js.map +1 -1
- package/shaders/ColorCorrectionShader.cjs +35 -21
- package/shaders/ColorCorrectionShader.cjs.map +1 -1
- package/shaders/ColorCorrectionShader.js +35 -21
- package/shaders/ColorCorrectionShader.js.map +1 -1
- package/shaders/ColorifyShader.cjs +34 -19
- package/shaders/ColorifyShader.cjs.map +1 -1
- package/shaders/ColorifyShader.js +34 -19
- package/shaders/ColorifyShader.js.map +1 -1
- package/shaders/ConvolutionShader.cjs +43 -24
- package/shaders/ConvolutionShader.cjs.map +1 -1
- package/shaders/ConvolutionShader.js +43 -24
- package/shaders/ConvolutionShader.js.map +1 -1
- package/shaders/CopyShader.cjs +30 -16
- package/shaders/CopyShader.cjs.map +1 -1
- package/shaders/CopyShader.js +30 -16
- package/shaders/CopyShader.js.map +1 -1
- package/shaders/DOFMipMapShader.cjs +38 -21
- package/shaders/DOFMipMapShader.cjs.map +1 -1
- package/shaders/DOFMipMapShader.js +38 -21
- package/shaders/DOFMipMapShader.js.map +1 -1
- package/shaders/DepthLimitedBlurShader.cjs +98 -69
- package/shaders/DepthLimitedBlurShader.cjs.map +1 -1
- package/shaders/DepthLimitedBlurShader.js +98 -69
- package/shaders/DepthLimitedBlurShader.js.map +1 -1
- package/shaders/DigitalGlitch.cjs +70 -59
- package/shaders/DigitalGlitch.cjs.map +1 -1
- package/shaders/DigitalGlitch.js +70 -59
- package/shaders/DigitalGlitch.js.map +1 -1
- package/shaders/DotScreenShader.cjs +49 -28
- package/shaders/DotScreenShader.cjs.map +1 -1
- package/shaders/DotScreenShader.js +49 -28
- package/shaders/DotScreenShader.js.map +1 -1
- package/shaders/FXAAShader.cjs +1098 -1089
- package/shaders/FXAAShader.cjs.map +1 -1
- package/shaders/FXAAShader.js +1098 -1089
- package/shaders/FXAAShader.js.map +1 -1
- package/shaders/FilmShader.cjs +57 -29
- package/shaders/FilmShader.cjs.map +1 -1
- package/shaders/FilmShader.js +57 -29
- package/shaders/FilmShader.js.map +1 -1
- package/shaders/FocusShader.cjs +70 -43
- package/shaders/FocusShader.cjs.map +1 -1
- package/shaders/FocusShader.js +70 -43
- package/shaders/FocusShader.js.map +1 -1
- package/shaders/FreiChenShader.cjs +74 -53
- package/shaders/FreiChenShader.cjs.map +1 -1
- package/shaders/FreiChenShader.js +74 -53
- package/shaders/FreiChenShader.js.map +1 -1
- package/shaders/FresnelShader.cjs +55 -35
- package/shaders/FresnelShader.cjs.map +1 -1
- package/shaders/FresnelShader.js +55 -35
- package/shaders/FresnelShader.js.map +1 -1
- package/shaders/GammaCorrectionShader.cjs +33 -19
- package/shaders/GammaCorrectionShader.cjs.map +1 -1
- package/shaders/GammaCorrectionShader.js +33 -19
- package/shaders/GammaCorrectionShader.js.map +1 -1
- package/shaders/GodRaysShader.cjs +193 -116
- package/shaders/GodRaysShader.cjs.map +1 -1
- package/shaders/GodRaysShader.js +193 -116
- package/shaders/GodRaysShader.js.map +1 -1
- package/shaders/HalftoneShader.cjs +270 -192
- package/shaders/HalftoneShader.cjs.map +1 -1
- package/shaders/HalftoneShader.js +270 -192
- package/shaders/HalftoneShader.js.map +1 -1
- package/shaders/HorizontalTiltShiftShader.cjs +43 -27
- package/shaders/HorizontalTiltShiftShader.cjs.map +1 -1
- package/shaders/HorizontalTiltShiftShader.js +43 -27
- package/shaders/HorizontalTiltShiftShader.js.map +1 -1
- package/shaders/HueSaturationShader.cjs +47 -31
- package/shaders/HueSaturationShader.cjs.map +1 -1
- package/shaders/HueSaturationShader.js +47 -31
- package/shaders/HueSaturationShader.js.map +1 -1
- package/shaders/KaleidoShader.cjs +37 -24
- package/shaders/KaleidoShader.cjs.map +1 -1
- package/shaders/KaleidoShader.js +37 -24
- package/shaders/KaleidoShader.js.map +1 -1
- package/shaders/LuminosityHighPassShader.cjs +43 -24
- package/shaders/LuminosityHighPassShader.cjs.map +1 -1
- package/shaders/LuminosityHighPassShader.js +43 -24
- package/shaders/LuminosityHighPassShader.js.map +1 -1
- package/shaders/LuminosityShader.cjs +34 -17
- package/shaders/LuminosityShader.cjs.map +1 -1
- package/shaders/LuminosityShader.js +34 -17
- package/shaders/LuminosityShader.js.map +1 -1
- package/shaders/MirrorShader.cjs +39 -26
- package/shaders/MirrorShader.cjs.map +1 -1
- package/shaders/MirrorShader.js +39 -26
- package/shaders/MirrorShader.js.map +1 -1
- package/shaders/NormalMapShader.cjs +36 -21
- package/shaders/NormalMapShader.cjs.map +1 -1
- package/shaders/NormalMapShader.js +36 -21
- package/shaders/NormalMapShader.js.map +1 -1
- package/shaders/ParallaxShader.cjs +147 -97
- package/shaders/ParallaxShader.cjs.map +1 -1
- package/shaders/ParallaxShader.js +147 -97
- package/shaders/ParallaxShader.js.map +1 -1
- package/shaders/PixelShader.cjs +31 -18
- package/shaders/PixelShader.cjs.map +1 -1
- package/shaders/PixelShader.js +31 -18
- package/shaders/PixelShader.js.map +1 -1
- package/shaders/RGBShiftShader.cjs +33 -20
- package/shaders/RGBShiftShader.cjs.map +1 -1
- package/shaders/RGBShiftShader.js +33 -20
- package/shaders/RGBShiftShader.js.map +1 -1
- package/shaders/SAOShader.cjs +154 -117
- package/shaders/SAOShader.cjs.map +1 -1
- package/shaders/SAOShader.js +154 -117
- package/shaders/SAOShader.js.map +1 -1
- package/shaders/SMAAShader.cjs +358 -270
- package/shaders/SMAAShader.cjs.map +1 -1
- package/shaders/SMAAShader.js +358 -270
- package/shaders/SMAAShader.js.map +1 -1
- package/shaders/SSAOShader.cjs +236 -142
- package/shaders/SSAOShader.cjs.map +1 -1
- package/shaders/SSAOShader.js +236 -142
- package/shaders/SSAOShader.js.map +1 -1
- package/shaders/SSRShader.cjs +4 -4
- package/shaders/SSRShader.cjs.map +1 -1
- package/shaders/SSRShader.js +4 -4
- package/shaders/SSRShader.js.map +1 -1
- package/shaders/SepiaShader.cjs +36 -20
- package/shaders/SepiaShader.cjs.map +1 -1
- package/shaders/SepiaShader.js +36 -20
- package/shaders/SepiaShader.js.map +1 -1
- package/shaders/SobelOperatorShader.cjs +64 -37
- package/shaders/SobelOperatorShader.cjs.map +1 -1
- package/shaders/SobelOperatorShader.js +64 -37
- package/shaders/SobelOperatorShader.js.map +1 -1
- package/shaders/TechnicolorShader.cjs +29 -16
- package/shaders/TechnicolorShader.cjs.map +1 -1
- package/shaders/TechnicolorShader.js +29 -16
- package/shaders/TechnicolorShader.js.map +1 -1
- package/shaders/ToneMapShader.cjs +55 -35
- package/shaders/ToneMapShader.cjs.map +1 -1
- package/shaders/ToneMapShader.js +55 -35
- package/shaders/ToneMapShader.js.map +1 -1
- package/shaders/ToonShader.cjs +275 -165
- package/shaders/ToonShader.cjs.map +1 -1
- package/shaders/ToonShader.js +275 -165
- package/shaders/ToonShader.js.map +1 -1
- package/shaders/TriangleBlurShader.cjs +50 -27
- package/shaders/TriangleBlurShader.cjs.map +1 -1
- package/shaders/TriangleBlurShader.js +50 -27
- package/shaders/TriangleBlurShader.js.map +1 -1
- package/shaders/UnpackDepthRGBAShader.cjs +32 -17
- package/shaders/UnpackDepthRGBAShader.cjs.map +1 -1
- package/shaders/UnpackDepthRGBAShader.js +32 -17
- package/shaders/UnpackDepthRGBAShader.js.map +1 -1
- package/shaders/VerticalTiltShiftShader.cjs +43 -27
- package/shaders/VerticalTiltShiftShader.cjs.map +1 -1
- package/shaders/VerticalTiltShiftShader.js +43 -27
- package/shaders/VerticalTiltShiftShader.js.map +1 -1
- package/shaders/VignetteShader.cjs +43 -27
- package/shaders/VignetteShader.cjs.map +1 -1
- package/shaders/VignetteShader.js +43 -27
- package/shaders/VignetteShader.js.map +1 -1
- package/shaders/VolumeShader.cjs +264 -213
- package/shaders/VolumeShader.cjs.map +1 -1
- package/shaders/VolumeShader.js +264 -213
- package/shaders/VolumeShader.js.map +1 -1
- package/shaders/WaterRefractionShader.cjs +63 -35
- package/shaders/WaterRefractionShader.cjs.map +1 -1
- package/shaders/WaterRefractionShader.js +63 -35
- package/shaders/WaterRefractionShader.js.map +1 -1
- package/utils/GeometryCompressionUtils.cjs +2 -1
- package/utils/GeometryCompressionUtils.cjs.map +1 -1
- package/utils/GeometryCompressionUtils.js +3 -2
- package/utils/GeometryCompressionUtils.js.map +1 -1
- package/utils/RoughnessMipmapper.cjs +3 -3
- package/utils/RoughnessMipmapper.cjs.map +1 -1
- package/utils/RoughnessMipmapper.js +4 -4
- package/utils/RoughnessMipmapper.js.map +1 -1
- package/utils/ShadowMapViewer.d.ts +2 -2
- package/webxr/ARButton.cjs +109 -106
- package/webxr/ARButton.cjs.map +1 -1
- package/webxr/ARButton.d.ts +4 -3
- package/webxr/ARButton.js +109 -106
- package/webxr/ARButton.js.map +1 -1
- package/webxr/OculusHandPointerModel.cjs +2 -2
- package/webxr/OculusHandPointerModel.cjs.map +1 -1
- package/webxr/OculusHandPointerModel.js +2 -2
- package/webxr/OculusHandPointerModel.js.map +1 -1
- package/webxr/VRButton.cjs +98 -95
- package/webxr/VRButton.cjs.map +1 -1
- package/webxr/VRButton.d.ts +6 -5
- package/webxr/VRButton.js +98 -95
- package/webxr/VRButton.js.map +1 -1
- package/webxr/XRHandPrimitiveModel.cjs +2 -2
- package/webxr/XRHandPrimitiveModel.cjs.map +1 -1
- package/webxr/XRHandPrimitiveModel.js +3 -3
- package/webxr/XRHandPrimitiveModel.js.map +1 -1
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const THREE = require("three");
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
4
|
+
const CapsuleGeometry = /* @__PURE__ */ (() => {
|
|
5
|
+
class CapsuleGeometry2 extends THREE.LatheGeometry {
|
|
6
|
+
constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {
|
|
7
|
+
const path = new THREE.Path();
|
|
8
|
+
path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0);
|
|
9
|
+
path.absarc(0, length / 2, radius, 0, Math.PI * 0.5);
|
|
10
|
+
super(path.getPoints(capSegments), radialSegments);
|
|
11
|
+
this.type = "CapsuleGeometry";
|
|
12
|
+
this.parameters = {
|
|
13
|
+
radius,
|
|
14
|
+
height: length,
|
|
15
|
+
capSegments,
|
|
16
|
+
radialSegments
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
static fromJSON(data) {
|
|
20
|
+
return new CapsuleGeometry2(data.radius, data.length, data.capSegments, data.radialSegments);
|
|
21
|
+
}
|
|
17
22
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
}
|
|
23
|
+
return CapsuleGeometry2;
|
|
24
|
+
})();
|
|
22
25
|
exports.CapsuleGeometry = CapsuleGeometry;
|
|
23
26
|
//# sourceMappingURL=CapsuleGeometry.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CapsuleGeometry.cjs","sources":["../../src/_polyfill/CapsuleGeometry.js"],"sourcesContent":["import { Path, LatheGeometry } from 'three'\n\
|
|
1
|
+
{"version":3,"file":"CapsuleGeometry.cjs","sources":["../../src/_polyfill/CapsuleGeometry.js"],"sourcesContent":["import { Path, LatheGeometry } from 'three'\n\nconst CapsuleGeometry = /* @__PURE__ */ (() => {\n class CapsuleGeometry extends LatheGeometry {\n constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {\n const path = new Path()\n path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0)\n path.absarc(0, length / 2, radius, 0, Math.PI * 0.5)\n\n super(path.getPoints(capSegments), radialSegments)\n\n this.type = 'CapsuleGeometry'\n\n this.parameters = {\n radius: radius,\n height: length,\n capSegments: capSegments,\n radialSegments: radialSegments,\n }\n }\n\n static fromJSON(data) {\n return new CapsuleGeometry(data.radius, data.length, data.capSegments, data.radialSegments)\n }\n }\n\n return CapsuleGeometry\n})()\n\nexport { CapsuleGeometry }\n"],"names":["CapsuleGeometry","LatheGeometry","Path"],"mappings":";;;AAEK,MAAC,kBAAmC,uBAAM;AAC7C,QAAMA,yBAAwBC,MAAAA,cAAc;AAAA,IAC1C,YAAY,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,iBAAiB,GAAG;AACvE,YAAM,OAAO,IAAIC,WAAM;AACvB,WAAK,OAAO,GAAG,CAAC,SAAS,GAAG,QAAQ,KAAK,KAAK,KAAK,CAAC;AACpD,WAAK,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,KAAK,GAAG;AAEnD,YAAM,KAAK,UAAU,WAAW,GAAG,cAAc;AAEjD,WAAK,OAAO;AAEZ,WAAK,aAAa;AAAA,QAChB;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IAED,OAAO,SAAS,MAAM;AACpB,aAAO,IAAIF,iBAAgB,KAAK,QAAQ,KAAK,QAAQ,KAAK,aAAa,KAAK,cAAc;AAAA,IAC3F;AAAA,EACF;AAED,SAAOA;AACT,GAAC;;"}
|
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
import { LatheGeometry, Path } from "three";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
2
|
+
const CapsuleGeometry = /* @__PURE__ */ (() => {
|
|
3
|
+
class CapsuleGeometry2 extends LatheGeometry {
|
|
4
|
+
constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {
|
|
5
|
+
const path = new Path();
|
|
6
|
+
path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0);
|
|
7
|
+
path.absarc(0, length / 2, radius, 0, Math.PI * 0.5);
|
|
8
|
+
super(path.getPoints(capSegments), radialSegments);
|
|
9
|
+
this.type = "CapsuleGeometry";
|
|
10
|
+
this.parameters = {
|
|
11
|
+
radius,
|
|
12
|
+
height: length,
|
|
13
|
+
capSegments,
|
|
14
|
+
radialSegments
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
static fromJSON(data) {
|
|
18
|
+
return new CapsuleGeometry2(data.radius, data.length, data.capSegments, data.radialSegments);
|
|
19
|
+
}
|
|
15
20
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
}
|
|
21
|
+
return CapsuleGeometry2;
|
|
22
|
+
})();
|
|
20
23
|
export {
|
|
21
24
|
CapsuleGeometry
|
|
22
25
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CapsuleGeometry.js","sources":["../../src/_polyfill/CapsuleGeometry.js"],"sourcesContent":["import { Path, LatheGeometry } from 'three'\n\
|
|
1
|
+
{"version":3,"file":"CapsuleGeometry.js","sources":["../../src/_polyfill/CapsuleGeometry.js"],"sourcesContent":["import { Path, LatheGeometry } from 'three'\n\nconst CapsuleGeometry = /* @__PURE__ */ (() => {\n class CapsuleGeometry extends LatheGeometry {\n constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {\n const path = new Path()\n path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0)\n path.absarc(0, length / 2, radius, 0, Math.PI * 0.5)\n\n super(path.getPoints(capSegments), radialSegments)\n\n this.type = 'CapsuleGeometry'\n\n this.parameters = {\n radius: radius,\n height: length,\n capSegments: capSegments,\n radialSegments: radialSegments,\n }\n }\n\n static fromJSON(data) {\n return new CapsuleGeometry(data.radius, data.length, data.capSegments, data.radialSegments)\n }\n }\n\n return CapsuleGeometry\n})()\n\nexport { CapsuleGeometry }\n"],"names":["CapsuleGeometry"],"mappings":";AAEK,MAAC,kBAAmC,uBAAM;AAC7C,QAAMA,yBAAwB,cAAc;AAAA,IAC1C,YAAY,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,iBAAiB,GAAG;AACvE,YAAM,OAAO,IAAI,KAAM;AACvB,WAAK,OAAO,GAAG,CAAC,SAAS,GAAG,QAAQ,KAAK,KAAK,KAAK,CAAC;AACpD,WAAK,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,KAAK,GAAG;AAEnD,YAAM,KAAK,UAAU,WAAW,GAAG,cAAc;AAEjD,WAAK,OAAO;AAEZ,WAAK,aAAa;AAAA,QAChB;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IAED,OAAO,SAAS,MAAM;AACpB,aAAO,IAAIA,iBAAgB,KAAK,QAAQ,KAAK,QAAQ,KAAK,aAAa,KAAK,cAAc;AAAA,IAC3F;AAAA,EACF;AAED,SAAOA;AACT,GAAC;"}
|
package/_polyfill/constants.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const THREE = require("three");
|
|
4
|
-
const version = parseInt(THREE.REVISION.replace(/\D+/g, ""));
|
|
4
|
+
const version = /* @__PURE__ */ (() => parseInt(THREE.REVISION.replace(/\D+/g, "")))();
|
|
5
5
|
exports.version = version;
|
|
6
6
|
//# sourceMappingURL=constants.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.cjs","sources":["../../src/_polyfill/constants.ts"],"sourcesContent":["import { REVISION } from 'three'\n\nexport const version = parseInt(REVISION.replace(/\\D+/g, ''))\n"],"names":["REVISION"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"constants.cjs","sources":["../../src/_polyfill/constants.ts"],"sourcesContent":["import { REVISION } from 'three'\n\nexport const version = /* @__PURE__ */ (() => parseInt(REVISION.replace(/\\D+/g, '')))()\n"],"names":["REVISION"],"mappings":";;;AAEa,MAAA,iCAAiC,SAASA,MAAAA,SAAS,QAAQ,QAAQ,EAAE,CAAC,GAAG;;"}
|
package/_polyfill/constants.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../../src/_polyfill/constants.ts"],"sourcesContent":["import { REVISION } from 'three'\n\nexport const version = parseInt(REVISION.replace(/\\D+/g, ''))\n"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../src/_polyfill/constants.ts"],"sourcesContent":["import { REVISION } from 'three'\n\nexport const version = /* @__PURE__ */ (() => parseInt(REVISION.replace(/\\D+/g, '')))()\n"],"names":[],"mappings":";AAEa,MAAA,iCAAiC,SAAS,SAAS,QAAQ,QAAQ,EAAE,CAAC,GAAG;"}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const THREE = require("three");
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
const AnimationClipCreator = {
|
|
5
|
+
CreateRotationAnimation(period, axis = "x") {
|
|
6
6
|
const times = [0, period], values = [0, 360];
|
|
7
7
|
const trackName = ".rotation[" + axis + "]";
|
|
8
8
|
const track = new THREE.NumberKeyframeTrack(trackName, times, values);
|
|
9
9
|
return new THREE.AnimationClip(null, period, [track]);
|
|
10
|
-
}
|
|
11
|
-
|
|
10
|
+
},
|
|
11
|
+
CreateScaleAxisAnimation(period, axis = "x") {
|
|
12
12
|
const times = [0, period], values = [0, 1];
|
|
13
13
|
const trackName = ".scale[" + axis + "]";
|
|
14
14
|
const track = new THREE.NumberKeyframeTrack(trackName, times, values);
|
|
15
15
|
return new THREE.AnimationClip(null, period, [track]);
|
|
16
|
-
}
|
|
17
|
-
|
|
16
|
+
},
|
|
17
|
+
CreateShakeAnimation(duration, shakeScale) {
|
|
18
18
|
const times = [], values = [], tmp = new THREE.Vector3();
|
|
19
19
|
for (let i = 0; i < duration * 10; i++) {
|
|
20
20
|
times.push(i / 10);
|
|
@@ -23,8 +23,8 @@ class AnimationClipCreator {
|
|
|
23
23
|
const trackName = ".position";
|
|
24
24
|
const track = new THREE.VectorKeyframeTrack(trackName, times, values);
|
|
25
25
|
return new THREE.AnimationClip(null, duration, [track]);
|
|
26
|
-
}
|
|
27
|
-
|
|
26
|
+
},
|
|
27
|
+
CreatePulsationAnimation(duration, pulseScale) {
|
|
28
28
|
const times = [], values = [], tmp = new THREE.Vector3();
|
|
29
29
|
for (let i = 0; i < duration * 10; i++) {
|
|
30
30
|
times.push(i / 10);
|
|
@@ -34,14 +34,14 @@ class AnimationClipCreator {
|
|
|
34
34
|
const trackName = ".scale";
|
|
35
35
|
const track = new THREE.VectorKeyframeTrack(trackName, times, values);
|
|
36
36
|
return new THREE.AnimationClip(null, duration, [track]);
|
|
37
|
-
}
|
|
38
|
-
|
|
37
|
+
},
|
|
38
|
+
CreateVisibilityAnimation(duration) {
|
|
39
39
|
const times = [0, duration / 2, duration], values = [true, false, true];
|
|
40
40
|
const trackName = ".visible";
|
|
41
41
|
const track = new THREE.BooleanKeyframeTrack(trackName, times, values);
|
|
42
42
|
return new THREE.AnimationClip(null, duration, [track]);
|
|
43
|
-
}
|
|
44
|
-
|
|
43
|
+
},
|
|
44
|
+
CreateMaterialColorAnimation(duration, colors) {
|
|
45
45
|
const times = [], values = [], timeStep = duration / colors.length;
|
|
46
46
|
for (let i = 0; i < colors.length; i++) {
|
|
47
47
|
times.push(i * timeStep);
|
|
@@ -52,6 +52,6 @@ class AnimationClipCreator {
|
|
|
52
52
|
const track = new THREE.ColorKeyframeTrack(trackName, times, values);
|
|
53
53
|
return new THREE.AnimationClip(null, duration, [track]);
|
|
54
54
|
}
|
|
55
|
-
}
|
|
55
|
+
};
|
|
56
56
|
exports.AnimationClipCreator = AnimationClipCreator;
|
|
57
57
|
//# sourceMappingURL=AnimationClipCreator.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnimationClipCreator.cjs","sources":["../../src/animation/AnimationClipCreator.js"],"sourcesContent":["import {\n AnimationClip,\n BooleanKeyframeTrack,\n ColorKeyframeTrack,\n NumberKeyframeTrack,\n Vector3,\n VectorKeyframeTrack,\n} from 'three'\n\
|
|
1
|
+
{"version":3,"file":"AnimationClipCreator.cjs","sources":["../../src/animation/AnimationClipCreator.js"],"sourcesContent":["import {\n AnimationClip,\n BooleanKeyframeTrack,\n ColorKeyframeTrack,\n NumberKeyframeTrack,\n Vector3,\n VectorKeyframeTrack,\n} from 'three'\n\nconst AnimationClipCreator = {\n CreateRotationAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 360]\n\n const trackName = '.rotation[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n },\n\n CreateScaleAxisAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 1]\n\n const trackName = '.scale[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n },\n\n CreateShakeAnimation(duration, shakeScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n tmp\n .set(Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0)\n .multiply(shakeScale)\n .toArray(values, values.length)\n }\n\n const trackName = '.position'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n\n CreatePulsationAnimation(duration, pulseScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n const scaleFactor = Math.random() * pulseScale\n tmp.set(scaleFactor, scaleFactor, scaleFactor).toArray(values, values.length)\n }\n\n const trackName = '.scale'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n\n CreateVisibilityAnimation(duration) {\n const times = [0, duration / 2, duration],\n values = [true, false, true]\n\n const trackName = '.visible'\n\n const track = new BooleanKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n\n CreateMaterialColorAnimation(duration, colors) {\n const times = [],\n values = [],\n timeStep = duration / colors.length\n\n for (let i = 0; i < colors.length; i++) {\n times.push(i * timeStep)\n\n const color = colors[i]\n values.push(color.r, color.g, color.b)\n }\n\n const trackName = '.material.color'\n\n const track = new ColorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n}\n\nexport { AnimationClipCreator }\n"],"names":["NumberKeyframeTrack","AnimationClip","Vector3","VectorKeyframeTrack","BooleanKeyframeTrack","ColorKeyframeTrack"],"mappings":";;;AASK,MAAC,uBAAuB;AAAA,EAC3B,wBAAwB,QAAQ,OAAO,KAAK;AAC1C,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,GAAG;AAElB,UAAM,YAAY,eAAe,OAAO;AAExC,UAAM,QAAQ,IAAIA,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIC,MAAAA,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,yBAAyB,QAAQ,OAAO,KAAK;AAC3C,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,CAAC;AAEhB,UAAM,YAAY,YAAY,OAAO;AAErC,UAAM,QAAQ,IAAID,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIC,MAAAA,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,qBAAqB,UAAU,YAAY;AACzC,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAIC,MAAAA,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,UACG,IAAI,KAAK,OAAM,IAAK,IAAM,GAAK,KAAK,OAAQ,IAAG,IAAM,GAAK,KAAK,OAAM,IAAK,IAAM,CAAG,EACnF,SAAS,UAAU,EACnB,QAAQ,QAAQ,OAAO,MAAM;AAAA,IACjC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAIC,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIF,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,yBAAyB,UAAU,YAAY;AAC7C,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAIC,MAAAA,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,YAAM,cAAc,KAAK,OAAM,IAAK;AACpC,UAAI,IAAI,aAAa,aAAa,WAAW,EAAE,QAAQ,QAAQ,OAAO,MAAM;AAAA,IAC7E;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAIC,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIF,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,0BAA0B,UAAU;AAClC,UAAM,QAAQ,CAAC,GAAG,WAAW,GAAG,QAAQ,GACtC,SAAS,CAAC,MAAM,OAAO,IAAI;AAE7B,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAIG,MAAAA,qBAAqB,WAAW,OAAO,MAAM;AAE/D,WAAO,IAAIH,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,6BAA6B,UAAU,QAAQ;AAC7C,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,WAAW,WAAW,OAAO;AAE/B,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAM,KAAK,IAAI,QAAQ;AAEvB,YAAM,QAAQ,OAAO,CAAC;AACtB,aAAO,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAAA,IACtC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAII,MAAAA,mBAAmB,WAAW,OAAO,MAAM;AAE7D,WAAO,IAAIJ,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AACH;;"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { NumberKeyframeTrack, AnimationClip, Vector3, VectorKeyframeTrack, BooleanKeyframeTrack, ColorKeyframeTrack } from "three";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
const AnimationClipCreator = {
|
|
3
|
+
CreateRotationAnimation(period, axis = "x") {
|
|
4
4
|
const times = [0, period], values = [0, 360];
|
|
5
5
|
const trackName = ".rotation[" + axis + "]";
|
|
6
6
|
const track = new NumberKeyframeTrack(trackName, times, values);
|
|
7
7
|
return new AnimationClip(null, period, [track]);
|
|
8
|
-
}
|
|
9
|
-
|
|
8
|
+
},
|
|
9
|
+
CreateScaleAxisAnimation(period, axis = "x") {
|
|
10
10
|
const times = [0, period], values = [0, 1];
|
|
11
11
|
const trackName = ".scale[" + axis + "]";
|
|
12
12
|
const track = new NumberKeyframeTrack(trackName, times, values);
|
|
13
13
|
return new AnimationClip(null, period, [track]);
|
|
14
|
-
}
|
|
15
|
-
|
|
14
|
+
},
|
|
15
|
+
CreateShakeAnimation(duration, shakeScale) {
|
|
16
16
|
const times = [], values = [], tmp = new Vector3();
|
|
17
17
|
for (let i = 0; i < duration * 10; i++) {
|
|
18
18
|
times.push(i / 10);
|
|
@@ -21,8 +21,8 @@ class AnimationClipCreator {
|
|
|
21
21
|
const trackName = ".position";
|
|
22
22
|
const track = new VectorKeyframeTrack(trackName, times, values);
|
|
23
23
|
return new AnimationClip(null, duration, [track]);
|
|
24
|
-
}
|
|
25
|
-
|
|
24
|
+
},
|
|
25
|
+
CreatePulsationAnimation(duration, pulseScale) {
|
|
26
26
|
const times = [], values = [], tmp = new Vector3();
|
|
27
27
|
for (let i = 0; i < duration * 10; i++) {
|
|
28
28
|
times.push(i / 10);
|
|
@@ -32,14 +32,14 @@ class AnimationClipCreator {
|
|
|
32
32
|
const trackName = ".scale";
|
|
33
33
|
const track = new VectorKeyframeTrack(trackName, times, values);
|
|
34
34
|
return new AnimationClip(null, duration, [track]);
|
|
35
|
-
}
|
|
36
|
-
|
|
35
|
+
},
|
|
36
|
+
CreateVisibilityAnimation(duration) {
|
|
37
37
|
const times = [0, duration / 2, duration], values = [true, false, true];
|
|
38
38
|
const trackName = ".visible";
|
|
39
39
|
const track = new BooleanKeyframeTrack(trackName, times, values);
|
|
40
40
|
return new AnimationClip(null, duration, [track]);
|
|
41
|
-
}
|
|
42
|
-
|
|
41
|
+
},
|
|
42
|
+
CreateMaterialColorAnimation(duration, colors) {
|
|
43
43
|
const times = [], values = [], timeStep = duration / colors.length;
|
|
44
44
|
for (let i = 0; i < colors.length; i++) {
|
|
45
45
|
times.push(i * timeStep);
|
|
@@ -50,7 +50,7 @@ class AnimationClipCreator {
|
|
|
50
50
|
const track = new ColorKeyframeTrack(trackName, times, values);
|
|
51
51
|
return new AnimationClip(null, duration, [track]);
|
|
52
52
|
}
|
|
53
|
-
}
|
|
53
|
+
};
|
|
54
54
|
export {
|
|
55
55
|
AnimationClipCreator
|
|
56
56
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnimationClipCreator.js","sources":["../../src/animation/AnimationClipCreator.js"],"sourcesContent":["import {\n AnimationClip,\n BooleanKeyframeTrack,\n ColorKeyframeTrack,\n NumberKeyframeTrack,\n Vector3,\n VectorKeyframeTrack,\n} from 'three'\n\
|
|
1
|
+
{"version":3,"file":"AnimationClipCreator.js","sources":["../../src/animation/AnimationClipCreator.js"],"sourcesContent":["import {\n AnimationClip,\n BooleanKeyframeTrack,\n ColorKeyframeTrack,\n NumberKeyframeTrack,\n Vector3,\n VectorKeyframeTrack,\n} from 'three'\n\nconst AnimationClipCreator = {\n CreateRotationAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 360]\n\n const trackName = '.rotation[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n },\n\n CreateScaleAxisAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 1]\n\n const trackName = '.scale[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n },\n\n CreateShakeAnimation(duration, shakeScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n tmp\n .set(Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0)\n .multiply(shakeScale)\n .toArray(values, values.length)\n }\n\n const trackName = '.position'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n\n CreatePulsationAnimation(duration, pulseScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n const scaleFactor = Math.random() * pulseScale\n tmp.set(scaleFactor, scaleFactor, scaleFactor).toArray(values, values.length)\n }\n\n const trackName = '.scale'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n\n CreateVisibilityAnimation(duration) {\n const times = [0, duration / 2, duration],\n values = [true, false, true]\n\n const trackName = '.visible'\n\n const track = new BooleanKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n\n CreateMaterialColorAnimation(duration, colors) {\n const times = [],\n values = [],\n timeStep = duration / colors.length\n\n for (let i = 0; i < colors.length; i++) {\n times.push(i * timeStep)\n\n const color = colors[i]\n values.push(color.r, color.g, color.b)\n }\n\n const trackName = '.material.color'\n\n const track = new ColorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n}\n\nexport { AnimationClipCreator }\n"],"names":[],"mappings":";AASK,MAAC,uBAAuB;AAAA,EAC3B,wBAAwB,QAAQ,OAAO,KAAK;AAC1C,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,GAAG;AAElB,UAAM,YAAY,eAAe,OAAO;AAExC,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,yBAAyB,QAAQ,OAAO,KAAK;AAC3C,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,CAAC;AAEhB,UAAM,YAAY,YAAY,OAAO;AAErC,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,qBAAqB,UAAU,YAAY;AACzC,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAI,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,UACG,IAAI,KAAK,OAAM,IAAK,IAAM,GAAK,KAAK,OAAQ,IAAG,IAAM,GAAK,KAAK,OAAM,IAAK,IAAM,CAAG,EACnF,SAAS,UAAU,EACnB,QAAQ,QAAQ,OAAO,MAAM;AAAA,IACjC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,yBAAyB,UAAU,YAAY;AAC7C,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAI,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,YAAM,cAAc,KAAK,OAAM,IAAK;AACpC,UAAI,IAAI,aAAa,aAAa,WAAW,EAAE,QAAQ,QAAQ,OAAO,MAAM;AAAA,IAC7E;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,0BAA0B,UAAU;AAClC,UAAM,QAAQ,CAAC,GAAG,WAAW,GAAG,QAAQ,GACtC,SAAS,CAAC,MAAM,OAAO,IAAI;AAE7B,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,qBAAqB,WAAW,OAAO,MAAM;AAE/D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,6BAA6B,UAAU,QAAQ;AAC7C,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,WAAW,WAAW,OAAO;AAE/B,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAM,KAAK,IAAI,QAAQ;AAEvB,YAAM,QAAQ,OAAO,CAAC;AACtB,aAAO,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAAA,IACtC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,mBAAmB,WAAW,OAAO,MAAM;AAE7D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AACH;"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const THREE = require("three");
|
|
4
|
-
const _q = new THREE.Quaternion();
|
|
5
|
-
const _targetPos = new THREE.Vector3();
|
|
6
|
-
const _targetVec = new THREE.Vector3();
|
|
7
|
-
const _effectorPos = new THREE.Vector3();
|
|
8
|
-
const _effectorVec = new THREE.Vector3();
|
|
9
|
-
const _linkPos = new THREE.Vector3();
|
|
10
|
-
const _invLinkQ = new THREE.Quaternion();
|
|
11
|
-
const _linkScale = new THREE.Vector3();
|
|
12
|
-
const _axis = new THREE.Vector3();
|
|
13
|
-
const _vector = new THREE.Vector3();
|
|
14
|
-
const _matrix = new THREE.Matrix4();
|
|
4
|
+
const _q = /* @__PURE__ */ new THREE.Quaternion();
|
|
5
|
+
const _targetPos = /* @__PURE__ */ new THREE.Vector3();
|
|
6
|
+
const _targetVec = /* @__PURE__ */ new THREE.Vector3();
|
|
7
|
+
const _effectorPos = /* @__PURE__ */ new THREE.Vector3();
|
|
8
|
+
const _effectorVec = /* @__PURE__ */ new THREE.Vector3();
|
|
9
|
+
const _linkPos = /* @__PURE__ */ new THREE.Vector3();
|
|
10
|
+
const _invLinkQ = /* @__PURE__ */ new THREE.Quaternion();
|
|
11
|
+
const _linkScale = /* @__PURE__ */ new THREE.Vector3();
|
|
12
|
+
const _axis = /* @__PURE__ */ new THREE.Vector3();
|
|
13
|
+
const _vector = /* @__PURE__ */ new THREE.Vector3();
|
|
14
|
+
const _matrix = /* @__PURE__ */ new THREE.Matrix4();
|
|
15
15
|
class CCDIKSolver {
|
|
16
16
|
/**
|
|
17
17
|
* @param {THREE.SkinnedMesh} mesh
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CCDIKSolver.cjs","sources":["../../src/animation/CCDIKSolver.js"],"sourcesContent":["import {\n BufferAttribute,\n BufferGeometry,\n Color,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Quaternion,\n SphereGeometry,\n Vector3,\n} from 'three'\n\nconst _q = new Quaternion()\nconst _targetPos = new Vector3()\nconst _targetVec = new Vector3()\nconst _effectorPos = new Vector3()\nconst _effectorVec = new Vector3()\nconst _linkPos = new Vector3()\nconst _invLinkQ = new Quaternion()\nconst _linkScale = new Vector3()\nconst _axis = new Vector3()\nconst _vector = new Vector3()\nconst _matrix = new Matrix4()\n\n/**\n * CCD Algorithm\n * - https://sites.google.com/site/auraliusproject/ccd-algorithm\n *\n * // ik parameter example\n * //\n * // target, effector, index in links are bone index in skeleton.bones.\n * // the bones relation should be\n * // <-- parent child -->\n * // links[ n ], links[ n - 1 ], ..., links[ 0 ], effector\n * iks = [ {\n *\ttarget: 1,\n *\teffector: 2,\n *\tlinks: [ { index: 5, limitation: new Vector3( 1, 0, 0 ) }, { index: 4, enabled: false }, { index : 3 } ],\n *\titeration: 10,\n *\tminAngle: 0.0,\n *\tmaxAngle: 1.0,\n * } ];\n */\n\nclass CCDIKSolver {\n /**\n * @param {THREE.SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\n constructor(mesh, iks = []) {\n this.mesh = mesh\n this.iks = iks\n\n this._valid()\n }\n\n /**\n * Update all IK bones.\n *\n * @return {CCDIKSolver}\n */\n update() {\n const iks = this.iks\n\n for (let i = 0, il = iks.length; i < il; i++) {\n this.updateOne(iks[i])\n }\n\n return this\n }\n\n /**\n * Update one IK bone\n *\n * @param {Object} ik parameter\n * @return {CCDIKSolver}\n */\n updateOne(ik) {\n const bones = this.mesh.skeleton.bones\n\n // for reference overhead reduction in loop\n const math = Math\n\n const effector = bones[ik.effector]\n const target = bones[ik.target]\n\n // don't use getWorldPosition() here for the performance\n // because it calls updateMatrixWorld( true ) inside.\n _targetPos.setFromMatrixPosition(target.matrixWorld)\n\n const links = ik.links\n const iteration = ik.iteration !== undefined ? ik.iteration : 1\n\n for (let i = 0; i < iteration; i++) {\n let rotated = false\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n const link = bones[links[j].index]\n\n // skip this link and following links.\n // this skip is used for MMD performance optimization.\n if (links[j].enabled === false) break\n\n const limitation = links[j].limitation\n const rotationMin = links[j].rotationMin\n const rotationMax = links[j].rotationMax\n\n // don't use getWorldPosition/Quaternion() here for the performance\n // because they call updateMatrixWorld( true ) inside.\n link.matrixWorld.decompose(_linkPos, _invLinkQ, _linkScale)\n _invLinkQ.invert()\n _effectorPos.setFromMatrixPosition(effector.matrixWorld)\n\n // work in link world\n _effectorVec.subVectors(_effectorPos, _linkPos)\n _effectorVec.applyQuaternion(_invLinkQ)\n _effectorVec.normalize()\n\n _targetVec.subVectors(_targetPos, _linkPos)\n _targetVec.applyQuaternion(_invLinkQ)\n _targetVec.normalize()\n\n let angle = _targetVec.dot(_effectorVec)\n\n if (angle > 1.0) {\n angle = 1.0\n } else if (angle < -1.0) {\n angle = -1.0\n }\n\n angle = math.acos(angle)\n\n // skip if changing angle is too small to prevent vibration of bone\n if (angle < 1e-5) continue\n\n if (ik.minAngle !== undefined && angle < ik.minAngle) {\n angle = ik.minAngle\n }\n\n if (ik.maxAngle !== undefined && angle > ik.maxAngle) {\n angle = ik.maxAngle\n }\n\n _axis.crossVectors(_effectorVec, _targetVec)\n _axis.normalize()\n\n _q.setFromAxisAngle(_axis, angle)\n link.quaternion.multiply(_q)\n\n // TODO: re-consider the limitation specification\n if (limitation !== undefined) {\n let c = link.quaternion.w\n\n if (c > 1.0) c = 1.0\n\n const c2 = math.sqrt(1 - c * c)\n link.quaternion.set(limitation.x * c2, limitation.y * c2, limitation.z * c2, c)\n }\n\n if (rotationMin !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).max(rotationMin))\n }\n\n if (rotationMax !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).min(rotationMax))\n }\n\n link.updateMatrixWorld(true)\n\n rotated = true\n }\n\n if (!rotated) break\n }\n\n return this\n }\n\n /**\n * Creates Helper\n *\n * @return {CCDIKHelper}\n */\n createHelper() {\n return new CCDIKHelper(this.mesh, this.iks)\n }\n\n // private methods\n\n _valid() {\n const iks = this.iks\n const bones = this.mesh.skeleton.bones\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n const effector = bones[ik.effector]\n const links = ik.links\n let link0, link1\n\n link0 = effector\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n link1 = bones[links[j].index]\n\n if (link0.parent !== link1) {\n console.warn('THREE.CCDIKSolver: bone ' + link0.name + ' is not the child of bone ' + link1.name)\n }\n\n link0 = link1\n }\n }\n }\n}\n\nfunction getPosition(bone, matrixWorldInv) {\n return _vector.setFromMatrixPosition(bone.matrixWorld).applyMatrix4(matrixWorldInv)\n}\n\nfunction setPositionOfBoneToAttributeArray(array, index, bone, matrixWorldInv) {\n const v = getPosition(bone, matrixWorldInv)\n\n array[index * 3 + 0] = v.x\n array[index * 3 + 1] = v.y\n array[index * 3 + 2] = v.z\n}\n\n/**\n * Visualize IK bones\n *\n * @param {SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\nclass CCDIKHelper extends Object3D {\n constructor(mesh, iks = [], sphereSize = 0.25) {\n super()\n\n this.root = mesh\n this.iks = iks\n\n this.matrix.copy(mesh.matrixWorld)\n this.matrixAutoUpdate = false\n\n this.sphereGeometry = new SphereGeometry(sphereSize, 16, 8)\n\n this.targetSphereMaterial = new MeshBasicMaterial({\n color: new Color(0xff8888),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.effectorSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x88ff88),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.linkSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x8888ff),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.lineMaterial = new LineBasicMaterial({\n color: new Color(0xff0000),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this._init()\n }\n\n /**\n * Updates IK bones visualization.\n */\n updateMatrixWorld(force) {\n const mesh = this.root\n\n if (this.visible) {\n let offset = 0\n\n const iks = this.iks\n const bones = mesh.skeleton.bones\n\n _matrix.copy(mesh.matrixWorld).invert()\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n const targetBone = bones[ik.target]\n const effectorBone = bones[ik.effector]\n\n const targetMesh = this.children[offset++]\n const effectorMesh = this.children[offset++]\n\n targetMesh.position.copy(getPosition(targetBone, _matrix))\n effectorMesh.position.copy(getPosition(effectorBone, _matrix))\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n\n const linkMesh = this.children[offset++]\n\n linkMesh.position.copy(getPosition(linkBone, _matrix))\n }\n\n const line = this.children[offset++]\n const array = line.geometry.attributes.position.array\n\n setPositionOfBoneToAttributeArray(array, 0, targetBone, _matrix)\n setPositionOfBoneToAttributeArray(array, 1, effectorBone, _matrix)\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n setPositionOfBoneToAttributeArray(array, j + 2, linkBone, _matrix)\n }\n\n line.geometry.attributes.position.needsUpdate = true\n }\n }\n\n this.matrix.copy(mesh.matrixWorld)\n\n super.updateMatrixWorld(force)\n }\n\n /**\n * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.\n */\n dispose() {\n this.sphereGeometry.dispose()\n\n this.targetSphereMaterial.dispose()\n this.effectorSphereMaterial.dispose()\n this.linkSphereMaterial.dispose()\n this.lineMaterial.dispose()\n\n const children = this.children\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i]\n\n if (child.isLine) child.geometry.dispose()\n }\n }\n\n // private method\n\n _init() {\n const scope = this\n const iks = this.iks\n\n function createLineGeometry(ik) {\n const geometry = new BufferGeometry()\n const vertices = new Float32Array((2 + ik.links.length) * 3)\n geometry.setAttribute('position', new BufferAttribute(vertices, 3))\n\n return geometry\n }\n\n function createTargetMesh() {\n return new Mesh(scope.sphereGeometry, scope.targetSphereMaterial)\n }\n\n function createEffectorMesh() {\n return new Mesh(scope.sphereGeometry, scope.effectorSphereMaterial)\n }\n\n function createLinkMesh() {\n return new Mesh(scope.sphereGeometry, scope.linkSphereMaterial)\n }\n\n function createLine(ik) {\n return new Line(createLineGeometry(ik), scope.lineMaterial)\n }\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n this.add(createTargetMesh())\n this.add(createEffectorMesh())\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n this.add(createLinkMesh())\n }\n\n this.add(createLine(ik))\n }\n }\n}\n\nexport { CCDIKSolver, CCDIKHelper }\n"],"names":["Quaternion","Vector3","Matrix4","Object3D","SphereGeometry","MeshBasicMaterial","Color","LineBasicMaterial","BufferGeometry","BufferAttribute","Mesh","Line"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CCDIKSolver.cjs","sources":["../../src/animation/CCDIKSolver.js"],"sourcesContent":["import {\n BufferAttribute,\n BufferGeometry,\n Color,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Quaternion,\n SphereGeometry,\n Vector3,\n} from 'three'\n\nconst _q = /* @__PURE__ */ new Quaternion()\nconst _targetPos = /* @__PURE__ */ new Vector3()\nconst _targetVec = /* @__PURE__ */ new Vector3()\nconst _effectorPos = /* @__PURE__ */ new Vector3()\nconst _effectorVec = /* @__PURE__ */ new Vector3()\nconst _linkPos = /* @__PURE__ */ new Vector3()\nconst _invLinkQ = /* @__PURE__ */ new Quaternion()\nconst _linkScale = /* @__PURE__ */ new Vector3()\nconst _axis = /* @__PURE__ */ new Vector3()\nconst _vector = /* @__PURE__ */ new Vector3()\nconst _matrix = /* @__PURE__ */ new Matrix4()\n\n/**\n * CCD Algorithm\n * - https://sites.google.com/site/auraliusproject/ccd-algorithm\n *\n * // ik parameter example\n * //\n * // target, effector, index in links are bone index in skeleton.bones.\n * // the bones relation should be\n * // <-- parent child -->\n * // links[ n ], links[ n - 1 ], ..., links[ 0 ], effector\n * iks = [ {\n *\ttarget: 1,\n *\teffector: 2,\n *\tlinks: [ { index: 5, limitation: new Vector3( 1, 0, 0 ) }, { index: 4, enabled: false }, { index : 3 } ],\n *\titeration: 10,\n *\tminAngle: 0.0,\n *\tmaxAngle: 1.0,\n * } ];\n */\n\nclass CCDIKSolver {\n /**\n * @param {THREE.SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\n constructor(mesh, iks = []) {\n this.mesh = mesh\n this.iks = iks\n\n this._valid()\n }\n\n /**\n * Update all IK bones.\n *\n * @return {CCDIKSolver}\n */\n update() {\n const iks = this.iks\n\n for (let i = 0, il = iks.length; i < il; i++) {\n this.updateOne(iks[i])\n }\n\n return this\n }\n\n /**\n * Update one IK bone\n *\n * @param {Object} ik parameter\n * @return {CCDIKSolver}\n */\n updateOne(ik) {\n const bones = this.mesh.skeleton.bones\n\n // for reference overhead reduction in loop\n const math = Math\n\n const effector = bones[ik.effector]\n const target = bones[ik.target]\n\n // don't use getWorldPosition() here for the performance\n // because it calls updateMatrixWorld( true ) inside.\n _targetPos.setFromMatrixPosition(target.matrixWorld)\n\n const links = ik.links\n const iteration = ik.iteration !== undefined ? ik.iteration : 1\n\n for (let i = 0; i < iteration; i++) {\n let rotated = false\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n const link = bones[links[j].index]\n\n // skip this link and following links.\n // this skip is used for MMD performance optimization.\n if (links[j].enabled === false) break\n\n const limitation = links[j].limitation\n const rotationMin = links[j].rotationMin\n const rotationMax = links[j].rotationMax\n\n // don't use getWorldPosition/Quaternion() here for the performance\n // because they call updateMatrixWorld( true ) inside.\n link.matrixWorld.decompose(_linkPos, _invLinkQ, _linkScale)\n _invLinkQ.invert()\n _effectorPos.setFromMatrixPosition(effector.matrixWorld)\n\n // work in link world\n _effectorVec.subVectors(_effectorPos, _linkPos)\n _effectorVec.applyQuaternion(_invLinkQ)\n _effectorVec.normalize()\n\n _targetVec.subVectors(_targetPos, _linkPos)\n _targetVec.applyQuaternion(_invLinkQ)\n _targetVec.normalize()\n\n let angle = _targetVec.dot(_effectorVec)\n\n if (angle > 1.0) {\n angle = 1.0\n } else if (angle < -1.0) {\n angle = -1.0\n }\n\n angle = math.acos(angle)\n\n // skip if changing angle is too small to prevent vibration of bone\n if (angle < 1e-5) continue\n\n if (ik.minAngle !== undefined && angle < ik.minAngle) {\n angle = ik.minAngle\n }\n\n if (ik.maxAngle !== undefined && angle > ik.maxAngle) {\n angle = ik.maxAngle\n }\n\n _axis.crossVectors(_effectorVec, _targetVec)\n _axis.normalize()\n\n _q.setFromAxisAngle(_axis, angle)\n link.quaternion.multiply(_q)\n\n // TODO: re-consider the limitation specification\n if (limitation !== undefined) {\n let c = link.quaternion.w\n\n if (c > 1.0) c = 1.0\n\n const c2 = math.sqrt(1 - c * c)\n link.quaternion.set(limitation.x * c2, limitation.y * c2, limitation.z * c2, c)\n }\n\n if (rotationMin !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).max(rotationMin))\n }\n\n if (rotationMax !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).min(rotationMax))\n }\n\n link.updateMatrixWorld(true)\n\n rotated = true\n }\n\n if (!rotated) break\n }\n\n return this\n }\n\n /**\n * Creates Helper\n *\n * @return {CCDIKHelper}\n */\n createHelper() {\n return new CCDIKHelper(this.mesh, this.iks)\n }\n\n // private methods\n\n _valid() {\n const iks = this.iks\n const bones = this.mesh.skeleton.bones\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n const effector = bones[ik.effector]\n const links = ik.links\n let link0, link1\n\n link0 = effector\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n link1 = bones[links[j].index]\n\n if (link0.parent !== link1) {\n console.warn('THREE.CCDIKSolver: bone ' + link0.name + ' is not the child of bone ' + link1.name)\n }\n\n link0 = link1\n }\n }\n }\n}\n\nfunction getPosition(bone, matrixWorldInv) {\n return _vector.setFromMatrixPosition(bone.matrixWorld).applyMatrix4(matrixWorldInv)\n}\n\nfunction setPositionOfBoneToAttributeArray(array, index, bone, matrixWorldInv) {\n const v = getPosition(bone, matrixWorldInv)\n\n array[index * 3 + 0] = v.x\n array[index * 3 + 1] = v.y\n array[index * 3 + 2] = v.z\n}\n\n/**\n * Visualize IK bones\n *\n * @param {SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\nclass CCDIKHelper extends Object3D {\n constructor(mesh, iks = [], sphereSize = 0.25) {\n super()\n\n this.root = mesh\n this.iks = iks\n\n this.matrix.copy(mesh.matrixWorld)\n this.matrixAutoUpdate = false\n\n this.sphereGeometry = new SphereGeometry(sphereSize, 16, 8)\n\n this.targetSphereMaterial = new MeshBasicMaterial({\n color: new Color(0xff8888),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.effectorSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x88ff88),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.linkSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x8888ff),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.lineMaterial = new LineBasicMaterial({\n color: new Color(0xff0000),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this._init()\n }\n\n /**\n * Updates IK bones visualization.\n */\n updateMatrixWorld(force) {\n const mesh = this.root\n\n if (this.visible) {\n let offset = 0\n\n const iks = this.iks\n const bones = mesh.skeleton.bones\n\n _matrix.copy(mesh.matrixWorld).invert()\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n const targetBone = bones[ik.target]\n const effectorBone = bones[ik.effector]\n\n const targetMesh = this.children[offset++]\n const effectorMesh = this.children[offset++]\n\n targetMesh.position.copy(getPosition(targetBone, _matrix))\n effectorMesh.position.copy(getPosition(effectorBone, _matrix))\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n\n const linkMesh = this.children[offset++]\n\n linkMesh.position.copy(getPosition(linkBone, _matrix))\n }\n\n const line = this.children[offset++]\n const array = line.geometry.attributes.position.array\n\n setPositionOfBoneToAttributeArray(array, 0, targetBone, _matrix)\n setPositionOfBoneToAttributeArray(array, 1, effectorBone, _matrix)\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n setPositionOfBoneToAttributeArray(array, j + 2, linkBone, _matrix)\n }\n\n line.geometry.attributes.position.needsUpdate = true\n }\n }\n\n this.matrix.copy(mesh.matrixWorld)\n\n super.updateMatrixWorld(force)\n }\n\n /**\n * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.\n */\n dispose() {\n this.sphereGeometry.dispose()\n\n this.targetSphereMaterial.dispose()\n this.effectorSphereMaterial.dispose()\n this.linkSphereMaterial.dispose()\n this.lineMaterial.dispose()\n\n const children = this.children\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i]\n\n if (child.isLine) child.geometry.dispose()\n }\n }\n\n // private method\n\n _init() {\n const scope = this\n const iks = this.iks\n\n function createLineGeometry(ik) {\n const geometry = new BufferGeometry()\n const vertices = new Float32Array((2 + ik.links.length) * 3)\n geometry.setAttribute('position', new BufferAttribute(vertices, 3))\n\n return geometry\n }\n\n function createTargetMesh() {\n return new Mesh(scope.sphereGeometry, scope.targetSphereMaterial)\n }\n\n function createEffectorMesh() {\n return new Mesh(scope.sphereGeometry, scope.effectorSphereMaterial)\n }\n\n function createLinkMesh() {\n return new Mesh(scope.sphereGeometry, scope.linkSphereMaterial)\n }\n\n function createLine(ik) {\n return new Line(createLineGeometry(ik), scope.lineMaterial)\n }\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n this.add(createTargetMesh())\n this.add(createEffectorMesh())\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n this.add(createLinkMesh())\n }\n\n this.add(createLine(ik))\n }\n }\n}\n\nexport { CCDIKSolver, CCDIKHelper }\n"],"names":["Quaternion","Vector3","Matrix4","Object3D","SphereGeometry","MeshBasicMaterial","Color","LineBasicMaterial","BufferGeometry","BufferAttribute","Mesh","Line"],"mappings":"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"}
|
package/animation/CCDIKSolver.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
const _q = new Quaternion();
|
|
3
|
-
const _targetPos = new Vector3();
|
|
4
|
-
const _targetVec = new Vector3();
|
|
5
|
-
const _effectorPos = new Vector3();
|
|
6
|
-
const _effectorVec = new Vector3();
|
|
7
|
-
const _linkPos = new Vector3();
|
|
8
|
-
const _invLinkQ = new Quaternion();
|
|
9
|
-
const _linkScale = new Vector3();
|
|
10
|
-
const _axis = new Vector3();
|
|
11
|
-
const _vector = new Vector3();
|
|
12
|
-
const _matrix = new Matrix4();
|
|
1
|
+
import { Object3D, SphereGeometry, MeshBasicMaterial, Color, LineBasicMaterial, Quaternion, Vector3, Matrix4, Mesh, Line, BufferGeometry, BufferAttribute } from "three";
|
|
2
|
+
const _q = /* @__PURE__ */ new Quaternion();
|
|
3
|
+
const _targetPos = /* @__PURE__ */ new Vector3();
|
|
4
|
+
const _targetVec = /* @__PURE__ */ new Vector3();
|
|
5
|
+
const _effectorPos = /* @__PURE__ */ new Vector3();
|
|
6
|
+
const _effectorVec = /* @__PURE__ */ new Vector3();
|
|
7
|
+
const _linkPos = /* @__PURE__ */ new Vector3();
|
|
8
|
+
const _invLinkQ = /* @__PURE__ */ new Quaternion();
|
|
9
|
+
const _linkScale = /* @__PURE__ */ new Vector3();
|
|
10
|
+
const _axis = /* @__PURE__ */ new Vector3();
|
|
11
|
+
const _vector = /* @__PURE__ */ new Vector3();
|
|
12
|
+
const _matrix = /* @__PURE__ */ new Matrix4();
|
|
13
13
|
class CCDIKSolver {
|
|
14
14
|
/**
|
|
15
15
|
* @param {THREE.SkinnedMesh} mesh
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CCDIKSolver.js","sources":["../../src/animation/CCDIKSolver.js"],"sourcesContent":["import {\n BufferAttribute,\n BufferGeometry,\n Color,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Quaternion,\n SphereGeometry,\n Vector3,\n} from 'three'\n\nconst _q = new Quaternion()\nconst _targetPos = new Vector3()\nconst _targetVec = new Vector3()\nconst _effectorPos = new Vector3()\nconst _effectorVec = new Vector3()\nconst _linkPos = new Vector3()\nconst _invLinkQ = new Quaternion()\nconst _linkScale = new Vector3()\nconst _axis = new Vector3()\nconst _vector = new Vector3()\nconst _matrix = new Matrix4()\n\n/**\n * CCD Algorithm\n * - https://sites.google.com/site/auraliusproject/ccd-algorithm\n *\n * // ik parameter example\n * //\n * // target, effector, index in links are bone index in skeleton.bones.\n * // the bones relation should be\n * // <-- parent child -->\n * // links[ n ], links[ n - 1 ], ..., links[ 0 ], effector\n * iks = [ {\n *\ttarget: 1,\n *\teffector: 2,\n *\tlinks: [ { index: 5, limitation: new Vector3( 1, 0, 0 ) }, { index: 4, enabled: false }, { index : 3 } ],\n *\titeration: 10,\n *\tminAngle: 0.0,\n *\tmaxAngle: 1.0,\n * } ];\n */\n\nclass CCDIKSolver {\n /**\n * @param {THREE.SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\n constructor(mesh, iks = []) {\n this.mesh = mesh\n this.iks = iks\n\n this._valid()\n }\n\n /**\n * Update all IK bones.\n *\n * @return {CCDIKSolver}\n */\n update() {\n const iks = this.iks\n\n for (let i = 0, il = iks.length; i < il; i++) {\n this.updateOne(iks[i])\n }\n\n return this\n }\n\n /**\n * Update one IK bone\n *\n * @param {Object} ik parameter\n * @return {CCDIKSolver}\n */\n updateOne(ik) {\n const bones = this.mesh.skeleton.bones\n\n // for reference overhead reduction in loop\n const math = Math\n\n const effector = bones[ik.effector]\n const target = bones[ik.target]\n\n // don't use getWorldPosition() here for the performance\n // because it calls updateMatrixWorld( true ) inside.\n _targetPos.setFromMatrixPosition(target.matrixWorld)\n\n const links = ik.links\n const iteration = ik.iteration !== undefined ? ik.iteration : 1\n\n for (let i = 0; i < iteration; i++) {\n let rotated = false\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n const link = bones[links[j].index]\n\n // skip this link and following links.\n // this skip is used for MMD performance optimization.\n if (links[j].enabled === false) break\n\n const limitation = links[j].limitation\n const rotationMin = links[j].rotationMin\n const rotationMax = links[j].rotationMax\n\n // don't use getWorldPosition/Quaternion() here for the performance\n // because they call updateMatrixWorld( true ) inside.\n link.matrixWorld.decompose(_linkPos, _invLinkQ, _linkScale)\n _invLinkQ.invert()\n _effectorPos.setFromMatrixPosition(effector.matrixWorld)\n\n // work in link world\n _effectorVec.subVectors(_effectorPos, _linkPos)\n _effectorVec.applyQuaternion(_invLinkQ)\n _effectorVec.normalize()\n\n _targetVec.subVectors(_targetPos, _linkPos)\n _targetVec.applyQuaternion(_invLinkQ)\n _targetVec.normalize()\n\n let angle = _targetVec.dot(_effectorVec)\n\n if (angle > 1.0) {\n angle = 1.0\n } else if (angle < -1.0) {\n angle = -1.0\n }\n\n angle = math.acos(angle)\n\n // skip if changing angle is too small to prevent vibration of bone\n if (angle < 1e-5) continue\n\n if (ik.minAngle !== undefined && angle < ik.minAngle) {\n angle = ik.minAngle\n }\n\n if (ik.maxAngle !== undefined && angle > ik.maxAngle) {\n angle = ik.maxAngle\n }\n\n _axis.crossVectors(_effectorVec, _targetVec)\n _axis.normalize()\n\n _q.setFromAxisAngle(_axis, angle)\n link.quaternion.multiply(_q)\n\n // TODO: re-consider the limitation specification\n if (limitation !== undefined) {\n let c = link.quaternion.w\n\n if (c > 1.0) c = 1.0\n\n const c2 = math.sqrt(1 - c * c)\n link.quaternion.set(limitation.x * c2, limitation.y * c2, limitation.z * c2, c)\n }\n\n if (rotationMin !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).max(rotationMin))\n }\n\n if (rotationMax !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).min(rotationMax))\n }\n\n link.updateMatrixWorld(true)\n\n rotated = true\n }\n\n if (!rotated) break\n }\n\n return this\n }\n\n /**\n * Creates Helper\n *\n * @return {CCDIKHelper}\n */\n createHelper() {\n return new CCDIKHelper(this.mesh, this.iks)\n }\n\n // private methods\n\n _valid() {\n const iks = this.iks\n const bones = this.mesh.skeleton.bones\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n const effector = bones[ik.effector]\n const links = ik.links\n let link0, link1\n\n link0 = effector\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n link1 = bones[links[j].index]\n\n if (link0.parent !== link1) {\n console.warn('THREE.CCDIKSolver: bone ' + link0.name + ' is not the child of bone ' + link1.name)\n }\n\n link0 = link1\n }\n }\n }\n}\n\nfunction getPosition(bone, matrixWorldInv) {\n return _vector.setFromMatrixPosition(bone.matrixWorld).applyMatrix4(matrixWorldInv)\n}\n\nfunction setPositionOfBoneToAttributeArray(array, index, bone, matrixWorldInv) {\n const v = getPosition(bone, matrixWorldInv)\n\n array[index * 3 + 0] = v.x\n array[index * 3 + 1] = v.y\n array[index * 3 + 2] = v.z\n}\n\n/**\n * Visualize IK bones\n *\n * @param {SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\nclass CCDIKHelper extends Object3D {\n constructor(mesh, iks = [], sphereSize = 0.25) {\n super()\n\n this.root = mesh\n this.iks = iks\n\n this.matrix.copy(mesh.matrixWorld)\n this.matrixAutoUpdate = false\n\n this.sphereGeometry = new SphereGeometry(sphereSize, 16, 8)\n\n this.targetSphereMaterial = new MeshBasicMaterial({\n color: new Color(0xff8888),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.effectorSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x88ff88),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.linkSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x8888ff),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.lineMaterial = new LineBasicMaterial({\n color: new Color(0xff0000),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this._init()\n }\n\n /**\n * Updates IK bones visualization.\n */\n updateMatrixWorld(force) {\n const mesh = this.root\n\n if (this.visible) {\n let offset = 0\n\n const iks = this.iks\n const bones = mesh.skeleton.bones\n\n _matrix.copy(mesh.matrixWorld).invert()\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n const targetBone = bones[ik.target]\n const effectorBone = bones[ik.effector]\n\n const targetMesh = this.children[offset++]\n const effectorMesh = this.children[offset++]\n\n targetMesh.position.copy(getPosition(targetBone, _matrix))\n effectorMesh.position.copy(getPosition(effectorBone, _matrix))\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n\n const linkMesh = this.children[offset++]\n\n linkMesh.position.copy(getPosition(linkBone, _matrix))\n }\n\n const line = this.children[offset++]\n const array = line.geometry.attributes.position.array\n\n setPositionOfBoneToAttributeArray(array, 0, targetBone, _matrix)\n setPositionOfBoneToAttributeArray(array, 1, effectorBone, _matrix)\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n setPositionOfBoneToAttributeArray(array, j + 2, linkBone, _matrix)\n }\n\n line.geometry.attributes.position.needsUpdate = true\n }\n }\n\n this.matrix.copy(mesh.matrixWorld)\n\n super.updateMatrixWorld(force)\n }\n\n /**\n * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.\n */\n dispose() {\n this.sphereGeometry.dispose()\n\n this.targetSphereMaterial.dispose()\n this.effectorSphereMaterial.dispose()\n this.linkSphereMaterial.dispose()\n this.lineMaterial.dispose()\n\n const children = this.children\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i]\n\n if (child.isLine) child.geometry.dispose()\n }\n }\n\n // private method\n\n _init() {\n const scope = this\n const iks = this.iks\n\n function createLineGeometry(ik) {\n const geometry = new BufferGeometry()\n const vertices = new Float32Array((2 + ik.links.length) * 3)\n geometry.setAttribute('position', new BufferAttribute(vertices, 3))\n\n return geometry\n }\n\n function createTargetMesh() {\n return new Mesh(scope.sphereGeometry, scope.targetSphereMaterial)\n }\n\n function createEffectorMesh() {\n return new Mesh(scope.sphereGeometry, scope.effectorSphereMaterial)\n }\n\n function createLinkMesh() {\n return new Mesh(scope.sphereGeometry, scope.linkSphereMaterial)\n }\n\n function createLine(ik) {\n return new Line(createLineGeometry(ik), scope.lineMaterial)\n }\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n this.add(createTargetMesh())\n this.add(createEffectorMesh())\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n this.add(createLinkMesh())\n }\n\n this.add(createLine(ik))\n }\n }\n}\n\nexport { CCDIKSolver, CCDIKHelper }\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CCDIKSolver.js","sources":["../../src/animation/CCDIKSolver.js"],"sourcesContent":["import {\n BufferAttribute,\n BufferGeometry,\n Color,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Quaternion,\n SphereGeometry,\n Vector3,\n} from 'three'\n\nconst _q = /* @__PURE__ */ new Quaternion()\nconst _targetPos = /* @__PURE__ */ new Vector3()\nconst _targetVec = /* @__PURE__ */ new Vector3()\nconst _effectorPos = /* @__PURE__ */ new Vector3()\nconst _effectorVec = /* @__PURE__ */ new Vector3()\nconst _linkPos = /* @__PURE__ */ new Vector3()\nconst _invLinkQ = /* @__PURE__ */ new Quaternion()\nconst _linkScale = /* @__PURE__ */ new Vector3()\nconst _axis = /* @__PURE__ */ new Vector3()\nconst _vector = /* @__PURE__ */ new Vector3()\nconst _matrix = /* @__PURE__ */ new Matrix4()\n\n/**\n * CCD Algorithm\n * - https://sites.google.com/site/auraliusproject/ccd-algorithm\n *\n * // ik parameter example\n * //\n * // target, effector, index in links are bone index in skeleton.bones.\n * // the bones relation should be\n * // <-- parent child -->\n * // links[ n ], links[ n - 1 ], ..., links[ 0 ], effector\n * iks = [ {\n *\ttarget: 1,\n *\teffector: 2,\n *\tlinks: [ { index: 5, limitation: new Vector3( 1, 0, 0 ) }, { index: 4, enabled: false }, { index : 3 } ],\n *\titeration: 10,\n *\tminAngle: 0.0,\n *\tmaxAngle: 1.0,\n * } ];\n */\n\nclass CCDIKSolver {\n /**\n * @param {THREE.SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\n constructor(mesh, iks = []) {\n this.mesh = mesh\n this.iks = iks\n\n this._valid()\n }\n\n /**\n * Update all IK bones.\n *\n * @return {CCDIKSolver}\n */\n update() {\n const iks = this.iks\n\n for (let i = 0, il = iks.length; i < il; i++) {\n this.updateOne(iks[i])\n }\n\n return this\n }\n\n /**\n * Update one IK bone\n *\n * @param {Object} ik parameter\n * @return {CCDIKSolver}\n */\n updateOne(ik) {\n const bones = this.mesh.skeleton.bones\n\n // for reference overhead reduction in loop\n const math = Math\n\n const effector = bones[ik.effector]\n const target = bones[ik.target]\n\n // don't use getWorldPosition() here for the performance\n // because it calls updateMatrixWorld( true ) inside.\n _targetPos.setFromMatrixPosition(target.matrixWorld)\n\n const links = ik.links\n const iteration = ik.iteration !== undefined ? ik.iteration : 1\n\n for (let i = 0; i < iteration; i++) {\n let rotated = false\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n const link = bones[links[j].index]\n\n // skip this link and following links.\n // this skip is used for MMD performance optimization.\n if (links[j].enabled === false) break\n\n const limitation = links[j].limitation\n const rotationMin = links[j].rotationMin\n const rotationMax = links[j].rotationMax\n\n // don't use getWorldPosition/Quaternion() here for the performance\n // because they call updateMatrixWorld( true ) inside.\n link.matrixWorld.decompose(_linkPos, _invLinkQ, _linkScale)\n _invLinkQ.invert()\n _effectorPos.setFromMatrixPosition(effector.matrixWorld)\n\n // work in link world\n _effectorVec.subVectors(_effectorPos, _linkPos)\n _effectorVec.applyQuaternion(_invLinkQ)\n _effectorVec.normalize()\n\n _targetVec.subVectors(_targetPos, _linkPos)\n _targetVec.applyQuaternion(_invLinkQ)\n _targetVec.normalize()\n\n let angle = _targetVec.dot(_effectorVec)\n\n if (angle > 1.0) {\n angle = 1.0\n } else if (angle < -1.0) {\n angle = -1.0\n }\n\n angle = math.acos(angle)\n\n // skip if changing angle is too small to prevent vibration of bone\n if (angle < 1e-5) continue\n\n if (ik.minAngle !== undefined && angle < ik.minAngle) {\n angle = ik.minAngle\n }\n\n if (ik.maxAngle !== undefined && angle > ik.maxAngle) {\n angle = ik.maxAngle\n }\n\n _axis.crossVectors(_effectorVec, _targetVec)\n _axis.normalize()\n\n _q.setFromAxisAngle(_axis, angle)\n link.quaternion.multiply(_q)\n\n // TODO: re-consider the limitation specification\n if (limitation !== undefined) {\n let c = link.quaternion.w\n\n if (c > 1.0) c = 1.0\n\n const c2 = math.sqrt(1 - c * c)\n link.quaternion.set(limitation.x * c2, limitation.y * c2, limitation.z * c2, c)\n }\n\n if (rotationMin !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).max(rotationMin))\n }\n\n if (rotationMax !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).min(rotationMax))\n }\n\n link.updateMatrixWorld(true)\n\n rotated = true\n }\n\n if (!rotated) break\n }\n\n return this\n }\n\n /**\n * Creates Helper\n *\n * @return {CCDIKHelper}\n */\n createHelper() {\n return new CCDIKHelper(this.mesh, this.iks)\n }\n\n // private methods\n\n _valid() {\n const iks = this.iks\n const bones = this.mesh.skeleton.bones\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n const effector = bones[ik.effector]\n const links = ik.links\n let link0, link1\n\n link0 = effector\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n link1 = bones[links[j].index]\n\n if (link0.parent !== link1) {\n console.warn('THREE.CCDIKSolver: bone ' + link0.name + ' is not the child of bone ' + link1.name)\n }\n\n link0 = link1\n }\n }\n }\n}\n\nfunction getPosition(bone, matrixWorldInv) {\n return _vector.setFromMatrixPosition(bone.matrixWorld).applyMatrix4(matrixWorldInv)\n}\n\nfunction setPositionOfBoneToAttributeArray(array, index, bone, matrixWorldInv) {\n const v = getPosition(bone, matrixWorldInv)\n\n array[index * 3 + 0] = v.x\n array[index * 3 + 1] = v.y\n array[index * 3 + 2] = v.z\n}\n\n/**\n * Visualize IK bones\n *\n * @param {SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\nclass CCDIKHelper extends Object3D {\n constructor(mesh, iks = [], sphereSize = 0.25) {\n super()\n\n this.root = mesh\n this.iks = iks\n\n this.matrix.copy(mesh.matrixWorld)\n this.matrixAutoUpdate = false\n\n this.sphereGeometry = new SphereGeometry(sphereSize, 16, 8)\n\n this.targetSphereMaterial = new MeshBasicMaterial({\n color: new Color(0xff8888),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.effectorSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x88ff88),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.linkSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x8888ff),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.lineMaterial = new LineBasicMaterial({\n color: new Color(0xff0000),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this._init()\n }\n\n /**\n * Updates IK bones visualization.\n */\n updateMatrixWorld(force) {\n const mesh = this.root\n\n if (this.visible) {\n let offset = 0\n\n const iks = this.iks\n const bones = mesh.skeleton.bones\n\n _matrix.copy(mesh.matrixWorld).invert()\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n const targetBone = bones[ik.target]\n const effectorBone = bones[ik.effector]\n\n const targetMesh = this.children[offset++]\n const effectorMesh = this.children[offset++]\n\n targetMesh.position.copy(getPosition(targetBone, _matrix))\n effectorMesh.position.copy(getPosition(effectorBone, _matrix))\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n\n const linkMesh = this.children[offset++]\n\n linkMesh.position.copy(getPosition(linkBone, _matrix))\n }\n\n const line = this.children[offset++]\n const array = line.geometry.attributes.position.array\n\n setPositionOfBoneToAttributeArray(array, 0, targetBone, _matrix)\n setPositionOfBoneToAttributeArray(array, 1, effectorBone, _matrix)\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n setPositionOfBoneToAttributeArray(array, j + 2, linkBone, _matrix)\n }\n\n line.geometry.attributes.position.needsUpdate = true\n }\n }\n\n this.matrix.copy(mesh.matrixWorld)\n\n super.updateMatrixWorld(force)\n }\n\n /**\n * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.\n */\n dispose() {\n this.sphereGeometry.dispose()\n\n this.targetSphereMaterial.dispose()\n this.effectorSphereMaterial.dispose()\n this.linkSphereMaterial.dispose()\n this.lineMaterial.dispose()\n\n const children = this.children\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i]\n\n if (child.isLine) child.geometry.dispose()\n }\n }\n\n // private method\n\n _init() {\n const scope = this\n const iks = this.iks\n\n function createLineGeometry(ik) {\n const geometry = new BufferGeometry()\n const vertices = new Float32Array((2 + ik.links.length) * 3)\n geometry.setAttribute('position', new BufferAttribute(vertices, 3))\n\n return geometry\n }\n\n function createTargetMesh() {\n return new Mesh(scope.sphereGeometry, scope.targetSphereMaterial)\n }\n\n function createEffectorMesh() {\n return new Mesh(scope.sphereGeometry, scope.effectorSphereMaterial)\n }\n\n function createLinkMesh() {\n return new Mesh(scope.sphereGeometry, scope.linkSphereMaterial)\n }\n\n function createLine(ik) {\n return new Line(createLineGeometry(ik), scope.lineMaterial)\n }\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n this.add(createTargetMesh())\n this.add(createEffectorMesh())\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n this.add(createLinkMesh())\n }\n\n this.add(createLine(ik))\n }\n }\n}\n\nexport { CCDIKSolver, CCDIKHelper }\n"],"names":[],"mappings":"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"}
|
|
@@ -638,7 +638,7 @@ class AudioManager {
|
|
|
638
638
|
return this.audio.isPlaying && this.currentTime >= this.duration;
|
|
639
639
|
}
|
|
640
640
|
}
|
|
641
|
-
const _q = new THREE.Quaternion();
|
|
641
|
+
const _q = /* @__PURE__ */ new THREE.Quaternion();
|
|
642
642
|
class GrantSolver {
|
|
643
643
|
constructor(mesh, grants = []) {
|
|
644
644
|
this.mesh = mesh;
|