super-three 0.144.0 → 0.147.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/three.cjs +737 -388
- package/build/three.js +737 -388
- package/build/three.min.js +1 -1
- package/build/three.module.js +911 -409
- package/examples/js/animation/AnimationClipCreator.js +0 -8
- package/examples/js/animation/CCDIKSolver.js +50 -67
- package/examples/js/animation/MMDAnimationHelper.js +66 -137
- package/examples/js/animation/MMDPhysics.js +70 -134
- package/examples/js/cameras/CinematicCamera.js +33 -22
- package/examples/js/controls/ArcballControls.js +138 -405
- package/examples/js/controls/DragControls.js +8 -33
- package/examples/js/controls/FirstPersonControls.js +32 -54
- package/examples/js/controls/FlyControls.js +29 -55
- package/examples/js/controls/OrbitControls.js +125 -99
- package/examples/js/controls/PointerLockControls.js +5 -14
- package/examples/js/controls/TrackballControls.js +33 -86
- package/examples/js/controls/TransformControls.js +85 -170
- package/examples/js/csm/CSM.js +4 -39
- package/examples/js/csm/CSMFrustum.js +3 -9
- package/examples/js/csm/CSMHelper.js +24 -4
- package/examples/js/csm/CSMShader.js +2 -6
- package/examples/js/curves/CurveExtras.js +27 -27
- package/examples/js/curves/NURBSCurve.js +4 -16
- package/examples/js/curves/NURBSSurface.js +3 -9
- package/examples/js/curves/NURBSUtils.js +8 -45
- package/examples/js/effects/AnaglyphEffect.js +4 -18
- package/examples/js/effects/AsciiEffect.js +32 -31
- package/examples/js/effects/OutlineEffect.js +26 -30
- package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
- package/examples/js/effects/PeppersGhostEffect.js +12 -39
- package/examples/js/effects/StereoEffect.js +0 -4
- package/examples/js/environments/RoomEnvironment.js +12 -10
- package/examples/js/exporters/ColladaExporter.js +48 -65
- package/examples/js/exporters/DRACOExporter.js +22 -22
- package/examples/js/exporters/EXRExporter.js +15 -18
- package/examples/js/exporters/GLTFExporter.js +141 -317
- package/examples/js/exporters/MMDExporter.js +5 -12
- package/examples/js/exporters/OBJExporter.js +42 -33
- package/examples/js/exporters/PLYExporter.js +38 -33
- package/examples/js/exporters/STLExporter.js +5 -7
- package/examples/js/exporters/USDZExporter.js +113 -27
- package/examples/js/geometries/BoxLineGeometry.js +0 -1
- package/examples/js/geometries/ConvexGeometry.js +11 -6
- package/examples/js/geometries/DecalGeometry.js +53 -20
- package/examples/js/geometries/LightningStrike.js +54 -67
- package/examples/js/geometries/ParametricGeometries.js +8 -7
- package/examples/js/geometries/ParametricGeometry.js +25 -12
- package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
- package/examples/js/geometries/TeapotGeometry.js +54 -50
- package/examples/js/geometries/TextGeometry.js +6 -4
- package/examples/js/helpers/LightProbeHelper.js +1 -2
- package/examples/js/helpers/OctreeHelper.js +22 -20
- package/examples/js/helpers/PositionalAudioHelper.js +8 -6
- package/examples/js/helpers/RectAreaLightHelper.js +6 -7
- package/examples/js/helpers/VertexNormalsHelper.js +15 -13
- package/examples/js/helpers/VertexTangentsHelper.js +15 -9
- package/examples/js/helpers/ViewHelper.js +31 -16
- package/examples/js/interactive/HTMLMesh.js +25 -39
- package/examples/js/interactive/InteractiveGroup.js +9 -14
- package/examples/js/interactive/SelectionBox.js +3 -70
- package/examples/js/interactive/SelectionHelper.js +0 -8
- package/examples/js/lights/LightProbeGenerator.js +32 -39
- package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
- package/examples/js/lines/LineGeometry.js +3 -5
- package/examples/js/lines/LineMaterial.js +4 -11
- package/examples/js/lines/LineSegments2.js +40 -89
- package/examples/js/lines/LineSegmentsGeometry.js +7 -28
- package/examples/js/lines/Wireframe.js +2 -7
- package/examples/js/lines/WireframeGeometry2.js +3 -1
- package/examples/js/loaders/3DMLoader.js +58 -155
- package/examples/js/loaders/3MFLoader.js +72 -106
- package/examples/js/loaders/AMFLoader.js +0 -25
- package/examples/js/loaders/BVHLoader.js +44 -43
- package/examples/js/loaders/BasisTextureLoader.js +16 -46
- package/examples/js/loaders/ColladaLoader.js +228 -359
- package/examples/js/loaders/DDSLoader.js +24 -25
- package/examples/js/loaders/DRACOLoader.js +29 -66
- package/examples/js/loaders/EXRLoader.js +67 -164
- package/examples/js/loaders/FBXLoader.js +287 -441
- package/examples/js/loaders/FontLoader.js +6 -15
- package/examples/js/loaders/GCodeLoader.js +15 -16
- package/examples/js/loaders/GLTFLoader.js +409 -706
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
- package/examples/js/loaders/KMZLoader.js +3 -7
- package/examples/js/loaders/KTXLoader.js +12 -30
- package/examples/js/loaders/LDrawLoader.js +178 -289
- package/examples/js/loaders/LUT3dlLoader.js +7 -11
- package/examples/js/loaders/LUTCubeLoader.js +0 -8
- package/examples/js/loaders/LWOLoader.js +59 -124
- package/examples/js/loaders/LogLuvLoader.js +27 -77
- package/examples/js/loaders/LottieLoader.js +4 -4
- package/examples/js/loaders/MD2Loader.js +26 -27
- package/examples/js/loaders/MDDLoader.js +6 -10
- package/examples/js/loaders/MMDLoader.js +180 -189
- package/examples/js/loaders/MTLLoader.js +18 -47
- package/examples/js/loaders/NRRDLoader.js +44 -84
- package/examples/js/loaders/OBJLoader.js +50 -65
- package/examples/js/loaders/PCDLoader.js +34 -29
- package/examples/js/loaders/PDBLoader.js +17 -13
- package/examples/js/loaders/PLYLoader.js +62 -48
- package/examples/js/loaders/PRWMLoader.js +11 -22
- package/examples/js/loaders/PVRLoader.js +7 -16
- package/examples/js/loaders/RGBELoader.js +36 -61
- package/examples/js/loaders/RGBMLoader.js +26 -87
- package/examples/js/loaders/STLLoader.js +20 -27
- package/examples/js/loaders/SVGLoader.js +361 -233
- package/examples/js/loaders/TDSLoader.js +81 -118
- package/examples/js/loaders/TGALoader.js +39 -41
- package/examples/js/loaders/TIFFLoader.js +0 -1
- package/examples/js/loaders/TTFLoader.js +0 -8
- package/examples/js/loaders/TiltLoader.js +14 -15
- package/examples/js/loaders/VOXLoader.js +8 -16
- package/examples/js/loaders/VRMLLoader.js +243 -340
- package/examples/js/loaders/VTKLoader.js +101 -118
- package/examples/js/loaders/XYZLoader.js +2 -4
- package/examples/js/loaders/lwo/IFFParser.js +55 -136
- package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
- package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
- package/examples/js/materials/MeshGouraudMaterial.js +15 -13
- package/examples/js/math/Capsule.js +0 -17
- package/examples/js/math/ColorConverter.js +3 -3
- package/examples/js/math/ConvexHull.js +185 -141
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/math/Lut.js +8 -15
- package/examples/js/math/MeshSurfaceSampler.js +6 -28
- package/examples/js/math/OBB.js +90 -49
- package/examples/js/math/Octree.js +2 -57
- package/examples/js/math/SimplexNoise.js +74 -88
- package/examples/js/misc/ConvexObjectBreaker.js +37 -48
- package/examples/js/misc/GPUComputationRenderer.js +26 -16
- package/examples/js/misc/Gyroscope.js +5 -9
- package/examples/js/misc/MD2Character.js +14 -23
- package/examples/js/misc/MD2CharacterComplex.js +73 -54
- package/examples/js/misc/MorphAnimMesh.js +0 -6
- package/examples/js/misc/MorphBlendMesh.js +3 -30
- package/examples/js/misc/ProgressiveLightMap.js +47 -43
- package/examples/js/misc/RollerCoaster.js +17 -24
- package/examples/js/misc/TubePainter.js +18 -12
- package/examples/js/misc/Volume.js +16 -45
- package/examples/js/misc/VolumeSlice.js +14 -24
- package/examples/js/modifiers/CurveModifier.js +19 -21
- package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
- package/examples/js/modifiers/SimplifyModifier.js +56 -59
- package/examples/js/modifiers/TessellateModifier.js +2 -9
- package/examples/js/objects/GroundProjectedEnv.js +2 -14
- package/examples/js/objects/Lensflare.js +47 -38
- package/examples/js/objects/LightningStorm.js +10 -13
- package/examples/js/objects/MarchingCubes.js +80 -59
- package/examples/js/objects/Reflector.js +22 -20
- package/examples/js/objects/ReflectorForSSRPass.js +19 -23
- package/examples/js/objects/Refractor.js +52 -30
- package/examples/js/objects/ShadowMesh.js +1 -2
- package/examples/js/objects/Sky.js +2 -7
- package/examples/js/objects/Water.js +23 -18
- package/examples/js/objects/Water2.js +20 -19
- package/examples/js/physics/AmmoPhysics.js +23 -20
- package/examples/js/physics/OimoPhysics.js +19 -17
- package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
- package/examples/js/postprocessing/AfterimagePass.js +19 -12
- package/examples/js/postprocessing/BloomPass.js +38 -17
- package/examples/js/postprocessing/BokehPass.js +29 -12
- package/examples/js/postprocessing/ClearPass.js +1 -6
- package/examples/js/postprocessing/CubeTexturePass.js +12 -9
- package/examples/js/postprocessing/DotScreenPass.js +7 -5
- package/examples/js/postprocessing/EffectComposer.js +25 -32
- package/examples/js/postprocessing/FilmPass.js +7 -5
- package/examples/js/postprocessing/GlitchPass.js +10 -11
- package/examples/js/postprocessing/HalftonePass.js +9 -9
- package/examples/js/postprocessing/LUTPass.js +2 -15
- package/examples/js/postprocessing/MaskPass.js +20 -17
- package/examples/js/postprocessing/OutlinePass.js +45 -36
- package/examples/js/postprocessing/Pass.js +11 -14
- package/examples/js/postprocessing/RenderPass.js +3 -7
- package/examples/js/postprocessing/RenderPixelatedPass.js +215 -0
- package/examples/js/postprocessing/SAOPass.js +40 -32
- package/examples/js/postprocessing/SMAAPass.js +34 -17
- package/examples/js/postprocessing/SSAARenderPass.js +14 -14
- package/examples/js/postprocessing/SSAOPass.js +56 -42
- package/examples/js/postprocessing/SSRPass.js +78 -61
- package/examples/js/postprocessing/SavePass.js +14 -6
- package/examples/js/postprocessing/ShaderPass.js +9 -8
- package/examples/js/postprocessing/TAARenderPass.js +11 -9
- package/examples/js/postprocessing/TexturePass.js +7 -4
- package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
- package/examples/js/renderers/CSS2DRenderer.js +2 -21
- package/examples/js/renderers/CSS3DRenderer.js +3 -24
- package/examples/js/renderers/Projector.js +29 -85
- package/examples/js/renderers/SVGRenderer.js +4 -50
- package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
- package/examples/js/shaders/AfterimageShader.js +3 -6
- package/examples/js/shaders/BasicShader.js +3 -6
- package/examples/js/shaders/BleachBypassShader.js +3 -6
- package/examples/js/shaders/BlendShader.js +3 -6
- package/examples/js/shaders/BokehShader.js +3 -6
- package/examples/js/shaders/BokehShader2.js +4 -13
- package/examples/js/shaders/BrightnessContrastShader.js +3 -6
- package/examples/js/shaders/ColorCorrectionShader.js +2 -6
- package/examples/js/shaders/ColorifyShader.js +2 -6
- package/examples/js/shaders/ConvolutionShader.js +5 -10
- package/examples/js/shaders/CopyShader.js +3 -6
- package/examples/js/shaders/DOFMipMapShader.js +3 -6
- package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
- package/examples/js/shaders/DigitalGlitch.js +3 -6
- package/examples/js/shaders/DotScreenShader.js +2 -6
- package/examples/js/shaders/FXAAShader.js +1 -3
- package/examples/js/shaders/FilmShader.js +3 -6
- package/examples/js/shaders/FocusShader.js +3 -6
- package/examples/js/shaders/FreiChenShader.js +2 -6
- package/examples/js/shaders/GammaCorrectionShader.js +3 -6
- package/examples/js/shaders/GodRaysShader.js +11 -24
- package/examples/js/shaders/HalftoneShader.js +3 -6
- package/examples/js/shaders/HorizontalBlurShader.js +3 -6
- package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
- package/examples/js/shaders/HueSaturationShader.js +3 -6
- package/examples/js/shaders/KaleidoShader.js +3 -6
- package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
- package/examples/js/shaders/LuminosityShader.js +3 -6
- package/examples/js/shaders/MMDToonShader.js +2 -8
- package/examples/js/shaders/MirrorShader.js +3 -6
- package/examples/js/shaders/NormalMapShader.js +2 -6
- package/examples/js/shaders/RGBShiftShader.js +3 -6
- package/examples/js/shaders/SAOShader.js +2 -6
- package/examples/js/shaders/SMAAShader.js +6 -18
- package/examples/js/shaders/SSAOShader.js +2 -6
- package/examples/js/shaders/SSRShader.js +6 -18
- package/examples/js/shaders/SepiaShader.js +3 -6
- package/examples/js/shaders/SobelOperatorShader.js +2 -6
- package/examples/js/shaders/TechnicolorShader.js +3 -6
- package/examples/js/shaders/ToneMapShader.js +3 -6
- package/examples/js/shaders/ToonShader.js +8 -24
- package/examples/js/shaders/TriangleBlurShader.js +2 -6
- package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
- package/examples/js/shaders/VelocityShader.js +126 -0
- package/examples/js/shaders/VerticalBlurShader.js +3 -6
- package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
- package/examples/js/shaders/VignetteShader.js +3 -6
- package/examples/js/shaders/VolumeShader.js +2 -6
- package/examples/js/shaders/WaterRefractionShader.js +2 -6
- package/examples/js/textures/FlakesTexture.js +0 -1
- package/examples/js/utils/BufferGeometryUtils.js +236 -170
- package/examples/js/utils/CameraUtils.js +5 -20
- package/examples/js/utils/GPUStatsPanel.js +3 -12
- package/examples/js/utils/GeometryCompressionUtils.js +19 -44
- package/examples/js/utils/GeometryUtils.js +13 -18
- package/examples/js/utils/LDrawUtils.js +8 -11
- package/examples/js/utils/PackedPhongMaterial.js +6 -4
- package/examples/js/utils/SceneUtils.js +117 -6
- package/examples/js/utils/ShadowMapViewer.js +17 -14
- package/examples/js/utils/SkeletonUtils.js +13 -27
- package/examples/js/utils/UVsDebug.js +20 -12
- package/examples/js/utils/WorkerPool.js +1 -11
- package/examples/jsm/animation/CCDIKSolver.js +27 -3
- package/examples/jsm/animation/MMDPhysics.js +25 -0
- package/examples/jsm/capabilities/WebGPU.js +3 -1
- package/examples/jsm/controls/FirstPersonControls.js +20 -20
- package/examples/jsm/controls/FlyControls.js +16 -17
- package/examples/jsm/controls/OrbitControls.js +44 -4
- package/examples/jsm/controls/TrackballControls.js +14 -2
- package/examples/jsm/controls/TransformControls.js +1 -1
- package/examples/jsm/csm/CSM.js +1 -0
- package/examples/jsm/csm/CSMHelper.js +30 -0
- package/examples/jsm/exporters/GLTFExporter.js +0 -79
- package/examples/jsm/exporters/USDZExporter.js +93 -1
- package/examples/jsm/helpers/OctreeHelper.js +22 -8
- package/examples/jsm/helpers/VertexNormalsHelper.js +7 -1
- package/examples/jsm/helpers/VertexTangentsHelper.js +7 -0
- package/examples/jsm/helpers/ViewHelper.js +24 -0
- package/examples/jsm/interactive/HTMLMesh.js +5 -6
- package/examples/jsm/interactive/InteractiveGroup.js +4 -2
- package/examples/jsm/libs/flow.module.js +610 -160
- package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
- package/examples/jsm/lines/LineSegments2.js +4 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -2
- package/examples/jsm/loaders/ColladaLoader.js +28 -0
- package/examples/jsm/loaders/FBXLoader.js +18 -2
- package/examples/jsm/loaders/GLTFLoader.js +269 -428
- package/examples/jsm/loaders/KTX2Loader.js +68 -29
- package/examples/jsm/loaders/LDrawLoader.js +14 -13
- package/examples/jsm/loaders/LottieLoader.js +4 -2
- package/examples/jsm/loaders/MaterialXLoader.js +728 -0
- package/examples/jsm/loaders/PCDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +68 -16
- package/examples/jsm/loaders/SVGLoader.js +227 -14
- package/examples/jsm/loaders/USDZLoader.js +351 -111
- package/examples/jsm/loaders/VRMLLoader.js +13 -1
- package/examples/jsm/math/ConvexHull.js +4 -4
- package/examples/jsm/math/Octree.js +1 -1
- package/examples/jsm/node-editor/NodeEditor.js +91 -12
- package/examples/jsm/node-editor/core/BaseNode.js +10 -3
- package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +6 -9
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +6 -9
- package/examples/jsm/node-editor/math/AngleEditor.js +3 -3
- package/examples/jsm/node-editor/math/InvertEditor.js +2 -2
- package/examples/jsm/node-editor/scene/MeshEditor.js +11 -8
- package/examples/jsm/node-editor/utils/PreviewEditor.js +4 -0
- package/examples/jsm/nodes/Nodes.js +30 -3
- package/examples/jsm/nodes/accessors/BitangentNode.js +62 -0
- package/examples/jsm/nodes/accessors/NormalNode.js +6 -6
- package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
- package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/SkinningNode.js +8 -1
- package/examples/jsm/nodes/accessors/TangentNode.js +95 -0
- package/examples/jsm/nodes/core/AttributeNode.js +31 -8
- package/examples/jsm/nodes/core/Node.js +1 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +55 -6
- package/examples/jsm/nodes/core/NodeFrame.js +2 -2
- package/examples/jsm/nodes/core/NodeVarying.js +7 -4
- package/examples/jsm/nodes/core/VaryingNode.js +6 -4
- package/examples/jsm/nodes/core/constants.js +13 -13
- package/examples/jsm/nodes/display/BlendModeNode.js +85 -0
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -12
- package/examples/jsm/nodes/display/NormalMapNode.js +19 -12
- package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
- package/examples/jsm/nodes/display/ViewportNode.js +106 -0
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +5 -5
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +3 -3
- package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +2 -2
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
- package/examples/jsm/nodes/materials/Materials.js +9 -7
- package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
- package/examples/jsm/nodes/materialx/{Disclaimer.md → DISCLAIMER.md} +1 -1
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +59 -0
- package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_hsv.js +1 -1
- package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_noise.js +13 -3
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
- package/examples/jsm/nodes/math/MathNode.js +5 -5
- package/examples/jsm/nodes/math/OperatorNode.js +16 -3
- package/examples/jsm/nodes/shadernode/ShaderNode.js +35 -20
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +87 -63
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +29 -0
- package/examples/jsm/nodes/utils/ConvertNode.js +15 -14
- package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
- package/examples/jsm/nodes/utils/JoinNode.js +8 -2
- package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
- package/examples/jsm/nodes/utils/OscNode.js +2 -2
- package/examples/jsm/nodes/utils/RemapNode.js +34 -0
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
- package/examples/jsm/nodes/utils/TimerNode.js +21 -1
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
- package/examples/jsm/postprocessing/BloomPass.js +22 -3
- package/examples/jsm/postprocessing/BokehPass.js +18 -4
- package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
- package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
- package/examples/jsm/postprocessing/EffectComposer.js +9 -0
- package/examples/jsm/postprocessing/FilmPass.js +8 -0
- package/examples/jsm/postprocessing/GlitchPass.js +13 -1
- package/examples/jsm/postprocessing/HalftonePass.js +8 -0
- package/examples/jsm/postprocessing/OutlinePass.js +21 -1
- package/examples/jsm/postprocessing/Pass.js +2 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
- package/examples/jsm/postprocessing/SAOPass.js +20 -0
- package/examples/jsm/postprocessing/SMAAPass.js +16 -0
- package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
- package/examples/jsm/postprocessing/SavePass.js +17 -1
- package/examples/jsm/postprocessing/ShaderPass.js +8 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
- package/examples/jsm/postprocessing/TexturePass.js +8 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +56 -35
- package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
- package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +41 -9
- package/examples/jsm/shaders/MMDToonShader.js +0 -2
- package/examples/jsm/shaders/VelocityShader.js +128 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +174 -42
- package/examples/jsm/utils/SceneUtils.js +129 -4
- package/examples/jsm/webxr/OculusHandModel.js +3 -2
- package/examples/jsm/webxr/XRHandMeshModel.js +8 -3
- package/package.json +13 -13
- package/src/Three.js +1 -0
- package/src/animation/PropertyBinding.js +7 -0
- package/src/audio/AudioContext.js +5 -5
- package/src/cameras/CubeCamera.js +14 -14
- package/src/constants.js +1 -1
- package/src/core/InstancedBufferGeometry.js +1 -7
- package/src/core/InterleavedBufferAttribute.js +4 -4
- package/src/extras/Earcut.js +67 -67
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/ShapeGeometry.js +1 -1
- package/src/helpers/ArrowHelper.js +9 -0
- package/src/helpers/Box3Helper.js +7 -0
- package/src/helpers/BoxHelper.js +7 -1
- package/src/helpers/DirectionalLightHelper.js +5 -1
- package/src/helpers/GridHelper.js +7 -0
- package/src/helpers/HemisphereLightHelper.js +4 -1
- package/src/helpers/PlaneHelper.js +9 -0
- package/src/helpers/PointLightHelper.js +2 -1
- package/src/helpers/PolarGridHelper.js +7 -0
- package/src/helpers/SkeletonHelper.js +7 -0
- package/src/helpers/SpotLightHelper.js +4 -2
- package/src/lights/LightShadow.js +1 -2
- package/src/lights/PointLight.js +2 -2
- package/src/lights/SpotLight.js +2 -2
- package/src/loaders/FileLoader.js +4 -1
- package/src/loaders/ObjectLoader.js +5 -1
- package/src/materials/Material.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +1 -1
- package/src/math/Color.js +5 -5
- package/src/math/Matrix3.js +53 -18
- package/src/math/Ray.js +2 -5
- package/src/math/Sphere.js +36 -21
- package/src/objects/InstancedMesh.js +7 -0
- package/src/objects/LOD.js +25 -6
- package/src/renderers/WebGL3DRenderTarget.js +1 -1
- package/src/renderers/WebGLArrayRenderTarget.js +1 -1
- package/src/renderers/WebGLCubeRenderTarget.js +1 -1
- package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
- package/src/renderers/WebGLRenderTarget.js +1 -1
- package/src/renderers/WebGLRenderer.js +36 -62
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -4
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk.js +3 -0
- package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
- package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +0 -3
- package/src/renderers/shaders/ShaderLib.js +20 -6
- package/src/renderers/shaders/UniformsLib.js +1 -1
- package/src/renderers/shaders/UniformsUtils.js +15 -0
- package/src/renderers/webgl/WebGLAttributes.js +2 -0
- package/src/renderers/webgl/WebGLBackground.js +15 -7
- package/src/renderers/webgl/WebGLLights.js +0 -4
- package/src/renderers/webgl/WebGLMaterials.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -1
- package/src/renderers/webgl/WebGLState.js +78 -41
- package/src/renderers/webgl/WebGLTextures.js +94 -39
- package/src/renderers/webgl/WebGLUniforms.js +152 -24
- package/src/renderers/webgl/WebGLUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +46 -13
- package/src/renderers/webxr/WebXRManager.js +71 -3
- package/src/scenes/Scene.js +8 -0
- package/src/textures/CompressedArrayTexture.js +18 -0
- package/src/textures/Texture.js +2 -1
- package/examples/js/libs/lottie_canvas.js +0 -12751
- package/examples/js/shaders/PixelShader.js +0 -51
- package/examples/jsm/shaders/PixelShader.js +0 -44
|
@@ -217,7 +217,7 @@ class CCDIKSolver {
|
|
|
217
217
|
*/
|
|
218
218
|
createHelper() {
|
|
219
219
|
|
|
220
|
-
return new CCDIKHelper( this.mesh, this.
|
|
220
|
+
return new CCDIKHelper( this.mesh, this.iks );
|
|
221
221
|
|
|
222
222
|
}
|
|
223
223
|
|
|
@@ -283,7 +283,7 @@ function setPositionOfBoneToAttributeArray( array, index, bone, matrixWorldInv )
|
|
|
283
283
|
*/
|
|
284
284
|
class CCDIKHelper extends Object3D {
|
|
285
285
|
|
|
286
|
-
constructor( mesh, iks = [] ) {
|
|
286
|
+
constructor( mesh, iks = [], sphereSize = 0.25 ) {
|
|
287
287
|
|
|
288
288
|
super();
|
|
289
289
|
|
|
@@ -293,7 +293,7 @@ class CCDIKHelper extends Object3D {
|
|
|
293
293
|
this.matrix.copy( mesh.matrixWorld );
|
|
294
294
|
this.matrixAutoUpdate = false;
|
|
295
295
|
|
|
296
|
-
this.sphereGeometry = new SphereGeometry(
|
|
296
|
+
this.sphereGeometry = new SphereGeometry( sphereSize, 16, 8 );
|
|
297
297
|
|
|
298
298
|
this.targetSphereMaterial = new MeshBasicMaterial( {
|
|
299
299
|
color: new Color( 0xff8888 ),
|
|
@@ -393,6 +393,30 @@ class CCDIKHelper extends Object3D {
|
|
|
393
393
|
|
|
394
394
|
}
|
|
395
395
|
|
|
396
|
+
/**
|
|
397
|
+
* Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.
|
|
398
|
+
*/
|
|
399
|
+
dispose() {
|
|
400
|
+
|
|
401
|
+
this.sphereGeometry.dispose();
|
|
402
|
+
|
|
403
|
+
this.targetSphereMaterial.dispose();
|
|
404
|
+
this.effectorSphereMaterial.dispose();
|
|
405
|
+
this.linkSphereMaterial.dispose();
|
|
406
|
+
this.lineMaterial.dispose();
|
|
407
|
+
|
|
408
|
+
const children = this.children;
|
|
409
|
+
|
|
410
|
+
for ( let i = 0; i < children.length; i ++ ) {
|
|
411
|
+
|
|
412
|
+
const child = children[ i ];
|
|
413
|
+
|
|
414
|
+
if ( child.isLine ) child.geometry.dispose();
|
|
415
|
+
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
}
|
|
419
|
+
|
|
396
420
|
// private method
|
|
397
421
|
|
|
398
422
|
_init() {
|
|
@@ -1292,6 +1292,31 @@ class MMDPhysicsHelper extends Object3D {
|
|
|
1292
1292
|
|
|
1293
1293
|
}
|
|
1294
1294
|
|
|
1295
|
+
|
|
1296
|
+
/**
|
|
1297
|
+
* Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.
|
|
1298
|
+
*/
|
|
1299
|
+
dispose() {
|
|
1300
|
+
|
|
1301
|
+
const materials = this.materials;
|
|
1302
|
+
const children = this.children;
|
|
1303
|
+
|
|
1304
|
+
for ( let i = 0; i < materials.length; i ++ ) {
|
|
1305
|
+
|
|
1306
|
+
materials[ i ].dispose();
|
|
1307
|
+
|
|
1308
|
+
}
|
|
1309
|
+
|
|
1310
|
+
for ( let i = 0; i < children.length; i ++ ) {
|
|
1311
|
+
|
|
1312
|
+
const child = children[ i ];
|
|
1313
|
+
|
|
1314
|
+
if ( child.isMesh ) child.geometry.dispose();
|
|
1315
|
+
|
|
1316
|
+
}
|
|
1317
|
+
|
|
1318
|
+
}
|
|
1319
|
+
|
|
1295
1320
|
/**
|
|
1296
1321
|
* Updates Rigid Bodies visualization.
|
|
1297
1322
|
*/
|
|
@@ -14,7 +14,9 @@ class WebGPU {
|
|
|
14
14
|
|
|
15
15
|
static getErrorMessage() {
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
let message = 'Your browser does not support <a href="https://gpuweb.github.io/gpuweb/" style="color:blue">WebGPU</a>';
|
|
18
|
+
|
|
19
|
+
if ( !! window.chrome ) message += '<br>Try: <b>chrome://flags/#enable-unsafe-webgpu</b>';
|
|
18
20
|
|
|
19
21
|
const element = document.createElement( 'div' );
|
|
20
22
|
element.id = 'webgpumessage';
|
|
@@ -42,8 +42,8 @@ class FirstPersonControls {
|
|
|
42
42
|
|
|
43
43
|
this.autoSpeedFactor = 0.0;
|
|
44
44
|
|
|
45
|
-
this.
|
|
46
|
-
this.
|
|
45
|
+
this.pointerX = 0;
|
|
46
|
+
this.pointerY = 0;
|
|
47
47
|
|
|
48
48
|
this.moveForward = false;
|
|
49
49
|
this.moveBackward = false;
|
|
@@ -76,7 +76,7 @@ class FirstPersonControls {
|
|
|
76
76
|
|
|
77
77
|
};
|
|
78
78
|
|
|
79
|
-
this.
|
|
79
|
+
this.onPointerDown = function ( event ) {
|
|
80
80
|
|
|
81
81
|
if ( this.domElement !== document ) {
|
|
82
82
|
|
|
@@ -99,7 +99,7 @@ class FirstPersonControls {
|
|
|
99
99
|
|
|
100
100
|
};
|
|
101
101
|
|
|
102
|
-
this.
|
|
102
|
+
this.onPointerUp = function ( event ) {
|
|
103
103
|
|
|
104
104
|
if ( this.activeLook ) {
|
|
105
105
|
|
|
@@ -116,17 +116,17 @@ class FirstPersonControls {
|
|
|
116
116
|
|
|
117
117
|
};
|
|
118
118
|
|
|
119
|
-
this.
|
|
119
|
+
this.onPointerMove = function ( event ) {
|
|
120
120
|
|
|
121
121
|
if ( this.domElement === document ) {
|
|
122
122
|
|
|
123
|
-
this.
|
|
124
|
-
this.
|
|
123
|
+
this.pointerX = event.pageX - this.viewHalfX;
|
|
124
|
+
this.pointerY = event.pageY - this.viewHalfY;
|
|
125
125
|
|
|
126
126
|
} else {
|
|
127
127
|
|
|
128
|
-
this.
|
|
129
|
-
this.
|
|
128
|
+
this.pointerX = event.pageX - this.domElement.offsetLeft - this.viewHalfX;
|
|
129
|
+
this.pointerY = event.pageY - this.domElement.offsetTop - this.viewHalfY;
|
|
130
130
|
|
|
131
131
|
}
|
|
132
132
|
|
|
@@ -246,8 +246,8 @@ class FirstPersonControls {
|
|
|
246
246
|
|
|
247
247
|
}
|
|
248
248
|
|
|
249
|
-
lon -= this.
|
|
250
|
-
if ( this.lookVertical ) lat -= this.
|
|
249
|
+
lon -= this.pointerX * actualLookSpeed;
|
|
250
|
+
if ( this.lookVertical ) lat -= this.pointerY * actualLookSpeed * verticalLookRatio;
|
|
251
251
|
|
|
252
252
|
lat = Math.max( - 85, Math.min( 85, lat ) );
|
|
253
253
|
|
|
@@ -273,25 +273,25 @@ class FirstPersonControls {
|
|
|
273
273
|
this.dispose = function () {
|
|
274
274
|
|
|
275
275
|
this.domElement.removeEventListener( 'contextmenu', contextmenu );
|
|
276
|
-
this.domElement.removeEventListener( '
|
|
277
|
-
this.domElement.removeEventListener( '
|
|
278
|
-
this.domElement.removeEventListener( '
|
|
276
|
+
this.domElement.removeEventListener( 'pointerdown', _onPointerDown );
|
|
277
|
+
this.domElement.removeEventListener( 'pointermove', _onPointerMove );
|
|
278
|
+
this.domElement.removeEventListener( 'pointerup', _onPointerUp );
|
|
279
279
|
|
|
280
280
|
window.removeEventListener( 'keydown', _onKeyDown );
|
|
281
281
|
window.removeEventListener( 'keyup', _onKeyUp );
|
|
282
282
|
|
|
283
283
|
};
|
|
284
284
|
|
|
285
|
-
const
|
|
286
|
-
const
|
|
287
|
-
const
|
|
285
|
+
const _onPointerMove = this.onPointerMove.bind( this );
|
|
286
|
+
const _onPointerDown = this.onPointerDown.bind( this );
|
|
287
|
+
const _onPointerUp = this.onPointerUp.bind( this );
|
|
288
288
|
const _onKeyDown = this.onKeyDown.bind( this );
|
|
289
289
|
const _onKeyUp = this.onKeyUp.bind( this );
|
|
290
290
|
|
|
291
291
|
this.domElement.addEventListener( 'contextmenu', contextmenu );
|
|
292
|
-
this.domElement.addEventListener( '
|
|
293
|
-
this.domElement.addEventListener( '
|
|
294
|
-
this.domElement.addEventListener( '
|
|
292
|
+
this.domElement.addEventListener( 'pointerdown', _onPointerDown );
|
|
293
|
+
this.domElement.addEventListener( 'pointermove', _onPointerMove );
|
|
294
|
+
this.domElement.addEventListener( 'pointerup', _onPointerUp );
|
|
295
295
|
|
|
296
296
|
window.addEventListener( 'keydown', _onKeyDown );
|
|
297
297
|
window.addEventListener( 'keyup', _onKeyUp );
|
|
@@ -36,7 +36,7 @@ class FlyControls extends EventDispatcher {
|
|
|
36
36
|
|
|
37
37
|
this.tmpQuaternion = new Quaternion();
|
|
38
38
|
|
|
39
|
-
this.
|
|
39
|
+
this.status = 0;
|
|
40
40
|
|
|
41
41
|
this.moveState = { up: 0, down: 0, left: 0, right: 0, forward: 0, back: 0, pitchUp: 0, pitchDown: 0, yawLeft: 0, yawRight: 0, rollLeft: 0, rollRight: 0 };
|
|
42
42
|
this.moveVector = new Vector3( 0, 0, 0 );
|
|
@@ -112,11 +112,11 @@ class FlyControls extends EventDispatcher {
|
|
|
112
112
|
|
|
113
113
|
};
|
|
114
114
|
|
|
115
|
-
this.
|
|
115
|
+
this.pointerdown = function ( event ) {
|
|
116
116
|
|
|
117
117
|
if ( this.dragToLook ) {
|
|
118
118
|
|
|
119
|
-
this.
|
|
119
|
+
this.status ++;
|
|
120
120
|
|
|
121
121
|
} else {
|
|
122
122
|
|
|
@@ -133,9 +133,9 @@ class FlyControls extends EventDispatcher {
|
|
|
133
133
|
|
|
134
134
|
};
|
|
135
135
|
|
|
136
|
-
this.
|
|
136
|
+
this.pointermove = function ( event ) {
|
|
137
137
|
|
|
138
|
-
if ( ! this.dragToLook || this.
|
|
138
|
+
if ( ! this.dragToLook || this.status > 0 ) {
|
|
139
139
|
|
|
140
140
|
const container = this.getContainerDimensions();
|
|
141
141
|
const halfWidth = container.size[ 0 ] / 2;
|
|
@@ -150,11 +150,11 @@ class FlyControls extends EventDispatcher {
|
|
|
150
150
|
|
|
151
151
|
};
|
|
152
152
|
|
|
153
|
-
this.
|
|
153
|
+
this.pointerup = function ( event ) {
|
|
154
154
|
|
|
155
155
|
if ( this.dragToLook ) {
|
|
156
156
|
|
|
157
|
-
this.
|
|
157
|
+
this.status --;
|
|
158
158
|
|
|
159
159
|
this.moveState.yawLeft = this.moveState.pitchDown = 0;
|
|
160
160
|
|
|
@@ -245,26 +245,25 @@ class FlyControls extends EventDispatcher {
|
|
|
245
245
|
this.dispose = function () {
|
|
246
246
|
|
|
247
247
|
this.domElement.removeEventListener( 'contextmenu', contextmenu );
|
|
248
|
-
this.domElement.removeEventListener( '
|
|
249
|
-
this.domElement.removeEventListener( '
|
|
250
|
-
this.domElement.removeEventListener( '
|
|
248
|
+
this.domElement.removeEventListener( 'pointerdown', _pointerdown );
|
|
249
|
+
this.domElement.removeEventListener( 'pointermove', _pointermove );
|
|
250
|
+
this.domElement.removeEventListener( 'pointerup', _pointerup );
|
|
251
251
|
|
|
252
252
|
window.removeEventListener( 'keydown', _keydown );
|
|
253
253
|
window.removeEventListener( 'keyup', _keyup );
|
|
254
254
|
|
|
255
255
|
};
|
|
256
256
|
|
|
257
|
-
const
|
|
258
|
-
const
|
|
259
|
-
const
|
|
257
|
+
const _pointermove = this.pointermove.bind( this );
|
|
258
|
+
const _pointerdown = this.pointerdown.bind( this );
|
|
259
|
+
const _pointerup = this.pointerup.bind( this );
|
|
260
260
|
const _keydown = this.keydown.bind( this );
|
|
261
261
|
const _keyup = this.keyup.bind( this );
|
|
262
262
|
|
|
263
263
|
this.domElement.addEventListener( 'contextmenu', contextmenu );
|
|
264
|
-
|
|
265
|
-
this.domElement.addEventListener( '
|
|
266
|
-
this.domElement.addEventListener( '
|
|
267
|
-
this.domElement.addEventListener( 'mouseup', _mouseup );
|
|
264
|
+
this.domElement.addEventListener( 'pointerdown', _pointerdown );
|
|
265
|
+
this.domElement.addEventListener( 'pointermove', _pointermove );
|
|
266
|
+
this.domElement.addEventListener( 'pointerup', _pointerup );
|
|
268
267
|
|
|
269
268
|
window.addEventListener( 'keydown', _keydown );
|
|
270
269
|
window.addEventListener( 'keyup', _keyup );
|
|
@@ -601,22 +601,62 @@ class OrbitControls extends EventDispatcher {
|
|
|
601
601
|
switch ( event.code ) {
|
|
602
602
|
|
|
603
603
|
case scope.keys.UP:
|
|
604
|
-
|
|
604
|
+
|
|
605
|
+
if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
|
|
606
|
+
|
|
607
|
+
rotateUp( 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );
|
|
608
|
+
|
|
609
|
+
} else {
|
|
610
|
+
|
|
611
|
+
pan( 0, scope.keyPanSpeed );
|
|
612
|
+
|
|
613
|
+
}
|
|
614
|
+
|
|
605
615
|
needsUpdate = true;
|
|
606
616
|
break;
|
|
607
617
|
|
|
608
618
|
case scope.keys.BOTTOM:
|
|
609
|
-
|
|
619
|
+
|
|
620
|
+
if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
|
|
621
|
+
|
|
622
|
+
rotateUp( - 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );
|
|
623
|
+
|
|
624
|
+
} else {
|
|
625
|
+
|
|
626
|
+
pan( 0, - scope.keyPanSpeed );
|
|
627
|
+
|
|
628
|
+
}
|
|
629
|
+
|
|
610
630
|
needsUpdate = true;
|
|
611
631
|
break;
|
|
612
632
|
|
|
613
633
|
case scope.keys.LEFT:
|
|
614
|
-
|
|
634
|
+
|
|
635
|
+
if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
|
|
636
|
+
|
|
637
|
+
rotateLeft( 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );
|
|
638
|
+
|
|
639
|
+
} else {
|
|
640
|
+
|
|
641
|
+
pan( scope.keyPanSpeed, 0 );
|
|
642
|
+
|
|
643
|
+
}
|
|
644
|
+
|
|
615
645
|
needsUpdate = true;
|
|
616
646
|
break;
|
|
617
647
|
|
|
618
648
|
case scope.keys.RIGHT:
|
|
619
|
-
|
|
649
|
+
|
|
650
|
+
if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
|
|
651
|
+
|
|
652
|
+
rotateLeft( - 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );
|
|
653
|
+
|
|
654
|
+
} else {
|
|
655
|
+
|
|
656
|
+
pan( - scope.keyPanSpeed, 0 );
|
|
657
|
+
|
|
658
|
+
}
|
|
659
|
+
|
|
620
660
|
needsUpdate = true;
|
|
621
661
|
break;
|
|
622
662
|
|
|
@@ -700,8 +700,20 @@ class TrackballControls extends EventDispatcher {
|
|
|
700
700
|
|
|
701
701
|
case 2:
|
|
702
702
|
_state = STATE.TOUCH_ZOOM_PAN;
|
|
703
|
-
|
|
704
|
-
|
|
703
|
+
|
|
704
|
+
for ( let i = 0; i < _pointers.length; i ++ ) {
|
|
705
|
+
|
|
706
|
+
if ( _pointers[ i ].pointerId !== event.pointerId ) {
|
|
707
|
+
|
|
708
|
+
const position = _pointerPositions[ _pointers[ i ].pointerId ];
|
|
709
|
+
_moveCurr.copy( getMouseOnCircle( position.x, position.y ) );
|
|
710
|
+
_movePrev.copy( _moveCurr );
|
|
711
|
+
break;
|
|
712
|
+
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
}
|
|
716
|
+
|
|
705
717
|
break;
|
|
706
718
|
|
|
707
719
|
}
|
package/examples/jsm/csm/CSM.js
CHANGED
|
@@ -158,6 +158,36 @@ class CSMHelper extends Group {
|
|
|
158
158
|
|
|
159
159
|
}
|
|
160
160
|
|
|
161
|
+
dispose() {
|
|
162
|
+
|
|
163
|
+
const frustumLines = this.frustumLines;
|
|
164
|
+
const cascadeLines = this.cascadeLines;
|
|
165
|
+
const cascadePlanes = this.cascadePlanes;
|
|
166
|
+
const shadowLines = this.shadowLines;
|
|
167
|
+
|
|
168
|
+
frustumLines.geometry.dispose();
|
|
169
|
+
frustumLines.material.dispose();
|
|
170
|
+
|
|
171
|
+
const cascades = this.csm.cascades;
|
|
172
|
+
|
|
173
|
+
for ( let i = 0; i < cascades; i ++ ) {
|
|
174
|
+
|
|
175
|
+
const cascadeLine = cascadeLines[ i ];
|
|
176
|
+
const cascadePlane = cascadePlanes[ i ];
|
|
177
|
+
const shadowLineGroup = shadowLines[ i ];
|
|
178
|
+
const shadowLine = shadowLineGroup.children[ 0 ];
|
|
179
|
+
|
|
180
|
+
cascadeLine.dispose(); // Box3Helper
|
|
181
|
+
|
|
182
|
+
cascadePlane.geometry.dispose();
|
|
183
|
+
cascadePlane.material.dispose();
|
|
184
|
+
|
|
185
|
+
shadowLine.dispose(); // Box3Helper
|
|
186
|
+
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
}
|
|
190
|
+
|
|
161
191
|
}
|
|
162
192
|
|
|
163
193
|
export { CSMHelper };
|
|
@@ -41,12 +41,6 @@ class GLTFExporter {
|
|
|
41
41
|
|
|
42
42
|
} );
|
|
43
43
|
|
|
44
|
-
this.register( function ( writer ) {
|
|
45
|
-
|
|
46
|
-
return new GLTFMaterialsPBRSpecularGlossiness( writer );
|
|
47
|
-
|
|
48
|
-
} );
|
|
49
|
-
|
|
50
44
|
this.register( function ( writer ) {
|
|
51
45
|
|
|
52
46
|
return new GLTFMaterialsTransmissionExtension( writer );
|
|
@@ -438,7 +432,6 @@ class GLTFWriter {
|
|
|
438
432
|
binary: false,
|
|
439
433
|
trs: false,
|
|
440
434
|
onlyVisible: true,
|
|
441
|
-
truncateDrawRange: true,
|
|
442
435
|
maxTextureSize: Infinity,
|
|
443
436
|
animations: [],
|
|
444
437
|
includeCustomExtensions: false
|
|
@@ -987,7 +980,6 @@ class GLTFWriter {
|
|
|
987
980
|
*/
|
|
988
981
|
processAccessor( attribute, geometry, start, count ) {
|
|
989
982
|
|
|
990
|
-
const options = this.options;
|
|
991
983
|
const json = this.json;
|
|
992
984
|
|
|
993
985
|
const types = {
|
|
@@ -1028,21 +1020,6 @@ class GLTFWriter {
|
|
|
1028
1020
|
if ( start === undefined ) start = 0;
|
|
1029
1021
|
if ( count === undefined ) count = attribute.count;
|
|
1030
1022
|
|
|
1031
|
-
// @TODO Indexed buffer geometry with drawRange not supported yet
|
|
1032
|
-
if ( options.truncateDrawRange && geometry !== undefined && geometry.index === null ) {
|
|
1033
|
-
|
|
1034
|
-
const end = start + count;
|
|
1035
|
-
const end2 = geometry.drawRange.count === Infinity
|
|
1036
|
-
? attribute.count
|
|
1037
|
-
: geometry.drawRange.start + geometry.drawRange.count;
|
|
1038
|
-
|
|
1039
|
-
start = Math.max( start, geometry.drawRange.start );
|
|
1040
|
-
count = Math.min( end, end2 ) - start;
|
|
1041
|
-
|
|
1042
|
-
if ( count < 0 ) count = 0;
|
|
1043
|
-
|
|
1044
|
-
}
|
|
1045
|
-
|
|
1046
1023
|
// Skip creating an accessor if the attribute doesn't have data to export
|
|
1047
1024
|
if ( count === 0 ) return null;
|
|
1048
1025
|
|
|
@@ -2298,62 +2275,6 @@ class GLTFMaterialsUnlitExtension {
|
|
|
2298
2275
|
|
|
2299
2276
|
}
|
|
2300
2277
|
|
|
2301
|
-
/**
|
|
2302
|
-
* Specular-Glossiness Extension
|
|
2303
|
-
*
|
|
2304
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Archived/KHR_materials_pbrSpecularGlossiness
|
|
2305
|
-
*/
|
|
2306
|
-
class GLTFMaterialsPBRSpecularGlossiness {
|
|
2307
|
-
|
|
2308
|
-
constructor( writer ) {
|
|
2309
|
-
|
|
2310
|
-
this.writer = writer;
|
|
2311
|
-
this.name = 'KHR_materials_pbrSpecularGlossiness';
|
|
2312
|
-
|
|
2313
|
-
}
|
|
2314
|
-
|
|
2315
|
-
writeMaterial( material, materialDef ) {
|
|
2316
|
-
|
|
2317
|
-
if ( ! material.isGLTFSpecularGlossinessMaterial ) return;
|
|
2318
|
-
|
|
2319
|
-
const writer = this.writer;
|
|
2320
|
-
const extensionsUsed = writer.extensionsUsed;
|
|
2321
|
-
|
|
2322
|
-
const extensionDef = {};
|
|
2323
|
-
|
|
2324
|
-
if ( materialDef.pbrMetallicRoughness.baseColorFactor ) {
|
|
2325
|
-
|
|
2326
|
-
extensionDef.diffuseFactor = materialDef.pbrMetallicRoughness.baseColorFactor;
|
|
2327
|
-
|
|
2328
|
-
}
|
|
2329
|
-
|
|
2330
|
-
const specularFactor = [ 1, 1, 1 ];
|
|
2331
|
-
material.specular.toArray( specularFactor, 0 );
|
|
2332
|
-
extensionDef.specularFactor = specularFactor;
|
|
2333
|
-
extensionDef.glossinessFactor = material.glossiness;
|
|
2334
|
-
|
|
2335
|
-
if ( materialDef.pbrMetallicRoughness.baseColorTexture ) {
|
|
2336
|
-
|
|
2337
|
-
extensionDef.diffuseTexture = materialDef.pbrMetallicRoughness.baseColorTexture;
|
|
2338
|
-
|
|
2339
|
-
}
|
|
2340
|
-
|
|
2341
|
-
if ( material.specularMap ) {
|
|
2342
|
-
|
|
2343
|
-
const specularMapDef = { index: writer.processTexture( material.specularMap ) };
|
|
2344
|
-
writer.applyTextureTransform( specularMapDef, material.specularMap );
|
|
2345
|
-
extensionDef.specularGlossinessTexture = specularMapDef;
|
|
2346
|
-
|
|
2347
|
-
}
|
|
2348
|
-
|
|
2349
|
-
materialDef.extensions = materialDef.extensions || {};
|
|
2350
|
-
materialDef.extensions[ this.name ] = extensionDef;
|
|
2351
|
-
extensionsUsed[ this.name ] = true;
|
|
2352
|
-
|
|
2353
|
-
}
|
|
2354
|
-
|
|
2355
|
-
}
|
|
2356
|
-
|
|
2357
2278
|
/**
|
|
2358
2279
|
* Clearcoat Materials Extension
|
|
2359
2280
|
*
|
|
@@ -6,7 +6,7 @@ import * as fflate from '../libs/fflate.module.js';
|
|
|
6
6
|
|
|
7
7
|
class USDZExporter {
|
|
8
8
|
|
|
9
|
-
async parse( scene ) {
|
|
9
|
+
async parse( scene, options = { ar: { anchoring: { type: 'plane' }, planeAnchoring: { alignment: 'horizontal' } } } ) {
|
|
10
10
|
|
|
11
11
|
const files = {};
|
|
12
12
|
const modelFileName = 'model.usda';
|
|
@@ -16,6 +16,8 @@ class USDZExporter {
|
|
|
16
16
|
|
|
17
17
|
let output = buildHeader();
|
|
18
18
|
|
|
19
|
+
output += buildSceneStart( options );
|
|
20
|
+
|
|
19
21
|
const materials = {};
|
|
20
22
|
const textures = {};
|
|
21
23
|
|
|
@@ -51,10 +53,17 @@ class USDZExporter {
|
|
|
51
53
|
|
|
52
54
|
}
|
|
53
55
|
|
|
56
|
+
} else if ( object.isCamera ) {
|
|
57
|
+
|
|
58
|
+
output += buildCamera( object );
|
|
59
|
+
|
|
54
60
|
}
|
|
55
61
|
|
|
56
62
|
} );
|
|
57
63
|
|
|
64
|
+
|
|
65
|
+
output += buildSceneEnd();
|
|
66
|
+
|
|
58
67
|
output += buildMaterials( materials, textures );
|
|
59
68
|
|
|
60
69
|
files[ modelFileName ] = fflate.strToU8( output );
|
|
@@ -170,6 +179,40 @@ function buildHeader() {
|
|
|
170
179
|
|
|
171
180
|
}
|
|
172
181
|
|
|
182
|
+
function buildSceneStart( options ) {
|
|
183
|
+
|
|
184
|
+
return `def Xform "Root"
|
|
185
|
+
{
|
|
186
|
+
def Scope "Scenes" (
|
|
187
|
+
kind = "sceneLibrary"
|
|
188
|
+
)
|
|
189
|
+
{
|
|
190
|
+
def Xform "Scene" (
|
|
191
|
+
customData = {
|
|
192
|
+
bool preliminary_collidesWithEnvironment = 0
|
|
193
|
+
string sceneName = "Scene"
|
|
194
|
+
}
|
|
195
|
+
sceneName = "Scene"
|
|
196
|
+
)
|
|
197
|
+
{
|
|
198
|
+
token preliminary:anchoring:type = "${options.ar.anchoring.type}"
|
|
199
|
+
token preliminary:planeAnchoring:alignment = "${options.ar.planeAnchoring.alignment}"
|
|
200
|
+
|
|
201
|
+
`;
|
|
202
|
+
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function buildSceneEnd() {
|
|
206
|
+
|
|
207
|
+
return `
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
`;
|
|
213
|
+
|
|
214
|
+
}
|
|
215
|
+
|
|
173
216
|
function buildUSDFileAsString( dataToInsert ) {
|
|
174
217
|
|
|
175
218
|
let output = buildHeader();
|
|
@@ -555,4 +598,53 @@ function buildVector2( vector ) {
|
|
|
555
598
|
|
|
556
599
|
}
|
|
557
600
|
|
|
601
|
+
|
|
602
|
+
function buildCamera( camera ) {
|
|
603
|
+
|
|
604
|
+
const name = camera.name ? camera.name : 'Camera_' + camera.id;
|
|
605
|
+
|
|
606
|
+
const transform = buildMatrix( camera.matrixWorld );
|
|
607
|
+
|
|
608
|
+
if ( camera.matrixWorld.determinant() < 0 ) {
|
|
609
|
+
|
|
610
|
+
console.warn( 'THREE.USDZExporter: USDZ does not support negative scales', camera );
|
|
611
|
+
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
if ( camera.isOrthographicCamera ) {
|
|
615
|
+
|
|
616
|
+
return `def Camera "${name}"
|
|
617
|
+
{
|
|
618
|
+
matrix4d xformOp:transform = ${ transform }
|
|
619
|
+
uniform token[] xformOpOrder = ["xformOp:transform"]
|
|
620
|
+
|
|
621
|
+
float2 clippingRange = (${ camera.near.toPrecision( PRECISION ) }, ${ camera.far.toPrecision( PRECISION ) })
|
|
622
|
+
float horizontalAperture = ${ ( ( Math.abs( camera.left ) + Math.abs( camera.right ) ) * 10 ).toPrecision( PRECISION ) }
|
|
623
|
+
float verticalAperture = ${ ( ( Math.abs( camera.top ) + Math.abs( camera.bottom ) ) * 10 ).toPrecision( PRECISION ) }
|
|
624
|
+
token projection = "orthographic"
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
`;
|
|
628
|
+
|
|
629
|
+
} else {
|
|
630
|
+
|
|
631
|
+
return `def Camera "${name}"
|
|
632
|
+
{
|
|
633
|
+
matrix4d xformOp:transform = ${ transform }
|
|
634
|
+
uniform token[] xformOpOrder = ["xformOp:transform"]
|
|
635
|
+
|
|
636
|
+
float2 clippingRange = (${ camera.near.toPrecision( PRECISION ) }, ${ camera.far.toPrecision( PRECISION ) })
|
|
637
|
+
float focalLength = ${ camera.getFocalLength().toPrecision( PRECISION ) }
|
|
638
|
+
float focusDistance = ${ camera.focus.toPrecision( PRECISION ) }
|
|
639
|
+
float horizontalAperture = ${ camera.getFilmWidth().toPrecision( PRECISION ) }
|
|
640
|
+
token projection = "perspective"
|
|
641
|
+
float verticalAperture = ${ camera.getFilmHeight().toPrecision( PRECISION ) }
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
`;
|
|
645
|
+
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
}
|
|
649
|
+
|
|
558
650
|
export { USDZExporter };
|