@needle-tools/three 0.145.4 → 0.146.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/three.cjs +32586 -35951
- package/build/three.js +32600 -35965
- package/build/three.min.js +6 -7
- package/build/three.module.js +1547 -1154
- package/examples/js/animation/AnimationClipCreator.js +0 -8
- package/examples/js/animation/CCDIKSolver.js +49 -66
- package/examples/js/animation/MMDAnimationHelper.js +66 -137
- package/examples/js/animation/MMDPhysics.js +70 -134
- package/examples/js/cameras/CinematicCamera.js +33 -22
- package/examples/js/controls/ArcballControls.js +138 -405
- package/examples/js/controls/DragControls.js +8 -33
- package/examples/js/controls/FirstPersonControls.js +32 -54
- package/examples/js/controls/FlyControls.js +29 -55
- package/examples/js/controls/OrbitControls.js +85 -95
- package/examples/js/controls/PointerLockControls.js +5 -14
- package/examples/js/controls/TrackballControls.js +33 -86
- package/examples/js/controls/TransformControls.js +84 -169
- package/examples/js/csm/CSM.js +4 -39
- package/examples/js/csm/CSMFrustum.js +3 -9
- package/examples/js/csm/CSMHelper.js +24 -4
- package/examples/js/csm/CSMShader.js +2 -6
- package/examples/js/curves/CurveExtras.js +27 -27
- package/examples/js/curves/NURBSCurve.js +4 -16
- package/examples/js/curves/NURBSSurface.js +3 -9
- package/examples/js/curves/NURBSUtils.js +8 -45
- package/examples/js/effects/AnaglyphEffect.js +4 -18
- package/examples/js/effects/AsciiEffect.js +32 -31
- package/examples/js/effects/OutlineEffect.js +26 -30
- package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
- package/examples/js/effects/PeppersGhostEffect.js +12 -39
- package/examples/js/effects/StereoEffect.js +0 -4
- package/examples/js/environments/RoomEnvironment.js +12 -10
- package/examples/js/exporters/ColladaExporter.js +48 -65
- package/examples/js/exporters/DRACOExporter.js +22 -22
- package/examples/js/exporters/EXRExporter.js +15 -18
- package/examples/js/exporters/GLTFExporter.js +143 -261
- package/examples/js/exporters/MMDExporter.js +5 -12
- package/examples/js/exporters/OBJExporter.js +42 -33
- package/examples/js/exporters/PLYExporter.js +38 -33
- package/examples/js/exporters/STLExporter.js +5 -7
- package/examples/js/exporters/USDZExporter.js +110 -25
- package/examples/js/geometries/BoxLineGeometry.js +0 -1
- package/examples/js/geometries/ConvexGeometry.js +11 -6
- package/examples/js/geometries/DecalGeometry.js +53 -20
- package/examples/js/geometries/LightningStrike.js +54 -67
- package/examples/js/geometries/ParametricGeometries.js +8 -7
- package/examples/js/geometries/ParametricGeometry.js +25 -12
- package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
- package/examples/js/geometries/TeapotGeometry.js +54 -50
- package/examples/js/geometries/TextGeometry.js +6 -4
- package/examples/js/helpers/LightProbeHelper.js +1 -2
- package/examples/js/helpers/OctreeHelper.js +22 -20
- package/examples/js/helpers/PositionalAudioHelper.js +8 -6
- package/examples/js/helpers/RectAreaLightHelper.js +6 -7
- package/examples/js/helpers/VertexNormalsHelper.js +15 -13
- package/examples/js/helpers/VertexTangentsHelper.js +15 -9
- package/examples/js/helpers/ViewHelper.js +31 -16
- package/examples/js/interactive/HTMLMesh.js +22 -33
- package/examples/js/interactive/InteractiveGroup.js +6 -12
- package/examples/js/interactive/SelectionBox.js +3 -70
- package/examples/js/interactive/SelectionHelper.js +0 -8
- package/examples/js/lights/LightProbeGenerator.js +32 -39
- package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
- package/examples/js/lines/LineGeometry.js +3 -5
- package/examples/js/lines/LineMaterial.js +4 -11
- package/examples/js/lines/LineSegments2.js +38 -89
- package/examples/js/lines/LineSegmentsGeometry.js +7 -28
- package/examples/js/lines/Wireframe.js +2 -7
- package/examples/js/lines/WireframeGeometry2.js +3 -1
- package/examples/js/loaders/3DMLoader.js +58 -155
- package/examples/js/loaders/3MFLoader.js +72 -106
- package/examples/js/loaders/AMFLoader.js +0 -25
- package/examples/js/loaders/BVHLoader.js +44 -43
- package/examples/js/loaders/BasisTextureLoader.js +16 -46
- package/examples/js/loaders/ColladaLoader.js +201 -359
- package/examples/js/loaders/DDSLoader.js +24 -25
- package/examples/js/loaders/DRACOLoader.js +29 -66
- package/examples/js/loaders/EXRLoader.js +67 -164
- package/examples/js/loaders/FBXLoader.js +286 -441
- package/examples/js/loaders/FontLoader.js +6 -15
- package/examples/js/loaders/GCodeLoader.js +15 -16
- package/examples/js/loaders/GLTFLoader.js +354 -405
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
- package/examples/js/loaders/KMZLoader.js +3 -7
- package/examples/js/loaders/KTXLoader.js +12 -30
- package/examples/js/loaders/LDrawLoader.js +178 -289
- package/examples/js/loaders/LUT3dlLoader.js +7 -11
- package/examples/js/loaders/LUTCubeLoader.js +0 -8
- package/examples/js/loaders/LWOLoader.js +59 -124
- package/examples/js/loaders/LogLuvLoader.js +27 -77
- package/examples/js/loaders/LottieLoader.js +4 -4
- package/examples/js/loaders/MD2Loader.js +26 -27
- package/examples/js/loaders/MDDLoader.js +6 -10
- package/examples/js/loaders/MMDLoader.js +180 -189
- package/examples/js/loaders/MTLLoader.js +18 -47
- package/examples/js/loaders/MaterialXLoader.js +392 -0
- package/examples/js/loaders/NRRDLoader.js +44 -84
- package/examples/js/loaders/OBJLoader.js +50 -65
- package/examples/js/loaders/PCDLoader.js +34 -29
- package/examples/js/loaders/PDBLoader.js +17 -13
- package/examples/js/loaders/PLYLoader.js +9 -39
- package/examples/js/loaders/PRWMLoader.js +11 -22
- package/examples/js/loaders/PVRLoader.js +7 -16
- package/examples/js/loaders/RGBELoader.js +36 -61
- package/examples/js/loaders/RGBMLoader.js +26 -87
- package/examples/js/loaders/STLLoader.js +20 -27
- package/examples/js/loaders/SVGLoader.js +361 -233
- package/examples/js/loaders/TDSLoader.js +81 -118
- package/examples/js/loaders/TGALoader.js +39 -41
- package/examples/js/loaders/TIFFLoader.js +0 -1
- package/examples/js/loaders/TTFLoader.js +0 -8
- package/examples/js/loaders/TiltLoader.js +14 -15
- package/examples/js/loaders/VOXLoader.js +8 -16
- package/examples/js/loaders/VRMLLoader.js +243 -340
- package/examples/js/loaders/VTKLoader.js +101 -118
- package/examples/js/loaders/XYZLoader.js +2 -4
- package/examples/js/loaders/lwo/IFFParser.js +55 -136
- package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
- package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
- package/examples/js/materials/MeshGouraudMaterial.js +15 -13
- package/examples/js/math/Capsule.js +0 -17
- package/examples/js/math/ColorConverter.js +3 -3
- package/examples/js/math/ConvexHull.js +183 -139
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/math/Lut.js +8 -15
- package/examples/js/math/MeshSurfaceSampler.js +6 -28
- package/examples/js/math/OBB.js +90 -49
- package/examples/js/math/Octree.js +2 -57
- package/examples/js/math/SimplexNoise.js +74 -88
- package/examples/js/misc/ConvexObjectBreaker.js +37 -48
- package/examples/js/misc/GPUComputationRenderer.js +14 -18
- package/examples/js/misc/Gyroscope.js +5 -9
- package/examples/js/misc/MD2Character.js +14 -23
- package/examples/js/misc/MD2CharacterComplex.js +73 -54
- package/examples/js/misc/MorphAnimMesh.js +0 -6
- package/examples/js/misc/MorphBlendMesh.js +3 -30
- package/examples/js/misc/ProgressiveLightMap.js +47 -43
- package/examples/js/misc/RollerCoaster.js +17 -24
- package/examples/js/misc/TubePainter.js +18 -12
- package/examples/js/misc/Volume.js +16 -45
- package/examples/js/misc/VolumeSlice.js +14 -24
- package/examples/js/modifiers/CurveModifier.js +19 -21
- package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
- package/examples/js/modifiers/SimplifyModifier.js +56 -59
- package/examples/js/modifiers/TessellateModifier.js +2 -9
- package/examples/js/objects/GroundProjectedEnv.js +2 -14
- package/examples/js/objects/Lensflare.js +47 -38
- package/examples/js/objects/LightningStorm.js +10 -13
- package/examples/js/objects/MarchingCubes.js +80 -59
- package/examples/js/objects/Reflector.js +22 -20
- package/examples/js/objects/ReflectorForSSRPass.js +19 -23
- package/examples/js/objects/Refractor.js +52 -30
- package/examples/js/objects/ShadowMesh.js +1 -2
- package/examples/js/objects/Sky.js +2 -7
- package/examples/js/objects/Water.js +23 -18
- package/examples/js/objects/Water2.js +20 -19
- package/examples/js/physics/AmmoPhysics.js +23 -20
- package/examples/js/physics/OimoPhysics.js +19 -17
- package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
- package/examples/js/postprocessing/AfterimagePass.js +19 -12
- package/examples/js/postprocessing/BloomPass.js +38 -17
- package/examples/js/postprocessing/BokehPass.js +29 -12
- package/examples/js/postprocessing/ClearPass.js +1 -6
- package/examples/js/postprocessing/CubeTexturePass.js +12 -9
- package/examples/js/postprocessing/DotScreenPass.js +7 -5
- package/examples/js/postprocessing/EffectComposer.js +25 -32
- package/examples/js/postprocessing/FilmPass.js +7 -5
- package/examples/js/postprocessing/GlitchPass.js +10 -11
- package/examples/js/postprocessing/HalftonePass.js +9 -9
- package/examples/js/postprocessing/LUTPass.js +2 -15
- package/examples/js/postprocessing/MaskPass.js +20 -17
- package/examples/js/postprocessing/OutlinePass.js +45 -36
- package/examples/js/postprocessing/Pass.js +11 -14
- package/examples/js/postprocessing/RenderPass.js +3 -7
- package/examples/js/postprocessing/SAOPass.js +40 -32
- package/examples/js/postprocessing/SMAAPass.js +34 -17
- package/examples/js/postprocessing/SSAARenderPass.js +14 -14
- package/examples/js/postprocessing/SSAOPass.js +56 -42
- package/examples/js/postprocessing/SSRPass.js +78 -61
- package/examples/js/postprocessing/SavePass.js +14 -6
- package/examples/js/postprocessing/ShaderPass.js +9 -8
- package/examples/js/postprocessing/TAARenderPass.js +11 -9
- package/examples/js/postprocessing/TexturePass.js +7 -4
- package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
- package/examples/js/renderers/CSS2DRenderer.js +2 -21
- package/examples/js/renderers/CSS3DRenderer.js +3 -24
- package/examples/js/renderers/Projector.js +29 -85
- package/examples/js/renderers/SVGRenderer.js +4 -50
- package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
- package/examples/js/shaders/AfterimageShader.js +3 -6
- package/examples/js/shaders/BasicShader.js +3 -6
- package/examples/js/shaders/BleachBypassShader.js +3 -6
- package/examples/js/shaders/BlendShader.js +3 -6
- package/examples/js/shaders/BokehShader.js +3 -6
- package/examples/js/shaders/BokehShader2.js +4 -13
- package/examples/js/shaders/BrightnessContrastShader.js +3 -6
- package/examples/js/shaders/ColorCorrectionShader.js +2 -6
- package/examples/js/shaders/ColorifyShader.js +2 -6
- package/examples/js/shaders/ConvolutionShader.js +5 -10
- package/examples/js/shaders/CopyShader.js +3 -6
- package/examples/js/shaders/DOFMipMapShader.js +3 -6
- package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
- package/examples/js/shaders/DigitalGlitch.js +3 -6
- package/examples/js/shaders/DotScreenShader.js +2 -6
- package/examples/js/shaders/FXAAShader.js +1 -3
- package/examples/js/shaders/FilmShader.js +3 -6
- package/examples/js/shaders/FocusShader.js +3 -6
- package/examples/js/shaders/FreiChenShader.js +2 -6
- package/examples/js/shaders/GammaCorrectionShader.js +3 -6
- package/examples/js/shaders/GodRaysShader.js +11 -24
- package/examples/js/shaders/HalftoneShader.js +3 -6
- package/examples/js/shaders/HorizontalBlurShader.js +3 -6
- package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
- package/examples/js/shaders/HueSaturationShader.js +3 -6
- package/examples/js/shaders/KaleidoShader.js +3 -6
- package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
- package/examples/js/shaders/LuminosityShader.js +3 -6
- package/examples/js/shaders/MMDToonShader.js +2 -6
- package/examples/js/shaders/MirrorShader.js +3 -6
- package/examples/js/shaders/NormalMapShader.js +2 -6
- package/examples/js/shaders/RGBShiftShader.js +3 -6
- package/examples/js/shaders/SAOShader.js +2 -6
- package/examples/js/shaders/SMAAShader.js +6 -18
- package/examples/js/shaders/SSAOShader.js +2 -6
- package/examples/js/shaders/SSRShader.js +6 -18
- package/examples/js/shaders/SepiaShader.js +3 -6
- package/examples/js/shaders/SobelOperatorShader.js +2 -6
- package/examples/js/shaders/TechnicolorShader.js +3 -6
- package/examples/js/shaders/ToneMapShader.js +3 -6
- package/examples/js/shaders/ToonShader.js +8 -24
- package/examples/js/shaders/TriangleBlurShader.js +2 -6
- package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
- package/examples/js/shaders/VelocityShader.js +126 -0
- package/examples/js/shaders/VerticalBlurShader.js +3 -6
- package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
- package/examples/js/shaders/VignetteShader.js +3 -6
- package/examples/js/shaders/VolumeShader.js +2 -6
- package/examples/js/shaders/WaterRefractionShader.js +2 -6
- package/examples/js/textures/FlakesTexture.js +0 -1
- package/examples/js/utils/BufferGeometryUtils.js +234 -168
- package/examples/js/utils/CameraUtils.js +5 -20
- package/examples/js/utils/GPUStatsPanel.js +3 -12
- package/examples/js/utils/GeometryCompressionUtils.js +19 -44
- package/examples/js/utils/GeometryUtils.js +13 -18
- package/examples/js/utils/LDrawUtils.js +8 -11
- package/examples/js/utils/PackedPhongMaterial.js +6 -4
- package/examples/js/utils/SceneUtils.js +117 -6
- package/examples/js/utils/ShadowMapViewer.js +17 -14
- package/examples/js/utils/SkeletonUtils.js +13 -27
- package/examples/js/utils/UVsDebug.js +20 -12
- package/examples/js/utils/WorkerPool.js +1 -11
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGPU.js +3 -1
- package/examples/jsm/controls/OrbitControls.js +44 -4
- package/examples/jsm/exporters/GLTFExporter.js +17 -131
- package/examples/jsm/exporters/USDZExporter.js +75 -19
- package/examples/jsm/interactive/HTMLMesh.js +2 -0
- package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -2
- package/examples/jsm/loaders/ColladaLoader.js +28 -0
- package/examples/jsm/loaders/FBXLoader.js +16 -2
- package/examples/jsm/loaders/GLTFLoader.js +204 -377
- package/examples/jsm/loaders/KTX2Loader.js +68 -29
- package/examples/jsm/loaders/LDrawLoader.js +14 -13
- package/examples/jsm/loaders/LottieLoader.js +4 -2
- package/examples/jsm/loaders/MaterialXLoader.js +728 -0
- package/examples/jsm/loaders/PCDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +68 -16
- package/examples/jsm/loaders/SVGLoader.js +227 -14
- package/examples/jsm/loaders/USDZLoader.js +31 -16
- package/examples/jsm/nodes/Nodes.js +14 -2
- package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
- package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/SkinningNode.js +1 -1
- package/examples/jsm/nodes/core/Node.js +1 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +36 -4
- package/examples/jsm/nodes/core/NodeFrame.js +2 -2
- package/examples/jsm/nodes/core/NodeVarying.js +7 -4
- package/examples/jsm/nodes/core/VaryingNode.js +6 -4
- package/examples/jsm/nodes/core/constants.js +13 -13
- package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
- package/examples/jsm/nodes/display/ViewportNode.js +106 -0
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
- package/examples/jsm/nodes/materials/Materials.js +9 -7
- package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +6 -2
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
- package/examples/jsm/nodes/math/MathNode.js +5 -0
- package/examples/jsm/nodes/math/OperatorNode.js +6 -1
- package/examples/jsm/nodes/shadernode/ShaderNode.js +26 -13
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +2 -0
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +18 -0
- package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
- package/examples/jsm/nodes/utils/JoinNode.js +8 -2
- package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
- package/examples/jsm/nodes/utils/TimerNode.js +1 -1
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
- package/examples/jsm/postprocessing/BloomPass.js +22 -3
- package/examples/jsm/postprocessing/BokehPass.js +18 -4
- package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
- package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
- package/examples/jsm/postprocessing/EffectComposer.js +9 -0
- package/examples/jsm/postprocessing/FilmPass.js +8 -0
- package/examples/jsm/postprocessing/GlitchPass.js +13 -1
- package/examples/jsm/postprocessing/HalftonePass.js +8 -0
- package/examples/jsm/postprocessing/OutlinePass.js +10 -0
- package/examples/jsm/postprocessing/Pass.js +2 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
- package/examples/jsm/postprocessing/SAOPass.js +20 -0
- package/examples/jsm/postprocessing/SMAAPass.js +16 -0
- package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
- package/examples/jsm/postprocessing/SavePass.js +17 -1
- package/examples/jsm/postprocessing/ShaderPass.js +8 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
- package/examples/jsm/postprocessing/TexturePass.js +8 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +39 -16
- package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
- package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +35 -5
- package/examples/jsm/shaders/MMDToonShader.js +0 -2
- package/examples/jsm/shaders/VelocityShader.js +128 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +130 -6
- package/examples/jsm/utils/SceneUtils.js +129 -4
- package/examples/jsm/utils/TextureUtils.js +85 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +6 -3
- package/package.json +11 -12
- package/src/Three.js +1 -0
- package/src/audio/AudioContext.js +5 -5
- package/src/cameras/CubeCamera.js +14 -14
- package/src/constants.js +1 -1
- package/src/core/InstancedBufferGeometry.js +1 -7
- package/src/extras/Earcut.js +67 -67
- package/src/helpers/DirectionalLightHelper.js +5 -1
- package/src/helpers/HemisphereLightHelper.js +4 -1
- package/src/helpers/PointLightHelper.js +2 -1
- package/src/helpers/SpotLightHelper.js +4 -2
- package/src/lights/PointLight.js +2 -2
- package/src/lights/SpotLight.js +2 -2
- package/src/loaders/FileLoader.js +4 -1
- package/src/loaders/ObjectLoader.js +5 -1
- package/src/materials/Material.js +1 -1
- package/src/math/Color.js +5 -5
- package/src/math/Matrix3.js +53 -18
- package/src/math/Ray.js +2 -5
- package/src/math/Sphere.js +19 -26
- package/src/objects/InstancedMesh.js +7 -0
- package/src/objects/LOD.js +25 -6
- package/src/renderers/WebGL3DRenderTarget.js +1 -1
- package/src/renderers/WebGLArrayRenderTarget.js +1 -1
- package/src/renderers/WebGLCubeRenderTarget.js +1 -1
- package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
- package/src/renderers/WebGLRenderTarget.js +1 -1
- package/src/renderers/WebGLRenderer.js +36 -62
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk.js +3 -0
- package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
- package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +20 -6
- package/src/renderers/shaders/UniformsLib.js +1 -1
- package/src/renderers/shaders/UniformsUtils.js +15 -0
- package/src/renderers/webgl/WebGLAttributes.js +2 -0
- package/src/renderers/webgl/WebGLBackground.js +15 -7
- package/src/renderers/webgl/WebGLLights.js +0 -4
- package/src/renderers/webgl/WebGLMaterials.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -1
- package/src/renderers/webgl/WebGLState.js +31 -1
- package/src/renderers/webgl/WebGLTextures.js +71 -18
- package/src/renderers/webgl/WebGLUniforms.js +116 -20
- package/src/renderers/webgl/WebGLUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +46 -13
- package/src/renderers/webxr/WebXRManager.js +85 -3
- package/src/scenes/Scene.js +8 -0
- package/src/textures/CompressedArrayTexture.js +18 -0
- package/examples/js/libs/lottie_canvas.js +0 -12751
- package/examples/js/shaders/PixelShader.js +0 -51
- package/examples/jsm/shaders/PixelShader.js +0 -44
|
@@ -31,6 +31,16 @@ import {
|
|
|
31
31
|
* diffuse_blue: 'blue'
|
|
32
32
|
* } );
|
|
33
33
|
*
|
|
34
|
+
* Custom properties outside of the defaults for position, uv, normal
|
|
35
|
+
* and color attributes can be added using the setCustomPropertyMapping method.
|
|
36
|
+
* For example, the following maps the element properties “custom_property_a”
|
|
37
|
+
* and “custom_property_b” to an attribute “customAttribute” with an item size of 2.
|
|
38
|
+
* Attribute item sizes are set from the number of element properties in the property array.
|
|
39
|
+
*
|
|
40
|
+
* loader.setCustomPropertyMapping( {
|
|
41
|
+
* customAttribute: ['custom_property_a', 'custom_property_b'],
|
|
42
|
+
* } );
|
|
43
|
+
*
|
|
34
44
|
*/
|
|
35
45
|
|
|
36
46
|
const _color = new Color();
|
|
@@ -42,6 +52,7 @@ class PLYLoader extends Loader {
|
|
|
42
52
|
super( manager );
|
|
43
53
|
|
|
44
54
|
this.propertyNameMapping = {};
|
|
55
|
+
this.customPropertyMapping = {};
|
|
45
56
|
|
|
46
57
|
}
|
|
47
58
|
|
|
@@ -86,6 +97,12 @@ class PLYLoader extends Loader {
|
|
|
86
97
|
|
|
87
98
|
}
|
|
88
99
|
|
|
100
|
+
setCustomPropertyNameMapping( mapping ) {
|
|
101
|
+
|
|
102
|
+
this.customPropertyMapping = mapping;
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
89
106
|
parse( data ) {
|
|
90
107
|
|
|
91
108
|
function parseHeader( data ) {
|
|
@@ -260,18 +277,32 @@ class PLYLoader extends Loader {
|
|
|
260
277
|
|
|
261
278
|
}
|
|
262
279
|
|
|
280
|
+
function createBuffer() {
|
|
281
|
+
|
|
282
|
+
const buffer = {
|
|
283
|
+
indices: [],
|
|
284
|
+
vertices: [],
|
|
285
|
+
normals: [],
|
|
286
|
+
uvs: [],
|
|
287
|
+
faceVertexUvs: [],
|
|
288
|
+
colors: [],
|
|
289
|
+
};
|
|
290
|
+
|
|
291
|
+
for ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {
|
|
292
|
+
|
|
293
|
+
buffer[ customProperty ] = [];
|
|
294
|
+
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return buffer;
|
|
298
|
+
|
|
299
|
+
}
|
|
300
|
+
|
|
263
301
|
function parseASCII( data, header ) {
|
|
264
302
|
|
|
265
303
|
// PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)
|
|
266
304
|
|
|
267
|
-
const buffer =
|
|
268
|
-
indices: [],
|
|
269
|
-
vertices: [],
|
|
270
|
-
normals: [],
|
|
271
|
-
uvs: [],
|
|
272
|
-
faceVertexUvs: [],
|
|
273
|
-
colors: []
|
|
274
|
-
};
|
|
305
|
+
const buffer = createBuffer();
|
|
275
306
|
|
|
276
307
|
let result;
|
|
277
308
|
|
|
@@ -357,6 +388,24 @@ class PLYLoader extends Loader {
|
|
|
357
388
|
|
|
358
389
|
}
|
|
359
390
|
|
|
391
|
+
// custom buffer data
|
|
392
|
+
|
|
393
|
+
for ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {
|
|
394
|
+
|
|
395
|
+
if ( buffer[ customProperty ].length > 0 ) {
|
|
396
|
+
|
|
397
|
+
geometry.setAttribute(
|
|
398
|
+
customProperty,
|
|
399
|
+
new Float32BufferAttribute(
|
|
400
|
+
buffer[ customProperty ],
|
|
401
|
+
scope.customPropertyMapping[ customProperty ].length
|
|
402
|
+
)
|
|
403
|
+
);
|
|
404
|
+
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
}
|
|
408
|
+
|
|
360
409
|
geometry.computeBoundingSphere();
|
|
361
410
|
|
|
362
411
|
return geometry;
|
|
@@ -419,6 +468,16 @@ class PLYLoader extends Loader {
|
|
|
419
468
|
|
|
420
469
|
}
|
|
421
470
|
|
|
471
|
+
for ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {
|
|
472
|
+
|
|
473
|
+
for ( const elementProperty of scope.customPropertyMapping[ customProperty ] ) {
|
|
474
|
+
|
|
475
|
+
buffer[ customProperty ].push( element[ elementProperty ] );
|
|
476
|
+
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
}
|
|
480
|
+
|
|
422
481
|
} else if ( elementName === 'face' ) {
|
|
423
482
|
|
|
424
483
|
const vertex_indices = element.vertex_indices || element.vertex_index; // issue #9338
|
|
@@ -506,14 +565,7 @@ class PLYLoader extends Loader {
|
|
|
506
565
|
|
|
507
566
|
function parseBinary( data, header ) {
|
|
508
567
|
|
|
509
|
-
const buffer =
|
|
510
|
-
indices: [],
|
|
511
|
-
vertices: [],
|
|
512
|
-
normals: [],
|
|
513
|
-
uvs: [],
|
|
514
|
-
faceVertexUvs: [],
|
|
515
|
-
colors: []
|
|
516
|
-
};
|
|
568
|
+
const buffer = createBuffer();
|
|
517
569
|
|
|
518
570
|
const little_endian = ( header.format === 'binary_little_endian' );
|
|
519
571
|
const body = new DataView( data, header.headerLength );
|
|
@@ -1482,7 +1482,7 @@ class SVGLoader extends Loader {
|
|
|
1482
1482
|
let cy = 0;
|
|
1483
1483
|
|
|
1484
1484
|
// Angle
|
|
1485
|
-
angle =
|
|
1485
|
+
angle = array[ 0 ] * Math.PI / 180;
|
|
1486
1486
|
|
|
1487
1487
|
if ( array.length >= 3 ) {
|
|
1488
1488
|
|
|
@@ -1493,10 +1493,10 @@ class SVGLoader extends Loader {
|
|
|
1493
1493
|
}
|
|
1494
1494
|
|
|
1495
1495
|
// Rotate around center (cx, cy)
|
|
1496
|
-
tempTransform1.
|
|
1497
|
-
tempTransform2.
|
|
1496
|
+
tempTransform1.makeTranslation( - cx, - cy );
|
|
1497
|
+
tempTransform2.makeRotation( angle );
|
|
1498
1498
|
tempTransform3.multiplyMatrices( tempTransform2, tempTransform1 );
|
|
1499
|
-
tempTransform1.
|
|
1499
|
+
tempTransform1.makeTranslation( cx, cy );
|
|
1500
1500
|
currentTransform.multiplyMatrices( tempTransform1, tempTransform3 );
|
|
1501
1501
|
|
|
1502
1502
|
}
|
|
@@ -1588,7 +1588,120 @@ class SVGLoader extends Loader {
|
|
|
1588
1588
|
|
|
1589
1589
|
}
|
|
1590
1590
|
|
|
1591
|
-
|
|
1591
|
+
function transfEllipseGeneric( curve ) {
|
|
1592
|
+
|
|
1593
|
+
// For math description see:
|
|
1594
|
+
// https://math.stackexchange.com/questions/4544164
|
|
1595
|
+
|
|
1596
|
+
const a = curve.xRadius;
|
|
1597
|
+
const b = curve.yRadius;
|
|
1598
|
+
|
|
1599
|
+
const cosTheta = Math.cos( curve.aRotation );
|
|
1600
|
+
const sinTheta = Math.sin( curve.aRotation );
|
|
1601
|
+
|
|
1602
|
+
const v1 = new Vector3( a * cosTheta, a * sinTheta, 0 );
|
|
1603
|
+
const v2 = new Vector3( -b * sinTheta, b * cosTheta, 0 );
|
|
1604
|
+
|
|
1605
|
+
const f1 = v1.applyMatrix3( m );
|
|
1606
|
+
const f2 = v2.applyMatrix3( m );
|
|
1607
|
+
|
|
1608
|
+
const mF = tempTransform0.set(
|
|
1609
|
+
f1.x, f2.x, 0,
|
|
1610
|
+
f1.y, f2.y, 0,
|
|
1611
|
+
0, 0, 1,
|
|
1612
|
+
);
|
|
1613
|
+
|
|
1614
|
+
const mFInv = tempTransform1.copy( mF ).invert();
|
|
1615
|
+
const mFInvT = tempTransform2.copy( mFInv ).transpose();
|
|
1616
|
+
const mQ = mFInvT.multiply( mFInv );
|
|
1617
|
+
const mQe = mQ.elements;
|
|
1618
|
+
|
|
1619
|
+
const ed = eigenDecomposition( mQe[0], mQe[1], mQe[4] );
|
|
1620
|
+
const rt1sqrt = Math.sqrt( ed.rt1 );
|
|
1621
|
+
const rt2sqrt = Math.sqrt( ed.rt2 );
|
|
1622
|
+
|
|
1623
|
+
curve.xRadius = 1 / rt1sqrt;
|
|
1624
|
+
curve.yRadius = 1 / rt2sqrt;
|
|
1625
|
+
curve.aRotation = Math.atan2( ed.sn, ed.cs );
|
|
1626
|
+
|
|
1627
|
+
const isFullEllipse =
|
|
1628
|
+
( curve.aEndAngle - curve.aStartAngle ) % ( 2 * Math.PI ) < Number.EPSILON;
|
|
1629
|
+
|
|
1630
|
+
// Do not touch angles of a full ellipse because after transformation they
|
|
1631
|
+
// would converge to a sinle value effectively removing the whole curve
|
|
1632
|
+
|
|
1633
|
+
if ( !isFullEllipse ) {
|
|
1634
|
+
|
|
1635
|
+
const mDsqrt = tempTransform1.set(
|
|
1636
|
+
rt1sqrt, 0, 0,
|
|
1637
|
+
0, rt2sqrt, 0,
|
|
1638
|
+
0, 0, 1,
|
|
1639
|
+
);
|
|
1640
|
+
|
|
1641
|
+
const mRT = tempTransform2.set(
|
|
1642
|
+
ed.cs, ed.sn, 0,
|
|
1643
|
+
-ed.sn, ed.cs, 0,
|
|
1644
|
+
0, 0, 1,
|
|
1645
|
+
);
|
|
1646
|
+
|
|
1647
|
+
const mDRF = mDsqrt.multiply( mRT ).multiply( mF );
|
|
1648
|
+
|
|
1649
|
+
const transformAngle = phi => {
|
|
1650
|
+
|
|
1651
|
+
const { x: cosR, y: sinR } =
|
|
1652
|
+
new Vector3( Math.cos( phi ), Math.sin( phi ), 0 ).applyMatrix3( mDRF );
|
|
1653
|
+
|
|
1654
|
+
return Math.atan2( sinR, cosR );
|
|
1655
|
+
|
|
1656
|
+
}
|
|
1657
|
+
|
|
1658
|
+
curve.aStartAngle = transformAngle( curve.aStartAngle );
|
|
1659
|
+
curve.aEndAngle = transformAngle( curve.aEndAngle );
|
|
1660
|
+
|
|
1661
|
+
if ( isTransformFlipped( m ) ) {
|
|
1662
|
+
|
|
1663
|
+
curve.aClockwise = !curve.aClockwise;
|
|
1664
|
+
|
|
1665
|
+
}
|
|
1666
|
+
|
|
1667
|
+
}
|
|
1668
|
+
|
|
1669
|
+
}
|
|
1670
|
+
|
|
1671
|
+
function transfEllipseNoSkew( curve ) {
|
|
1672
|
+
|
|
1673
|
+
// Faster shortcut if no skew is applied
|
|
1674
|
+
// (e.g, a euclidean transform of a group containing the ellipse)
|
|
1675
|
+
|
|
1676
|
+
const sx = getTransformScaleX( m );
|
|
1677
|
+
const sy = getTransformScaleY( m );
|
|
1678
|
+
|
|
1679
|
+
curve.xRadius *= sx;
|
|
1680
|
+
curve.yRadius *= sy;
|
|
1681
|
+
|
|
1682
|
+
// Extract rotation angle from the matrix of form:
|
|
1683
|
+
//
|
|
1684
|
+
// | cosθ sx -sinθ sy |
|
|
1685
|
+
// | sinθ sx cosθ sy |
|
|
1686
|
+
//
|
|
1687
|
+
// Remembering that tanθ = sinθ / cosθ; and that
|
|
1688
|
+
// `sx`, `sy`, or both might be zero.
|
|
1689
|
+
const theta =
|
|
1690
|
+
sx > Number.EPSILON
|
|
1691
|
+
? Math.atan2( m.elements[ 1 ], m.elements[ 0 ] )
|
|
1692
|
+
: Math.atan2( - m.elements[ 3 ], m.elements[ 4 ] );
|
|
1693
|
+
|
|
1694
|
+
curve.aRotation += theta;
|
|
1695
|
+
|
|
1696
|
+
if ( isTransformFlipped( m ) ) {
|
|
1697
|
+
|
|
1698
|
+
curve.aStartAngle *= -1;
|
|
1699
|
+
curve.aEndAngle *= -1;
|
|
1700
|
+
curve.aClockwise = !curve.aClockwise;
|
|
1701
|
+
|
|
1702
|
+
}
|
|
1703
|
+
|
|
1704
|
+
}
|
|
1592
1705
|
|
|
1593
1706
|
const subPaths = path.subPaths;
|
|
1594
1707
|
|
|
@@ -1621,19 +1734,24 @@ class SVGLoader extends Loader {
|
|
|
1621
1734
|
|
|
1622
1735
|
} else if ( curve.isEllipseCurve ) {
|
|
1623
1736
|
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
console.warn( 'SVGLoader: Elliptic arc or ellipse rotation or skewing is not implemented.' );
|
|
1627
|
-
|
|
1628
|
-
}
|
|
1737
|
+
// Transform ellipse center point
|
|
1629
1738
|
|
|
1630
1739
|
tempV2.set( curve.aX, curve.aY );
|
|
1631
1740
|
transfVec2( tempV2 );
|
|
1632
1741
|
curve.aX = tempV2.x;
|
|
1633
1742
|
curve.aY = tempV2.y;
|
|
1634
1743
|
|
|
1635
|
-
|
|
1636
|
-
|
|
1744
|
+
// Transform ellipse shape parameters
|
|
1745
|
+
|
|
1746
|
+
if ( isTransformSkewed( m ) ) {
|
|
1747
|
+
|
|
1748
|
+
transfEllipseGeneric( curve );
|
|
1749
|
+
|
|
1750
|
+
} else {
|
|
1751
|
+
|
|
1752
|
+
transfEllipseNoSkew( curve );
|
|
1753
|
+
|
|
1754
|
+
}
|
|
1637
1755
|
|
|
1638
1756
|
}
|
|
1639
1757
|
|
|
@@ -1643,9 +1761,25 @@ class SVGLoader extends Loader {
|
|
|
1643
1761
|
|
|
1644
1762
|
}
|
|
1645
1763
|
|
|
1646
|
-
function
|
|
1764
|
+
function isTransformFlipped( m ) {
|
|
1765
|
+
|
|
1766
|
+
const te = m.elements;
|
|
1767
|
+
return te[ 0 ] * te[ 4 ] - te[ 1 ] * te[ 3 ] < 0;
|
|
1768
|
+
|
|
1769
|
+
}
|
|
1770
|
+
|
|
1771
|
+
function isTransformSkewed( m ) {
|
|
1772
|
+
|
|
1773
|
+
const te = m.elements;
|
|
1774
|
+
const basisDot = te[ 0 ] * te[ 3 ] + te[ 1 ] * te[ 4 ];
|
|
1775
|
+
|
|
1776
|
+
// Shortcut for trivial rotations and transformations
|
|
1777
|
+
if ( basisDot === 0 ) return false;
|
|
1778
|
+
|
|
1779
|
+
const sx = getTransformScaleX( m );
|
|
1780
|
+
const sy = getTransformScaleY( m );
|
|
1647
1781
|
|
|
1648
|
-
return
|
|
1782
|
+
return Math.abs( basisDot / ( sx * sy ) ) > Number.EPSILON;
|
|
1649
1783
|
|
|
1650
1784
|
}
|
|
1651
1785
|
|
|
@@ -1663,6 +1797,85 @@ class SVGLoader extends Loader {
|
|
|
1663
1797
|
|
|
1664
1798
|
}
|
|
1665
1799
|
|
|
1800
|
+
// Calculates the eigensystem of a real symmetric 2x2 matrix
|
|
1801
|
+
// [ A B ]
|
|
1802
|
+
// [ B C ]
|
|
1803
|
+
// in the form
|
|
1804
|
+
// [ A B ] = [ cs -sn ] [ rt1 0 ] [ cs sn ]
|
|
1805
|
+
// [ B C ] [ sn cs ] [ 0 rt2 ] [ -sn cs ]
|
|
1806
|
+
// where rt1 >= rt2.
|
|
1807
|
+
//
|
|
1808
|
+
// Adapted from: https://www.mpi-hd.mpg.de/personalhomes/globes/3x3/index.html
|
|
1809
|
+
// -> Algorithms for real symmetric matrices -> Analytical (2x2 symmetric)
|
|
1810
|
+
function eigenDecomposition( A, B, C ) {
|
|
1811
|
+
|
|
1812
|
+
let rt1, rt2, cs, sn, t;
|
|
1813
|
+
const sm = A + C;
|
|
1814
|
+
const df = A - C;
|
|
1815
|
+
const rt = Math.sqrt( df * df + 4 * B * B );
|
|
1816
|
+
|
|
1817
|
+
if ( sm > 0 ) {
|
|
1818
|
+
|
|
1819
|
+
rt1 = 0.5 * ( sm + rt );
|
|
1820
|
+
t = 1 / rt1;
|
|
1821
|
+
rt2 = A * t * C - B * t * B;
|
|
1822
|
+
|
|
1823
|
+
} else if ( sm < 0 ) {
|
|
1824
|
+
|
|
1825
|
+
rt2 = 0.5 * ( sm - rt );
|
|
1826
|
+
|
|
1827
|
+
} else {
|
|
1828
|
+
|
|
1829
|
+
// This case needs to be treated separately to avoid div by 0
|
|
1830
|
+
|
|
1831
|
+
rt1 = 0.5 * rt;
|
|
1832
|
+
rt2 = -0.5 * rt;
|
|
1833
|
+
|
|
1834
|
+
}
|
|
1835
|
+
|
|
1836
|
+
// Calculate eigenvectors
|
|
1837
|
+
|
|
1838
|
+
if ( df > 0 ) {
|
|
1839
|
+
|
|
1840
|
+
cs = df + rt;
|
|
1841
|
+
|
|
1842
|
+
} else {
|
|
1843
|
+
|
|
1844
|
+
cs = df - rt;
|
|
1845
|
+
|
|
1846
|
+
}
|
|
1847
|
+
|
|
1848
|
+
if ( Math.abs( cs ) > 2 * Math.abs( B ) ) {
|
|
1849
|
+
|
|
1850
|
+
t = -2 * B / cs;
|
|
1851
|
+
sn = 1 / Math.sqrt( 1 + t * t );
|
|
1852
|
+
cs = t * sn;
|
|
1853
|
+
|
|
1854
|
+
} else if ( Math.abs( B ) === 0 ) {
|
|
1855
|
+
|
|
1856
|
+
cs = 1;
|
|
1857
|
+
sn = 0;
|
|
1858
|
+
|
|
1859
|
+
} else {
|
|
1860
|
+
|
|
1861
|
+
t = -0.5 * cs / B;
|
|
1862
|
+
cs = 1 / Math.sqrt( 1 + t * t );
|
|
1863
|
+
sn = t * cs;
|
|
1864
|
+
|
|
1865
|
+
}
|
|
1866
|
+
|
|
1867
|
+
if ( df > 0 ) {
|
|
1868
|
+
|
|
1869
|
+
t = cs;
|
|
1870
|
+
cs = -sn;
|
|
1871
|
+
sn = t;
|
|
1872
|
+
|
|
1873
|
+
}
|
|
1874
|
+
|
|
1875
|
+
return { rt1, rt2, cs, sn };
|
|
1876
|
+
|
|
1877
|
+
}
|
|
1878
|
+
|
|
1666
1879
|
//
|
|
1667
1880
|
|
|
1668
1881
|
const paths = [];
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
RepeatWrapping,
|
|
12
12
|
sRGBEncoding,
|
|
13
13
|
TextureLoader,
|
|
14
|
+
Object3D,
|
|
14
15
|
} from 'three';
|
|
15
16
|
|
|
16
17
|
import * as fflate from '../libs/fflate.module.js';
|
|
@@ -206,7 +207,7 @@ class USDZLoader extends Loader {
|
|
|
206
207
|
|
|
207
208
|
const zip = fflate.unzipSync( new Uint8Array( buffer ) ); // eslint-disable-line no-undef
|
|
208
209
|
|
|
209
|
-
console.log( zip );
|
|
210
|
+
// console.log( zip );
|
|
210
211
|
|
|
211
212
|
const assets = parseAssets( zip );
|
|
212
213
|
|
|
@@ -232,6 +233,8 @@ class USDZLoader extends Loader {
|
|
|
232
233
|
|
|
233
234
|
function findMeshGeometry( data ) {
|
|
234
235
|
|
|
236
|
+
if ( ! data ) return undefined;
|
|
237
|
+
|
|
235
238
|
if ( 'prepend references' in data ) {
|
|
236
239
|
|
|
237
240
|
const reference = data[ 'prepend references' ];
|
|
@@ -310,6 +313,8 @@ class USDZLoader extends Loader {
|
|
|
310
313
|
|
|
311
314
|
function buildGeometry( data ) {
|
|
312
315
|
|
|
316
|
+
if ( ! data ) return undefined;
|
|
317
|
+
|
|
313
318
|
let geometry = new BufferGeometry();
|
|
314
319
|
|
|
315
320
|
if ( 'int[] faceVertexIndices' in data ) {
|
|
@@ -364,7 +369,7 @@ class USDZLoader extends Loader {
|
|
|
364
369
|
}
|
|
365
370
|
|
|
366
371
|
}
|
|
367
|
-
|
|
372
|
+
|
|
368
373
|
return geometry;
|
|
369
374
|
|
|
370
375
|
}
|
|
@@ -396,6 +401,8 @@ class USDZLoader extends Loader {
|
|
|
396
401
|
|
|
397
402
|
function findMeshMaterial( data ) {
|
|
398
403
|
|
|
404
|
+
if ( ! data ) return undefined;
|
|
405
|
+
|
|
399
406
|
if ( 'rel material:binding' in data ) {
|
|
400
407
|
|
|
401
408
|
const reference = data[ 'rel material:binding' ];
|
|
@@ -525,7 +532,7 @@ class USDZLoader extends Loader {
|
|
|
525
532
|
|
|
526
533
|
}
|
|
527
534
|
|
|
528
|
-
}
|
|
535
|
+
}
|
|
529
536
|
|
|
530
537
|
}
|
|
531
538
|
|
|
@@ -565,16 +572,16 @@ class USDZLoader extends Loader {
|
|
|
565
572
|
|
|
566
573
|
}
|
|
567
574
|
|
|
568
|
-
function
|
|
575
|
+
function buildObject( data ) {
|
|
569
576
|
|
|
570
577
|
const geometry = buildGeometry( findMeshGeometry( data ) );
|
|
571
578
|
const material = buildMaterial( findMeshMaterial( data ) );
|
|
572
579
|
|
|
573
|
-
const mesh = new Mesh( geometry, material );
|
|
580
|
+
const mesh = geometry && material ? new Mesh( geometry, material ) : new Object3D();
|
|
574
581
|
|
|
575
582
|
if ( 'matrix4d xformOp:transform' in data ) {
|
|
576
583
|
|
|
577
|
-
const array = JSON.parse( '[' + data[ 'matrix4d xformOp:transform'
|
|
584
|
+
const array = JSON.parse( '[' + data[ 'matrix4d xformOp:transform' ].replace( /[()]*/g, '' ) + ']' );
|
|
578
585
|
|
|
579
586
|
mesh.matrix.fromArray( array );
|
|
580
587
|
mesh.matrix.decompose( mesh.position, mesh.quaternion, mesh.scale );
|
|
@@ -585,29 +592,37 @@ class USDZLoader extends Loader {
|
|
|
585
592
|
|
|
586
593
|
}
|
|
587
594
|
|
|
588
|
-
|
|
595
|
+
function buildHierarchy( data, group ) {
|
|
589
596
|
|
|
590
|
-
|
|
597
|
+
for ( const name in data ) {
|
|
591
598
|
|
|
592
|
-
|
|
599
|
+
if ( name.startsWith( 'def Scope' ) ) {
|
|
593
600
|
|
|
594
|
-
|
|
601
|
+
buildHierarchy( data[ name ], group );
|
|
595
602
|
|
|
596
|
-
|
|
603
|
+
} else if ( name.startsWith( 'def Xform' ) ) {
|
|
597
604
|
|
|
598
|
-
|
|
605
|
+
const mesh = buildObject( data[ name ] );
|
|
599
606
|
|
|
600
|
-
|
|
607
|
+
if ( /def Xform "(\w+)"/.test( name ) ) {
|
|
601
608
|
|
|
602
|
-
|
|
609
|
+
mesh.name = /def Xform "(\w+)"/.exec( name )[ 1 ];
|
|
603
610
|
|
|
604
|
-
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
group.add( mesh );
|
|
614
|
+
|
|
615
|
+
buildHierarchy( data[ name ], mesh );
|
|
616
|
+
|
|
617
|
+
}
|
|
605
618
|
|
|
606
619
|
}
|
|
607
620
|
|
|
608
621
|
}
|
|
609
622
|
|
|
610
|
-
|
|
623
|
+
const group = new Group();
|
|
624
|
+
|
|
625
|
+
buildHierarchy( root, group );
|
|
611
626
|
|
|
612
627
|
return group;
|
|
613
628
|
|
|
@@ -59,7 +59,9 @@ import ColorAdjustmentNode from './display/ColorAdjustmentNode.js';
|
|
|
59
59
|
import ColorSpaceNode from './display/ColorSpaceNode.js';
|
|
60
60
|
import FrontFacingNode from './display/FrontFacingNode.js';
|
|
61
61
|
import NormalMapNode from './display/NormalMapNode.js';
|
|
62
|
+
import PosterizeNode from './display/PosterizeNode.js';
|
|
62
63
|
import ToneMappingNode from './display/ToneMappingNode.js';
|
|
64
|
+
import ViewportNode from './display/ViewportNode.js';
|
|
63
65
|
|
|
64
66
|
// math
|
|
65
67
|
import MathNode from './math/MathNode.js';
|
|
@@ -79,6 +81,7 @@ import AnalyticLightNode from './lighting/AnalyticLightNode.js';
|
|
|
79
81
|
// utils
|
|
80
82
|
import ArrayElementNode from './utils/ArrayElementNode.js';
|
|
81
83
|
import ConvertNode from './utils/ConvertNode.js';
|
|
84
|
+
import EquirectUVNode from './utils/EquirectUVNode.js';
|
|
82
85
|
import JoinNode from './utils/JoinNode.js';
|
|
83
86
|
import MatcapUVNode from './utils/MatcapUVNode.js';
|
|
84
87
|
import MaxMipLevelNode from './utils/MaxMipLevelNode.js';
|
|
@@ -88,6 +91,7 @@ import RotateUVNode from './utils/RotateUVNode.js';
|
|
|
88
91
|
import SplitNode from './utils/SplitNode.js';
|
|
89
92
|
import SpriteSheetUVNode from './utils/SpriteSheetUVNode.js';
|
|
90
93
|
import TimerNode from './utils/TimerNode.js';
|
|
94
|
+
import TriplanarTexturesNode from './utils/TriplanarTexturesNode.js';
|
|
91
95
|
|
|
92
96
|
// loaders
|
|
93
97
|
import NodeLoader from './loaders/NodeLoader.js';
|
|
@@ -182,7 +186,9 @@ const nodeLib = {
|
|
|
182
186
|
ColorSpaceNode,
|
|
183
187
|
FrontFacingNode,
|
|
184
188
|
NormalMapNode,
|
|
189
|
+
PosterizeNode,
|
|
185
190
|
ToneMappingNode,
|
|
191
|
+
ViewportNode,
|
|
186
192
|
|
|
187
193
|
// math
|
|
188
194
|
MathNode,
|
|
@@ -202,6 +208,7 @@ const nodeLib = {
|
|
|
202
208
|
// utils
|
|
203
209
|
ArrayElementNode,
|
|
204
210
|
ConvertNode,
|
|
211
|
+
EquirectUVNode,
|
|
205
212
|
JoinNode,
|
|
206
213
|
MatcapUVNode,
|
|
207
214
|
MaxMipLevelNode,
|
|
@@ -211,6 +218,7 @@ const nodeLib = {
|
|
|
211
218
|
SplitNode,
|
|
212
219
|
SpriteSheetUVNode,
|
|
213
220
|
TimerNode,
|
|
221
|
+
TriplanarTexturesNode,
|
|
214
222
|
|
|
215
223
|
// procedural
|
|
216
224
|
CheckerNode,
|
|
@@ -226,7 +234,7 @@ const nodeLib = {
|
|
|
226
234
|
|
|
227
235
|
// parsers
|
|
228
236
|
WGSLNodeParser,
|
|
229
|
-
GLSLNodeParser
|
|
237
|
+
GLSLNodeParser
|
|
230
238
|
|
|
231
239
|
};
|
|
232
240
|
|
|
@@ -298,7 +306,9 @@ export {
|
|
|
298
306
|
ColorSpaceNode,
|
|
299
307
|
FrontFacingNode,
|
|
300
308
|
NormalMapNode,
|
|
309
|
+
PosterizeNode,
|
|
301
310
|
ToneMappingNode,
|
|
311
|
+
ViewportNode,
|
|
302
312
|
|
|
303
313
|
// math
|
|
304
314
|
MathNode,
|
|
@@ -318,6 +328,7 @@ export {
|
|
|
318
328
|
// utils
|
|
319
329
|
ArrayElementNode,
|
|
320
330
|
ConvertNode,
|
|
331
|
+
EquirectUVNode,
|
|
321
332
|
JoinNode,
|
|
322
333
|
MatcapUVNode,
|
|
323
334
|
MaxMipLevelNode,
|
|
@@ -327,6 +338,7 @@ export {
|
|
|
327
338
|
SplitNode,
|
|
328
339
|
SpriteSheetUVNode,
|
|
329
340
|
TimerNode,
|
|
341
|
+
TriplanarTexturesNode,
|
|
330
342
|
|
|
331
343
|
// procedural
|
|
332
344
|
CheckerNode,
|
|
@@ -342,5 +354,5 @@ export {
|
|
|
342
354
|
|
|
343
355
|
// parsers
|
|
344
356
|
WGSLNodeParser,
|
|
345
|
-
GLSLNodeParser
|
|
357
|
+
GLSLNodeParser
|
|
346
358
|
};
|
|
@@ -10,6 +10,7 @@ class PositionNode extends Node {
|
|
|
10
10
|
static GEOMETRY = 'geometry';
|
|
11
11
|
static LOCAL = 'local';
|
|
12
12
|
static WORLD = 'world';
|
|
13
|
+
static WORLD_DIRECTION = 'worldDirection';
|
|
13
14
|
static VIEW = 'view';
|
|
14
15
|
static VIEW_DIRECTION = 'viewDirection';
|
|
15
16
|
|
|
@@ -56,6 +57,11 @@ class PositionNode extends Node {
|
|
|
56
57
|
const vertexPositionNode = new MathNode( MathNode.NEGATE, new PositionNode( PositionNode.VIEW ) );
|
|
57
58
|
outputNode = new MathNode( MathNode.NORMALIZE, new VaryingNode( vertexPositionNode ) );
|
|
58
59
|
|
|
60
|
+
} else if ( scope === PositionNode.WORLD_DIRECTION ) {
|
|
61
|
+
|
|
62
|
+
const vertexPositionNode = new MathNode( MathNode.NEGATE, new PositionNode( PositionNode.WORLD ) );
|
|
63
|
+
outputNode = new MathNode( MathNode.NORMALIZE, new VaryingNode( vertexPositionNode ) );
|
|
64
|
+
|
|
59
65
|
}
|
|
60
66
|
|
|
61
67
|
return outputNode.build( builder, this.getNodeType( builder ) );
|