super-three 0.179.0 → 0.184.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/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +14522 -12207
- package/build/three.core.js +12005 -10954
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +2270 -1005
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +63 -18
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +16573 -7890
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +16533 -7888
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +12 -4
- package/examples/jsm/animation/CCDIKSolver.js +8 -4
- package/examples/jsm/controls/ArcballControls.js +15 -12
- package/examples/jsm/controls/DragControls.js +9 -59
- package/examples/jsm/controls/FirstPersonControls.js +61 -57
- package/examples/jsm/controls/FlyControls.js +5 -1
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +113 -10
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +9 -9
- package/examples/jsm/controls/TransformControls.js +35 -3
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -2
- package/examples/jsm/exporters/GLTFExporter.js +185 -34
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +31 -5
- package/examples/jsm/geometries/DecalGeometry.js +3 -3
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +21 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +110 -13
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +542 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +238 -0
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +380 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +268 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +2072 -0
- package/examples/jsm/inspector/ui/Style.js +1667 -0
- package/examples/jsm/inspector/ui/Tab.js +265 -0
- package/examples/jsm/inspector/ui/Values.js +476 -0
- package/examples/jsm/inspector/ui/utils.js +69 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/interactive/HTMLMesh.js +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +3 -3
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +27 -4029
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +692 -53
- package/examples/jsm/loaders/FBXLoader.js +237 -39
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +159 -185
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +162 -53
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +9 -41
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +4 -4
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -2
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +91 -7
- package/examples/jsm/objects/SkyMesh.js +151 -17
- package/examples/jsm/objects/Water.js +7 -6
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +11 -13
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +175 -61
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +21 -8
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +7 -6
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +52 -10
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +23 -9
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
- package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +59 -9
- package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +81 -20
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +638 -0
- package/examples/jsm/tsl/display/SSRNode.js +186 -69
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +381 -75
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
- package/package.json +27 -38
- package/src/Three.Core.js +7 -3
- package/src/Three.TSL.js +61 -16
- package/src/Three.WebGPU.Nodes.js +7 -0
- package/src/Three.WebGPU.js +11 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +21 -5
- package/src/animation/AnimationMixer.js +9 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +54 -14
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +11 -10
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +100 -7
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +24 -12
- package/src/core/Clock.js +7 -0
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +55 -6
- package/src/core/Raycaster.js +4 -3
- package/src/core/RenderTarget.js +14 -5
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +259 -57
- package/src/extras/TextureUtils.js +6 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +10 -8
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +9 -3
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +4 -1
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +13 -2
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +30 -2
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +4 -4
- package/src/loaders/ImageBitmapLoader.js +17 -13
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +9 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +6 -4
- package/src/loaders/ObjectLoader.js +57 -17
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +5 -4
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +11 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +11 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +2 -1
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +22 -3
- package/src/materials/nodes/Line2NodeMaterial.js +36 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +95 -35
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +23 -21
- package/src/math/Matrix2.js +14 -10
- package/src/math/Matrix3.js +15 -11
- package/src/math/Matrix4.js +94 -81
- package/src/math/Plane.js +5 -4
- package/src/math/Quaternion.js +60 -84
- package/src/math/Sphere.js +1 -1
- package/src/math/Spherical.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -65
- package/src/nodes/TSL.js +11 -8
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +30 -3
- package/src/nodes/accessors/Camera.js +260 -13
- package/src/nodes/accessors/ClippingNode.js +10 -9
- package/src/nodes/accessors/CubeTextureNode.js +32 -6
- package/src/nodes/accessors/InstanceNode.js +164 -39
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +16 -15
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +51 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
- package/src/nodes/accessors/ReferenceNode.js +11 -10
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -24
- package/src/nodes/accessors/StorageTextureNode.js +62 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +41 -31
- package/src/nodes/accessors/TextureNode.js +193 -63
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +25 -5
- package/src/nodes/code/FunctionNode.js +25 -3
- package/src/nodes/core/ArrayNode.js +22 -2
- package/src/nodes/core/AssignNode.js +6 -5
- package/src/nodes/core/AttributeNode.js +5 -4
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +133 -15
- package/src/nodes/core/IndexNode.js +4 -3
- package/src/nodes/core/InputNode.js +3 -2
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +264 -46
- package/src/nodes/core/NodeBuilder.js +453 -87
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +31 -23
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +25 -97
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +34 -3
- package/src/nodes/core/PropertyNode.js +26 -3
- package/src/nodes/core/StackNode.js +99 -23
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +22 -8
- package/src/nodes/core/StructTypeNode.js +13 -18
- package/src/nodes/core/SubBuildNode.js +4 -4
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +37 -13
- package/src/nodes/core/VarNode.js +96 -34
- package/src/nodes/core/VaryingNode.js +2 -18
- package/src/nodes/display/BlendModes.js +0 -63
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +18 -1
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +41 -5
- package/src/nodes/display/PassNode.js +175 -25
- package/src/nodes/display/RenderOutputNode.js +35 -9
- package/src/nodes/display/ScreenNode.js +47 -15
- package/src/nodes/display/ToneMappingNode.js +32 -5
- package/src/nodes/display/ToonOutlinePassNode.js +10 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +72 -14
- package/src/nodes/fog/Fog.js +18 -34
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +128 -46
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +44 -6
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
- package/src/nodes/gpgpu/ComputeNode.js +76 -38
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +34 -9
- package/src/nodes/lighting/LightsNode.js +10 -32
- package/src/nodes/lighting/PointShadowNode.js +167 -148
- package/src/nodes/lighting/ShadowFilterNode.js +55 -65
- package/src/nodes/lighting/ShadowNode.js +189 -44
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +25 -8
- package/src/nodes/math/MathNode.js +98 -57
- package/src/nodes/math/OperatorNode.js +8 -5
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +111 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -3
- package/src/nodes/tsl/TSLCore.js +488 -166
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +14 -13
- package/src/nodes/utils/EventNode.js +67 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +7 -4
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +60 -8
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +60 -1
- package/src/nodes/utils/RTTNode.js +14 -4
- package/src/nodes/utils/ReflectorNode.js +61 -11
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +12 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +46 -18
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +3 -2
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +12 -2
- package/src/objects/SkinnedMesh.js +29 -10
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +372 -179
- package/src/renderers/common/Animation.js +16 -4
- package/src/renderers/common/Attributes.js +16 -2
- package/src/renderers/common/Backend.js +137 -35
- package/src/renderers/common/Background.js +28 -14
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +83 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +55 -3
- package/src/renderers/common/Info.js +337 -6
- package/src/renderers/common/InspectorBase.js +151 -0
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +41 -8
- package/src/renderers/common/PostProcessing.js +9 -226
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +18 -2
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +32 -6
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +22 -6
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +927 -335
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +52 -14
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +208 -47
- package/src/renderers/common/TimestampQueryPool.js +70 -6
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +64 -2
- package/src/renderers/common/XRManager.js +79 -51
- package/src/renderers/common/extras/PMREMGenerator.js +176 -79
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +49 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +8 -5
- package/src/renderers/shaders/UniformsUtils.js +52 -9
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +11 -5
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +63 -122
- package/src/renderers/webgl/WebGLPrograms.js +65 -52
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +191 -26
- package/src/renderers/webgl/WebGLState.js +79 -40
- package/src/renderers/webgl/WebGLTextures.js +234 -68
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
- package/src/renderers/webgl/WebGLUtils.js +8 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
- package/src/renderers/webgpu/WebGPUBackend.js +403 -253
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +5 -3
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
- package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +45 -29
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +5 -4
- package/src/textures/Texture.js +19 -7
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +344 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -144
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -574,8 +574,12 @@ class CSMShadowNode extends ShadowBaseNode {
|
|
|
574
574
|
const light = this.lights[ i ];
|
|
575
575
|
const parent = light.parent;
|
|
576
576
|
|
|
577
|
-
|
|
578
|
-
|
|
577
|
+
if ( parent !== null ) {
|
|
578
|
+
|
|
579
|
+
parent.remove( light.target );
|
|
580
|
+
parent.remove( light );
|
|
581
|
+
|
|
582
|
+
}
|
|
579
583
|
|
|
580
584
|
}
|
|
581
585
|
|
|
@@ -1,16 +1,38 @@
|
|
|
1
1
|
import {
|
|
2
2
|
LinearFilter,
|
|
3
|
+
MathUtils,
|
|
3
4
|
Matrix3,
|
|
4
5
|
NearestFilter,
|
|
6
|
+
PerspectiveCamera,
|
|
5
7
|
RGBAFormat,
|
|
6
8
|
ShaderMaterial,
|
|
7
|
-
|
|
9
|
+
Vector3,
|
|
8
10
|
WebGLRenderTarget
|
|
9
11
|
} from 'three';
|
|
10
12
|
import { FullScreenQuad } from '../postprocessing/Pass.js';
|
|
13
|
+
import { frameCorners } from '../utils/CameraUtils.js';
|
|
14
|
+
|
|
15
|
+
const _cameraL = /*@__PURE__*/ new PerspectiveCamera();
|
|
16
|
+
const _cameraR = /*@__PURE__*/ new PerspectiveCamera();
|
|
17
|
+
|
|
18
|
+
// Reusable vectors for screen corner calculations
|
|
19
|
+
const _eyeL = /*@__PURE__*/ new Vector3();
|
|
20
|
+
const _eyeR = /*@__PURE__*/ new Vector3();
|
|
21
|
+
const _screenCenter = /*@__PURE__*/ new Vector3();
|
|
22
|
+
const _screenBottomLeft = /*@__PURE__*/ new Vector3();
|
|
23
|
+
const _screenBottomRight = /*@__PURE__*/ new Vector3();
|
|
24
|
+
const _screenTopLeft = /*@__PURE__*/ new Vector3();
|
|
25
|
+
const _right = /*@__PURE__*/ new Vector3();
|
|
26
|
+
const _up = /*@__PURE__*/ new Vector3();
|
|
27
|
+
const _forward = /*@__PURE__*/ new Vector3();
|
|
11
28
|
|
|
12
29
|
/**
|
|
13
|
-
* A class that creates an anaglyph effect
|
|
30
|
+
* A class that creates an anaglyph effect using physically-correct
|
|
31
|
+
* off-axis stereo projection.
|
|
32
|
+
*
|
|
33
|
+
* This implementation uses CameraUtils.frameCorners() to align stereo
|
|
34
|
+
* camera frustums to a virtual screen plane, providing accurate depth
|
|
35
|
+
* perception with zero parallax at the plane distance.
|
|
14
36
|
*
|
|
15
37
|
* Note that this class can only be used with {@link WebGLRenderer}.
|
|
16
38
|
* When using {@link WebGPURenderer}, use {@link AnaglyphPassNode}.
|
|
@@ -42,13 +64,38 @@ class AnaglyphEffect {
|
|
|
42
64
|
- 0.00155529, - 0.0184503, 1.2264
|
|
43
65
|
] );
|
|
44
66
|
|
|
45
|
-
|
|
67
|
+
/**
|
|
68
|
+
* The interpupillary distance (eye separation) in world units.
|
|
69
|
+
* Typical human IPD is 0.064 meters (64mm).
|
|
70
|
+
*
|
|
71
|
+
* @type {number}
|
|
72
|
+
* @default 0.064
|
|
73
|
+
*/
|
|
74
|
+
this.eyeSep = 0.064;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The distance in world units from the viewer to the virtual
|
|
78
|
+
* screen plane where zero parallax (screen depth) occurs.
|
|
79
|
+
* Objects at this distance appear at the screen surface.
|
|
80
|
+
* Objects closer appear in front of the screen (negative parallax).
|
|
81
|
+
* Objects further appear behind the screen (positive parallax).
|
|
82
|
+
*
|
|
83
|
+
* The screen dimensions are derived from the camera's FOV and aspect ratio
|
|
84
|
+
* at this distance, ensuring the stereo view matches the camera's field of view.
|
|
85
|
+
*
|
|
86
|
+
* @type {number}
|
|
87
|
+
* @default 0.5
|
|
88
|
+
*/
|
|
89
|
+
this.planeDistance = 0.5;
|
|
46
90
|
|
|
47
91
|
const _params = { minFilter: LinearFilter, magFilter: NearestFilter, format: RGBAFormat };
|
|
48
92
|
|
|
49
93
|
const _renderTargetL = new WebGLRenderTarget( width, height, _params );
|
|
50
94
|
const _renderTargetR = new WebGLRenderTarget( width, height, _params );
|
|
51
95
|
|
|
96
|
+
_cameraL.layers.enable( 1 );
|
|
97
|
+
_cameraR.layers.enable( 2 );
|
|
98
|
+
|
|
52
99
|
const _material = new ShaderMaterial( {
|
|
53
100
|
|
|
54
101
|
uniforms: {
|
|
@@ -141,16 +188,64 @@ class AnaglyphEffect {
|
|
|
141
188
|
|
|
142
189
|
if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
|
|
143
190
|
|
|
144
|
-
|
|
145
|
-
|
|
191
|
+
// Get the camera's local coordinate axes from its world matrix
|
|
192
|
+
camera.matrixWorld.extractBasis( _right, _up, _forward );
|
|
193
|
+
_right.normalize();
|
|
194
|
+
_up.normalize();
|
|
195
|
+
_forward.normalize();
|
|
196
|
+
|
|
197
|
+
// Calculate eye positions
|
|
198
|
+
const halfSep = this.eyeSep / 2;
|
|
199
|
+
_eyeL.copy( camera.position ).addScaledVector( _right, - halfSep );
|
|
200
|
+
_eyeR.copy( camera.position ).addScaledVector( _right, halfSep );
|
|
201
|
+
|
|
202
|
+
// Calculate screen center (at planeDistance in front of the camera center)
|
|
203
|
+
_screenCenter.copy( camera.position ).addScaledVector( _forward, - this.planeDistance );
|
|
204
|
+
|
|
205
|
+
// Calculate screen dimensions from camera FOV and aspect ratio
|
|
206
|
+
const halfHeight = this.planeDistance * Math.tan( MathUtils.DEG2RAD * camera.fov / 2 );
|
|
207
|
+
const halfWidth = halfHeight * camera.aspect;
|
|
208
|
+
|
|
209
|
+
// Calculate screen corners
|
|
210
|
+
_screenBottomLeft.copy( _screenCenter )
|
|
211
|
+
.addScaledVector( _right, - halfWidth )
|
|
212
|
+
.addScaledVector( _up, - halfHeight );
|
|
213
|
+
|
|
214
|
+
_screenBottomRight.copy( _screenCenter )
|
|
215
|
+
.addScaledVector( _right, halfWidth )
|
|
216
|
+
.addScaledVector( _up, - halfHeight );
|
|
217
|
+
|
|
218
|
+
_screenTopLeft.copy( _screenCenter )
|
|
219
|
+
.addScaledVector( _right, - halfWidth )
|
|
220
|
+
.addScaledVector( _up, halfHeight );
|
|
221
|
+
|
|
222
|
+
// Set up left eye camera
|
|
223
|
+
_cameraL.position.copy( _eyeL );
|
|
224
|
+
_cameraL.near = camera.near;
|
|
225
|
+
_cameraL.far = camera.far;
|
|
226
|
+
frameCorners( _cameraL, _screenBottomLeft, _screenBottomRight, _screenTopLeft, true );
|
|
227
|
+
_cameraL.matrixWorld.compose( _cameraL.position, _cameraL.quaternion, _cameraL.scale );
|
|
228
|
+
_cameraL.matrixWorldInverse.copy( _cameraL.matrixWorld ).invert();
|
|
229
|
+
|
|
230
|
+
// Set up right eye camera
|
|
231
|
+
_cameraR.position.copy( _eyeR );
|
|
232
|
+
_cameraR.near = camera.near;
|
|
233
|
+
_cameraR.far = camera.far;
|
|
234
|
+
frameCorners( _cameraR, _screenBottomLeft, _screenBottomRight, _screenTopLeft, true );
|
|
235
|
+
_cameraR.matrixWorld.compose( _cameraR.position, _cameraR.quaternion, _cameraR.scale );
|
|
236
|
+
_cameraR.matrixWorldInverse.copy( _cameraR.matrixWorld ).invert();
|
|
237
|
+
|
|
238
|
+
// Render left eye
|
|
146
239
|
renderer.setRenderTarget( _renderTargetL );
|
|
147
240
|
renderer.clear();
|
|
148
|
-
renderer.render( scene,
|
|
241
|
+
renderer.render( scene, _cameraL );
|
|
149
242
|
|
|
243
|
+
// Render right eye
|
|
150
244
|
renderer.setRenderTarget( _renderTargetR );
|
|
151
245
|
renderer.clear();
|
|
152
|
-
renderer.render( scene,
|
|
246
|
+
renderer.render( scene, _cameraR );
|
|
153
247
|
|
|
248
|
+
// Composite anaglyph
|
|
154
249
|
renderer.setRenderTarget( null );
|
|
155
250
|
_quad.render( renderer );
|
|
156
251
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A class that creates an ASCII effect.
|
|
3
3
|
*
|
|
4
|
-
* The ASCII generation is based on [jsascii]
|
|
4
|
+
* The ASCII generation is based on [jsascii](https://github.com/hassadee/jsascii/blob/master/jsascii.js).
|
|
5
5
|
*
|
|
6
6
|
* @three_import import { AsciiEffect } from 'three/addons/effects/AsciiEffect.js';
|
|
7
7
|
*/
|
|
@@ -18,7 +18,7 @@ class AsciiEffect {
|
|
|
18
18
|
|
|
19
19
|
// ' .,:;=|iI+hHOE#`$';
|
|
20
20
|
// darker bolder character set from https://github.com/saw/Canvas-ASCII-Art/
|
|
21
|
-
// ' .\'`^",:;Il!i~+_-?][}{1)(|/tfjrxnuvczXYUJCLQ0OZmwqpdbkhao*#MW&8%B@$'
|
|
21
|
+
// ' .\'`^",:;Il!i~+_-?][}{1)(|/tfjrxnuvczXYUJCLQ0OZmwqpdbkhao*#MW&8%B@$'
|
|
22
22
|
|
|
23
23
|
// Some ASCII settings
|
|
24
24
|
|
|
@@ -218,6 +218,8 @@ class AsciiEffect {
|
|
|
218
218
|
// Coloring loop starts now
|
|
219
219
|
let strChars = '';
|
|
220
220
|
|
|
221
|
+
const maxIdx = aCharList.length - 1;
|
|
222
|
+
|
|
221
223
|
// console.time('rendering');
|
|
222
224
|
|
|
223
225
|
for ( let y = 0; y < iHeight; y += 2 ) {
|
|
@@ -230,13 +232,11 @@ class AsciiEffect {
|
|
|
230
232
|
const iGreen = oImgData[ iOffset + 1 ];
|
|
231
233
|
const iBlue = oImgData[ iOffset + 2 ];
|
|
232
234
|
const iAlpha = oImgData[ iOffset + 3 ];
|
|
233
|
-
let iCharIdx;
|
|
234
|
-
|
|
235
|
-
let fBrightness;
|
|
236
235
|
|
|
237
|
-
fBrightness = ( 0.3 * iRed + 0.59 * iGreen + 0.11 * iBlue ) / 255;
|
|
236
|
+
let fBrightness = ( 0.3 * iRed + 0.59 * iGreen + 0.11 * iBlue ) / 255;
|
|
238
237
|
// fBrightness = (0.3*iRed + 0.5*iGreen + 0.3*iBlue) / 255;
|
|
239
238
|
|
|
239
|
+
|
|
240
240
|
if ( iAlpha == 0 ) {
|
|
241
241
|
|
|
242
242
|
// should calculate alpha instead, but quick hack :)
|
|
@@ -245,11 +245,11 @@ class AsciiEffect {
|
|
|
245
245
|
|
|
246
246
|
}
|
|
247
247
|
|
|
248
|
-
iCharIdx = Math.
|
|
248
|
+
let iCharIdx = Math.round( ( 1 - fBrightness ) * maxIdx );
|
|
249
249
|
|
|
250
250
|
if ( bInvert ) {
|
|
251
251
|
|
|
252
|
-
iCharIdx =
|
|
252
|
+
iCharIdx = maxIdx - iCharIdx;
|
|
253
253
|
|
|
254
254
|
}
|
|
255
255
|
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BackSide,
|
|
3
|
+
Mesh,
|
|
4
|
+
MeshBasicMaterial,
|
|
5
|
+
SphereGeometry,
|
|
6
|
+
Scene
|
|
7
|
+
} from 'three';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* This class represents a scene with a uniform color that can be used as
|
|
11
|
+
* input for {@link PMREMGenerator#fromScene}. The resulting PMREM represents
|
|
12
|
+
* uniform ambient lighting and can be used for Image Based Lighting by
|
|
13
|
+
* assigning it to {@link Scene#environment}.
|
|
14
|
+
*
|
|
15
|
+
* ```js
|
|
16
|
+
* const environment = new ColorEnvironment( 0x00ff00 );
|
|
17
|
+
* const pmremGenerator = new THREE.PMREMGenerator( renderer );
|
|
18
|
+
*
|
|
19
|
+
* const envMap = pmremGenerator.fromScene( environment ).texture;
|
|
20
|
+
* scene.environment = envMap;
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @augments Scene
|
|
24
|
+
* @three_import import { ColorEnvironment } from 'three/addons/environments/ColorEnvironment.js';
|
|
25
|
+
*/
|
|
26
|
+
class ColorEnvironment extends Scene {
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Constructs a new color environment.
|
|
30
|
+
*
|
|
31
|
+
* @param {number|Color} color - The color of the environment.
|
|
32
|
+
*/
|
|
33
|
+
constructor( color = 0xffffff ) {
|
|
34
|
+
|
|
35
|
+
super();
|
|
36
|
+
|
|
37
|
+
this.name = 'ColorEnvironment';
|
|
38
|
+
|
|
39
|
+
const geometry = new SphereGeometry( 1, 16, 16 );
|
|
40
|
+
const material = new MeshBasicMaterial( { color: color, side: BackSide } );
|
|
41
|
+
|
|
42
|
+
this.add( new Mesh( geometry, material ) );
|
|
43
|
+
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Frees internal resources. This method should be called
|
|
48
|
+
* when the environment is no longer required.
|
|
49
|
+
*/
|
|
50
|
+
dispose() {
|
|
51
|
+
|
|
52
|
+
this.children[ 0 ].geometry.dispose();
|
|
53
|
+
this.children[ 0 ].material.dispose();
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export { ColorEnvironment };
|
|
@@ -5,7 +5,7 @@ import { Color, ColorManagement, SRGBColorSpace } from 'three';
|
|
|
5
5
|
/**
|
|
6
6
|
* An exporter to compress geometry with the Draco library.
|
|
7
7
|
*
|
|
8
|
-
* [Draco]
|
|
8
|
+
* [Draco](https://google.github.io/draco/) is an open source library for compressing and
|
|
9
9
|
* decompressing 3D meshes and point clouds. Compressed geometry can be significantly smaller,
|
|
10
10
|
* at the cost of additional decoding time on the client device.
|
|
11
11
|
*
|
|
@@ -13,7 +13,7 @@ import { Color, ColorManagement, SRGBColorSpace } from 'three';
|
|
|
13
13
|
* normals, colors, and other attributes. Draco files *do not* contain materials,
|
|
14
14
|
* textures, animation, or node hierarchies – to use these features, embed Draco geometry
|
|
15
15
|
* inside of a glTF file. A normal glTF file can be converted to a Draco-compressed glTF file
|
|
16
|
-
* using [glTF-Pipeline]
|
|
16
|
+
* using [glTF-Pipeline](https://github.com/AnalyticalGraphicsInc/gltf-pipeline).
|
|
17
17
|
*
|
|
18
18
|
* ```js
|
|
19
19
|
* const exporter = new DRACOExporter();
|
|
@@ -15,7 +15,7 @@ const ZIP_COMPRESSION = 3;
|
|
|
15
15
|
/**
|
|
16
16
|
* An exporter for EXR.
|
|
17
17
|
*
|
|
18
|
-
* EXR ( Extended Dynamic Range) is an [open format specification]
|
|
18
|
+
* EXR ( Extended Dynamic Range) is an [open format specification](https://github.com/AcademySoftwareFoundation/openexr)
|
|
19
19
|
* for professional-grade image storage format of the motion picture industry. The purpose of
|
|
20
20
|
* format is to accurately and efficiently represent high-dynamic-range scene-linear image data
|
|
21
21
|
* and associated metadata. The library is widely used in host application software where accuracy
|
|
@@ -90,7 +90,7 @@ function supportedRTT( renderTarget ) {
|
|
|
90
90
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
if ( renderTarget.isWebGLCubeRenderTarget || renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {
|
|
93
|
+
if ( renderTarget.isCubeRenderTarget || renderTarget.isWebGLCubeRenderTarget || renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {
|
|
94
94
|
|
|
95
95
|
throw Error( 'EXRExporter.parse: Unsupported render target type, expected instance of WebGLRenderTarget.' );
|
|
96
96
|
|
|
@@ -65,13 +65,13 @@ const KHR_mesh_quantization_ExtraAttrTypes = {
|
|
|
65
65
|
/**
|
|
66
66
|
* An exporter for `glTF` 2.0.
|
|
67
67
|
*
|
|
68
|
-
* glTF (GL Transmission Format) is an [open format specification]
|
|
68
|
+
* glTF (GL Transmission Format) is an [open format specification](https://github.com/KhronosGroup/glTF/tree/master/specification/2.0)
|
|
69
69
|
* for efficient delivery and loading of 3D content. Assets may be provided either in JSON (.gltf)
|
|
70
70
|
* or binary (.glb) format. External files store textures (.jpg, .png) and additional binary
|
|
71
71
|
* data (.bin). A glTF asset may deliver one or more scenes, including meshes, materials,
|
|
72
72
|
* textures, skins, skeletons, morph targets, animations, lights, and/or cameras.
|
|
73
73
|
*
|
|
74
|
-
* GLTFExporter supports the [glTF 2.0 extensions]
|
|
74
|
+
* GLTFExporter supports the [glTF 2.0 extensions](https://github.com/KhronosGroup/glTF/tree/master/extensions/):
|
|
75
75
|
*
|
|
76
76
|
* - KHR_lights_punctual
|
|
77
77
|
* - KHR_materials_clearcoat
|
|
@@ -88,10 +88,11 @@ const KHR_mesh_quantization_ExtraAttrTypes = {
|
|
|
88
88
|
* - KHR_texture_transform
|
|
89
89
|
* - EXT_materials_bump
|
|
90
90
|
* - EXT_mesh_gpu_instancing
|
|
91
|
+
* - EXT_texture_webp
|
|
91
92
|
*
|
|
92
93
|
* The following glTF 2.0 extension is supported by an external user plugin:
|
|
93
94
|
*
|
|
94
|
-
* - [KHR_materials_variants]
|
|
95
|
+
* - [KHR_materials_variants](https://github.com/takahirox/three-gltf-extensions)
|
|
95
96
|
*
|
|
96
97
|
* ```js
|
|
97
98
|
* const exporter = new GLTFExporter();
|
|
@@ -543,32 +544,36 @@ function getCanvas() {
|
|
|
543
544
|
|
|
544
545
|
function getToBlobPromise( canvas, mimeType ) {
|
|
545
546
|
|
|
546
|
-
if (
|
|
547
|
+
if ( typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas ) {
|
|
547
548
|
|
|
548
|
-
|
|
549
|
+
let quality;
|
|
549
550
|
|
|
550
|
-
|
|
551
|
+
// Blink's implementation of convertToBlob seems to default to a quality level of 100%
|
|
552
|
+
// Use the Blink default quality levels of toBlob instead so that file sizes are comparable.
|
|
553
|
+
if ( mimeType === 'image/jpeg' ) {
|
|
551
554
|
|
|
552
|
-
|
|
555
|
+
quality = 0.92;
|
|
553
556
|
|
|
554
|
-
|
|
555
|
-
// Use the Blink default quality levels of toBlob instead so that file sizes are comparable.
|
|
556
|
-
if ( mimeType === 'image/jpeg' ) {
|
|
557
|
+
} else if ( mimeType === 'image/webp' ) {
|
|
557
558
|
|
|
558
|
-
|
|
559
|
+
quality = 0.8;
|
|
559
560
|
|
|
560
|
-
|
|
561
|
+
}
|
|
561
562
|
|
|
562
|
-
|
|
563
|
+
return canvas.convertToBlob( {
|
|
563
564
|
|
|
564
|
-
|
|
565
|
+
type: mimeType,
|
|
566
|
+
quality: quality
|
|
565
567
|
|
|
566
|
-
|
|
568
|
+
} );
|
|
567
569
|
|
|
568
|
-
|
|
569
|
-
quality: quality
|
|
570
|
+
} else {
|
|
570
571
|
|
|
571
|
-
|
|
572
|
+
// HTMLCanvasElement code path
|
|
573
|
+
|
|
574
|
+
return new Promise( ( resolve ) => canvas.toBlob( resolve, mimeType ) );
|
|
575
|
+
|
|
576
|
+
}
|
|
572
577
|
|
|
573
578
|
}
|
|
574
579
|
|
|
@@ -757,7 +762,7 @@ class GLTFWriter {
|
|
|
757
762
|
/**
|
|
758
763
|
* Serializes a userData.
|
|
759
764
|
*
|
|
760
|
-
* @param {THREE.Object3D|THREE.Material} object
|
|
765
|
+
* @param {THREE.Object3D|THREE.Material|THREE.BufferGeometry|THREE.AnimationClip} object
|
|
761
766
|
* @param {Object} objectDef
|
|
762
767
|
*/
|
|
763
768
|
serializeUserData( object, objectDef ) {
|
|
@@ -1529,15 +1534,30 @@ class GLTFWriter {
|
|
|
1529
1534
|
|
|
1530
1535
|
}
|
|
1531
1536
|
|
|
1532
|
-
|
|
1537
|
+
const mimeType = map.userData.mimeType;
|
|
1533
1538
|
|
|
1534
|
-
|
|
1539
|
+
const imageIndex = this.processImage( map.image, map.format, map.flipY, mimeType );
|
|
1535
1540
|
|
|
1536
1541
|
const textureDef = {
|
|
1537
|
-
sampler: this.processSampler( map )
|
|
1538
|
-
source: this.processImage( map.image, map.format, map.flipY, mimeType )
|
|
1542
|
+
sampler: this.processSampler( map )
|
|
1539
1543
|
};
|
|
1540
1544
|
|
|
1545
|
+
if ( mimeType === 'image/webp' ) {
|
|
1546
|
+
|
|
1547
|
+
textureDef.extensions = textureDef.extensions || {};
|
|
1548
|
+
textureDef.extensions[ 'EXT_texture_webp' ] = {
|
|
1549
|
+
source: imageIndex
|
|
1550
|
+
};
|
|
1551
|
+
|
|
1552
|
+
this.extensionsUsed[ 'EXT_texture_webp' ] = true;
|
|
1553
|
+
this.extensionsRequired[ 'EXT_texture_webp' ] = true;
|
|
1554
|
+
|
|
1555
|
+
} else {
|
|
1556
|
+
|
|
1557
|
+
textureDef.source = imageIndex;
|
|
1558
|
+
|
|
1559
|
+
}
|
|
1560
|
+
|
|
1541
1561
|
if ( map.name ) textureDef.name = map.name;
|
|
1542
1562
|
|
|
1543
1563
|
await this._invokeAllAsync( async function ( ext ) {
|
|
@@ -1555,7 +1575,7 @@ class GLTFWriter {
|
|
|
1555
1575
|
/**
|
|
1556
1576
|
* Process material
|
|
1557
1577
|
* @param {THREE.Material} material Material to process
|
|
1558
|
-
* @return {Promise
|
|
1578
|
+
* @return {Promise<?number>} Index of the processed material in the "materials" array
|
|
1559
1579
|
*/
|
|
1560
1580
|
async processMaterialAsync( material ) {
|
|
1561
1581
|
|
|
@@ -1731,7 +1751,7 @@ class GLTFWriter {
|
|
|
1731
1751
|
/**
|
|
1732
1752
|
* Process mesh
|
|
1733
1753
|
* @param {THREE.Mesh} mesh Mesh to process
|
|
1734
|
-
* @return {Promise
|
|
1754
|
+
* @return {Promise<?number>} Index of the processed mesh in the "meshes" array
|
|
1735
1755
|
*/
|
|
1736
1756
|
async processMeshAsync( mesh ) {
|
|
1737
1757
|
|
|
@@ -1828,7 +1848,7 @@ class GLTFWriter {
|
|
|
1828
1848
|
const validVertexAttributes =
|
|
1829
1849
|
/^(POSITION|NORMAL|TANGENT|TEXCOORD_\d+|COLOR_\d+|JOINTS_\d+|WEIGHTS_\d+)$/;
|
|
1830
1850
|
|
|
1831
|
-
if ( ! validVertexAttributes.test( attributeName ) ) attributeName = '_' + attributeName;
|
|
1851
|
+
if ( ! validVertexAttributes.test( attributeName ) && ! attributeName.startsWith( '_' ) ) attributeName = '_' + attributeName;
|
|
1832
1852
|
|
|
1833
1853
|
if ( cache.attributes.has( this.getUID( attribute ) ) ) {
|
|
1834
1854
|
|
|
@@ -1848,12 +1868,12 @@ class GLTFWriter {
|
|
|
1848
1868
|
! ( array instanceof Uint8Array ) ) {
|
|
1849
1869
|
|
|
1850
1870
|
console.warn( 'GLTFExporter: Attribute "skinIndex" converted to type UNSIGNED_SHORT.' );
|
|
1851
|
-
modifiedAttribute =
|
|
1871
|
+
modifiedAttribute = GLTFExporter.Utils.toTypedBufferAttribute( attribute, Uint16Array );
|
|
1852
1872
|
|
|
1853
1873
|
} else if ( ( array instanceof Uint32Array || array instanceof Int32Array ) && ! attributeName.startsWith( '_' ) ) {
|
|
1854
1874
|
|
|
1855
1875
|
console.warn( `GLTFExporter: Attribute "${ attributeName }" converted to type FLOAT.` );
|
|
1856
|
-
modifiedAttribute = GLTFExporter.Utils.
|
|
1876
|
+
modifiedAttribute = GLTFExporter.Utils.toTypedBufferAttribute( attribute, Float32Array );
|
|
1857
1877
|
|
|
1858
1878
|
}
|
|
1859
1879
|
|
|
@@ -2185,7 +2205,7 @@ class GLTFWriter {
|
|
|
2185
2205
|
*
|
|
2186
2206
|
* @param {THREE.AnimationClip} clip
|
|
2187
2207
|
* @param {THREE.Object3D} root
|
|
2188
|
-
* @return {number
|
|
2208
|
+
* @return {?number}
|
|
2189
2209
|
*/
|
|
2190
2210
|
processAnimation( clip, root ) {
|
|
2191
2211
|
|
|
@@ -2279,11 +2299,15 @@ class GLTFWriter {
|
|
|
2279
2299
|
|
|
2280
2300
|
}
|
|
2281
2301
|
|
|
2282
|
-
|
|
2302
|
+
const animationDef = {
|
|
2283
2303
|
name: clip.name || 'clip_' + json.animations.length,
|
|
2284
2304
|
samplers: samplers,
|
|
2285
2305
|
channels: channels
|
|
2286
|
-
}
|
|
2306
|
+
};
|
|
2307
|
+
|
|
2308
|
+
this.serializeUserData( clip, animationDef );
|
|
2309
|
+
|
|
2310
|
+
json.animations.push( animationDef );
|
|
2287
2311
|
|
|
2288
2312
|
return json.animations.length - 1;
|
|
2289
2313
|
|
|
@@ -2291,7 +2315,7 @@ class GLTFWriter {
|
|
|
2291
2315
|
|
|
2292
2316
|
/**
|
|
2293
2317
|
* @param {THREE.Object3D} object
|
|
2294
|
-
* @return {number
|
|
2318
|
+
* @return {?number}
|
|
2295
2319
|
*/
|
|
2296
2320
|
processSkin( object ) {
|
|
2297
2321
|
|
|
@@ -2347,6 +2371,13 @@ class GLTFWriter {
|
|
|
2347
2371
|
|
|
2348
2372
|
if ( ! json.nodes ) json.nodes = [];
|
|
2349
2373
|
|
|
2374
|
+
// Handle pivot by creating a container node
|
|
2375
|
+
if ( object.pivot !== null ) {
|
|
2376
|
+
|
|
2377
|
+
return await this._processNodeWithPivotAsync( object );
|
|
2378
|
+
|
|
2379
|
+
}
|
|
2380
|
+
|
|
2350
2381
|
const nodeDef = {};
|
|
2351
2382
|
|
|
2352
2383
|
if ( options.trs ) {
|
|
@@ -2443,6 +2474,126 @@ class GLTFWriter {
|
|
|
2443
2474
|
|
|
2444
2475
|
}
|
|
2445
2476
|
|
|
2477
|
+
/**
|
|
2478
|
+
* Process Object3D node with pivot using container approach
|
|
2479
|
+
* @param {THREE.Object3D} object Object3D with pivot
|
|
2480
|
+
* @return {Promise<number>} Index of the container node
|
|
2481
|
+
*/
|
|
2482
|
+
async _processNodeWithPivotAsync( object ) {
|
|
2483
|
+
|
|
2484
|
+
const json = this.json;
|
|
2485
|
+
const options = this.options;
|
|
2486
|
+
const nodeMap = this.nodeMap;
|
|
2487
|
+
|
|
2488
|
+
const pivot = object.pivot;
|
|
2489
|
+
|
|
2490
|
+
// Container node: holds position + pivot offset, rotation, scale
|
|
2491
|
+
// Animations will target this node
|
|
2492
|
+
const containerDef = {};
|
|
2493
|
+
|
|
2494
|
+
const rotation = object.quaternion.toArray();
|
|
2495
|
+
const position = [
|
|
2496
|
+
object.position.x + pivot.x,
|
|
2497
|
+
object.position.y + pivot.y,
|
|
2498
|
+
object.position.z + pivot.z
|
|
2499
|
+
];
|
|
2500
|
+
const scale = object.scale.toArray();
|
|
2501
|
+
|
|
2502
|
+
if ( ! equalArray( rotation, [ 0, 0, 0, 1 ] ) ) {
|
|
2503
|
+
|
|
2504
|
+
containerDef.rotation = rotation;
|
|
2505
|
+
|
|
2506
|
+
}
|
|
2507
|
+
|
|
2508
|
+
if ( ! equalArray( position, [ 0, 0, 0 ] ) ) {
|
|
2509
|
+
|
|
2510
|
+
containerDef.translation = position;
|
|
2511
|
+
|
|
2512
|
+
}
|
|
2513
|
+
|
|
2514
|
+
if ( ! equalArray( scale, [ 1, 1, 1 ] ) ) {
|
|
2515
|
+
|
|
2516
|
+
containerDef.scale = scale;
|
|
2517
|
+
|
|
2518
|
+
}
|
|
2519
|
+
|
|
2520
|
+
// Store pivot in extras for round-trip reconstruction
|
|
2521
|
+
containerDef.extras = { pivot: pivot.toArray() };
|
|
2522
|
+
|
|
2523
|
+
if ( object.name !== '' ) containerDef.name = String( object.name );
|
|
2524
|
+
|
|
2525
|
+
this.serializeUserData( object, containerDef );
|
|
2526
|
+
|
|
2527
|
+
const containerIndex = json.nodes.push( containerDef ) - 1;
|
|
2528
|
+
|
|
2529
|
+
// Map original object to container so animations target it
|
|
2530
|
+
nodeMap.set( object, containerIndex );
|
|
2531
|
+
|
|
2532
|
+
// Child node: holds mesh with -pivot offset
|
|
2533
|
+
const childDef = {};
|
|
2534
|
+
|
|
2535
|
+
const childPosition = [ - pivot.x, - pivot.y, - pivot.z ];
|
|
2536
|
+
|
|
2537
|
+
if ( ! equalArray( childPosition, [ 0, 0, 0 ] ) ) {
|
|
2538
|
+
|
|
2539
|
+
childDef.translation = childPosition;
|
|
2540
|
+
|
|
2541
|
+
}
|
|
2542
|
+
|
|
2543
|
+
if ( object.isMesh || object.isLine || object.isPoints ) {
|
|
2544
|
+
|
|
2545
|
+
const meshIndex = await this.processMeshAsync( object );
|
|
2546
|
+
|
|
2547
|
+
if ( meshIndex !== null ) childDef.mesh = meshIndex;
|
|
2548
|
+
|
|
2549
|
+
} else if ( object.isCamera ) {
|
|
2550
|
+
|
|
2551
|
+
childDef.camera = this.processCamera( object );
|
|
2552
|
+
|
|
2553
|
+
}
|
|
2554
|
+
|
|
2555
|
+
if ( object.isSkinnedMesh ) this.skins.push( object );
|
|
2556
|
+
|
|
2557
|
+
const childIndex = json.nodes.push( childDef ) - 1;
|
|
2558
|
+
|
|
2559
|
+
// Build children array for container
|
|
2560
|
+
const containerChildren = [ childIndex ];
|
|
2561
|
+
|
|
2562
|
+
// Process object's children as children of the child node
|
|
2563
|
+
if ( object.children.length > 0 ) {
|
|
2564
|
+
|
|
2565
|
+
const grandchildren = [];
|
|
2566
|
+
|
|
2567
|
+
for ( let i = 0, l = object.children.length; i < l; i ++ ) {
|
|
2568
|
+
|
|
2569
|
+
const child = object.children[ i ];
|
|
2570
|
+
|
|
2571
|
+
if ( child.visible || options.onlyVisible === false ) {
|
|
2572
|
+
|
|
2573
|
+
const childNodeIndex = await this.processNodeAsync( child );
|
|
2574
|
+
|
|
2575
|
+
if ( childNodeIndex !== null ) grandchildren.push( childNodeIndex );
|
|
2576
|
+
|
|
2577
|
+
}
|
|
2578
|
+
|
|
2579
|
+
}
|
|
2580
|
+
|
|
2581
|
+
if ( grandchildren.length > 0 ) childDef.children = grandchildren;
|
|
2582
|
+
|
|
2583
|
+
}
|
|
2584
|
+
|
|
2585
|
+
containerDef.children = containerChildren;
|
|
2586
|
+
|
|
2587
|
+
await this._invokeAllAsync( function ( ext ) {
|
|
2588
|
+
|
|
2589
|
+
ext.writeNode && ext.writeNode( object, containerDef );
|
|
2590
|
+
|
|
2591
|
+
} );
|
|
2592
|
+
|
|
2593
|
+
return containerIndex;
|
|
2594
|
+
|
|
2595
|
+
}
|
|
2596
|
+
|
|
2446
2597
|
/**
|
|
2447
2598
|
* Process Scene
|
|
2448
2599
|
* @param {Scene} scene Scene to process
|
|
@@ -3530,9 +3681,9 @@ GLTFExporter.Utils = {
|
|
|
3530
3681
|
|
|
3531
3682
|
},
|
|
3532
3683
|
|
|
3533
|
-
|
|
3684
|
+
toTypedBufferAttribute: function ( srcAttribute, TypedArray ) {
|
|
3534
3685
|
|
|
3535
|
-
const dstAttribute = new BufferAttribute( new
|
|
3686
|
+
const dstAttribute = new BufferAttribute( new TypedArray( srcAttribute.count * srcAttribute.itemSize ), srcAttribute.itemSize, false );
|
|
3536
3687
|
|
|
3537
3688
|
if ( ! srcAttribute.normalized && ! srcAttribute.isInterleavedBufferAttribute ) {
|
|
3538
3689
|
|