@plastic-software/three 0.167.3 → 0.174.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 +1 -1
- package/build/three.cjs +36277 -24023
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46743
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50670
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +70301 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +3 -15
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +61 -11
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/capabilities/WebGPU.js +1 -10
- package/examples/jsm/controls/ArcballControls.js +262 -231
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +801 -777
- package/examples/jsm/controls/PointerLockControls.js +26 -20
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +119 -68
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +442 -0
- package/examples/jsm/curves/NURBSCurve.js +33 -2
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +181 -109
- package/examples/jsm/exporters/KTX2Exporter.js +54 -23
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +11 -9
- package/examples/jsm/exporters/USDZExporter.js +50 -11
- package/examples/jsm/geometries/DecalGeometry.js +73 -21
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/interactive/SelectionHelper.js +3 -1
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -12
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineGeometry.js +25 -0
- package/examples/jsm/lines/LineMaterial.js +0 -1
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/Line2.js +2 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
- package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +104 -2
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +15 -12
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +71 -22
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +29 -14
- package/examples/jsm/loaders/KTX2Loader.js +160 -58
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +2 -1
- package/examples/jsm/loaders/MTLLoader.js +27 -7
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +15 -12
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +17 -18
- package/examples/jsm/loaders/VRMLLoader.js +17 -17
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ColorSpaces.js +76 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
- package/examples/jsm/misc/Timer.js +27 -12
- package/examples/jsm/misc/Volume.js +28 -18
- package/examples/jsm/misc/VolumeSlice.js +19 -16
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/LensflareMesh.js +324 -0
- package/examples/jsm/objects/Reflector.js +5 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +14 -14
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +11 -9
- package/examples/jsm/objects/WaterMesh.js +38 -33
- package/examples/jsm/physics/JoltPhysics.js +8 -8
- package/examples/jsm/physics/RapierPhysics.js +5 -5
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +37 -51
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +8 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +6 -2
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +12 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
- package/examples/jsm/transpiler/TSLEncoder.js +96 -21
- package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
- package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
- package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
- package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
- package/examples/jsm/tsl/display/FXAANode.js +364 -0
- package/examples/jsm/tsl/display/FilmNode.js +100 -0
- package/examples/jsm/tsl/display/GTAONode.js +521 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
- package/examples/jsm/tsl/display/LensflareNode.js +278 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +750 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
- package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
- package/examples/jsm/tsl/display/SMAANode.js +767 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
- package/examples/jsm/tsl/display/SSRNode.js +538 -0
- package/examples/jsm/tsl/display/Sepia.js +24 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
- package/examples/jsm/tsl/display/TransitionNode.js +140 -0
- package/examples/jsm/tsl/display/hashBlur.js +34 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
- package/examples/jsm/tsl/math/Bayer.js +18 -0
- package/examples/jsm/tsl/utils/Raymarching.js +65 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneOptimizer.js +410 -0
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/UVsDebug.js +1 -1
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +14 -9
- package/src/Three.Core.js +182 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +543 -0
- package/src/Three.WebGPU.Nodes.js +23 -0
- package/src/Three.WebGPU.js +13 -184
- package/src/Three.js +1 -176
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +1 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +379 -2
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +29 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +173 -34
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +6 -6
- package/src/core/BufferAttribute.js +4 -9
- package/src/core/BufferGeometry.js +48 -8
- package/src/core/Clock.js +1 -1
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/InterleavedBuffer.js +4 -13
- package/src/core/Object3D.js +573 -3
- package/src/core/RenderTarget.js +22 -4
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Controls.js +104 -0
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +18 -7
- package/src/extras/ImageUtils.js +18 -11
- package/src/extras/PMREMGenerator.js +40 -9
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +96 -10
- package/src/extras/core/Curve.js +153 -53
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +50 -4
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +52 -0
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +43 -3
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +61 -18
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +24 -2
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/Loader.js +132 -0
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +189 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
- package/src/loaders/nodes/NodeObjectLoader.js +151 -0
- package/src/materials/LineDashedMaterial.js +0 -1
- package/src/materials/Material.js +469 -7
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -2
- package/src/materials/MeshStandardMaterial.js +2 -2
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
- package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
- package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
- package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
- package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
- package/src/materials/nodes/NodeMaterial.js +1180 -0
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
- package/src/materials/nodes/PointsNodeMaterial.js +153 -0
- package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/ColorManagement.js +143 -102
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +96 -2
- package/src/math/MathUtils.js +182 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +265 -9
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +230 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -13
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +84 -166
- package/src/nodes/TSL.js +167 -0
- package/src/nodes/accessors/AccessorsUtils.js +39 -10
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +93 -26
- package/src/nodes/accessors/Bitangent.js +54 -0
- package/src/nodes/accessors/BufferAttributeNode.js +189 -11
- package/src/nodes/accessors/BufferNode.js +70 -5
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +129 -0
- package/src/nodes/accessors/ClippingNode.js +152 -43
- package/src/nodes/accessors/CubeTextureNode.js +76 -13
- package/src/nodes/accessors/InstanceNode.js +118 -35
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +129 -0
- package/src/nodes/accessors/MaterialNode.js +394 -58
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
- package/src/nodes/accessors/ModelNode.js +159 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
- package/src/nodes/accessors/MorphNode.js +60 -13
- package/src/nodes/accessors/Normal.js +156 -0
- package/src/nodes/accessors/Object3DNode.js +154 -35
- package/src/nodes/accessors/PointUVNode.js +35 -6
- package/src/nodes/accessors/Position.js +64 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
- package/src/nodes/accessors/ReferenceNode.js +243 -6
- package/src/nodes/accessors/ReflectVector.js +36 -0
- package/src/nodes/accessors/RendererReferenceNode.js +57 -7
- package/src/nodes/accessors/SceneNode.js +98 -6
- package/src/nodes/accessors/SkinningNode.js +214 -21
- package/src/nodes/accessors/StorageBufferNode.js +288 -28
- package/src/nodes/accessors/StorageTextureNode.js +139 -12
- package/src/nodes/accessors/Tangent.js +62 -0
- package/src/nodes/accessors/Texture3DNode.js +98 -12
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
- package/src/nodes/accessors/TextureNode.js +347 -34
- package/src/nodes/accessors/TextureSizeNode.js +51 -9
- package/src/nodes/accessors/UV.js +11 -0
- package/src/nodes/accessors/UniformArrayNode.js +241 -32
- package/src/nodes/accessors/UserDataNode.js +55 -7
- package/src/nodes/accessors/VelocityNode.js +223 -0
- package/src/nodes/accessors/VertexColorNode.js +45 -6
- package/src/nodes/code/CodeNode.js +108 -8
- package/src/nodes/code/ExpressionNode.js +38 -7
- package/src/nodes/code/FunctionCallNode.js +62 -11
- package/src/nodes/code/FunctionNode.js +54 -24
- package/src/nodes/code/ScriptableNode.js +241 -17
- package/src/nodes/code/ScriptableValueNode.js +93 -8
- package/src/nodes/core/ArrayNode.js +142 -0
- package/src/nodes/core/AssignNode.js +60 -12
- package/src/nodes/core/AttributeNode.js +55 -22
- package/src/nodes/core/BypassNode.js +59 -11
- package/src/nodes/core/CacheNode.js +64 -10
- package/src/nodes/core/ConstNode.js +38 -3
- package/src/nodes/core/ContextNode.js +87 -12
- package/src/nodes/core/IndexNode.js +102 -10
- package/src/nodes/core/InputNode.js +55 -3
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +81 -7
- package/src/nodes/core/Node.js +368 -50
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1317 -83
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +226 -6
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +61 -17
- package/src/nodes/core/ParameterNode.js +34 -4
- package/src/nodes/core/PropertyNode.js +296 -32
- package/src/nodes/core/StackNode.js +108 -8
- package/src/nodes/core/StructNode.js +120 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +116 -9
- package/src/nodes/core/TempNode.js +37 -7
- package/src/nodes/core/UniformGroupNode.js +98 -17
- package/src/nodes/core/UniformNode.js +72 -4
- package/src/nodes/core/VarNode.js +170 -13
- package/src/nodes/core/VaryingNode.js +109 -8
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +193 -0
- package/src/nodes/display/BumpMapNode.js +47 -10
- package/src/nodes/display/ColorAdjustment.js +141 -0
- package/src/nodes/display/ColorSpaceFunctions.js +54 -0
- package/src/nodes/display/ColorSpaceNode.js +147 -68
- package/src/nodes/display/FrontFacingNode.js +39 -6
- package/src/nodes/display/NormalMapNode.js +55 -13
- package/src/nodes/display/PassNode.js +420 -19
- package/src/nodes/display/PosterizeNode.js +40 -7
- package/src/nodes/display/RenderOutputNode.js +81 -13
- package/src/nodes/display/ScreenNode.js +286 -0
- package/src/nodes/display/ToneMappingFunctions.js +242 -0
- package/src/nodes/display/ToneMappingNode.js +68 -175
- package/src/nodes/display/ToonOutlinePassNode.js +183 -0
- package/src/nodes/display/ViewportDepthNode.js +210 -36
- package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
- package/src/nodes/display/ViewportTextureNode.js +68 -11
- package/src/nodes/fog/Fog.js +113 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +50 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +27 -6
- package/src/nodes/functions/PhongLightingModel.js +38 -8
- package/src/nodes/functions/PhysicalLightingModel.js +215 -51
- package/src/nodes/functions/ShadowMaskModel.js +24 -1
- package/src/nodes/functions/ToonLightingModel.js +24 -5
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +62 -7
- package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
- package/src/nodes/gpgpu/BarrierNode.js +89 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
- package/src/nodes/gpgpu/ComputeNode.js +124 -9
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
- package/src/nodes/lighting/AONode.js +24 -3
- package/src/nodes/lighting/AmbientLightNode.js +16 -8
- package/src/nodes/lighting/AnalyticLightNode.js +151 -231
- package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
- package/src/nodes/lighting/BasicLightMapNode.js +25 -5
- package/src/nodes/lighting/DirectionalLightNode.js +19 -20
- package/src/nodes/lighting/EnvironmentNode.js +34 -17
- package/src/nodes/lighting/HemisphereLightNode.js +42 -11
- package/src/nodes/lighting/IESSpotLightNode.js +18 -9
- package/src/nodes/lighting/IrradianceNode.js +23 -3
- package/src/nodes/lighting/LightProbeNode.js +29 -36
- package/src/nodes/lighting/LightUtils.js +12 -4
- package/src/nodes/lighting/LightingContextNode.js +70 -21
- package/src/nodes/lighting/LightingNode.js +22 -9
- package/src/nodes/lighting/LightsNode.js +309 -86
- package/src/nodes/lighting/PointLightNode.js +66 -32
- package/src/nodes/lighting/PointShadowNode.js +306 -0
- package/src/nodes/lighting/RectAreaLightNode.js +61 -25
- package/src/nodes/lighting/ShadowBaseNode.js +92 -0
- package/src/nodes/lighting/ShadowNode.js +812 -0
- package/src/nodes/lighting/SpotLightNode.js +73 -31
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +27 -22
- package/src/nodes/materialx/lib/mx_noise.js +70 -70
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/ConditionalNode.js +230 -0
- package/src/nodes/math/Hash.js +21 -0
- package/src/nodes/math/MathNode.js +812 -131
- package/src/nodes/math/MathUtils.js +47 -8
- package/src/nodes/math/OperatorNode.js +410 -66
- package/src/nodes/math/TriNoise3D.js +32 -32
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +188 -28
- package/src/nodes/pmrem/PMREMUtils.js +24 -24
- package/src/nodes/procedural/Checker.js +22 -0
- package/src/nodes/shapes/Shapes.js +32 -0
- package/src/nodes/tsl/TSLBase.js +31 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
- package/src/nodes/utils/ArrayElementNode.js +45 -5
- package/src/nodes/utils/ConvertNode.js +39 -4
- package/src/nodes/utils/CubeMapNode.js +88 -8
- package/src/nodes/utils/Discard.js +24 -0
- package/src/nodes/utils/EquirectUVNode.js +39 -7
- package/src/nodes/utils/FlipNode.js +106 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
- package/src/nodes/utils/JoinNode.js +31 -3
- package/src/nodes/utils/LoopNode.js +95 -9
- package/src/nodes/utils/MatcapUVNode.js +27 -8
- package/src/nodes/utils/MaxMipLevelNode.js +57 -6
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +21 -0
- package/src/nodes/utils/PostProcessingUtils.js +95 -0
- package/src/nodes/utils/RTTNode.js +141 -9
- package/src/nodes/utils/ReflectorNode.js +295 -21
- package/src/nodes/utils/RemapNode.js +93 -10
- package/src/nodes/utils/RotateNode.js +48 -13
- package/src/nodes/utils/SetNode.js +50 -4
- package/src/nodes/utils/SplitNode.js +62 -6
- package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
- package/src/nodes/utils/SpriteUtils.js +21 -5
- package/src/nodes/utils/StorageArrayElementNode.js +64 -12
- package/src/nodes/utils/Timer.js +73 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
- package/src/nodes/utils/UVUtils.js +27 -9
- package/src/nodes/utils/ViewportUtils.js +16 -4
- package/src/objects/BatchedMesh.js +808 -281
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +120 -5
- package/src/objects/Line.js +89 -6
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +82 -23
- package/src/objects/Points.js +62 -0
- package/src/objects/Skeleton.js +107 -2
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGLRenderer.js +274 -157
- package/src/renderers/common/Animation.js +109 -12
- package/src/renderers/common/Attributes.js +40 -0
- package/src/renderers/common/Backend.js +504 -44
- package/src/renderers/common/Background.js +67 -9
- package/src/renderers/common/BindGroup.js +45 -1
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +136 -19
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +83 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +175 -80
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +22 -3
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +111 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +73 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +112 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +56 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +205 -7
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +230 -21
- package/src/renderers/common/RenderLists.js +45 -6
- package/src/renderers/common/RenderObject.js +552 -41
- package/src/renderers/common/RenderObjects.js +118 -9
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1537 -239
- package/src/renderers/common/RendererUtils.js +191 -0
- package/src/renderers/common/SampledTexture.js +132 -3
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +142 -32
- package/src/renderers/common/TimestampQueryPool.js +98 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +157 -6
- package/src/renderers/common/XRManager.js +1185 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +211 -53
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +194 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +390 -70
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderLib/points.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLBackground.js +24 -1
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +2 -0
- package/src/renderers/webgl/WebGLGeometries.js +0 -28
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +27 -29
- package/src/renderers/webgl/WebGLPrograms.js +24 -16
- package/src/renderers/webgl/WebGLState.js +68 -11
- package/src/renderers/webgl/WebGLTextures.js +49 -10
- package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +816 -236
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
- package/src/renderers/webgpu/WebGPURenderer.js +45 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +54 -32
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +87 -0
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +368 -5
- package/src/textures/VideoFrameTexture.js +35 -0
- package/src/utils.js +33 -1
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/controls/Controls.js +0 -32
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/BitangentNode.js +0 -13
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/accessors/UVNode.js +0 -3
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -152
- package/src/nodes/display/AnamorphicNode.js +0 -145
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/DenoiseNode.js +0 -198
- package/src/nodes/display/DotScreenNode.js +0 -75
- package/src/nodes/display/FXAANode.js +0 -327
- package/src/nodes/display/FilmNode.js +0 -52
- package/src/nodes/display/GTAONode.js +0 -324
- package/src/nodes/display/GaussianBlurNode.js +0 -207
- package/src/nodes/display/Lut3DNode.js +0 -53
- package/src/nodes/display/RGBShiftNode.js +0 -49
- package/src/nodes/display/SepiaNode.js +0 -18
- package/src/nodes/display/TransitionNode.js +0 -76
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/fog/FogExp2Node.js +0 -34
- package/src/nodes/fog/FogNode.js +0 -48
- package/src/nodes/fog/FogRangeNode.js +0 -35
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/loaders/NodeLoader.js +0 -110
- package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
- package/src/nodes/loaders/NodeObjectLoader.js +0 -71
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
- package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
- package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
- package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
- package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
- package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
- package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/src/nodes/materials/NodeMaterial.js +0 -680
- package/src/nodes/materials/PointsNodeMaterial.js +0 -39
- package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
- package/src/nodes/math/CondNode.js +0 -139
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/OscNode.js +0 -81
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/TimerNode.js +0 -94
|
@@ -7,18 +7,20 @@ import { VolumeSlice } from '../misc/VolumeSlice.js';
|
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* This class had been written to handle the output of the NRRD loader.
|
|
10
|
-
* It contains a volume of data and
|
|
10
|
+
* It contains a volume of data and information about it.
|
|
11
11
|
* For now it only handles 3 dimensional data.
|
|
12
12
|
* See the webgl_loader_nrrd.html example and the loaderNRRD.js file to see how to use this class.
|
|
13
13
|
* @class
|
|
14
|
-
* @param {number} xLength Width of the volume
|
|
15
|
-
* @param {number} yLength Length of the volume
|
|
16
|
-
* @param {number} zLength Depth of the volume
|
|
17
|
-
* @param {string} type The type of data (uint8, uint16, ...)
|
|
18
|
-
* @param {ArrayBuffer} arrayBuffer The buffer with volume data
|
|
19
14
|
*/
|
|
20
15
|
class Volume {
|
|
21
16
|
|
|
17
|
+
/**
|
|
18
|
+
* @param {number} xLength Width of the volume
|
|
19
|
+
* @param {number} yLength Length of the volume
|
|
20
|
+
* @param {number} zLength Depth of the volume
|
|
21
|
+
* @param {string} type The type of data (uint8, uint16, ...)
|
|
22
|
+
* @param {ArrayBuffer} arrayBuffer The buffer with volume data
|
|
23
|
+
*/
|
|
22
24
|
constructor( xLength, yLength, zLength, type, arrayBuffer ) {
|
|
23
25
|
|
|
24
26
|
if ( xLength !== undefined ) {
|
|
@@ -209,7 +211,8 @@ class Volume {
|
|
|
209
211
|
}
|
|
210
212
|
|
|
211
213
|
/**
|
|
212
|
-
*
|
|
214
|
+
* Shortcut for data[access(i,j,k)]
|
|
215
|
+
*
|
|
213
216
|
* @memberof Volume
|
|
214
217
|
* @param {number} i First coordinate
|
|
215
218
|
* @param {number} j Second coordinate
|
|
@@ -223,7 +226,8 @@ class Volume {
|
|
|
223
226
|
}
|
|
224
227
|
|
|
225
228
|
/**
|
|
226
|
-
*
|
|
229
|
+
* Compute the index in the data array corresponding to the given coordinates in IJK system
|
|
230
|
+
*
|
|
227
231
|
* @memberof Volume
|
|
228
232
|
* @param {number} i First coordinate
|
|
229
233
|
* @param {number} j Second coordinate
|
|
@@ -237,7 +241,8 @@ class Volume {
|
|
|
237
241
|
}
|
|
238
242
|
|
|
239
243
|
/**
|
|
240
|
-
*
|
|
244
|
+
* Retrieve the IJK coordinates of the voxel corresponding of the given index in the data
|
|
245
|
+
*
|
|
241
246
|
* @memberof Volume
|
|
242
247
|
* @param {number} index index of the voxel
|
|
243
248
|
* @returns {Array} [x,y,z]
|
|
@@ -252,7 +257,8 @@ class Volume {
|
|
|
252
257
|
}
|
|
253
258
|
|
|
254
259
|
/**
|
|
255
|
-
*
|
|
260
|
+
* Apply a function to all the voxels, be careful, the value will be replaced
|
|
261
|
+
*
|
|
256
262
|
* @memberof Volume
|
|
257
263
|
* @param {Function} functionToMap A function to apply to every voxel, will be called with the following parameters :
|
|
258
264
|
* value of the voxel
|
|
@@ -277,11 +283,12 @@ class Volume {
|
|
|
277
283
|
}
|
|
278
284
|
|
|
279
285
|
/**
|
|
280
|
-
*
|
|
286
|
+
* Compute the orientation of the slice and returns all the information relative to the geometry such as sliceAccess, the plane matrix (orientation and position in RAS coordinate) and the dimensions of the plane in both coordinate system.
|
|
287
|
+
*
|
|
281
288
|
* @memberof Volume
|
|
282
289
|
* @param {string} axis the normal axis to the slice 'x' 'y' or 'z'
|
|
283
|
-
* @param {number}
|
|
284
|
-
* @returns {Object} an object containing all the
|
|
290
|
+
* @param {number} RASIndex the index of the slice
|
|
291
|
+
* @returns {Object} an object containing all the useful information on the geometry of the slice
|
|
285
292
|
*/
|
|
286
293
|
extractPerpendicularPlane( axis, RASIndex ) {
|
|
287
294
|
|
|
@@ -401,8 +408,9 @@ class Volume {
|
|
|
401
408
|
}
|
|
402
409
|
|
|
403
410
|
/**
|
|
404
|
-
*
|
|
405
|
-
*
|
|
411
|
+
* Returns a slice corresponding to the given axis and index.
|
|
412
|
+
* The coordinate are given in the Right Anterior Superior coordinate format.
|
|
413
|
+
*
|
|
406
414
|
* @memberof Volume
|
|
407
415
|
* @param {string} axis the normal axis to the slice 'x' 'y' or 'z'
|
|
408
416
|
* @param {number} index the index of the slice
|
|
@@ -417,8 +425,9 @@ class Volume {
|
|
|
417
425
|
}
|
|
418
426
|
|
|
419
427
|
/**
|
|
420
|
-
*
|
|
421
|
-
*
|
|
428
|
+
* Call repaint on all the slices extracted from this volume
|
|
429
|
+
*
|
|
430
|
+
* @see {@link VolumeSlice#repaint}
|
|
422
431
|
* @memberof Volume
|
|
423
432
|
* @returns {Volume} this
|
|
424
433
|
*/
|
|
@@ -435,7 +444,8 @@ class Volume {
|
|
|
435
444
|
}
|
|
436
445
|
|
|
437
446
|
/**
|
|
438
|
-
*
|
|
447
|
+
* Compute the minimum and the maximum of the data in the volume
|
|
448
|
+
*
|
|
439
449
|
* @memberof Volume
|
|
440
450
|
* @returns {Array} [min,max]
|
|
441
451
|
*/
|
|
@@ -12,13 +12,15 @@ import {
|
|
|
12
12
|
/**
|
|
13
13
|
* This class has been made to hold a slice of a volume data
|
|
14
14
|
* @class
|
|
15
|
-
* @
|
|
16
|
-
* @param {number} [index=0] The index of the slice
|
|
17
|
-
* @param {string} [axis='z'] For now only 'x', 'y' or 'z' but later it will change to a normal vector
|
|
18
|
-
* @see Volume
|
|
15
|
+
* @see {@link Volume}
|
|
19
16
|
*/
|
|
20
17
|
class VolumeSlice {
|
|
21
18
|
|
|
19
|
+
/**
|
|
20
|
+
* @param {Volume} volume The associated volume
|
|
21
|
+
* @param {number} [index=0] The index of the slice
|
|
22
|
+
* @param {string} [axis='z'] For now only 'x', 'y' or 'z' but later it will change to a normal vector
|
|
23
|
+
*/
|
|
22
24
|
constructor( volume, index, axis ) {
|
|
23
25
|
|
|
24
26
|
const slice = this;
|
|
@@ -27,7 +29,7 @@ class VolumeSlice {
|
|
|
27
29
|
*/
|
|
28
30
|
this.volume = volume;
|
|
29
31
|
/**
|
|
30
|
-
* @member {
|
|
32
|
+
* @member {number} index The index of the slice, if changed, will automatically call updateGeometry at the next repaint
|
|
31
33
|
*/
|
|
32
34
|
index = index || 0;
|
|
33
35
|
Object.defineProperty( this, 'index', {
|
|
@@ -45,7 +47,7 @@ class VolumeSlice {
|
|
|
45
47
|
}
|
|
46
48
|
} );
|
|
47
49
|
/**
|
|
48
|
-
* @member {
|
|
50
|
+
* @member {string} axis The normal axis
|
|
49
51
|
*/
|
|
50
52
|
this.axis = axis || 'z';
|
|
51
53
|
|
|
@@ -68,6 +70,7 @@ class VolumeSlice {
|
|
|
68
70
|
|
|
69
71
|
const canvasMap = new Texture( this.canvas );
|
|
70
72
|
canvasMap.minFilter = LinearFilter;
|
|
73
|
+
canvasMap.generateMipmaps = false;
|
|
71
74
|
canvasMap.wrapS = canvasMap.wrapT = ClampToEdgeWrapping;
|
|
72
75
|
canvasMap.colorSpace = SRGBColorSpace;
|
|
73
76
|
const material = new MeshBasicMaterial( { map: canvasMap, side: DoubleSide, transparent: true } );
|
|
@@ -77,32 +80,32 @@ class VolumeSlice {
|
|
|
77
80
|
this.mesh = new Mesh( this.geometry, material );
|
|
78
81
|
this.mesh.matrixAutoUpdate = false;
|
|
79
82
|
/**
|
|
80
|
-
* @member {
|
|
83
|
+
* @member {boolean} geometryNeedsUpdate If set to true, updateGeometry will be triggered at the next repaint
|
|
81
84
|
*/
|
|
82
85
|
this.geometryNeedsUpdate = true;
|
|
83
86
|
this.repaint();
|
|
84
87
|
|
|
85
88
|
/**
|
|
86
|
-
* @member {
|
|
89
|
+
* @member {number} iLength Width of slice in the original coordinate system, corresponds to the width of the buffer canvas
|
|
87
90
|
*/
|
|
88
91
|
|
|
89
92
|
/**
|
|
90
|
-
* @member {
|
|
93
|
+
* @member {number} jLength Height of slice in the original coordinate system, corresponds to the height of the buffer canvas
|
|
91
94
|
*/
|
|
92
95
|
|
|
93
96
|
/**
|
|
94
97
|
* @member {Function} sliceAccess Function that allow the slice to access right data
|
|
95
|
-
* @see Volume
|
|
96
|
-
* @param {
|
|
97
|
-
* @param {
|
|
98
|
-
* @returns {
|
|
98
|
+
* @see {@link Volume#extractPerpendicularPlane}
|
|
99
|
+
* @param {number} i The first coordinate
|
|
100
|
+
* @param {number} j The second coordinate
|
|
101
|
+
* @returns {number} the index corresponding to the voxel in volume.data of the given position in the slice
|
|
99
102
|
*/
|
|
100
103
|
|
|
101
104
|
|
|
102
105
|
}
|
|
103
106
|
|
|
104
107
|
/**
|
|
105
|
-
*
|
|
108
|
+
* Refresh the texture and the geometry if geometryNeedsUpdate is set to true
|
|
106
109
|
* @memberof VolumeSlice
|
|
107
110
|
*/
|
|
108
111
|
repaint() {
|
|
@@ -188,8 +191,8 @@ class VolumeSlice {
|
|
|
188
191
|
}
|
|
189
192
|
|
|
190
193
|
/**
|
|
191
|
-
*
|
|
192
|
-
* @see Volume
|
|
194
|
+
* Refresh the geometry according to axis and index
|
|
195
|
+
* @see {@link Volume#extractPerpendicularPlane}
|
|
193
196
|
* @memberof VolumeSlice
|
|
194
197
|
*/
|
|
195
198
|
updateGeometry() {
|
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
* Make a new DataTexture to store the descriptions of the curves.
|
|
21
21
|
*
|
|
22
22
|
* @param { number } numberOfCurves the number of curves needed to be described by this texture.
|
|
23
|
+
* @returns { DataTexture }
|
|
23
24
|
*/
|
|
24
25
|
export function initSplineTexture( numberOfCurves = 1 ) {
|
|
25
26
|
|
|
@@ -93,7 +94,8 @@ function setTextureValue( texture, index, x, y, z, o ) {
|
|
|
93
94
|
/**
|
|
94
95
|
* Create a new set of uniforms for describing the curve modifier
|
|
95
96
|
*
|
|
96
|
-
* @param { DataTexture }
|
|
97
|
+
* @param { DataTexture } splineTexture which holds the curve description
|
|
98
|
+
* @returns { Object } The uniforms object to be used in the shader
|
|
97
99
|
*/
|
|
98
100
|
export function getUniforms( splineTexture ) {
|
|
99
101
|
|
|
@@ -137,10 +139,10 @@ export function modifyShader( material, uniforms, numberOfCurves = 1 ) {
|
|
|
137
139
|
// chunk import moved in front of modified shader below
|
|
138
140
|
.replace( '#include <beginnormal_vertex>', '' )
|
|
139
141
|
|
|
140
|
-
// vec3 transformedNormal declaration
|
|
142
|
+
// vec3 transformedNormal declaration overridden below
|
|
141
143
|
.replace( '#include <defaultnormal_vertex>', '' )
|
|
142
144
|
|
|
143
|
-
// vec3 transformed declaration
|
|
145
|
+
// vec3 transformed declaration overridden below
|
|
144
146
|
.replace( '#include <begin_vertex>', '' )
|
|
145
147
|
|
|
146
148
|
// shader override
|
|
@@ -196,7 +198,7 @@ vec3 transformedNormal = normalMatrix * (basis * objectNormal);
|
|
|
196
198
|
}
|
|
197
199
|
|
|
198
200
|
/**
|
|
199
|
-
* A helper class for making meshes bend
|
|
201
|
+
* A helper class for making meshes bend around curves
|
|
200
202
|
*/
|
|
201
203
|
export class Flow {
|
|
202
204
|
|
|
@@ -207,8 +209,8 @@ export class Flow {
|
|
|
207
209
|
constructor( mesh, numberOfCurves = 1 ) {
|
|
208
210
|
|
|
209
211
|
const obj3D = mesh.clone();
|
|
210
|
-
const
|
|
211
|
-
const uniforms = getUniforms(
|
|
212
|
+
const splineTexture = initSplineTexture( numberOfCurves );
|
|
213
|
+
const uniforms = getUniforms( splineTexture );
|
|
212
214
|
obj3D.traverse( function ( child ) {
|
|
213
215
|
|
|
214
216
|
if (
|
|
@@ -245,7 +247,7 @@ export class Flow {
|
|
|
245
247
|
this.curveLengthArray = new Array( numberOfCurves );
|
|
246
248
|
|
|
247
249
|
this.object3D = obj3D;
|
|
248
|
-
this.
|
|
250
|
+
this.splineTexture = splineTexture;
|
|
249
251
|
this.uniforms = uniforms;
|
|
250
252
|
|
|
251
253
|
}
|
|
@@ -257,7 +259,7 @@ export class Flow {
|
|
|
257
259
|
this.uniforms.spineLength.value = curveLength;
|
|
258
260
|
this.curveLengthArray[ index ] = curveLength;
|
|
259
261
|
this.curveArray[ index ] = curve;
|
|
260
|
-
updateSplineTexture( this.
|
|
262
|
+
updateSplineTexture( this.splineTexture, curve, index );
|
|
261
263
|
|
|
262
264
|
}
|
|
263
265
|
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
// Original src: https://github.com/zz85/threejs-path-flow
|
|
2
|
+
const CHANNELS = 4;
|
|
3
|
+
const TEXTURE_WIDTH = 1024;
|
|
4
|
+
const TEXTURE_HEIGHT = 4;
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
DataTexture,
|
|
8
|
+
DataUtils,
|
|
9
|
+
RGBAFormat,
|
|
10
|
+
HalfFloatType,
|
|
11
|
+
RepeatWrapping,
|
|
12
|
+
Mesh,
|
|
13
|
+
InstancedMesh,
|
|
14
|
+
LinearFilter
|
|
15
|
+
} from 'three';
|
|
16
|
+
|
|
17
|
+
import { modelWorldMatrix, normalLocal, vec2, vec3, vec4, mat3, varyingProperty, texture, reference, Fn, select, positionLocal } from 'three/tsl';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Make a new DataTexture to store the descriptions of the curves.
|
|
21
|
+
*
|
|
22
|
+
* @param { number } [numberOfCurves=1] the number of curves needed to be described by this texture.
|
|
23
|
+
* @returns { DataTexture } The new DataTexture
|
|
24
|
+
*/
|
|
25
|
+
export function initSplineTexture( numberOfCurves = 1 ) {
|
|
26
|
+
|
|
27
|
+
const dataArray = new Uint16Array( TEXTURE_WIDTH * TEXTURE_HEIGHT * numberOfCurves * CHANNELS );
|
|
28
|
+
const dataTexture = new DataTexture(
|
|
29
|
+
dataArray,
|
|
30
|
+
TEXTURE_WIDTH,
|
|
31
|
+
TEXTURE_HEIGHT * numberOfCurves,
|
|
32
|
+
RGBAFormat,
|
|
33
|
+
HalfFloatType
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
dataTexture.wrapS = RepeatWrapping;
|
|
37
|
+
dataTexture.wrapY = RepeatWrapping;
|
|
38
|
+
dataTexture.magFilter = LinearFilter;
|
|
39
|
+
dataTexture.minFilter = LinearFilter;
|
|
40
|
+
dataTexture.needsUpdate = true;
|
|
41
|
+
|
|
42
|
+
return dataTexture;
|
|
43
|
+
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Write the curve description to the data texture
|
|
48
|
+
*
|
|
49
|
+
* @param { DataTexture } texture The DataTexture to write to
|
|
50
|
+
* @param { Curve } splineCurve The curve to describe
|
|
51
|
+
* @param { number } offset Which curve slot to write to
|
|
52
|
+
*/
|
|
53
|
+
export function updateSplineTexture( texture, splineCurve, offset = 0 ) {
|
|
54
|
+
|
|
55
|
+
const numberOfPoints = Math.floor( TEXTURE_WIDTH * ( TEXTURE_HEIGHT / 4 ) );
|
|
56
|
+
splineCurve.arcLengthDivisions = numberOfPoints / 2;
|
|
57
|
+
splineCurve.updateArcLengths();
|
|
58
|
+
const points = splineCurve.getSpacedPoints( numberOfPoints );
|
|
59
|
+
const frenetFrames = splineCurve.computeFrenetFrames( numberOfPoints, true );
|
|
60
|
+
|
|
61
|
+
for ( let i = 0; i < numberOfPoints; i ++ ) {
|
|
62
|
+
|
|
63
|
+
const rowOffset = Math.floor( i / TEXTURE_WIDTH );
|
|
64
|
+
const rowIndex = i % TEXTURE_WIDTH;
|
|
65
|
+
|
|
66
|
+
let pt = points[ i ];
|
|
67
|
+
setTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 0 + rowOffset + ( TEXTURE_HEIGHT * offset ) );
|
|
68
|
+
pt = frenetFrames.tangents[ i ];
|
|
69
|
+
setTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 1 + rowOffset + ( TEXTURE_HEIGHT * offset ) );
|
|
70
|
+
pt = frenetFrames.normals[ i ];
|
|
71
|
+
setTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 2 + rowOffset + ( TEXTURE_HEIGHT * offset ) );
|
|
72
|
+
pt = frenetFrames.binormals[ i ];
|
|
73
|
+
setTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 3 + rowOffset + ( TEXTURE_HEIGHT * offset ) );
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
texture.needsUpdate = true;
|
|
78
|
+
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
function setTextureValue( texture, index, x, y, z, o ) {
|
|
83
|
+
|
|
84
|
+
const image = texture.image;
|
|
85
|
+
const { data } = image;
|
|
86
|
+
const i = CHANNELS * TEXTURE_WIDTH * o; // Row Offset
|
|
87
|
+
|
|
88
|
+
data[ index * CHANNELS + i + 0 ] = DataUtils.toHalfFloat( x );
|
|
89
|
+
data[ index * CHANNELS + i + 1 ] = DataUtils.toHalfFloat( y );
|
|
90
|
+
data[ index * CHANNELS + i + 2 ] = DataUtils.toHalfFloat( z );
|
|
91
|
+
data[ index * CHANNELS + i + 3 ] = DataUtils.toHalfFloat( 1 );
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Create a new set of uniforms for describing the curve modifier
|
|
97
|
+
*
|
|
98
|
+
* @param { DataTexture } splineTexture which holds the curve description
|
|
99
|
+
* @returns { Object } The uniforms object
|
|
100
|
+
*/
|
|
101
|
+
export function getUniforms( splineTexture ) {
|
|
102
|
+
|
|
103
|
+
return {
|
|
104
|
+
spineTexture: splineTexture,
|
|
105
|
+
pathOffset: 0, // time of path curve
|
|
106
|
+
pathSegment: 1, // fractional length of path
|
|
107
|
+
spineOffset: 161,
|
|
108
|
+
spineLength: 400,
|
|
109
|
+
flow: 1, // int
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export function modifyShader( material, uniforms, numberOfCurves ) {
|
|
115
|
+
|
|
116
|
+
const spineTexture = uniforms.spineTexture;
|
|
117
|
+
|
|
118
|
+
const pathOffset = reference( 'pathOffset', 'float', uniforms );
|
|
119
|
+
const pathSegment = reference( 'pathSegment', 'float', uniforms );
|
|
120
|
+
const spineOffset = reference( 'spineOffset', 'float', uniforms );
|
|
121
|
+
const spineLength = reference( 'spineLength', 'float', uniforms );
|
|
122
|
+
const flow = reference( 'flow', 'float', uniforms );
|
|
123
|
+
|
|
124
|
+
material.positionNode = Fn( () => {
|
|
125
|
+
|
|
126
|
+
const textureStacks = TEXTURE_HEIGHT / 4;
|
|
127
|
+
const textureScale = TEXTURE_HEIGHT * numberOfCurves;
|
|
128
|
+
|
|
129
|
+
const worldPos = modelWorldMatrix.mul( vec4( positionLocal, 1 ) ).toVar();
|
|
130
|
+
|
|
131
|
+
const bend = flow.greaterThan( 0 ).toVar();
|
|
132
|
+
const xWeight = select( bend, 0, 1 ).toVar();
|
|
133
|
+
|
|
134
|
+
const spinePortion = select( bend, worldPos.x.add( spineOffset ).div( spineLength ), 0 );
|
|
135
|
+
const mt = spinePortion.mul( pathSegment ).add( pathOffset ).mul( textureStacks ).toVar();
|
|
136
|
+
|
|
137
|
+
mt.assign( mt.mod( textureStacks ) );
|
|
138
|
+
|
|
139
|
+
const rowOffset = mt.floor().toVar();
|
|
140
|
+
|
|
141
|
+
const spinePos = texture( spineTexture, vec2( mt, rowOffset.add( 0.5 ).div( textureScale ) ) ).xyz;
|
|
142
|
+
|
|
143
|
+
const a = texture( spineTexture, vec2( mt, rowOffset.add( 1.5 ).div( textureScale ) ) ).xyz;
|
|
144
|
+
const b = texture( spineTexture, vec2( mt, rowOffset.add( 2.5 ).div( textureScale ) ) ).xyz;
|
|
145
|
+
const c = texture( spineTexture, vec2( mt, rowOffset.add( 3.5 ).div( textureScale ) ) ).xyz;
|
|
146
|
+
|
|
147
|
+
const basis = mat3( a, b, c ).toVar();
|
|
148
|
+
|
|
149
|
+
varyingProperty( 'vec3', 'curveNormal' ).assign( basis.mul( normalLocal ) );
|
|
150
|
+
|
|
151
|
+
return basis.mul( vec3( worldPos.x.mul( xWeight ), worldPos.y, worldPos.z ) ).add( spinePos );
|
|
152
|
+
|
|
153
|
+
} )();
|
|
154
|
+
|
|
155
|
+
material.normalNode = varyingProperty( 'vec3', 'curveNormal' );
|
|
156
|
+
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* A helper class for making meshes bend around curves
|
|
161
|
+
*/
|
|
162
|
+
export class Flow {
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* @param {Mesh} mesh The mesh to clone and modify to bend around the curve
|
|
166
|
+
* @param {number} numberOfCurves The amount of space that should preallocated for additional curves
|
|
167
|
+
*/
|
|
168
|
+
constructor( mesh, numberOfCurves = 1 ) {
|
|
169
|
+
|
|
170
|
+
const obj3D = mesh.clone();
|
|
171
|
+
const splineTexture = initSplineTexture( numberOfCurves );
|
|
172
|
+
const uniforms = getUniforms( splineTexture );
|
|
173
|
+
|
|
174
|
+
obj3D.traverse( function ( child ) {
|
|
175
|
+
|
|
176
|
+
if (
|
|
177
|
+
child instanceof Mesh ||
|
|
178
|
+
child instanceof InstancedMesh
|
|
179
|
+
) {
|
|
180
|
+
|
|
181
|
+
if ( Array.isArray( child.material ) ) {
|
|
182
|
+
|
|
183
|
+
const materials = [];
|
|
184
|
+
|
|
185
|
+
for ( const material of child.material ) {
|
|
186
|
+
|
|
187
|
+
const newMaterial = material.clone();
|
|
188
|
+
modifyShader( newMaterial, uniforms, numberOfCurves );
|
|
189
|
+
materials.push( newMaterial );
|
|
190
|
+
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
child.material = materials;
|
|
194
|
+
|
|
195
|
+
} else {
|
|
196
|
+
|
|
197
|
+
child.material = child.material.clone();
|
|
198
|
+
modifyShader( child.material, uniforms, numberOfCurves );
|
|
199
|
+
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
} );
|
|
205
|
+
|
|
206
|
+
this.curveArray = new Array( numberOfCurves );
|
|
207
|
+
this.curveLengthArray = new Array( numberOfCurves );
|
|
208
|
+
|
|
209
|
+
this.object3D = obj3D;
|
|
210
|
+
this.splineTexture = splineTexture;
|
|
211
|
+
this.uniforms = uniforms;
|
|
212
|
+
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
updateCurve( index, curve ) {
|
|
216
|
+
|
|
217
|
+
if ( index >= this.curveArray.length ) throw Error( 'Index out of range for Flow' );
|
|
218
|
+
|
|
219
|
+
const curveLength = curve.getLength();
|
|
220
|
+
|
|
221
|
+
this.uniforms.spineLength = curveLength;
|
|
222
|
+
this.curveLengthArray[ index ] = curveLength;
|
|
223
|
+
this.curveArray[ index ] = curve;
|
|
224
|
+
|
|
225
|
+
updateSplineTexture( this.splineTexture, curve, index );
|
|
226
|
+
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
moveAlongCurve( amount ) {
|
|
230
|
+
|
|
231
|
+
this.uniforms.pathOffset += amount;
|
|
232
|
+
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
}
|
|
@@ -29,7 +29,7 @@ class SimplifyModifier {
|
|
|
29
29
|
delete geometry.morphAttributes.normal;
|
|
30
30
|
const attributes = geometry.attributes;
|
|
31
31
|
|
|
32
|
-
// this modifier can only process indexed and non-indexed
|
|
32
|
+
// this modifier can only process indexed and non-indexed geometries with at least a position attribute
|
|
33
33
|
|
|
34
34
|
for ( const name in attributes ) {
|
|
35
35
|
|
|
@@ -584,7 +584,7 @@ class Vertex {
|
|
|
584
584
|
|
|
585
585
|
// these will be computed in computeEdgeCostAtVertex()
|
|
586
586
|
this.collapseCost = 0; // cost of collapsing this vertex, the less the better. aka objdist
|
|
587
|
-
this.collapseNeighbor = null; // best
|
|
587
|
+
this.collapseNeighbor = null; // best candidate for collapsing
|
|
588
588
|
|
|
589
589
|
}
|
|
590
590
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Mesh, MeshBasicMaterial, SphereGeometry, Vector3 } from 'three';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* A ground-projected skybox. The height is how far the camera that took the photo was above the ground -
|
|
5
|
-
* a larger value will magnify the downward part of the image. By default the object is centered at the camera,
|
|
6
|
-
* so it is often helpful to set skybox.position.y = height to put the ground at the origin. Set the radius
|
|
4
|
+
* A ground-projected skybox. The height is how far the camera that took the photo was above the ground -
|
|
5
|
+
* a larger value will magnify the downward part of the image. By default the object is centered at the camera,
|
|
6
|
+
* so it is often helpful to set skybox.position.y = height to put the ground at the origin. Set the radius
|
|
7
7
|
* large enough to ensure your user's camera stays inside.
|
|
8
8
|
*/
|
|
9
9
|
|
|
@@ -18,7 +18,7 @@ class GroundedSkybox extends Mesh {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
const geometry = new SphereGeometry( radius, 2 * resolution, resolution );
|
|
21
|
-
geometry.scale( 1, 1, -1 );
|
|
21
|
+
geometry.scale( 1, 1, - 1 );
|
|
22
22
|
|
|
23
23
|
const pos = geometry.getAttribute( 'position' );
|
|
24
24
|
const tmp = new Vector3();
|