super-three 0.164.0 → 0.167.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 +3 -3
- package/build/three.cjs +1273 -503
- package/build/three.module.js +1269 -504
- package/build/three.module.min.js +1 -1
- package/build/three.webgpu.js +76086 -0
- package/build/three.webgpu.min.js +6 -0
- package/examples/jsm/Addons.js +2 -1
- package/examples/jsm/controls/TransformControls.js +1 -1
- package/examples/jsm/csm/CSMShader.js +4 -4
- package/examples/jsm/environments/RoomEnvironment.js +1 -5
- package/examples/jsm/exporters/GLTFExporter.js +8 -4
- package/examples/jsm/exporters/USDZExporter.js +6 -4
- package/examples/jsm/geometries/TeapotGeometry.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +75 -61
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
- package/examples/jsm/lines/LineMaterial.js +1 -15
- package/examples/jsm/lines/LineSegments2.js +15 -0
- package/examples/jsm/lines/Wireframe.js +16 -1
- package/examples/jsm/lines/webgpu/Line2.js +20 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
- package/examples/jsm/loaders/DRACOLoader.js +1 -1
- package/examples/jsm/loaders/FBXLoader.js +47 -58
- package/examples/jsm/loaders/GLTFLoader.js +12 -4
- package/examples/jsm/loaders/LDrawLoader.js +3 -2
- package/examples/jsm/loaders/MMDLoader.js +31 -12
- package/examples/jsm/loaders/MaterialXLoader.js +2 -9
- package/examples/jsm/loaders/USDZLoader.js +124 -76
- package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
- package/examples/jsm/loaders/VTKLoader.js +76 -3
- package/examples/jsm/misc/GPUComputationRenderer.js +9 -19
- package/examples/jsm/modifiers/CurveModifier.js +11 -9
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
- package/examples/jsm/objects/InstancedPoints.js +2 -2
- package/examples/jsm/objects/Lensflare.js +2 -2
- package/examples/jsm/postprocessing/RenderPass.js +1 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +13 -38
- package/examples/jsm/postprocessing/SSAOPass.js +6 -9
- package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
- package/examples/jsm/renderers/CSS2DRenderer.js +25 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +24 -3
- package/examples/jsm/shaders/ColorifyShader.js +1 -2
- package/examples/jsm/shaders/FXAAShader.js +0 -2
- package/examples/jsm/shaders/GTAOShader.js +1 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
- package/examples/jsm/transpiler/GLSLDecoder.js +46 -4
- package/examples/jsm/transpiler/TSLEncoder.js +17 -15
- package/examples/jsm/utils/BufferGeometryUtils.js +18 -16
- package/examples/jsm/utils/GPUStatsPanel.js +2 -0
- package/examples/jsm/utils/SortUtils.js +8 -5
- package/package.json +9 -7
- package/src/Three.WebGPU.js +194 -0
- package/src/Three.js +2 -0
- package/src/animation/tracks/BooleanKeyframeTrack.js +10 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -2
- package/src/animation/tracks/StringKeyframeTrack.js +10 -1
- package/src/constants.js +4 -1
- package/src/core/Object3D.js +24 -22
- package/src/core/Raycaster.js +6 -2
- package/src/extras/TextureUtils.js +210 -0
- package/src/lights/Light.js +1 -0
- package/src/lights/LightShadow.js +5 -0
- package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
- package/src/loaders/FileLoader.js +4 -0
- package/src/loaders/LoaderUtils.js +3 -1
- package/src/loaders/ObjectLoader.js +34 -2
- package/src/materials/Material.js +13 -4
- package/src/math/Box2.js +4 -4
- package/src/math/Box3.js +6 -6
- package/src/math/ColorManagement.js +10 -0
- package/src/math/Matrix2.js +54 -0
- package/src/math/Vector4.js +13 -0
- package/{examples/jsm → src}/nodes/Nodes.js +39 -20
- package/{examples/jsm → src}/nodes/accessors/BatchNode.js +28 -10
- package/src/nodes/accessors/BitangentNode.js +13 -0
- package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +36 -1
- package/{examples/jsm → src}/nodes/accessors/BufferNode.js +6 -0
- package/src/nodes/accessors/CameraNode.js +19 -0
- package/{examples/jsm → src}/nodes/accessors/CubeTextureNode.js +22 -5
- package/src/nodes/accessors/InstanceNode.js +140 -0
- package/{examples/jsm → src}/nodes/accessors/MaterialNode.js +24 -2
- package/{examples/jsm → src}/nodes/accessors/ModelNode.js +4 -0
- package/{examples/jsm → src}/nodes/accessors/MorphNode.js +24 -20
- package/src/nodes/accessors/NormalNode.js +14 -0
- package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/PositionNode.js +10 -0
- package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +7 -1
- package/src/nodes/accessors/ReflectVectorNode.js +10 -0
- package/{examples/jsm → src}/nodes/accessors/StorageBufferNode.js +50 -1
- package/{examples/jsm/nodes/accessors/TextureStoreNode.js → src/nodes/accessors/StorageTextureNode.js} +28 -6
- package/src/nodes/accessors/TangentNode.js +23 -0
- package/src/nodes/accessors/Texture3DNode.js +100 -0
- package/{examples/jsm → src}/nodes/accessors/TextureNode.js +55 -18
- package/src/nodes/accessors/UVNode.js +3 -0
- package/{examples/jsm → src}/nodes/accessors/UniformsNode.js +7 -1
- package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +2 -1
- package/{examples/jsm → src}/nodes/code/ScriptableNode.js +14 -0
- package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +2 -1
- package/{examples/jsm → src}/nodes/core/AttributeNode.js +34 -8
- package/{examples/jsm → src}/nodes/core/CacheNode.js +7 -10
- package/{examples/jsm → src}/nodes/core/ContextNode.js +6 -0
- package/{examples/jsm → src}/nodes/core/IndexNode.js +6 -0
- package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
- package/src/nodes/core/MRTNode.js +76 -0
- package/{examples/jsm → src}/nodes/core/Node.js +33 -14
- package/{examples/jsm → src}/nodes/core/NodeBuilder.js +194 -45
- package/src/nodes/core/NodeCache.js +36 -0
- package/{examples/jsm → src}/nodes/core/NodeFrame.js +42 -0
- package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
- package/{examples/jsm → src}/nodes/core/NodeKeywords.js +1 -1
- package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
- package/{examples/jsm → src}/nodes/core/NodeUtils.js +6 -1
- package/{examples/jsm → src}/nodes/core/OutputStructNode.js +1 -5
- package/{examples/jsm → src}/nodes/core/PropertyNode.js +2 -0
- package/{examples/jsm → src}/nodes/core/TempNode.js +2 -2
- package/{examples/jsm → src}/nodes/core/UniformGroupNode.js +20 -0
- package/{examples/jsm → src}/nodes/core/UniformNode.js +10 -1
- package/{examples/jsm → src}/nodes/core/VarNode.js +2 -6
- package/src/nodes/core/VaryingNode.js +104 -0
- package/{examples/jsm → src}/nodes/display/AfterImageNode.js +24 -20
- package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +18 -21
- package/src/nodes/display/BloomNode.js +333 -0
- package/{examples/jsm → src}/nodes/display/ColorAdjustmentNode.js +7 -2
- package/{examples/jsm → src}/nodes/display/ColorSpaceNode.js +1 -1
- package/src/nodes/display/DenoiseNode.js +198 -0
- package/src/nodes/display/DepthOfFieldNode.js +119 -0
- package/src/nodes/display/DotScreenNode.js +75 -0
- package/src/nodes/display/FXAANode.js +327 -0
- package/src/nodes/display/FilmNode.js +52 -0
- package/{examples/jsm → src}/nodes/display/FrontFacingNode.js +2 -1
- package/src/nodes/display/GTAONode.js +324 -0
- package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +34 -17
- package/src/nodes/display/Lut3DNode.js +53 -0
- package/{examples/jsm → src}/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PassNode.js +291 -0
- package/src/nodes/display/PixelationPassNode.js +201 -0
- package/src/nodes/display/RGBShiftNode.js +49 -0
- package/src/nodes/display/RenderOutputNode.js +56 -0
- package/src/nodes/display/SobelOperatorNode.js +121 -0
- package/{examples/jsm → src}/nodes/display/ToneMappingNode.js +44 -5
- package/src/nodes/display/TransitionNode.js +76 -0
- package/{examples/jsm → src}/nodes/display/ViewportDepthNode.js +39 -16
- package/{examples/jsm → src}/nodes/display/ViewportDepthTextureNode.js +2 -1
- package/{examples/jsm → src}/nodes/display/ViewportNode.js +3 -2
- package/{examples/jsm → src}/nodes/display/ViewportSharedTextureNode.js +2 -1
- package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +5 -2
- package/src/nodes/functions/BSDF/LTC.js +131 -0
- package/src/nodes/functions/BasicLightingModel.js +78 -0
- package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +5 -3
- package/{examples/jsm → src}/nodes/functions/PhysicalLightingModel.js +103 -18
- package/src/nodes/functions/ToonLightingModel.js +51 -0
- package/{examples/jsm → src}/nodes/geometry/RangeNode.js +19 -6
- package/{examples/jsm → src}/nodes/lighting/AONode.js +1 -4
- package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +1 -1
- package/src/nodes/lighting/AnalyticLightNode.js +333 -0
- package/src/nodes/lighting/BasicEnvironmentNode.js +26 -0
- package/src/nodes/lighting/BasicLightMapNode.js +29 -0
- package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +2 -3
- package/{examples/jsm → src}/nodes/lighting/EnvironmentNode.js +5 -4
- package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +2 -1
- package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +1 -1
- package/{examples/jsm → src}/nodes/lighting/LightingNode.js +2 -0
- package/{examples/jsm → src}/nodes/lighting/LightsNode.js +18 -3
- package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +2 -3
- package/src/nodes/lighting/RectAreaLightNode.js +97 -0
- package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +2 -3
- package/{examples/jsm → src}/nodes/loaders/NodeLoader.js +3 -1
- package/{examples/jsm → src}/nodes/loaders/NodeMaterialLoader.js +2 -1
- package/{examples/jsm → src}/nodes/loaders/NodeObjectLoader.js +2 -1
- package/{examples/jsm → src}/nodes/materials/InstancedPointsNodeMaterial.js +3 -3
- package/{examples/jsm → src}/nodes/materials/Line2NodeMaterial.js +4 -4
- package/{examples/jsm → src}/nodes/materials/LineBasicNodeMaterial.js +3 -3
- package/{examples/jsm → src}/nodes/materials/LineDashedNodeMaterial.js +4 -3
- package/{examples/jsm → src}/nodes/materials/Materials.js +3 -0
- package/src/nodes/materials/MeshBasicNodeMaterial.js +73 -0
- package/{examples/jsm → src}/nodes/materials/MeshLambertNodeMaterial.js +12 -3
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +53 -0
- package/{examples/jsm → src}/nodes/materials/MeshNormalNodeMaterial.js +5 -3
- package/{examples/jsm → src}/nodes/materials/MeshPhongNodeMaterial.js +11 -3
- package/{examples/jsm → src}/nodes/materials/MeshPhysicalNodeMaterial.js +26 -8
- package/{examples/jsm → src}/nodes/materials/MeshStandardNodeMaterial.js +14 -3
- package/src/nodes/materials/MeshToonNodeMaterial.js +34 -0
- package/{examples/jsm → src}/nodes/materials/NodeMaterial.js +97 -24
- package/{examples/jsm → src}/nodes/materials/PointsNodeMaterial.js +3 -3
- package/{examples/jsm → src}/nodes/materials/ShadowNodeMaterial.js +3 -3
- package/{examples/jsm → src}/nodes/materials/SpriteNodeMaterial.js +3 -3
- package/src/nodes/materials/VolumeNodeMaterial.js +106 -0
- package/{examples/jsm → src}/nodes/materialx/lib/mx_hsv.js +9 -17
- package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +474 -577
- package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +2 -8
- package/{examples/jsm → src}/nodes/math/CondNode.js +13 -6
- package/{examples/jsm → src}/nodes/math/HashNode.js +2 -2
- package/{examples/jsm → src}/nodes/math/MathNode.js +14 -1
- package/{examples/jsm → src}/nodes/math/OperatorNode.js +6 -6
- package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
- package/{examples/jsm → src}/nodes/pmrem/PMREMNode.js +2 -1
- package/{examples/jsm → src}/nodes/shadernode/ShaderNode.js +57 -33
- package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +1 -1
- package/{examples/jsm → src}/nodes/utils/DiscardNode.js +1 -0
- package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +2 -0
- package/{examples/jsm → src}/nodes/utils/LoopNode.js +7 -6
- package/{examples/jsm → src}/nodes/utils/MatcapUVNode.js +1 -1
- package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +8 -2
- package/src/nodes/utils/RTTNode.js +130 -0
- package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +9 -1
- package/{examples/jsm → src}/nodes/utils/TimerNode.js +1 -1
- package/src/objects/BatchedMesh.js +232 -162
- package/src/objects/InstancedMesh.js +1 -1
- package/src/renderers/WebGLRenderer.js +312 -68
- package/{examples/jsm → src}/renderers/common/Attributes.js +4 -1
- package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
- package/{examples/jsm → src}/renderers/common/Background.js +9 -3
- package/src/renderers/common/BindGroup.js +16 -0
- package/{examples/jsm → src}/renderers/common/Bindings.js +54 -22
- package/src/renderers/common/ChainMap.js +59 -0
- package/{examples/jsm → src}/renderers/common/ClippingContext.js +8 -6
- package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
- package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +7 -1
- package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
- package/{examples/jsm → src}/renderers/common/Info.js +34 -6
- package/{examples/jsm → src}/renderers/common/Pipelines.js +2 -2
- package/src/renderers/common/PostProcessing.js +87 -0
- package/{examples/jsm/objects → src/renderers/common}/QuadMesh.js +6 -3
- package/src/renderers/common/RenderBundle.js +18 -0
- package/src/renderers/common/RenderBundles.js +38 -0
- package/{examples/jsm → src}/renderers/common/RenderContext.js +1 -1
- package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
- package/{examples/jsm → src}/renderers/common/RenderList.js +9 -0
- package/{examples/jsm → src}/renderers/common/RenderObject.js +50 -11
- package/{examples/jsm → src}/renderers/common/Renderer.js +220 -40
- package/{examples/jsm → src}/renderers/common/SampledTexture.js +2 -2
- package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
- package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
- package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
- package/{examples/jsm → src}/renderers/common/Textures.js +6 -2
- package/{examples/jsm → src}/renderers/common/Uniform.js +10 -5
- package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
- package/{examples/jsm → src}/renderers/common/extras/PMREMGenerator.js +13 -12
- package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
- package/{examples/jsm → src}/renderers/common/nodes/NodeSampledTexture.js +19 -4
- package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +8 -1
- package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
- package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
- package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
- package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
- package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +37 -16
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +31 -1
- package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +9 -1
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +8 -22
- package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +3 -14
- package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +10 -31
- package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +3 -23
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -4
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
- package/src/renderers/shaders/UniformsLib.js +3 -0
- package/src/renderers/webgl/WebGLAttributes.js +2 -2
- package/src/renderers/webgl/WebGLBackground.js +6 -0
- package/src/renderers/webgl/WebGLBufferRenderer.js +6 -19
- package/src/renderers/webgl/WebGLExtensions.js +3 -1
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +6 -18
- package/src/renderers/webgl/WebGLLights.js +15 -12
- package/src/renderers/webgl/WebGLMaterials.js +1 -5
- package/src/renderers/webgl/WebGLMorphtargets.js +1 -2
- package/src/renderers/webgl/WebGLProgram.js +28 -31
- package/src/renderers/webgl/WebGLPrograms.js +15 -15
- package/src/renderers/webgl/WebGLRenderStates.js +2 -2
- package/src/renderers/webgl/WebGLTextures.js +100 -70
- package/src/renderers/webgl/WebGLUniforms.js +12 -2
- package/src/renderers/webgl/WebGLUniformsGroups.js +7 -7
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +156 -54
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +188 -41
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +2 -2
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +1 -0
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +1 -1
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +126 -7
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +1 -1
- package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +212 -78
- package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +2 -2
- package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +245 -49
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +30 -14
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +9 -1
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +74 -24
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +101 -25
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +24 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +9 -3
- package/src/renderers/webxr/WebXRManager.js +12 -2
- package/src/textures/CompressedArrayTexture.js +14 -0
- package/src/textures/DataArrayTexture.js +14 -0
- package/src/textures/DepthTexture.js +1 -3
- package/src/utils.js +30 -1
- package/examples/jsm/nodes/accessors/BitangentNode.js +0 -89
- package/examples/jsm/nodes/accessors/CameraNode.js +0 -119
- package/examples/jsm/nodes/accessors/InstanceNode.js +0 -94
- package/examples/jsm/nodes/accessors/NormalNode.js +0 -106
- package/examples/jsm/nodes/accessors/PositionNode.js +0 -104
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +0 -35
- package/examples/jsm/nodes/accessors/TangentNode.js +0 -109
- package/examples/jsm/nodes/accessors/UVNode.js +0 -47
- package/examples/jsm/nodes/core/NodeCache.js +0 -26
- package/examples/jsm/nodes/core/VaryingNode.js +0 -65
- package/examples/jsm/nodes/display/PassNode.js +0 -199
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -255
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
- package/examples/jsm/renderers/common/ChainMap.js +0 -89
- package/examples/jsm/renderers/common/PostProcessing.js +0 -33
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
- /package/{examples/jsm → src}/nodes/accessors/AccessorsUtils.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/InstancedPointsMaterialNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/ModelViewProjectionNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/PointUVNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/RendererReferenceNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/SceneNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/SkinningNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/TextureBicubicNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/TextureSizeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +0 -0
- /package/{examples/jsm → src}/nodes/code/CodeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/code/ExpressionNode.js +0 -0
- /package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +0 -0
- /package/{examples/jsm → src}/nodes/code/FunctionNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/AssignNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/BypassNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/ConstNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/InputNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
- /package/{examples/jsm → src}/nodes/core/ParameterNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/StackNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/StructTypeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
- /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
- /package/{examples/jsm → src}/nodes/display/BlendModeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/display/BumpMapNode.js +0 -0
- /package/{examples/jsm → src}/nodes/display/PosterizeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/fog/FogExp2Node.js +0 -0
- /package/{examples/jsm → src}/nodes/fog/FogNode.js +0 -0
- /package/{examples/jsm → src}/nodes/fog/FogRangeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_GGX.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX_Anisotropic.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/ShadowMaskModel.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/material/getGeometryRoughness.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +0 -0
- /package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/lighting/IrradianceNode.js +0 -0
- /package/{examples/jsm → src}/nodes/lighting/LightNode.js +0 -0
- /package/{examples/jsm → src}/nodes/lighting/LightUtils.js +0 -0
- /package/{examples/jsm → src}/nodes/lighting/LightingContextNode.js +0 -0
- /package/{examples/jsm → src}/nodes/materials/MeshSSSNodeMaterial.js +0 -0
- /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
- /package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +0 -0
- /package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -0
- /package/{examples/jsm → src}/nodes/math/TriNoise3D.js +0 -0
- /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
- /package/{examples/jsm → src}/nodes/pmrem/PMREMUtils.js +0 -0
- /package/{examples/jsm → src}/nodes/procedural/CheckerNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/ConvertNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/EquirectUVNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/JoinNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/OscNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/PackingNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/RemapNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/RotateNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/RotateUVNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/SetNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/SplitNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Animation.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
- /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
- /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
- /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
- /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
- /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
- /package/{examples/jsm → src}/renderers/common/RenderObjects.js +0 -0
- /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
- /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
- /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
- /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBufferRenderer.js +0 -0
- /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
- /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
- /package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +0 -0
|
@@ -1,25 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* parameters = {
|
|
3
|
-
* color: <hex>,
|
|
4
|
-
* linewidth: <float>,
|
|
5
|
-
* dashed: <boolean>,
|
|
6
|
-
* dashScale: <float>,
|
|
7
|
-
* dashSize: <float>,
|
|
8
|
-
* dashOffset: <float>,
|
|
9
|
-
* gapSize: <float>,
|
|
10
|
-
* resolution: <Vector2>, // to be set by renderer
|
|
11
|
-
* }
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
1
|
import {
|
|
15
2
|
ShaderLib,
|
|
16
3
|
ShaderMaterial,
|
|
17
4
|
UniformsLib,
|
|
18
5
|
UniformsUtils,
|
|
19
|
-
Vector2
|
|
6
|
+
Vector2,
|
|
20
7
|
} from 'three';
|
|
21
8
|
|
|
22
|
-
|
|
23
9
|
UniformsLib.line = {
|
|
24
10
|
|
|
25
11
|
worldUnits: { value: 1 },
|
|
@@ -13,6 +13,8 @@ import {
|
|
|
13
13
|
import { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';
|
|
14
14
|
import { LineMaterial } from '../lines/LineMaterial.js';
|
|
15
15
|
|
|
16
|
+
const _viewport = new Vector4();
|
|
17
|
+
|
|
16
18
|
const _start = new Vector3();
|
|
17
19
|
const _end = new Vector3();
|
|
18
20
|
|
|
@@ -356,6 +358,19 @@ class LineSegments2 extends Mesh {
|
|
|
356
358
|
|
|
357
359
|
}
|
|
358
360
|
|
|
361
|
+
onBeforeRender( renderer ) {
|
|
362
|
+
|
|
363
|
+
const uniforms = this.material.uniforms;
|
|
364
|
+
|
|
365
|
+
if ( uniforms && uniforms.resolution ) {
|
|
366
|
+
|
|
367
|
+
renderer.getViewport( _viewport );
|
|
368
|
+
this.material.uniforms.resolution.value.set( _viewport.z, _viewport.w );
|
|
369
|
+
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
}
|
|
373
|
+
|
|
359
374
|
}
|
|
360
375
|
|
|
361
376
|
export { LineSegments2 };
|
|
@@ -2,13 +2,15 @@ import {
|
|
|
2
2
|
InstancedInterleavedBuffer,
|
|
3
3
|
InterleavedBufferAttribute,
|
|
4
4
|
Mesh,
|
|
5
|
-
Vector3
|
|
5
|
+
Vector3,
|
|
6
|
+
Vector4
|
|
6
7
|
} from 'three';
|
|
7
8
|
import { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';
|
|
8
9
|
import { LineMaterial } from '../lines/LineMaterial.js';
|
|
9
10
|
|
|
10
11
|
const _start = new Vector3();
|
|
11
12
|
const _end = new Vector3();
|
|
13
|
+
const _viewport = new Vector4();
|
|
12
14
|
|
|
13
15
|
class Wireframe extends Mesh {
|
|
14
16
|
|
|
@@ -51,6 +53,19 @@ class Wireframe extends Mesh {
|
|
|
51
53
|
|
|
52
54
|
}
|
|
53
55
|
|
|
56
|
+
onBeforeRender( renderer ) {
|
|
57
|
+
|
|
58
|
+
const uniforms = this.material.uniforms;
|
|
59
|
+
|
|
60
|
+
if ( uniforms && uniforms.resolution ) {
|
|
61
|
+
|
|
62
|
+
renderer.getViewport( _viewport );
|
|
63
|
+
this.material.uniforms.resolution.value.set( _viewport.z, _viewport.w );
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
54
69
|
}
|
|
55
70
|
|
|
56
71
|
export { Wireframe };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { LineSegments2 } from './LineSegments2.js';
|
|
2
|
+
import { LineGeometry } from '../LineGeometry.js';
|
|
3
|
+
|
|
4
|
+
import { Line2NodeMaterial } from 'three';
|
|
5
|
+
|
|
6
|
+
class Line2 extends LineSegments2 {
|
|
7
|
+
|
|
8
|
+
constructor( geometry = new LineGeometry(), material = new Line2NodeMaterial( { color: Math.random() * 0xffffff } ) ) {
|
|
9
|
+
|
|
10
|
+
super( geometry, material );
|
|
11
|
+
|
|
12
|
+
this.isLine2 = true;
|
|
13
|
+
|
|
14
|
+
this.type = 'Line2';
|
|
15
|
+
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export { Line2 };
|
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Box3,
|
|
3
|
+
InstancedInterleavedBuffer,
|
|
4
|
+
InterleavedBufferAttribute,
|
|
5
|
+
Line3,
|
|
6
|
+
MathUtils,
|
|
7
|
+
Matrix4,
|
|
8
|
+
Mesh,
|
|
9
|
+
Sphere,
|
|
10
|
+
Vector3,
|
|
11
|
+
Vector4,
|
|
12
|
+
Line2NodeMaterial
|
|
13
|
+
} from 'three';
|
|
14
|
+
import { LineSegmentsGeometry } from '../../lines/LineSegmentsGeometry.js';
|
|
15
|
+
|
|
16
|
+
const _viewport = new Vector4();
|
|
17
|
+
|
|
18
|
+
const _start = new Vector3();
|
|
19
|
+
const _end = new Vector3();
|
|
20
|
+
|
|
21
|
+
const _start4 = new Vector4();
|
|
22
|
+
const _end4 = new Vector4();
|
|
23
|
+
|
|
24
|
+
const _ssOrigin = new Vector4();
|
|
25
|
+
const _ssOrigin3 = new Vector3();
|
|
26
|
+
const _mvMatrix = new Matrix4();
|
|
27
|
+
const _line = new Line3();
|
|
28
|
+
const _closestPoint = new Vector3();
|
|
29
|
+
|
|
30
|
+
const _box = new Box3();
|
|
31
|
+
const _sphere = new Sphere();
|
|
32
|
+
const _clipToWorldVector = new Vector4();
|
|
33
|
+
|
|
34
|
+
let _ray, _lineWidth;
|
|
35
|
+
|
|
36
|
+
// Returns the margin required to expand by in world space given the distance from the camera,
|
|
37
|
+
// line width, resolution, and camera projection
|
|
38
|
+
function getWorldSpaceHalfWidth( camera, distance, resolution ) {
|
|
39
|
+
|
|
40
|
+
// transform into clip space, adjust the x and y values by the pixel width offset, then
|
|
41
|
+
// transform back into world space to get world offset. Note clip space is [-1, 1] so full
|
|
42
|
+
// width does not need to be halved.
|
|
43
|
+
_clipToWorldVector.set( 0, 0, - distance, 1.0 ).applyMatrix4( camera.projectionMatrix );
|
|
44
|
+
_clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );
|
|
45
|
+
_clipToWorldVector.x = _lineWidth / resolution.width;
|
|
46
|
+
_clipToWorldVector.y = _lineWidth / resolution.height;
|
|
47
|
+
_clipToWorldVector.applyMatrix4( camera.projectionMatrixInverse );
|
|
48
|
+
_clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );
|
|
49
|
+
|
|
50
|
+
return Math.abs( Math.max( _clipToWorldVector.x, _clipToWorldVector.y ) );
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function raycastWorldUnits( lineSegments, intersects ) {
|
|
55
|
+
|
|
56
|
+
const matrixWorld = lineSegments.matrixWorld;
|
|
57
|
+
const geometry = lineSegments.geometry;
|
|
58
|
+
const instanceStart = geometry.attributes.instanceStart;
|
|
59
|
+
const instanceEnd = geometry.attributes.instanceEnd;
|
|
60
|
+
const segmentCount = Math.min( geometry.instanceCount, instanceStart.count );
|
|
61
|
+
|
|
62
|
+
for ( let i = 0, l = segmentCount; i < l; i ++ ) {
|
|
63
|
+
|
|
64
|
+
_line.start.fromBufferAttribute( instanceStart, i );
|
|
65
|
+
_line.end.fromBufferAttribute( instanceEnd, i );
|
|
66
|
+
|
|
67
|
+
_line.applyMatrix4( matrixWorld );
|
|
68
|
+
|
|
69
|
+
const pointOnLine = new Vector3();
|
|
70
|
+
const point = new Vector3();
|
|
71
|
+
|
|
72
|
+
_ray.distanceSqToSegment( _line.start, _line.end, point, pointOnLine );
|
|
73
|
+
const isInside = point.distanceTo( pointOnLine ) < _lineWidth * 0.5;
|
|
74
|
+
|
|
75
|
+
if ( isInside ) {
|
|
76
|
+
|
|
77
|
+
intersects.push( {
|
|
78
|
+
point,
|
|
79
|
+
pointOnLine,
|
|
80
|
+
distance: _ray.origin.distanceTo( point ),
|
|
81
|
+
object: lineSegments,
|
|
82
|
+
face: null,
|
|
83
|
+
faceIndex: i,
|
|
84
|
+
uv: null,
|
|
85
|
+
uv1: null,
|
|
86
|
+
} );
|
|
87
|
+
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function raycastScreenSpace( lineSegments, camera, intersects ) {
|
|
95
|
+
|
|
96
|
+
const projectionMatrix = camera.projectionMatrix;
|
|
97
|
+
const material = lineSegments.material;
|
|
98
|
+
const resolution = material.resolution;
|
|
99
|
+
const matrixWorld = lineSegments.matrixWorld;
|
|
100
|
+
|
|
101
|
+
const geometry = lineSegments.geometry;
|
|
102
|
+
const instanceStart = geometry.attributes.instanceStart;
|
|
103
|
+
const instanceEnd = geometry.attributes.instanceEnd;
|
|
104
|
+
const segmentCount = Math.min( geometry.instanceCount, instanceStart.count );
|
|
105
|
+
|
|
106
|
+
const near = - camera.near;
|
|
107
|
+
|
|
108
|
+
//
|
|
109
|
+
|
|
110
|
+
// pick a point 1 unit out along the ray to avoid the ray origin
|
|
111
|
+
// sitting at the camera origin which will cause "w" to be 0 when
|
|
112
|
+
// applying the projection matrix.
|
|
113
|
+
_ray.at( 1, _ssOrigin );
|
|
114
|
+
|
|
115
|
+
// ndc space [ - 1.0, 1.0 ]
|
|
116
|
+
_ssOrigin.w = 1;
|
|
117
|
+
_ssOrigin.applyMatrix4( camera.matrixWorldInverse );
|
|
118
|
+
_ssOrigin.applyMatrix4( projectionMatrix );
|
|
119
|
+
_ssOrigin.multiplyScalar( 1 / _ssOrigin.w );
|
|
120
|
+
|
|
121
|
+
// screen space
|
|
122
|
+
_ssOrigin.x *= resolution.x / 2;
|
|
123
|
+
_ssOrigin.y *= resolution.y / 2;
|
|
124
|
+
_ssOrigin.z = 0;
|
|
125
|
+
|
|
126
|
+
_ssOrigin3.copy( _ssOrigin );
|
|
127
|
+
|
|
128
|
+
_mvMatrix.multiplyMatrices( camera.matrixWorldInverse, matrixWorld );
|
|
129
|
+
|
|
130
|
+
for ( let i = 0, l = segmentCount; i < l; i ++ ) {
|
|
131
|
+
|
|
132
|
+
_start4.fromBufferAttribute( instanceStart, i );
|
|
133
|
+
_end4.fromBufferAttribute( instanceEnd, i );
|
|
134
|
+
|
|
135
|
+
_start4.w = 1;
|
|
136
|
+
_end4.w = 1;
|
|
137
|
+
|
|
138
|
+
// camera space
|
|
139
|
+
_start4.applyMatrix4( _mvMatrix );
|
|
140
|
+
_end4.applyMatrix4( _mvMatrix );
|
|
141
|
+
|
|
142
|
+
// skip the segment if it's entirely behind the camera
|
|
143
|
+
const isBehindCameraNear = _start4.z > near && _end4.z > near;
|
|
144
|
+
if ( isBehindCameraNear ) {
|
|
145
|
+
|
|
146
|
+
continue;
|
|
147
|
+
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// trim the segment if it extends behind camera near
|
|
151
|
+
if ( _start4.z > near ) {
|
|
152
|
+
|
|
153
|
+
const deltaDist = _start4.z - _end4.z;
|
|
154
|
+
const t = ( _start4.z - near ) / deltaDist;
|
|
155
|
+
_start4.lerp( _end4, t );
|
|
156
|
+
|
|
157
|
+
} else if ( _end4.z > near ) {
|
|
158
|
+
|
|
159
|
+
const deltaDist = _end4.z - _start4.z;
|
|
160
|
+
const t = ( _end4.z - near ) / deltaDist;
|
|
161
|
+
_end4.lerp( _start4, t );
|
|
162
|
+
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// clip space
|
|
166
|
+
_start4.applyMatrix4( projectionMatrix );
|
|
167
|
+
_end4.applyMatrix4( projectionMatrix );
|
|
168
|
+
|
|
169
|
+
// ndc space [ - 1.0, 1.0 ]
|
|
170
|
+
_start4.multiplyScalar( 1 / _start4.w );
|
|
171
|
+
_end4.multiplyScalar( 1 / _end4.w );
|
|
172
|
+
|
|
173
|
+
// screen space
|
|
174
|
+
_start4.x *= resolution.x / 2;
|
|
175
|
+
_start4.y *= resolution.y / 2;
|
|
176
|
+
|
|
177
|
+
_end4.x *= resolution.x / 2;
|
|
178
|
+
_end4.y *= resolution.y / 2;
|
|
179
|
+
|
|
180
|
+
// create 2d segment
|
|
181
|
+
_line.start.copy( _start4 );
|
|
182
|
+
_line.start.z = 0;
|
|
183
|
+
|
|
184
|
+
_line.end.copy( _end4 );
|
|
185
|
+
_line.end.z = 0;
|
|
186
|
+
|
|
187
|
+
// get closest point on ray to segment
|
|
188
|
+
const param = _line.closestPointToPointParameter( _ssOrigin3, true );
|
|
189
|
+
_line.at( param, _closestPoint );
|
|
190
|
+
|
|
191
|
+
// check if the intersection point is within clip space
|
|
192
|
+
const zPos = MathUtils.lerp( _start4.z, _end4.z, param );
|
|
193
|
+
const isInClipSpace = zPos >= - 1 && zPos <= 1;
|
|
194
|
+
|
|
195
|
+
const isInside = _ssOrigin3.distanceTo( _closestPoint ) < _lineWidth * 0.5;
|
|
196
|
+
|
|
197
|
+
if ( isInClipSpace && isInside ) {
|
|
198
|
+
|
|
199
|
+
_line.start.fromBufferAttribute( instanceStart, i );
|
|
200
|
+
_line.end.fromBufferAttribute( instanceEnd, i );
|
|
201
|
+
|
|
202
|
+
_line.start.applyMatrix4( matrixWorld );
|
|
203
|
+
_line.end.applyMatrix4( matrixWorld );
|
|
204
|
+
|
|
205
|
+
const pointOnLine = new Vector3();
|
|
206
|
+
const point = new Vector3();
|
|
207
|
+
|
|
208
|
+
_ray.distanceSqToSegment( _line.start, _line.end, point, pointOnLine );
|
|
209
|
+
|
|
210
|
+
intersects.push( {
|
|
211
|
+
point: point,
|
|
212
|
+
pointOnLine: pointOnLine,
|
|
213
|
+
distance: _ray.origin.distanceTo( point ),
|
|
214
|
+
object: lineSegments,
|
|
215
|
+
face: null,
|
|
216
|
+
faceIndex: i,
|
|
217
|
+
uv: null,
|
|
218
|
+
uv1: null,
|
|
219
|
+
} );
|
|
220
|
+
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
class LineSegments2 extends Mesh {
|
|
228
|
+
|
|
229
|
+
constructor( geometry = new LineSegmentsGeometry(), material = new Line2NodeMaterial( { color: Math.random() * 0xffffff } ) ) {
|
|
230
|
+
|
|
231
|
+
super( geometry, material );
|
|
232
|
+
|
|
233
|
+
this.isLineSegments2 = true;
|
|
234
|
+
|
|
235
|
+
this.type = 'LineSegments2';
|
|
236
|
+
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// for backwards-compatibility, but could be a method of LineSegmentsGeometry...
|
|
240
|
+
|
|
241
|
+
computeLineDistances() {
|
|
242
|
+
|
|
243
|
+
const geometry = this.geometry;
|
|
244
|
+
|
|
245
|
+
const instanceStart = geometry.attributes.instanceStart;
|
|
246
|
+
const instanceEnd = geometry.attributes.instanceEnd;
|
|
247
|
+
const lineDistances = new Float32Array( 2 * instanceStart.count );
|
|
248
|
+
|
|
249
|
+
for ( let i = 0, j = 0, l = instanceStart.count; i < l; i ++, j += 2 ) {
|
|
250
|
+
|
|
251
|
+
_start.fromBufferAttribute( instanceStart, i );
|
|
252
|
+
_end.fromBufferAttribute( instanceEnd, i );
|
|
253
|
+
|
|
254
|
+
lineDistances[ j ] = ( j === 0 ) ? 0 : lineDistances[ j - 1 ];
|
|
255
|
+
lineDistances[ j + 1 ] = lineDistances[ j ] + _start.distanceTo( _end );
|
|
256
|
+
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
const instanceDistanceBuffer = new InstancedInterleavedBuffer( lineDistances, 2, 1 ); // d0, d1
|
|
260
|
+
|
|
261
|
+
geometry.setAttribute( 'instanceDistanceStart', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 0 ) ); // d0
|
|
262
|
+
geometry.setAttribute( 'instanceDistanceEnd', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 1 ) ); // d1
|
|
263
|
+
|
|
264
|
+
return this;
|
|
265
|
+
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
raycast( raycaster, intersects ) {
|
|
269
|
+
|
|
270
|
+
const worldUnits = this.material.worldUnits;
|
|
271
|
+
const camera = raycaster.camera;
|
|
272
|
+
|
|
273
|
+
if ( camera === null && ! worldUnits ) {
|
|
274
|
+
|
|
275
|
+
console.error( 'LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.' );
|
|
276
|
+
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
const threshold = ( raycaster.params.Line2 !== undefined ) ? raycaster.params.Line2.threshold || 0 : 0;
|
|
280
|
+
|
|
281
|
+
_ray = raycaster.ray;
|
|
282
|
+
|
|
283
|
+
const matrixWorld = this.matrixWorld;
|
|
284
|
+
const geometry = this.geometry;
|
|
285
|
+
const material = this.material;
|
|
286
|
+
|
|
287
|
+
_lineWidth = material.linewidth + threshold;
|
|
288
|
+
|
|
289
|
+
// check if we intersect the sphere bounds
|
|
290
|
+
if ( geometry.boundingSphere === null ) {
|
|
291
|
+
|
|
292
|
+
geometry.computeBoundingSphere();
|
|
293
|
+
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
_sphere.copy( geometry.boundingSphere ).applyMatrix4( matrixWorld );
|
|
297
|
+
|
|
298
|
+
// increase the sphere bounds by the worst case line screen space width
|
|
299
|
+
let sphereMargin;
|
|
300
|
+
if ( worldUnits ) {
|
|
301
|
+
|
|
302
|
+
sphereMargin = _lineWidth * 0.5;
|
|
303
|
+
|
|
304
|
+
} else {
|
|
305
|
+
|
|
306
|
+
const distanceToSphere = Math.max( camera.near, _sphere.distanceToPoint( _ray.origin ) );
|
|
307
|
+
sphereMargin = getWorldSpaceHalfWidth( camera, distanceToSphere, material.resolution );
|
|
308
|
+
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
_sphere.radius += sphereMargin;
|
|
312
|
+
|
|
313
|
+
if ( _ray.intersectsSphere( _sphere ) === false ) {
|
|
314
|
+
|
|
315
|
+
return;
|
|
316
|
+
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
// check if we intersect the box bounds
|
|
320
|
+
if ( geometry.boundingBox === null ) {
|
|
321
|
+
|
|
322
|
+
geometry.computeBoundingBox();
|
|
323
|
+
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
_box.copy( geometry.boundingBox ).applyMatrix4( matrixWorld );
|
|
327
|
+
|
|
328
|
+
// increase the box bounds by the worst case line width
|
|
329
|
+
let boxMargin;
|
|
330
|
+
if ( worldUnits ) {
|
|
331
|
+
|
|
332
|
+
boxMargin = _lineWidth * 0.5;
|
|
333
|
+
|
|
334
|
+
} else {
|
|
335
|
+
|
|
336
|
+
const distanceToBox = Math.max( camera.near, _box.distanceToPoint( _ray.origin ) );
|
|
337
|
+
boxMargin = getWorldSpaceHalfWidth( camera, distanceToBox, material.resolution );
|
|
338
|
+
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
_box.expandByScalar( boxMargin );
|
|
342
|
+
|
|
343
|
+
if ( _ray.intersectsBox( _box ) === false ) {
|
|
344
|
+
|
|
345
|
+
return;
|
|
346
|
+
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
if ( worldUnits ) {
|
|
350
|
+
|
|
351
|
+
raycastWorldUnits( this, intersects );
|
|
352
|
+
|
|
353
|
+
} else {
|
|
354
|
+
|
|
355
|
+
raycastScreenSpace( this, camera, intersects );
|
|
356
|
+
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
onBeforeRender( renderer ) {
|
|
362
|
+
|
|
363
|
+
const uniforms = this.material.uniforms;
|
|
364
|
+
|
|
365
|
+
if ( uniforms && uniforms.resolution ) {
|
|
366
|
+
|
|
367
|
+
renderer.getViewport( _viewport );
|
|
368
|
+
this.material.uniforms.resolution.value.set( _viewport.z, _viewport.w );
|
|
369
|
+
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
export { LineSegments2 };
|
|
@@ -85,7 +85,7 @@ class DRACOLoader extends Loader {
|
|
|
85
85
|
|
|
86
86
|
parse( buffer, onLoad, onError = ()=>{} ) {
|
|
87
87
|
|
|
88
|
-
this.decodeDracoFile( buffer, onLoad, null, null, SRGBColorSpace ).catch( onError );
|
|
88
|
+
this.decodeDracoFile( buffer, onLoad, null, null, SRGBColorSpace, onError ).catch( onError );
|
|
89
89
|
|
|
90
90
|
}
|
|
91
91
|
|
|
@@ -407,72 +407,50 @@ class FBXTreeParser {
|
|
|
407
407
|
// load a texture specified as a blob or data URI, or via an external URL using TextureLoader
|
|
408
408
|
loadTexture( textureNode, images ) {
|
|
409
409
|
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
const currentPath = this.textureLoader.path;
|
|
413
|
-
|
|
414
|
-
const children = connections.get( textureNode.id ).children;
|
|
410
|
+
const nonNativeExtensions = new Set( [ 'tga', 'tif', 'tiff', 'exr', 'dds', 'hdr', 'ktx2' ] );
|
|
415
411
|
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
fileName = images[ children[ 0 ].ID ];
|
|
412
|
+
const extension = textureNode.FileName.split( '.' ).pop().toLowerCase();
|
|
419
413
|
|
|
420
|
-
|
|
414
|
+
const loader = nonNativeExtensions.has( extension ) ? this.manager.getHandler( `.${extension}` ) : this.textureLoader;
|
|
421
415
|
|
|
422
|
-
|
|
416
|
+
if ( ! loader ) {
|
|
423
417
|
|
|
424
|
-
|
|
418
|
+
console.warn(
|
|
419
|
+
`FBXLoader: ${extension.toUpperCase()} loader not found, creating placeholder texture for`,
|
|
420
|
+
textureNode.RelativeFilename
|
|
421
|
+
);
|
|
422
|
+
return new Texture();
|
|
425
423
|
|
|
426
424
|
}
|
|
427
425
|
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
const extension = textureNode.FileName.slice( - 3 ).toLowerCase();
|
|
431
|
-
|
|
432
|
-
if ( extension === 'tga' ) {
|
|
433
|
-
|
|
434
|
-
const loader = this.manager.getHandler( '.tga' );
|
|
426
|
+
const loaderPath = loader.path;
|
|
435
427
|
|
|
436
|
-
|
|
428
|
+
if ( ! loaderPath ) {
|
|
437
429
|
|
|
438
|
-
|
|
439
|
-
texture = new Texture();
|
|
430
|
+
loader.setPath( this.textureLoader.path );
|
|
440
431
|
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
loader.setPath( this.textureLoader.path );
|
|
444
|
-
texture = loader.load( fileName );
|
|
445
|
-
|
|
446
|
-
}
|
|
432
|
+
}
|
|
447
433
|
|
|
448
|
-
|
|
434
|
+
const children = connections.get( textureNode.id ).children;
|
|
449
435
|
|
|
450
|
-
|
|
436
|
+
let fileName;
|
|
451
437
|
|
|
452
|
-
|
|
438
|
+
if ( children !== undefined && children.length > 0 && images[ children[ 0 ].ID ] !== undefined ) {
|
|
453
439
|
|
|
454
|
-
|
|
455
|
-
texture = new Texture();
|
|
440
|
+
fileName = images[ children[ 0 ].ID ];
|
|
456
441
|
|
|
457
|
-
|
|
442
|
+
if ( fileName.indexOf( 'blob:' ) === 0 || fileName.indexOf( 'data:' ) === 0 ) {
|
|
458
443
|
|
|
459
|
-
loader.setPath(
|
|
460
|
-
texture = loader.load( fileName );
|
|
444
|
+
loader.setPath( undefined );
|
|
461
445
|
|
|
462
446
|
}
|
|
463
447
|
|
|
464
|
-
} else if ( extension === 'psd' ) {
|
|
465
|
-
|
|
466
|
-
console.warn( 'FBXLoader: PSD textures are not supported, creating placeholder texture for', textureNode.RelativeFilename );
|
|
467
|
-
texture = new Texture();
|
|
468
|
-
|
|
469
|
-
} else {
|
|
470
|
-
|
|
471
|
-
texture = this.textureLoader.load( fileName );
|
|
472
|
-
|
|
473
448
|
}
|
|
474
449
|
|
|
475
|
-
|
|
450
|
+
const texture = loader.load( fileName );
|
|
451
|
+
|
|
452
|
+
// revert to initial path
|
|
453
|
+
loader.setPath( loaderPath );
|
|
476
454
|
|
|
477
455
|
return texture;
|
|
478
456
|
|
|
@@ -2051,14 +2029,18 @@ class GeometryParser {
|
|
|
2051
2029
|
// Triangulate n-gon using earcut
|
|
2052
2030
|
|
|
2053
2031
|
const vertices = [];
|
|
2054
|
-
|
|
2032
|
+
// in morphing scenario vertexPositions represent morphPositions
|
|
2033
|
+
// while baseVertexPositions represent the original geometry's positions
|
|
2034
|
+
const positions = geoInfo.baseVertexPositions || geoInfo.vertexPositions;
|
|
2055
2035
|
for ( let i = 0; i < facePositionIndexes.length; i += 3 ) {
|
|
2056
2036
|
|
|
2057
|
-
vertices.push(
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2037
|
+
vertices.push(
|
|
2038
|
+
new Vector3(
|
|
2039
|
+
positions[ facePositionIndexes[ i ] ],
|
|
2040
|
+
positions[ facePositionIndexes[ i + 1 ] ],
|
|
2041
|
+
positions[ facePositionIndexes[ i + 2 ] ]
|
|
2042
|
+
)
|
|
2043
|
+
);
|
|
2062
2044
|
|
|
2063
2045
|
}
|
|
2064
2046
|
|
|
@@ -2071,6 +2053,12 @@ class GeometryParser {
|
|
|
2071
2053
|
|
|
2072
2054
|
}
|
|
2073
2055
|
|
|
2056
|
+
// When vertices is an array of [0,0,0] elements (which is the case for vertices not participating in morph)
|
|
2057
|
+
// the triangulationInput will be an array of [0,0] elements
|
|
2058
|
+
// resulting in an array of 0 triangles being returned from ShapeUtils.triangulateShape
|
|
2059
|
+
// leading to not pushing into buffers.vertex the redundant vertices (the vertices that are not morphed).
|
|
2060
|
+
// That's why, in order to support morphing scenario, "positions" is looking first for baseVertexPositions,
|
|
2061
|
+
// so that we don't end up with an array of 0 triangles for the faces not participating in morph.
|
|
2074
2062
|
triangles = ShapeUtils.triangulateShape( triangulationInput, [] );
|
|
2075
2063
|
|
|
2076
2064
|
} else {
|
|
@@ -2225,17 +2213,18 @@ class GeometryParser {
|
|
|
2225
2213
|
// Normal and position attributes only have data for the vertices that are affected by the morph
|
|
2226
2214
|
genMorphGeometry( parentGeo, parentGeoNode, morphGeoNode, preTransform, name ) {
|
|
2227
2215
|
|
|
2228
|
-
const
|
|
2216
|
+
const basePositions = parentGeoNode.Vertices !== undefined ? parentGeoNode.Vertices.a : [];
|
|
2217
|
+
const baseIndices = parentGeoNode.PolygonVertexIndex !== undefined ? parentGeoNode.PolygonVertexIndex.a : [];
|
|
2229
2218
|
|
|
2230
|
-
const morphPositionsSparse =
|
|
2231
|
-
const
|
|
2219
|
+
const morphPositionsSparse = morphGeoNode.Vertices !== undefined ? morphGeoNode.Vertices.a : [];
|
|
2220
|
+
const morphIndices = morphGeoNode.Indexes !== undefined ? morphGeoNode.Indexes.a : [];
|
|
2232
2221
|
|
|
2233
2222
|
const length = parentGeo.attributes.position.count * 3;
|
|
2234
2223
|
const morphPositions = new Float32Array( length );
|
|
2235
2224
|
|
|
2236
|
-
for ( let i = 0; i <
|
|
2225
|
+
for ( let i = 0; i < morphIndices.length; i ++ ) {
|
|
2237
2226
|
|
|
2238
|
-
const morphIndex =
|
|
2227
|
+
const morphIndex = morphIndices[ i ] * 3;
|
|
2239
2228
|
|
|
2240
2229
|
morphPositions[ morphIndex ] = morphPositionsSparse[ i * 3 ];
|
|
2241
2230
|
morphPositions[ morphIndex + 1 ] = morphPositionsSparse[ i * 3 + 1 ];
|
|
@@ -2245,9 +2234,9 @@ class GeometryParser {
|
|
|
2245
2234
|
|
|
2246
2235
|
// TODO: add morph normal support
|
|
2247
2236
|
const morphGeoInfo = {
|
|
2248
|
-
vertexIndices:
|
|
2237
|
+
vertexIndices: baseIndices,
|
|
2249
2238
|
vertexPositions: morphPositions,
|
|
2250
|
-
|
|
2239
|
+
baseVertexPositions: basePositions
|
|
2251
2240
|
};
|
|
2252
2241
|
|
|
2253
2242
|
const morphBuffers = this.genBuffers( morphGeoInfo );
|