super-three 0.171.0 → 0.172.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/three.cjs +157 -49
- package/build/three.core.js +104 -42
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +53 -8
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +10 -5
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +21191 -1008
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +21189 -1008
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +3 -2
- package/examples/jsm/controls/ArcballControls.js +28 -19
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +11 -7
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +22 -2
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -1
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
- package/examples/jsm/misc/Volume.js +20 -12
- package/examples/jsm/misc/VolumeSlice.js +2 -2
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +2 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +9 -4
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +1 -1
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +474 -21
- package/src/materials/nodes/PointsNodeMaterial.js +22 -13
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
- package/src/nodes/Nodes.js +1 -6
- package/src/nodes/TSL.js +2 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +24 -5
- package/src/nodes/accessors/BatchNode.js +39 -3
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +49 -0
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +302 -8
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +59 -3
- package/src/nodes/accessors/Object3DNode.js +102 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +53 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
- package/src/nodes/accessors/ReferenceNode.js +202 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +168 -4
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +36 -0
- package/src/nodes/accessors/Texture3DNode.js +89 -5
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +309 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +223 -23
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +82 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +24 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +337 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +945 -15
- 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 +141 -0
- package/src/nodes/core/NodeVar.js +30 -0
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +33 -2
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +78 -0
- package/src/nodes/core/StructTypeNode.js +39 -1
- package/src/nodes/core/TempNode.js +30 -4
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +52 -0
- package/src/nodes/core/VaryingNode.js +83 -2
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +298 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +87 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +93 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +240 -34
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +70 -3
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +614 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +233 -0
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +1 -1
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/tsl/TSLBase.js +2 -2
- package/src/nodes/utils/ArrayElementNode.js +38 -2
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +74 -1
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +40 -0
- package/src/nodes/utils/Timer.js +19 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +1 -2
- package/src/objects/ClippingGroup.js +49 -0
- package/src/renderers/WebGLRenderer.js +23 -4
- package/src/renderers/common/Animation.js +63 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +467 -52
- package/src/renderers/common/Background.js +34 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +38 -1
- package/src/renderers/common/ClippingContext.js +107 -14
- package/src/renderers/common/Color4.js +36 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +98 -0
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +87 -0
- package/src/renderers/common/Lighting.js +26 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +75 -3
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +33 -10
- package/src/renderers/common/RenderContext.js +169 -4
- package/src/renderers/common/RenderContexts.js +42 -2
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +31 -0
- package/src/renderers/common/RenderObject.js +328 -4
- package/src/renderers/common/RenderObjects.js +101 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1096 -31
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +121 -0
- 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 +83 -0
- package/src/renderers/common/Uniform.js +188 -2
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +139 -2
- package/src/renderers/common/extras/PMREMGenerator.js +24 -3
- package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +189 -0
- 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 +327 -60
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +480 -49
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
- package/src/renderers/webgpu/WebGPURenderer.js +35 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +7 -1
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/renderers/common/PostProcessingUtils.js +0 -86
|
@@ -299,7 +299,7 @@ class ColladaLoader extends Loader {
|
|
|
299
299
|
|
|
300
300
|
if ( hasChildren === false ) {
|
|
301
301
|
|
|
302
|
-
// since 'id' attributes can be optional, it's necessary to generate a UUID for
|
|
302
|
+
// since 'id' attributes can be optional, it's necessary to generate a UUID for unique assignment
|
|
303
303
|
|
|
304
304
|
library.animations[ xml.getAttribute( 'id' ) || MathUtils.generateUUID() ] = data;
|
|
305
305
|
|
|
@@ -977,7 +977,7 @@ class ColladaLoader extends Loader {
|
|
|
977
977
|
}
|
|
978
978
|
|
|
979
979
|
// we sort the joints in descending order based on the weights.
|
|
980
|
-
// this ensures, we only
|
|
980
|
+
// this ensures, we only proceed the most important joints of the vertex
|
|
981
981
|
|
|
982
982
|
vertexSkinData.sort( descending );
|
|
983
983
|
|
|
@@ -1593,7 +1593,7 @@ class ColladaLoader extends Loader {
|
|
|
1593
1593
|
|
|
1594
1594
|
}
|
|
1595
1595
|
|
|
1596
|
-
// create texture if image is
|
|
1596
|
+
// create texture if image is available
|
|
1597
1597
|
|
|
1598
1598
|
if ( image !== null ) {
|
|
1599
1599
|
|
|
@@ -2392,7 +2392,7 @@ class ColladaLoader extends Loader {
|
|
|
2392
2392
|
break;
|
|
2393
2393
|
|
|
2394
2394
|
default:
|
|
2395
|
-
console.warn( 'THREE.ColladaLoader:
|
|
2395
|
+
console.warn( 'THREE.ColladaLoader: Unknown primitive type:', primitive.type );
|
|
2396
2396
|
|
|
2397
2397
|
}
|
|
2398
2398
|
|
|
@@ -3434,7 +3434,7 @@ class ColladaLoader extends Loader {
|
|
|
3434
3434
|
let i, j, data;
|
|
3435
3435
|
|
|
3436
3436
|
// a skeleton can have multiple root bones. collada expresses this
|
|
3437
|
-
//
|
|
3437
|
+
// situation with multiple "skeleton" tags per controller instance
|
|
3438
3438
|
|
|
3439
3439
|
for ( i = 0; i < skeletons.length; i ++ ) {
|
|
3440
3440
|
|
|
@@ -109,6 +109,33 @@ class DDSLoader extends CompressedTextureLoader {
|
|
|
109
109
|
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
+
function loadRGBMip( buffer, dataOffset, width, height ) {
|
|
113
|
+
|
|
114
|
+
const dataLength = width * height * 3;
|
|
115
|
+
const srcBuffer = new Uint8Array( buffer, dataOffset, dataLength );
|
|
116
|
+
const byteArray = new Uint8Array( width * height * 4 );
|
|
117
|
+
let dst = 0;
|
|
118
|
+
let src = 0;
|
|
119
|
+
for ( let y = 0; y < height; y ++ ) {
|
|
120
|
+
|
|
121
|
+
for ( let x = 0; x < width; x ++ ) {
|
|
122
|
+
|
|
123
|
+
const b = srcBuffer[ src ]; src ++;
|
|
124
|
+
const g = srcBuffer[ src ]; src ++;
|
|
125
|
+
const r = srcBuffer[ src ]; src ++;
|
|
126
|
+
byteArray[ dst ] = r; dst ++; //r
|
|
127
|
+
byteArray[ dst ] = g; dst ++; //g
|
|
128
|
+
byteArray[ dst ] = b; dst ++; //b
|
|
129
|
+
byteArray[ dst ] = 1.0; dst ++; //a
|
|
130
|
+
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return byteArray;
|
|
136
|
+
|
|
137
|
+
}
|
|
138
|
+
|
|
112
139
|
const FOURCC_DXT1 = fourCCToInt32( 'DXT1' );
|
|
113
140
|
const FOURCC_DXT3 = fourCCToInt32( 'DXT3' );
|
|
114
141
|
const FOURCC_DXT5 = fourCCToInt32( 'DXT5' );
|
|
@@ -161,6 +188,7 @@ class DDSLoader extends CompressedTextureLoader {
|
|
|
161
188
|
const fourCC = header[ off_pfFourCC ];
|
|
162
189
|
|
|
163
190
|
let isRGBAUncompressed = false;
|
|
191
|
+
let isRGBUncompressed = false;
|
|
164
192
|
|
|
165
193
|
let dataOffset = header[ off_size ] + 4;
|
|
166
194
|
|
|
@@ -236,6 +264,15 @@ class DDSLoader extends CompressedTextureLoader {
|
|
|
236
264
|
blockBytes = 64;
|
|
237
265
|
dds.format = RGBAFormat;
|
|
238
266
|
|
|
267
|
+
} else if ( header[ off_RGBBitCount ] === 24
|
|
268
|
+
&& header[ off_RBitMask ] & 0xff0000
|
|
269
|
+
&& header[ off_GBitMask ] & 0xff00
|
|
270
|
+
&& header[ off_BBitMask ] & 0xff ) {
|
|
271
|
+
|
|
272
|
+
isRGBUncompressed = true;
|
|
273
|
+
blockBytes = 64;
|
|
274
|
+
dds.format = RGBAFormat;
|
|
275
|
+
|
|
239
276
|
} else {
|
|
240
277
|
|
|
241
278
|
console.error( 'THREE.DDSLoader.parse: Unsupported FourCC code ', int32ToFourCC( fourCC ) );
|
|
@@ -290,6 +327,11 @@ class DDSLoader extends CompressedTextureLoader {
|
|
|
290
327
|
byteArray = loadARGBMip( buffer, dataOffset, width, height );
|
|
291
328
|
dataLength = byteArray.length;
|
|
292
329
|
|
|
330
|
+
} else if ( isRGBUncompressed ) {
|
|
331
|
+
|
|
332
|
+
byteArray = loadRGBMip( buffer, dataOffset, width, height );
|
|
333
|
+
dataLength = width * height * 3;
|
|
334
|
+
|
|
293
335
|
} else {
|
|
294
336
|
|
|
295
337
|
dataLength = Math.max( 4, width ) / 4 * Math.max( 4, height ) / 4 * blockBytes;
|
|
@@ -2255,6 +2255,9 @@ const ALPHA_MODES = {
|
|
|
2255
2255
|
|
|
2256
2256
|
/**
|
|
2257
2257
|
* Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material
|
|
2258
|
+
*
|
|
2259
|
+
* @param {Object<String, Material>} cache
|
|
2260
|
+
* @return {Material}
|
|
2258
2261
|
*/
|
|
2259
2262
|
function createDefaultMaterial( cache ) {
|
|
2260
2263
|
|
|
@@ -2753,6 +2756,9 @@ class GLTFParser {
|
|
|
2753
2756
|
* Textures) can be reused directly and are not marked here.
|
|
2754
2757
|
*
|
|
2755
2758
|
* Example: CesiumMilkTruck sample model reuses "Wheel" meshes.
|
|
2759
|
+
*
|
|
2760
|
+
* @param {Object} cache
|
|
2761
|
+
* @param {Object3D} index
|
|
2756
2762
|
*/
|
|
2757
2763
|
_addNodeRef( cache, index ) {
|
|
2758
2764
|
|
|
@@ -2768,7 +2774,14 @@ class GLTFParser {
|
|
|
2768
2774
|
|
|
2769
2775
|
}
|
|
2770
2776
|
|
|
2771
|
-
/**
|
|
2777
|
+
/**
|
|
2778
|
+
* Returns a reference to a shared resource, cloning it if necessary.
|
|
2779
|
+
*
|
|
2780
|
+
* @param {Object} cache
|
|
2781
|
+
* @param {Number} index
|
|
2782
|
+
* @param {Object} object
|
|
2783
|
+
* @return {Object}
|
|
2784
|
+
*/
|
|
2772
2785
|
_getNodeRef( cache, index, object ) {
|
|
2773
2786
|
|
|
2774
2787
|
if ( cache.refs[ index ] <= 1 ) return object;
|
|
@@ -3340,9 +3353,11 @@ class GLTFParser {
|
|
|
3340
3353
|
|
|
3341
3354
|
/**
|
|
3342
3355
|
* Asynchronously assigns a texture to the given material parameters.
|
|
3356
|
+
*
|
|
3343
3357
|
* @param {Object} materialParams
|
|
3344
3358
|
* @param {string} mapName
|
|
3345
3359
|
* @param {Object} mapDef
|
|
3360
|
+
* @param {string} colorSpace
|
|
3346
3361
|
* @return {Promise<Texture>}
|
|
3347
3362
|
*/
|
|
3348
3363
|
assignTexture( materialParams, mapName, mapDef, colorSpace ) {
|
|
@@ -3651,7 +3666,12 @@ class GLTFParser {
|
|
|
3651
3666
|
|
|
3652
3667
|
}
|
|
3653
3668
|
|
|
3654
|
-
/**
|
|
3669
|
+
/**
|
|
3670
|
+
* When Object3D instances are targeted by animation, they need unique names.
|
|
3671
|
+
*
|
|
3672
|
+
* @param {String} originalName
|
|
3673
|
+
* @return {String}
|
|
3674
|
+
*/
|
|
3655
3675
|
createUniqueName( originalName ) {
|
|
3656
3676
|
|
|
3657
3677
|
const sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' );
|
|
@@ -790,7 +790,12 @@ KTX2Loader.BasisWorker = function () {
|
|
|
790
790
|
|
|
791
791
|
}
|
|
792
792
|
|
|
793
|
-
/**
|
|
793
|
+
/**
|
|
794
|
+
* Concatenates N byte arrays.
|
|
795
|
+
*
|
|
796
|
+
* @param {Uint8Array[]} arrays
|
|
797
|
+
* @return {Uint8Array}
|
|
798
|
+
*/
|
|
794
799
|
function concat( arrays ) {
|
|
795
800
|
|
|
796
801
|
if ( arrays.length === 1 ) return arrays[ 0 ];
|
|
@@ -46,10 +46,10 @@ const COMPRESSED_2D = 0; // uses a gl.compressedTexImage2D()
|
|
|
46
46
|
class KhronosTextureContainer {
|
|
47
47
|
|
|
48
48
|
/**
|
|
49
|
-
* @param {ArrayBuffer} arrayBuffer- contents of the KTX container file
|
|
50
|
-
* @param {number} facesExpected- should be either 1 or 6, based whether a cube texture or or
|
|
51
|
-
* @param {boolean} threeDExpected- provision for indicating that data should be a 3D texture, not implemented
|
|
52
|
-
* @param {boolean} textureArrayExpected- provision for indicating that data should be a texture array, not implemented
|
|
49
|
+
* @param {ArrayBuffer} arrayBuffer - contents of the KTX container file
|
|
50
|
+
* @param {number} facesExpected - should be either 1 or 6, based whether a cube texture or or
|
|
51
|
+
* @param {boolean} threeDExpected - provision for indicating that data should be a 3D texture, not implemented
|
|
52
|
+
* @param {boolean} textureArrayExpected - provision for indicating that data should be a texture array, not implemented
|
|
53
53
|
*/
|
|
54
54
|
constructor( arrayBuffer, facesExpected /*, threeDExpected, textureArrayExpected */ ) {
|
|
55
55
|
|
|
@@ -2266,7 +2266,7 @@ class LDrawLoader extends Loader {
|
|
|
2266
2266
|
|
|
2267
2267
|
if ( this.ConditionalLineMaterial === null ) {
|
|
2268
2268
|
|
|
2269
|
-
throw new Error( 'THREE.LDrawLoader: ConditionalLineMaterial type must be
|
|
2269
|
+
throw new Error( 'THREE.LDrawLoader: ConditionalLineMaterial type must be specified via .setConditionalLineMaterial().' );
|
|
2270
2270
|
|
|
2271
2271
|
}
|
|
2272
2272
|
|
|
@@ -33,7 +33,7 @@ class LottieLoader extends Loader {
|
|
|
33
33
|
|
|
34
34
|
const data = JSON.parse( text );
|
|
35
35
|
|
|
36
|
-
// lottie uses container.
|
|
36
|
+
// lottie uses container.offsetWidth and offsetHeight
|
|
37
37
|
// to define width/height
|
|
38
38
|
|
|
39
39
|
const container = document.createElement( 'div' );
|
|
@@ -232,7 +232,7 @@ class NRRDLoader extends Loader {
|
|
|
232
232
|
|
|
233
233
|
}
|
|
234
234
|
|
|
235
|
-
//parse the data when
|
|
235
|
+
//parse the data when registered as one of this type : 'text', 'ascii', 'txt'
|
|
236
236
|
function parseDataAsText( data, start, end ) {
|
|
237
237
|
|
|
238
238
|
let number = '';
|
|
@@ -127,19 +127,19 @@ class PLYLoader extends Loader {
|
|
|
127
127
|
const lines = headerText.split( /\r\n|\r|\n/ );
|
|
128
128
|
let currentElement;
|
|
129
129
|
|
|
130
|
-
function make_ply_element_property(
|
|
130
|
+
function make_ply_element_property( propertyValues, propertyNameMapping ) {
|
|
131
131
|
|
|
132
|
-
const property = { type:
|
|
132
|
+
const property = { type: propertyValues[ 0 ] };
|
|
133
133
|
|
|
134
134
|
if ( property.type === 'list' ) {
|
|
135
135
|
|
|
136
|
-
property.name =
|
|
137
|
-
property.countType =
|
|
138
|
-
property.itemType =
|
|
136
|
+
property.name = propertyValues[ 3 ];
|
|
137
|
+
property.countType = propertyValues[ 1 ];
|
|
138
|
+
property.itemType = propertyValues[ 2 ];
|
|
139
139
|
|
|
140
140
|
} else {
|
|
141
141
|
|
|
142
|
-
property.name =
|
|
142
|
+
property.name = propertyValues[ 1 ];
|
|
143
143
|
|
|
144
144
|
}
|
|
145
145
|
|
|
@@ -576,7 +576,7 @@ class PLYLoader extends Loader {
|
|
|
576
576
|
|
|
577
577
|
switch ( type ) {
|
|
578
578
|
|
|
579
|
-
//
|
|
579
|
+
// correspondences for non-specific length types here match rply:
|
|
580
580
|
case 'int8': case 'char': return { read: ( at ) => {
|
|
581
581
|
|
|
582
582
|
return dataview.getInt8( at );
|
|
@@ -160,7 +160,7 @@ function _parseV2( pvrDatas ) {
|
|
|
160
160
|
pvrDatas.numMipmaps = numMipmaps + 1;
|
|
161
161
|
|
|
162
162
|
// guess cubemap type seems tricky in v2
|
|
163
|
-
// it
|
|
163
|
+
// it's just a pvr containing 6 surface (no explicit cubemap type)
|
|
164
164
|
pvrDatas.isCubemap = ( numSurfs === 6 );
|
|
165
165
|
|
|
166
166
|
return _extract( pvrDatas );
|
|
@@ -1633,7 +1633,7 @@ class SVGLoader extends Loader {
|
|
|
1633
1633
|
( curve.aEndAngle - curve.aStartAngle ) % ( 2 * Math.PI ) < Number.EPSILON;
|
|
1634
1634
|
|
|
1635
1635
|
// Do not touch angles of a full ellipse because after transformation they
|
|
1636
|
-
// would converge to a
|
|
1636
|
+
// would converge to a single value effectively removing the whole curve
|
|
1637
1637
|
|
|
1638
1638
|
if ( ! isFullEllipse ) {
|
|
1639
1639
|
|
|
@@ -2124,7 +2124,7 @@ class SVGLoader extends Loader {
|
|
|
2124
2124
|
|
|
2125
2125
|
// check if the center of the bounding box is in the bounding box of the paths.
|
|
2126
2126
|
// this is a pruning method to limit the search of intersections in paths that can't envelop of the current path.
|
|
2127
|
-
// if a path envelops another path. The center of that
|
|
2127
|
+
// if a path envelops another path. The center of that other path, has to be inside the bounding box of the enveloping path.
|
|
2128
2128
|
if ( path.boundingBox.containsPoint( center ) ) {
|
|
2129
2129
|
|
|
2130
2130
|
const intersections = getIntersections( scanline, path.points );
|
|
@@ -398,7 +398,7 @@ class TDSLoader extends Loader {
|
|
|
398
398
|
|
|
399
399
|
} else if ( next.id === MESH_MATRIX ) {
|
|
400
400
|
|
|
401
|
-
this.debugMessage( '
|
|
401
|
+
this.debugMessage( ' Transformation Matrix (TODO)' );
|
|
402
402
|
|
|
403
403
|
const values = [];
|
|
404
404
|
for ( let i = 0; i < 12; i ++ ) {
|
|
@@ -250,7 +250,7 @@ class VRMLLoader extends Loader {
|
|
|
250
250
|
|
|
251
251
|
function createVisitor( BaseVRMLVisitor ) {
|
|
252
252
|
|
|
253
|
-
// the visitor is created
|
|
253
|
+
// the visitor is created dynamically based on the given base class
|
|
254
254
|
|
|
255
255
|
class VRMLToASTVisitor extends BaseVRMLVisitor {
|
|
256
256
|
|
|
@@ -1890,7 +1890,7 @@ class VRMLLoader extends Loader {
|
|
|
1890
1890
|
|
|
1891
1891
|
// if the colorIndex field is not empty, then one color is used for each polyline of the IndexedLineSet.
|
|
1892
1892
|
|
|
1893
|
-
const expandedColorIndex = expandLineIndex( colorIndex ); // compute colors for each line segment (rendering
|
|
1893
|
+
const expandedColorIndex = expandLineIndex( colorIndex ); // compute colors for each line segment (rendering primitive)
|
|
1894
1894
|
colorAttribute = computeAttributeFromIndexedData( expandedLineIndex, expandedColorIndex, color, 3 ); // compute data on vertex level
|
|
1895
1895
|
|
|
1896
1896
|
} else {
|
|
@@ -1907,8 +1907,8 @@ class VRMLLoader extends Loader {
|
|
|
1907
1907
|
|
|
1908
1908
|
// if the colorIndex field is not empty, then colors are applied to each vertex of the IndexedLineSet
|
|
1909
1909
|
|
|
1910
|
-
const flattenLineColors = flattenData( color, colorIndex ); // compute colors for each VRML
|
|
1911
|
-
const expandedLineColors = expandLineData( flattenLineColors, coordIndex ); // compute colors for each line segment (rendering
|
|
1910
|
+
const flattenLineColors = flattenData( color, colorIndex ); // compute colors for each VRML primitive
|
|
1911
|
+
const expandedLineColors = expandLineData( flattenLineColors, coordIndex ); // compute colors for each line segment (rendering primitive)
|
|
1912
1912
|
colorAttribute = computeAttributeFromLineData( expandedLineIndex, expandedLineColors ); // compute data on vertex level
|
|
1913
1913
|
|
|
1914
1914
|
|
|
@@ -1916,7 +1916,7 @@ class VRMLLoader extends Loader {
|
|
|
1916
1916
|
|
|
1917
1917
|
// if the colorIndex field is empty, then the coordIndex field is used to choose colors from the Color node
|
|
1918
1918
|
|
|
1919
|
-
const expandedLineColors = expandLineData( color, coordIndex ); // compute colors for each line segment (rendering
|
|
1919
|
+
const expandedLineColors = expandLineData( color, coordIndex ); // compute colors for each line segment (rendering primitive)
|
|
1920
1920
|
colorAttribute = computeAttributeFromLineData( expandedLineIndex, expandedLineColors ); // compute data on vertex level
|
|
1921
1921
|
|
|
1922
1922
|
}
|
|
@@ -2748,7 +2748,7 @@ class VRMLLoader extends Loader {
|
|
|
2748
2748
|
|
|
2749
2749
|
const indices = [];
|
|
2750
2750
|
|
|
2751
|
-
// since face
|
|
2751
|
+
// since face definitions can have more than three vertices, it's necessary to
|
|
2752
2752
|
// perform a simple triangulation
|
|
2753
2753
|
|
|
2754
2754
|
let start = 0;
|
|
@@ -3123,7 +3123,7 @@ class VRMLLoader extends Loader {
|
|
|
3123
3123
|
* node, but could be applied to other nodes with multiple faces as well.
|
|
3124
3124
|
*
|
|
3125
3125
|
* When used with the Background node, default is directionIsDown is true if
|
|
3126
|
-
* interpolating the skyColor down from the Zenith. When
|
|
3126
|
+
* interpolating the skyColor down from the Zenith. When interpolating up from
|
|
3127
3127
|
* the Nadir i.e. interpolating the groundColor, the directionIsDown is false.
|
|
3128
3128
|
*
|
|
3129
3129
|
* The first angle is never specified, it is the Zenith (0 rad). Angles are specified
|
|
@@ -463,7 +463,7 @@ class IFFParser {
|
|
|
463
463
|
}
|
|
464
464
|
|
|
465
465
|
// holds various data about texture node image state
|
|
466
|
-
// Data other
|
|
466
|
+
// Data other than mipMapLevel unknown
|
|
467
467
|
parseImageStateForm() {
|
|
468
468
|
|
|
469
469
|
this.reader.skip( 8 ); // unknown
|
|
@@ -577,7 +577,7 @@ class IFFParser {
|
|
|
577
577
|
fileName: ''
|
|
578
578
|
};
|
|
579
579
|
|
|
580
|
-
//
|
|
580
|
+
// search STIL block
|
|
581
581
|
while ( true ) {
|
|
582
582
|
|
|
583
583
|
var tag = this.reader.getIDTag();
|
|
@@ -653,11 +653,11 @@ class IFFParser {
|
|
|
653
653
|
|
|
654
654
|
var number = this.reader.getUint16();
|
|
655
655
|
var flags = this.reader.getUint16(); // If the least significant bit of flags is set, the layer is hidden.
|
|
656
|
-
var pivot = this.reader.getFloat32Array( 3 ); // Note: this seems to be
|
|
656
|
+
var pivot = this.reader.getFloat32Array( 3 ); // Note: this seems to be superfluous, as the geometry is translated when pivot is present
|
|
657
657
|
var layer = {
|
|
658
658
|
number: number,
|
|
659
659
|
flags: flags, // If the least significant bit of flags is set, the layer is hidden.
|
|
660
|
-
pivot: [ - pivot[ 0 ], pivot[ 1 ], pivot[ 2 ] ], // Note: this seems to be
|
|
660
|
+
pivot: [ - pivot[ 0 ], pivot[ 1 ], pivot[ 2 ] ], // Note: this seems to be superfluous, as the geometry is translated when pivot is present
|
|
661
661
|
name: this.reader.getString(),
|
|
662
662
|
};
|
|
663
663
|
|
|
@@ -698,7 +698,7 @@ class ConvexHull {
|
|
|
698
698
|
|
|
699
699
|
let eyeVertex, maxDistance = 0;
|
|
700
700
|
|
|
701
|
-
//
|
|
701
|
+
// grab the first available face and start with the first visible vertex of that face
|
|
702
702
|
|
|
703
703
|
const eyeFace = this.assigned.first().face;
|
|
704
704
|
let vertex = eyeFace.outside;
|
package/examples/jsm/math/OBB.js
CHANGED
|
@@ -84,6 +84,10 @@ class OBB {
|
|
|
84
84
|
/**
|
|
85
85
|
* Reference: Closest Point on OBB to Point in Real-Time Collision Detection
|
|
86
86
|
* by Christer Ericson (chapter 5.1.4)
|
|
87
|
+
*
|
|
88
|
+
* @param {Vector3} point
|
|
89
|
+
* @param {Vector3} result
|
|
90
|
+
* @returns {Vector3}
|
|
87
91
|
*/
|
|
88
92
|
clampPoint( point, result ) {
|
|
89
93
|
|
|
@@ -146,6 +150,9 @@ class OBB {
|
|
|
146
150
|
* Reference: OBB-OBB Intersection in Real-Time Collision Detection
|
|
147
151
|
* by Christer Ericson (chapter 4.4.1)
|
|
148
152
|
*
|
|
153
|
+
* @param {OBB} obb
|
|
154
|
+
* @param {Number} [epsilon=Number.EPSILON] - A small value to prevent arithmetic errors
|
|
155
|
+
* @returns {Boolean}
|
|
149
156
|
*/
|
|
150
157
|
intersectsOBB( obb, epsilon = Number.EPSILON ) {
|
|
151
158
|
|
|
@@ -285,6 +292,9 @@ class OBB {
|
|
|
285
292
|
/**
|
|
286
293
|
* Reference: Testing Box Against Plane in Real-Time Collision Detection
|
|
287
294
|
* by Christer Ericson (chapter 5.2.3)
|
|
295
|
+
*
|
|
296
|
+
* @param {Plane} plane
|
|
297
|
+
* @returns {Boolean}
|
|
288
298
|
*/
|
|
289
299
|
intersectsPlane( plane ) {
|
|
290
300
|
|
|
@@ -309,6 +319,10 @@ class OBB {
|
|
|
309
319
|
/**
|
|
310
320
|
* Performs a ray/OBB intersection test and stores the intersection point
|
|
311
321
|
* to the given 3D vector. If no intersection is detected, *null* is returned.
|
|
322
|
+
*
|
|
323
|
+
* @param {Ray} ray
|
|
324
|
+
* @param {Vector3} result
|
|
325
|
+
* @return {Vector3?}
|
|
312
326
|
*/
|
|
313
327
|
intersectRay( ray, result ) {
|
|
314
328
|
|
|
@@ -347,6 +361,9 @@ class OBB {
|
|
|
347
361
|
/**
|
|
348
362
|
* Performs a ray/OBB intersection test. Returns either true or false if
|
|
349
363
|
* there is a intersection or not.
|
|
364
|
+
*
|
|
365
|
+
* @param {Ray} ray
|
|
366
|
+
* @returns {Boolean}
|
|
350
367
|
*/
|
|
351
368
|
intersectsRay( ray ) {
|
|
352
369
|
|
|
@@ -50,7 +50,7 @@ class ProgressiveLightMap {
|
|
|
50
50
|
|
|
51
51
|
this._uvMat = new MeshPhongNodeMaterial();
|
|
52
52
|
this._uvMat.vertexNode = vec4( sub( uvNode, vec2( 0.5 ) ).mul( 2 ), 1, 1 );
|
|
53
|
-
this._uvMat.outputNode = vec4( mix( this._previousShadowMap.
|
|
53
|
+
this._uvMat.outputNode = vec4( mix( this._previousShadowMap.sample( uv( 1 ) ), output, float( 1 ).div( this._averagingWindow ) ) );
|
|
54
54
|
|
|
55
55
|
}
|
|
56
56
|
|
|
@@ -229,7 +229,7 @@ class ProgressiveLightMap {
|
|
|
229
229
|
if ( this._labelMesh === null ) {
|
|
230
230
|
|
|
231
231
|
const labelMaterial = new NodeMaterial();
|
|
232
|
-
labelMaterial.colorNode = texture( this._progressiveLightMap1.texture ).
|
|
232
|
+
labelMaterial.colorNode = texture( this._progressiveLightMap1.texture ).sample( uv().flipY() );
|
|
233
233
|
labelMaterial.side = DoubleSide;
|
|
234
234
|
|
|
235
235
|
const labelGeometry = new PlaneGeometry( 100, 100 );
|
|
@@ -267,14 +267,14 @@ class ProgressiveLightMap {
|
|
|
267
267
|
const pixelOffset = float( 0.5 ).div( float( this.resolution ) ).toVar();
|
|
268
268
|
|
|
269
269
|
const color = add(
|
|
270
|
-
this._previousShadowMap.
|
|
271
|
-
this._previousShadowMap.
|
|
272
|
-
this._previousShadowMap.
|
|
273
|
-
this._previousShadowMap.
|
|
274
|
-
this._previousShadowMap.
|
|
275
|
-
this._previousShadowMap.
|
|
276
|
-
this._previousShadowMap.
|
|
277
|
-
this._previousShadowMap.
|
|
270
|
+
this._previousShadowMap.sample( uvNode.add( vec2( pixelOffset, 0 ) ) ),
|
|
271
|
+
this._previousShadowMap.sample( uvNode.add( vec2( 0, pixelOffset ) ) ),
|
|
272
|
+
this._previousShadowMap.sample( uvNode.add( vec2( 0, pixelOffset.negate() ) ) ),
|
|
273
|
+
this._previousShadowMap.sample( uvNode.add( vec2( pixelOffset.negate(), 0 ) ) ),
|
|
274
|
+
this._previousShadowMap.sample( uvNode.add( vec2( pixelOffset, pixelOffset ) ) ),
|
|
275
|
+
this._previousShadowMap.sample( uvNode.add( vec2( pixelOffset.negate(), pixelOffset ) ) ),
|
|
276
|
+
this._previousShadowMap.sample( uvNode.add( vec2( pixelOffset, pixelOffset.negate() ) ) ),
|
|
277
|
+
this._previousShadowMap.sample( uvNode.add( vec2( pixelOffset.negate(), pixelOffset.negate() ) ) ),
|
|
278
278
|
).div( 8 );
|
|
279
279
|
|
|
280
280
|
blurMaterial.fragmentNode = color;
|
|
@@ -7,7 +7,7 @@ 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
|
|
@@ -209,7 +209,8 @@ class Volume {
|
|
|
209
209
|
}
|
|
210
210
|
|
|
211
211
|
/**
|
|
212
|
-
*
|
|
212
|
+
* Shortcut for data[access(i,j,k)]
|
|
213
|
+
*
|
|
213
214
|
* @memberof Volume
|
|
214
215
|
* @param {number} i First coordinate
|
|
215
216
|
* @param {number} j Second coordinate
|
|
@@ -223,7 +224,8 @@ class Volume {
|
|
|
223
224
|
}
|
|
224
225
|
|
|
225
226
|
/**
|
|
226
|
-
*
|
|
227
|
+
* Compute the index in the data array corresponding to the given coordinates in IJK system
|
|
228
|
+
*
|
|
227
229
|
* @memberof Volume
|
|
228
230
|
* @param {number} i First coordinate
|
|
229
231
|
* @param {number} j Second coordinate
|
|
@@ -237,7 +239,8 @@ class Volume {
|
|
|
237
239
|
}
|
|
238
240
|
|
|
239
241
|
/**
|
|
240
|
-
*
|
|
242
|
+
* Retrieve the IJK coordinates of the voxel corresponding of the given index in the data
|
|
243
|
+
*
|
|
241
244
|
* @memberof Volume
|
|
242
245
|
* @param {number} index index of the voxel
|
|
243
246
|
* @returns {Array} [x,y,z]
|
|
@@ -252,7 +255,8 @@ class Volume {
|
|
|
252
255
|
}
|
|
253
256
|
|
|
254
257
|
/**
|
|
255
|
-
*
|
|
258
|
+
* Apply a function to all the voxels, be careful, the value will be replaced
|
|
259
|
+
*
|
|
256
260
|
* @memberof Volume
|
|
257
261
|
* @param {Function} functionToMap A function to apply to every voxel, will be called with the following parameters :
|
|
258
262
|
* value of the voxel
|
|
@@ -277,11 +281,12 @@ class Volume {
|
|
|
277
281
|
}
|
|
278
282
|
|
|
279
283
|
/**
|
|
280
|
-
*
|
|
284
|
+
* 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.
|
|
285
|
+
*
|
|
281
286
|
* @memberof Volume
|
|
282
287
|
* @param {string} axis the normal axis to the slice 'x' 'y' or 'z'
|
|
283
|
-
* @param {number}
|
|
284
|
-
* @returns {Object} an object containing all the
|
|
288
|
+
* @param {number} RASIndex the index of the slice
|
|
289
|
+
* @returns {Object} an object containing all the useful information on the geometry of the slice
|
|
285
290
|
*/
|
|
286
291
|
extractPerpendicularPlane( axis, RASIndex ) {
|
|
287
292
|
|
|
@@ -401,8 +406,9 @@ class Volume {
|
|
|
401
406
|
}
|
|
402
407
|
|
|
403
408
|
/**
|
|
404
|
-
*
|
|
405
|
-
*
|
|
409
|
+
* Returns a slice corresponding to the given axis and index.
|
|
410
|
+
* The coordinate are given in the Right Anterior Superior coordinate format.
|
|
411
|
+
*
|
|
406
412
|
* @memberof Volume
|
|
407
413
|
* @param {string} axis the normal axis to the slice 'x' 'y' or 'z'
|
|
408
414
|
* @param {number} index the index of the slice
|
|
@@ -417,7 +423,8 @@ class Volume {
|
|
|
417
423
|
}
|
|
418
424
|
|
|
419
425
|
/**
|
|
420
|
-
*
|
|
426
|
+
* Call repaint on all the slices extracted from this volume
|
|
427
|
+
*
|
|
421
428
|
* @see VolumeSlice.repaint
|
|
422
429
|
* @memberof Volume
|
|
423
430
|
* @returns {Volume} this
|
|
@@ -435,7 +442,8 @@ class Volume {
|
|
|
435
442
|
}
|
|
436
443
|
|
|
437
444
|
/**
|
|
438
|
-
*
|
|
445
|
+
* Compute the minimum and the maximum of the data in the volume
|
|
446
|
+
*
|
|
439
447
|
* @memberof Volume
|
|
440
448
|
* @returns {Array} [min,max]
|
|
441
449
|
*/
|
|
@@ -103,7 +103,7 @@ class VolumeSlice {
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
/**
|
|
106
|
-
*
|
|
106
|
+
* Refresh the texture and the geometry if geometryNeedsUpdate is set to true
|
|
107
107
|
* @memberof VolumeSlice
|
|
108
108
|
*/
|
|
109
109
|
repaint() {
|
|
@@ -189,7 +189,7 @@ class VolumeSlice {
|
|
|
189
189
|
}
|
|
190
190
|
|
|
191
191
|
/**
|
|
192
|
-
*
|
|
192
|
+
* Refresh the geometry according to axis and index
|
|
193
193
|
* @see Volume.extractPerpendicularPlane
|
|
194
194
|
* @memberof VolumeSlice
|
|
195
195
|
*/
|