super-three 0.144.0 → 0.147.0
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 +735 -387
- package/build/three.js +735 -387
- package/build/three.min.js +1 -1
- package/build/three.module.js +910 -408
- 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 +70 -2
- 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
|
@@ -1,16 +1,121 @@
|
|
|
1
1
|
import {
|
|
2
2
|
BufferAttribute,
|
|
3
3
|
BufferGeometry,
|
|
4
|
+
ClampToEdgeWrapping,
|
|
4
5
|
FileLoader,
|
|
5
6
|
Group,
|
|
6
7
|
Loader,
|
|
7
8
|
Mesh,
|
|
8
9
|
MeshStandardMaterial,
|
|
9
|
-
|
|
10
|
+
MirroredRepeatWrapping,
|
|
11
|
+
RepeatWrapping,
|
|
12
|
+
sRGBEncoding,
|
|
13
|
+
TextureLoader,
|
|
14
|
+
Object3D,
|
|
10
15
|
} from 'three';
|
|
11
16
|
|
|
12
17
|
import * as fflate from '../libs/fflate.module.js';
|
|
13
18
|
|
|
19
|
+
class USDAParser {
|
|
20
|
+
|
|
21
|
+
parse( text ) {
|
|
22
|
+
|
|
23
|
+
const data = {};
|
|
24
|
+
|
|
25
|
+
const lines = text.split( '\n' );
|
|
26
|
+
const length = lines.length;
|
|
27
|
+
|
|
28
|
+
let current = 0;
|
|
29
|
+
let string = null;
|
|
30
|
+
let target = data;
|
|
31
|
+
|
|
32
|
+
const stack = [ data ];
|
|
33
|
+
|
|
34
|
+
// debugger;
|
|
35
|
+
|
|
36
|
+
function parseNextLine() {
|
|
37
|
+
|
|
38
|
+
const line = lines[ current ];
|
|
39
|
+
|
|
40
|
+
// console.log( line );
|
|
41
|
+
|
|
42
|
+
if ( line.includes( '=' ) ) {
|
|
43
|
+
|
|
44
|
+
const assignment = line.split( '=' );
|
|
45
|
+
|
|
46
|
+
const lhs = assignment[ 0 ].trim();
|
|
47
|
+
const rhs = assignment[ 1 ].trim();
|
|
48
|
+
|
|
49
|
+
if ( rhs.endsWith( '{' ) ) {
|
|
50
|
+
|
|
51
|
+
const group = {};
|
|
52
|
+
stack.push( group );
|
|
53
|
+
|
|
54
|
+
target[ lhs ] = group;
|
|
55
|
+
target = group;
|
|
56
|
+
|
|
57
|
+
} else {
|
|
58
|
+
|
|
59
|
+
target[ lhs ] = rhs;
|
|
60
|
+
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
} else if ( line.endsWith( '{' ) ) {
|
|
64
|
+
|
|
65
|
+
const group = target[ string ] || {};
|
|
66
|
+
stack.push( group );
|
|
67
|
+
|
|
68
|
+
target[ string ] = group;
|
|
69
|
+
target = group;
|
|
70
|
+
|
|
71
|
+
} else if ( line.endsWith( '}' ) ) {
|
|
72
|
+
|
|
73
|
+
stack.pop();
|
|
74
|
+
|
|
75
|
+
if ( stack.length === 0 ) return;
|
|
76
|
+
|
|
77
|
+
target = stack[ stack.length - 1 ];
|
|
78
|
+
|
|
79
|
+
} else if ( line.endsWith( '(' ) ) {
|
|
80
|
+
|
|
81
|
+
const meta = {};
|
|
82
|
+
stack.push( meta );
|
|
83
|
+
|
|
84
|
+
string = line.split( '(' )[ 0 ].trim() || string;
|
|
85
|
+
|
|
86
|
+
target[ string ] = meta;
|
|
87
|
+
target = meta;
|
|
88
|
+
|
|
89
|
+
} else if ( line.endsWith( ')' ) ) {
|
|
90
|
+
|
|
91
|
+
stack.pop();
|
|
92
|
+
|
|
93
|
+
target = stack[ stack.length - 1 ];
|
|
94
|
+
|
|
95
|
+
} else {
|
|
96
|
+
|
|
97
|
+
string = line.trim();
|
|
98
|
+
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
current ++;
|
|
102
|
+
|
|
103
|
+
if ( current < length ) {
|
|
104
|
+
|
|
105
|
+
parseNextLine();
|
|
106
|
+
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
parseNextLine();
|
|
112
|
+
|
|
113
|
+
return data;
|
|
114
|
+
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
}
|
|
118
|
+
|
|
14
119
|
class USDZLoader extends Loader {
|
|
15
120
|
|
|
16
121
|
constructor( manager ) {
|
|
@@ -56,7 +161,9 @@ class USDZLoader extends Loader {
|
|
|
56
161
|
|
|
57
162
|
parse( buffer ) {
|
|
58
163
|
|
|
59
|
-
|
|
164
|
+
const parser = new USDAParser();
|
|
165
|
+
|
|
166
|
+
function parseAssets( zip ) {
|
|
60
167
|
|
|
61
168
|
const data = {};
|
|
62
169
|
const loader = new FileLoader();
|
|
@@ -71,6 +178,13 @@ class USDZLoader extends Loader {
|
|
|
71
178
|
|
|
72
179
|
}
|
|
73
180
|
|
|
181
|
+
if ( filename.endsWith( 'usd' ) ) {
|
|
182
|
+
|
|
183
|
+
const text = fflate.strFromU8( zip[ filename ] );
|
|
184
|
+
data[ filename ] = parser.parse( text );
|
|
185
|
+
|
|
186
|
+
}
|
|
187
|
+
|
|
74
188
|
}
|
|
75
189
|
|
|
76
190
|
return data;
|
|
@@ -95,123 +209,86 @@ class USDZLoader extends Loader {
|
|
|
95
209
|
|
|
96
210
|
// console.log( zip );
|
|
97
211
|
|
|
98
|
-
const
|
|
212
|
+
const assets = parseAssets( zip );
|
|
213
|
+
|
|
214
|
+
// console.log( assets )
|
|
215
|
+
|
|
99
216
|
const file = findUSD( zip );
|
|
100
217
|
|
|
101
218
|
if ( file === undefined ) {
|
|
102
219
|
|
|
103
220
|
console.warn( 'THREE.USDZLoader: No usda file found.' );
|
|
104
221
|
|
|
105
|
-
return
|
|
222
|
+
return new Group();
|
|
106
223
|
|
|
107
224
|
}
|
|
108
225
|
|
|
226
|
+
|
|
109
227
|
// Parse file
|
|
110
228
|
|
|
111
229
|
const text = fflate.strFromU8( file );
|
|
112
|
-
const
|
|
113
|
-
const length = lines.length;
|
|
230
|
+
const root = parser.parse( text );
|
|
114
231
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
let current = 0;
|
|
118
|
-
let string = null;
|
|
119
|
-
let target = data;
|
|
232
|
+
// Build scene
|
|
120
233
|
|
|
121
|
-
|
|
234
|
+
function findMeshGeometry( data ) {
|
|
122
235
|
|
|
123
|
-
|
|
236
|
+
if ( ! data ) return undefined;
|
|
124
237
|
|
|
125
|
-
|
|
238
|
+
if ( 'prepend references' in data ) {
|
|
126
239
|
|
|
127
|
-
|
|
240
|
+
const reference = data[ 'prepend references' ];
|
|
241
|
+
const parts = reference.split( '@' );
|
|
242
|
+
const path = parts[ 1 ].replace( /^.\//, '' );
|
|
243
|
+
const id = parts[ 2 ].replace( /^<\//, '' ).replace( />$/, '' );
|
|
128
244
|
|
|
129
|
-
|
|
245
|
+
return findGeometry( assets[ path ], id );
|
|
130
246
|
|
|
131
|
-
|
|
247
|
+
}
|
|
132
248
|
|
|
133
|
-
|
|
249
|
+
return findGeometry( data );
|
|
134
250
|
|
|
135
|
-
|
|
136
|
-
const rhs = assignment[ 1 ].trim();
|
|
251
|
+
}
|
|
137
252
|
|
|
138
|
-
|
|
253
|
+
function findGeometry( data, id ) {
|
|
139
254
|
|
|
140
|
-
|
|
141
|
-
stack.push( group );
|
|
255
|
+
if ( id !== undefined ) {
|
|
142
256
|
|
|
143
|
-
|
|
144
|
-
target = group;
|
|
257
|
+
const def = `def "%{id}"`;
|
|
145
258
|
|
|
146
|
-
|
|
259
|
+
if ( def in data ) {
|
|
147
260
|
|
|
148
|
-
|
|
261
|
+
return data[ def ];
|
|
149
262
|
|
|
150
263
|
}
|
|
151
264
|
|
|
152
|
-
} else if ( line.endsWith( '{' ) ) {
|
|
153
|
-
|
|
154
|
-
const group = target[ string ] || {};
|
|
155
|
-
stack.push( group );
|
|
156
|
-
|
|
157
|
-
target[ string ] = group;
|
|
158
|
-
target = group;
|
|
159
|
-
|
|
160
|
-
} else if ( line.endsWith( '}' ) ) {
|
|
161
|
-
|
|
162
|
-
stack.pop();
|
|
163
|
-
|
|
164
|
-
if ( stack.length === 0 ) return;
|
|
165
|
-
|
|
166
|
-
target = stack[ stack.length - 1 ];
|
|
167
|
-
|
|
168
|
-
} else if ( line.endsWith( '(' ) ) {
|
|
169
|
-
|
|
170
|
-
const meta = {};
|
|
171
|
-
stack.push( meta );
|
|
172
|
-
|
|
173
|
-
string = line.split( '(' )[ 0 ].trim() || string;
|
|
174
|
-
|
|
175
|
-
target[ string ] = meta;
|
|
176
|
-
target = meta;
|
|
177
|
-
|
|
178
|
-
} else if ( line.endsWith( ')' ) ) {
|
|
179
|
-
|
|
180
|
-
stack.pop();
|
|
181
|
-
|
|
182
|
-
target = stack[ stack.length - 1 ];
|
|
183
|
-
|
|
184
|
-
} else {
|
|
185
|
-
|
|
186
|
-
string = line.trim();
|
|
187
|
-
|
|
188
265
|
}
|
|
189
266
|
|
|
190
|
-
|
|
267
|
+
for ( const name in data ) {
|
|
191
268
|
|
|
192
|
-
|
|
269
|
+
const object = data[ name ];
|
|
193
270
|
|
|
194
|
-
|
|
271
|
+
if ( name.startsWith( 'def Mesh' ) ) {
|
|
195
272
|
|
|
196
|
-
|
|
273
|
+
// Move points to Mesh
|
|
197
274
|
|
|
198
|
-
|
|
275
|
+
if ( 'point3f[] points' in data ) {
|
|
199
276
|
|
|
200
|
-
|
|
277
|
+
object[ 'point3f[] points' ] = data[ 'point3f[] points' ];
|
|
201
278
|
|
|
202
|
-
|
|
279
|
+
}
|
|
203
280
|
|
|
204
|
-
|
|
281
|
+
// Move st to Mesh
|
|
205
282
|
|
|
206
|
-
|
|
283
|
+
if ( 'float2[] primvars:st' in data ) {
|
|
207
284
|
|
|
208
|
-
|
|
285
|
+
object[ 'float2[] primvars:st' ] = data[ 'float2[] primvars:st' ];
|
|
209
286
|
|
|
210
|
-
|
|
287
|
+
}
|
|
211
288
|
|
|
212
289
|
// Move st indices to Mesh
|
|
213
290
|
|
|
214
|
-
if (
|
|
291
|
+
if ( 'int[] primvars:st:indices' in data ) {
|
|
215
292
|
|
|
216
293
|
object[ 'int[] primvars:st:indices' ] = data[ 'int[] primvars:st:indices' ];
|
|
217
294
|
|
|
@@ -236,29 +313,51 @@ class USDZLoader extends Loader {
|
|
|
236
313
|
|
|
237
314
|
function buildGeometry( data ) {
|
|
238
315
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
const positions = JSON.parse( data[ 'point3f[] points' ].replace( /[()]*/g, '' ) );
|
|
242
|
-
const attribute = new BufferAttribute( new Float32Array( positions ), 3 );
|
|
316
|
+
if ( ! data ) return undefined;
|
|
243
317
|
|
|
244
|
-
|
|
318
|
+
let geometry = new BufferGeometry();
|
|
319
|
+
|
|
320
|
+
if ( 'int[] faceVertexIndices' in data ) {
|
|
245
321
|
|
|
246
322
|
const indices = JSON.parse( data[ 'int[] faceVertexIndices' ] );
|
|
247
|
-
geometry.
|
|
323
|
+
geometry.setIndex( new BufferAttribute( new Uint16Array( indices ), 1 ) );
|
|
248
324
|
|
|
249
|
-
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
if ( 'point3f[] points' in data ) {
|
|
250
328
|
|
|
329
|
+
const positions = JSON.parse( data[ 'point3f[] points' ].replace( /[()]*/g, '' ) );
|
|
330
|
+
const attribute = new BufferAttribute( new Float32Array( positions ), 3 );
|
|
251
331
|
geometry.setAttribute( 'position', attribute );
|
|
252
332
|
|
|
253
333
|
}
|
|
254
334
|
|
|
335
|
+
if ( 'normal3f[] normals' in data ) {
|
|
336
|
+
|
|
337
|
+
const normals = JSON.parse( data[ 'normal3f[] normals' ].replace( /[()]*/g, '' ) );
|
|
338
|
+
const attribute = new BufferAttribute( new Float32Array( normals ), 3 );
|
|
339
|
+
geometry.setAttribute( 'normal', attribute );
|
|
340
|
+
|
|
341
|
+
} else {
|
|
342
|
+
|
|
343
|
+
geometry.computeVertexNormals();
|
|
344
|
+
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
if ( 'float2[] primvars:st' in data ) {
|
|
255
348
|
|
|
256
|
-
|
|
349
|
+
data[ 'texCoord2f[] primvars:st' ] = data[ 'float2[] primvars:st' ];
|
|
350
|
+
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
if ( 'texCoord2f[] primvars:st' in data ) {
|
|
257
354
|
|
|
258
355
|
const uvs = JSON.parse( data[ 'texCoord2f[] primvars:st' ].replace( /[()]*/g, '' ) );
|
|
259
356
|
const attribute = new BufferAttribute( new Float32Array( uvs ), 2 );
|
|
260
357
|
|
|
261
|
-
if (
|
|
358
|
+
if ( 'int[] primvars:st:indices' in data ) {
|
|
359
|
+
|
|
360
|
+
geometry = geometry.toNonIndexed();
|
|
262
361
|
|
|
263
362
|
const indices = JSON.parse( data[ 'int[] primvars:st:indices' ] );
|
|
264
363
|
geometry.setAttribute( 'uv', toFlatBufferAttribute( attribute, indices ) );
|
|
@@ -271,8 +370,6 @@ class USDZLoader extends Loader {
|
|
|
271
370
|
|
|
272
371
|
}
|
|
273
372
|
|
|
274
|
-
geometry.computeVertexNormals();
|
|
275
|
-
|
|
276
373
|
return geometry;
|
|
277
374
|
|
|
278
375
|
}
|
|
@@ -302,22 +399,39 @@ class USDZLoader extends Loader {
|
|
|
302
399
|
|
|
303
400
|
}
|
|
304
401
|
|
|
305
|
-
function
|
|
402
|
+
function findMeshMaterial( data ) {
|
|
403
|
+
|
|
404
|
+
if ( ! data ) return undefined;
|
|
405
|
+
|
|
406
|
+
if ( 'rel material:binding' in data ) {
|
|
407
|
+
|
|
408
|
+
const reference = data[ 'rel material:binding' ];
|
|
409
|
+
const id = reference.replace( /^<\//, '' ).replace( />$/, '' );
|
|
410
|
+
const parts = id.split( '/' );
|
|
411
|
+
|
|
412
|
+
return findMaterial( root, ` "${ parts[ 1 ] }"` );
|
|
413
|
+
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
return findMaterial( data );
|
|
417
|
+
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
function findMaterial( data, id = '' ) {
|
|
306
421
|
|
|
307
422
|
for ( const name in data ) {
|
|
308
423
|
|
|
309
424
|
const object = data[ name ];
|
|
310
425
|
|
|
311
|
-
if ( name.startsWith( 'def Material' ) ) {
|
|
426
|
+
if ( name.startsWith( 'def Material' + id ) ) {
|
|
312
427
|
|
|
313
428
|
return object;
|
|
314
429
|
|
|
315
430
|
}
|
|
316
431
|
|
|
317
|
-
|
|
318
432
|
if ( typeof object === 'object' ) {
|
|
319
433
|
|
|
320
|
-
const material = findMaterial( object );
|
|
434
|
+
const material = findMaterial( object, id );
|
|
321
435
|
|
|
322
436
|
if ( material ) return material;
|
|
323
437
|
|
|
@@ -331,58 +445,184 @@ class USDZLoader extends Loader {
|
|
|
331
445
|
|
|
332
446
|
const material = new MeshStandardMaterial();
|
|
333
447
|
|
|
334
|
-
|
|
448
|
+
if ( data !== undefined ) {
|
|
449
|
+
|
|
450
|
+
if ( 'def Shader "PreviewSurface"' in data ) {
|
|
451
|
+
|
|
452
|
+
const surface = data[ 'def Shader "PreviewSurface"' ];
|
|
453
|
+
|
|
454
|
+
if ( 'color3f inputs:diffuseColor.connect' in surface ) {
|
|
455
|
+
|
|
456
|
+
const path = surface[ 'color3f inputs:diffuseColor.connect' ];
|
|
457
|
+
const sampler = findTexture( root, /(\w+).output/.exec( path )[ 1 ] );
|
|
458
|
+
|
|
459
|
+
material.map = buildTexture( sampler );
|
|
460
|
+
material.map.encoding = sRGBEncoding;
|
|
461
|
+
|
|
462
|
+
} else if ( 'color3f inputs:diffuseColor' in surface ) {
|
|
463
|
+
|
|
464
|
+
const color = surface[ 'color3f inputs:diffuseColor' ].replace( /[()]*/g, '' );
|
|
465
|
+
material.color.fromArray( JSON.parse( '[' + color + ']' ) );
|
|
466
|
+
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
if ( 'normal3f inputs:normal.connect' in surface ) {
|
|
470
|
+
|
|
471
|
+
const path = surface[ 'normal3f inputs:normal.connect' ];
|
|
472
|
+
const sampler = findTexture( root, /(\w+).output/.exec( path )[ 1 ] );
|
|
473
|
+
|
|
474
|
+
material.normalMap = buildTexture( sampler );
|
|
335
475
|
|
|
336
|
-
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
if ( 'float inputs:roughness' in surface ) {
|
|
479
|
+
|
|
480
|
+
material.roughness = parseFloat( surface[ 'float inputs:roughness' ] );
|
|
481
|
+
|
|
482
|
+
}
|
|
337
483
|
|
|
338
|
-
|
|
339
|
-
|
|
484
|
+
if ( 'float inputs:metallic' in surface ) {
|
|
485
|
+
|
|
486
|
+
material.metalness = parseFloat( surface[ 'float inputs:metallic' ] );
|
|
487
|
+
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
}
|
|
340
491
|
|
|
341
|
-
|
|
492
|
+
if ( 'def Shader "diffuseColor_texture"' in data ) {
|
|
493
|
+
|
|
494
|
+
const sampler = data[ 'def Shader "diffuseColor_texture"' ];
|
|
495
|
+
|
|
496
|
+
material.map = buildTexture( sampler );
|
|
497
|
+
material.map.encoding = sRGBEncoding;
|
|
498
|
+
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
if ( 'def Shader "normal_texture"' in data ) {
|
|
502
|
+
|
|
503
|
+
const sampler = data[ 'def Shader "normal_texture"' ];
|
|
504
|
+
|
|
505
|
+
material.normalMap = buildTexture( sampler );
|
|
506
|
+
|
|
507
|
+
}
|
|
342
508
|
|
|
343
509
|
}
|
|
344
510
|
|
|
345
|
-
|
|
511
|
+
return material;
|
|
512
|
+
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
function findTexture( data, id ) {
|
|
516
|
+
|
|
517
|
+
for ( const name in data ) {
|
|
518
|
+
|
|
519
|
+
const object = data[ name ];
|
|
520
|
+
|
|
521
|
+
if ( name.startsWith( `def Shader "${ id }"` ) ) {
|
|
346
522
|
|
|
347
|
-
|
|
348
|
-
|
|
523
|
+
return object;
|
|
524
|
+
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
if ( typeof object === 'object' ) {
|
|
349
528
|
|
|
350
|
-
|
|
529
|
+
const texture = findTexture( object, id );
|
|
530
|
+
|
|
531
|
+
if ( texture ) return texture;
|
|
532
|
+
|
|
533
|
+
}
|
|
351
534
|
|
|
352
535
|
}
|
|
353
536
|
|
|
537
|
+
}
|
|
354
538
|
|
|
355
|
-
|
|
539
|
+
function buildTexture( data ) {
|
|
540
|
+
|
|
541
|
+
if ( 'asset inputs:file' in data ) {
|
|
542
|
+
|
|
543
|
+
const path = data[ 'asset inputs:file' ].replace( /@*/g, '' );
|
|
544
|
+
|
|
545
|
+
const loader = new TextureLoader();
|
|
546
|
+
|
|
547
|
+
const texture = loader.load( assets[ path ] );
|
|
548
|
+
|
|
549
|
+
const map = {
|
|
550
|
+
'"clamp"': ClampToEdgeWrapping,
|
|
551
|
+
'"mirror"': MirroredRepeatWrapping,
|
|
552
|
+
'"repeat"': RepeatWrapping
|
|
553
|
+
};
|
|
554
|
+
|
|
555
|
+
if ( 'token inputs:wrapS' in data ) {
|
|
556
|
+
|
|
557
|
+
texture.wrapS = map[ data[ 'token inputs:wrapS' ] ];
|
|
558
|
+
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
if ( 'token inputs:wrapT' in data ) {
|
|
562
|
+
|
|
563
|
+
texture.wrapT = map[ data[ 'token inputs:wrapT' ] ];
|
|
564
|
+
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
return texture;
|
|
568
|
+
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
return null;
|
|
356
572
|
|
|
357
573
|
}
|
|
358
574
|
|
|
359
|
-
function
|
|
575
|
+
function buildObject( data ) {
|
|
360
576
|
|
|
361
|
-
const geometry = buildGeometry(
|
|
362
|
-
const material = buildMaterial(
|
|
577
|
+
const geometry = buildGeometry( findMeshGeometry( data ) );
|
|
578
|
+
const material = buildMaterial( findMeshMaterial( data ) );
|
|
363
579
|
|
|
364
|
-
const mesh = new Mesh( geometry, material );
|
|
580
|
+
const mesh = geometry ? new Mesh( geometry, material ) : new Object3D();
|
|
581
|
+
|
|
582
|
+
if ( 'matrix4d xformOp:transform' in data ) {
|
|
583
|
+
|
|
584
|
+
const array = JSON.parse( '[' + data[ 'matrix4d xformOp:transform' ].replace( /[()]*/g, '' ) + ']' );
|
|
585
|
+
|
|
586
|
+
mesh.matrix.fromArray( array );
|
|
587
|
+
mesh.matrix.decompose( mesh.position, mesh.quaternion, mesh.scale );
|
|
588
|
+
|
|
589
|
+
}
|
|
365
590
|
|
|
366
591
|
return mesh;
|
|
367
592
|
|
|
368
593
|
}
|
|
369
594
|
|
|
370
|
-
|
|
595
|
+
function buildHierarchy( data, group ) {
|
|
371
596
|
|
|
372
|
-
|
|
597
|
+
for ( const name in data ) {
|
|
598
|
+
|
|
599
|
+
if ( name.startsWith( 'def Scope' ) ) {
|
|
600
|
+
|
|
601
|
+
buildHierarchy( data[ name ], group );
|
|
373
602
|
|
|
374
|
-
|
|
603
|
+
} else if ( name.startsWith( 'def Xform' ) ) {
|
|
375
604
|
|
|
376
|
-
|
|
605
|
+
const mesh = buildObject( data[ name ] );
|
|
377
606
|
|
|
378
|
-
|
|
379
|
-
|
|
607
|
+
if ( /def Xform "(\w+)"/.test( name ) ) {
|
|
608
|
+
|
|
609
|
+
mesh.name = /def Xform "(\w+)"/.exec( name )[ 1 ];
|
|
610
|
+
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
group.add( mesh );
|
|
614
|
+
|
|
615
|
+
buildHierarchy( data[ name ], mesh );
|
|
616
|
+
|
|
617
|
+
}
|
|
380
618
|
|
|
381
619
|
}
|
|
382
620
|
|
|
383
621
|
}
|
|
384
622
|
|
|
385
|
-
|
|
623
|
+
const group = new Group();
|
|
624
|
+
|
|
625
|
+
buildHierarchy( root, group );
|
|
386
626
|
|
|
387
627
|
return group;
|
|
388
628
|
|
|
@@ -625,6 +625,7 @@ class VRMLLoader extends Loader {
|
|
|
625
625
|
|
|
626
626
|
switch ( nodeName ) {
|
|
627
627
|
|
|
628
|
+
case 'Anchor':
|
|
628
629
|
case 'Group':
|
|
629
630
|
case 'Transform':
|
|
630
631
|
case 'Collision':
|
|
@@ -706,7 +707,6 @@ class VRMLLoader extends Loader {
|
|
|
706
707
|
build = buildWorldInfoNode( node );
|
|
707
708
|
break;
|
|
708
709
|
|
|
709
|
-
case 'Anchor':
|
|
710
710
|
case 'Billboard':
|
|
711
711
|
|
|
712
712
|
case 'Inline':
|
|
@@ -794,10 +794,18 @@ class VRMLLoader extends Loader {
|
|
|
794
794
|
parseFieldChildren( fieldValues, object );
|
|
795
795
|
break;
|
|
796
796
|
|
|
797
|
+
case 'description':
|
|
798
|
+
// field not supported
|
|
799
|
+
break;
|
|
800
|
+
|
|
797
801
|
case 'collide':
|
|
798
802
|
// field not supported
|
|
799
803
|
break;
|
|
800
804
|
|
|
805
|
+
case 'parameter':
|
|
806
|
+
// field not supported
|
|
807
|
+
break;
|
|
808
|
+
|
|
801
809
|
case 'rotation':
|
|
802
810
|
const axis = new Vector3( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );
|
|
803
811
|
const angle = fieldValues[ 3 ];
|
|
@@ -820,6 +828,10 @@ class VRMLLoader extends Loader {
|
|
|
820
828
|
// field not supported
|
|
821
829
|
break;
|
|
822
830
|
|
|
831
|
+
case 'url':
|
|
832
|
+
// field not supported
|
|
833
|
+
break;
|
|
834
|
+
|
|
823
835
|
default:
|
|
824
836
|
console.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );
|
|
825
837
|
break;
|
|
@@ -122,7 +122,7 @@ class ConvexHull {
|
|
|
122
122
|
|
|
123
123
|
intersectRay( ray, target ) {
|
|
124
124
|
|
|
125
|
-
// based on "Fast Ray-Convex Polyhedron Intersection"
|
|
125
|
+
// based on "Fast Ray-Convex Polyhedron Intersection" by Eric Haines, GRAPHICS GEMS II
|
|
126
126
|
|
|
127
127
|
const faces = this.faces;
|
|
128
128
|
|
|
@@ -156,7 +156,7 @@ class ConvexHull {
|
|
|
156
156
|
|
|
157
157
|
if ( vD > 0 ) {
|
|
158
158
|
|
|
159
|
-
//
|
|
159
|
+
// plane faces away from the ray, so this plane is a back-face
|
|
160
160
|
|
|
161
161
|
tFar = Math.min( t, tFar );
|
|
162
162
|
|
|
@@ -263,7 +263,7 @@ class ConvexHull {
|
|
|
263
263
|
|
|
264
264
|
}
|
|
265
265
|
|
|
266
|
-
// Removes all the visible vertices that a given face is able to see which are stored in the 'assigned'
|
|
266
|
+
// Removes all the visible vertices that a given face is able to see which are stored in the 'assigned' vertex list
|
|
267
267
|
|
|
268
268
|
removeAllVerticesFromFace( face ) {
|
|
269
269
|
|
|
@@ -1268,4 +1268,4 @@ class VertexList {
|
|
|
1268
1268
|
|
|
1269
1269
|
}
|
|
1270
1270
|
|
|
1271
|
-
export { ConvexHull };
|
|
1271
|
+
export { ConvexHull, Face, HalfEdge, VertexNode, VertexList };
|